2015-12-28 9 views
8

Próbuję wykonać stop/start konkretne group wystąpień wymienionych w pliku hosts w grupie [target]. Poniższe instrukcje działają poprawnie, aby zatrzymać instancje.Uruchamianie zatrzymanych wystąpień AWS przy użyciu instrukcji ansibli

--- 
- hosts: target 
    remote_user: ubuntu 

    tasks: 
    - name: Gather facts 
    action: ec2_facts 

    - name: Stop Instances 
    local_action: 
     module: ec2 
     region: "{{region}}" 
     instance_ids: "{{ansible_ec2_instance_id}}" 
     state: stopped 

Ale gdy próbuję uruchomić te instancje, nie działa jako ec2_facts nie jest w stanie ssh do instancji (ponieważ są one zatrzymane teraz) i uzyskać instance-ids

--- 
- hosts: target 
    remote_user: ubuntu 

    tasks: 
    - name: start instances 
    local_action: 
     module: ec2 
     region: "{{region}}" 
     instance_ids: "{{ansible_ec2_instance_id}}" 
     state: running 

I już widziałem dokumentację, która korzysta z pliku dynamic inventory dla hostów i sposób kodowania twardego instance-ids. Chcę rozpocząć wystąpienia, których IPs są wymienione w grupie target pliku hosts.

+2

co masz na myśli przez to nie działa Jaki jest komunikat o błędzie? – helloV

+0

Jaka jest twoja wersja Ansible? – helloV

Odpowiedz

3

Mam rozwiązanie, Poniżej znajduje się ansible-task, który pracował dla mnie.

--- 
- name: Start instances 
    hosts: localhost 
    gather_facts: false 
    connection: local 
    vars: 
    instance_ids: 
     - 'i-XXXXXXXX' 
    region: ap-southeast-1 
    tasks: 
    - name: Start the feature instances 
     ec2: 
     instance_ids: '{{ instance_ids }}' 
     region: '{{ region }}' 
     state: running 
     wait: True 

Here is the Blog post on How to start/stop ec2 instances with ansible

0

Należy dodać gather_facts: False aby zapobiec ansibl od próbując zalogować się na gospodarzy, ponieważ oni nie działa:

- hosts: target 
    remote_user: ubuntu 
    gather_facts: false 

Jeśli trzeba zebrać fakty po instancje zaczęły się wówczas można użyć setup moduł do jawnego zbierania faktów po ich uruchomieniu.

Edycja: Właśnie zdałem sobie sprawę, że problem polega na tym, że próbujesz uzyskać dostęp do ansibli_ec2_instance_id, którego nie możesz uzyskać, ponieważ instancja nie działa. Możesz rzucić okiem na this custom module called ec2_lookup, która pozwoli Ci wyszukać adresy ID AWS instancji nawet wtedy, gdy instancje nie działają. Za pomocą tego można uzyskać listę instancji, które są zainteresowane, a następnie uruchomić je.

+0

Dziękuję za odpowiedź. Ale jest to niestandardowy moduł, jak go dokładnie używać. –

+0

Dokument [best practices] (http://docs.ansible.com/ansible/playbooks_best_practices.html) opisuje strukturę katalogu, z której korzysta Ansible. Jeśli utworzysz katalog o nazwie 'library' i umieścisz w nim moduły niestandardowe, będziesz mógł używać ich tak, jak każdego innego modułu. –

+0

Jakikolwiek inny sposób, który obsługuje sam ansibl? –

1

Masz 2 opcje:

Opcja 1

Zastosowanie AWS CLI kwerendy instancji id zatrzymanego przykład używając swojego adresu IP lub nazwy. Na przykład, aby kwerendy id instancji dla danej nazwy instancji:

shell: aws ec2 describe-instances --filters 'Name=tag:Name,Values={{inst_name}}' --output text --query 'Reservations[*].Instances[*].InstanceId' 
register: inst_id 

Opcja 2

Upgrade ansibl do wersji 2.0 (nad wzgórzami i daleko) i korzystać z nowego modułu ec2_remote_facts

- ec2_remote_facts: 
    filters: 
     instance-state-name: stopped 
Powiązane problemy