2015-12-28 17 views
8

Sto cercando di stop/start particolare group di istanze elencate nel file hosts nel gruppo [target]. seguente playbook funziona bene per fermare le istanze.avviare le istanze AWS smesso di usare playbook ansible

--- 
- 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 

Ma quando sto cercando di iniziare questi casi, non funziona come il ec2_facts non è in grado di ssh nei casi (dal momento che sono fermati ora) e di ottenere il 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 ho già visto la documentazione che utilizza il file dynamic inventory per gli host e il modo di codificare hard il instance-ids. Voglio avviare le istanze di cui IPs sono elencate nel gruppo target del file hosts.

+2

cosa vuoi dire con non funziona Qual è il messaggio di errore? – helloV

+0

Qual è la tua versione di Ansible? – helloV

risposta

3

Ottenuto la soluzione, di seguito è il ansible-task che ha funzionato per me.

--- 
- 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

Si dovrebbe aggiungere gather_facts: False per evitare Ansible dal tentativo di SSH i padroni di casa in quanto non sono in esecuzione:

- hosts: target 
    remote_user: ubuntu 
    gather_facts: false 

Se è necessario raccogliere i fatti dopo che i casi hanno avviato quindi è possibile utilizzare il setup modulo per raccogliere esplicitamente i fatti dopo che sono stati avviati.

Modifica: ho appena realizzato che il problema è che si sta tentando di accedere a ansible_ec2_instance_id che non è possibile ottenere perché l'istanza non è disponibile. Potresti dare un'occhiata a this custom module called ec2_lookup che ti permetterà di cercare gli ID di istanza AWS anche quando le istanze non sono disponibili. Usando questo puoi ottenere un elenco delle istanze che ti interessano e poi avviarle.

+0

Grazie per la risposta. Ma questo è un modulo personalizzato, come usarlo esattamente. –

+0

Il [best practice] (http://docs.ansible.com/ansible/playbooks_best_practices.html) documento descrive la struttura di directory utilizzata da Ansible. Se crei una directory chiamata 'library' e inserisci dei moduli personalizzati, puoi usarli come qualsiasi altro modulo. –

+0

Qualunque altro modo che l'ansible stesso supporta? –

1

hai 2 opzioni:

Opzione 1

Usa AWS CLI per interrogare l'istanza-id di un'istanza smesso di utilizzare il suo IP o il nome. Ad esempio, per interrogare l'istanza id per un dato nome di istanza:

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

Opzione 2

aggiornamento Ansible alla versione 2.0 (sulle colline e lontano) e utilizzare il nuovo modulo ec2_remote_facts

- ec2_remote_facts: 
    filters: 
     instance-state-name: stopped 
Problemi correlati