2015-12-28 7 views
8

का उपयोग करके बंद एडब्ल्यूएस उदाहरणों को शुरू करें I stop/start समूह के तहत में सूचीबद्ध उदाहरणों के group की कोशिश कर रहा हूं। प्लेबुक के बाद उदाहरणों को रोकने के लिए ठीक काम करता है।उत्तरदायी प्लेबुक

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

लेकिन (क्योंकि वे अब बंद कर दिया जाता है) और 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 

मैं जब मैं इन उदाहरणों शुरू करने के लिए कोशिश कर रहा हूँ, यह ec2_facts के रूप में काम नहीं कर रहा नहीं कर उदाहरणों में ssh है पहले से ही प्रलेखन देख चुके हैं जो मेजबानों के लिए dynamic inventory फ़ाइल का उपयोग करते हैं और instance-ids हार्ड-कोडिंग के तरीके का उपयोग करते हैं। मैं उन उदाहरणों को शुरू करना चाहता हूं जिनके IPshosts फ़ाइल के समूह में सूचीबद्ध हैं।

+2

क्या आप इसे मतलब है काम नहीं कर रहा क्या त्रुटि संदेश है? – helloV

+0

आपका उत्तरदायी संस्करण क्या है? प्रतिक्रिया के लिए – helloV

उत्तर

3

समाधान मिला, ansible-task है जो मेरे लिए काम करता है।

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

आप gather_facts: False जोड़ना चाहिए, क्योंकि वे नहीं चल रहे मेजबान में SSH करने की कोशिश कर रहा से Ansible को रोकने के लिए:

- hosts: target 
    remote_user: ubuntu 
    gather_facts: false 

आप तथ्यों को इकट्ठा करने की जरूरत है के बाद दृष्टांत शुरू कर दिया है तो आप setup उपयोग कर सकते हैं बूट करने के बाद तथ्यों को स्पष्ट रूप से इकट्ठा करने के लिए मॉड्यूल।

संपादित करें: मुझे अभी एहसास हुआ है कि समस्या यह है कि आप ansible_ec2_instance_id तथ्य तक पहुंचने का प्रयास कर रहे हैं कि आप प्राप्त नहीं कर सकते क्योंकि उदाहरण नीचे है। आप this custom module called ec2_lookup पर एक नज़र डालना चाहते हैं जो आपको उदाहरणों के नीचे होने पर भी एडब्ल्यूएस इंस्टेंस आईडी लाने की सुविधा देगा। इसका उपयोग करके आप रुचि रखने वाले उदाहरणों की एक सूची प्राप्त कर सकते हैं और फिर उन्हें शुरू कर सकते हैं।

विकल्प 1

उपयोग एडब्ल्यूएस CLI अपने आईपी या नाम का उपयोग कर बंद कर दिया उदाहरण के कहने-आईडी क्वेरी करने के लिए:

+0

धन्यवाद। लेकिन यह एक कस्टम मॉड्यूल है, इसका उपयोग कैसे करें। –

+0

[सर्वोत्तम प्रथाओं] (http://docs.ansible.com/ansible/playbooks_best_practices.html) दस्तावेज़ निर्देशिका संरचना उत्तर का उपयोग करता है। यदि आप 'लाइब्रेरी' नामक निर्देशिका बनाते हैं और वहां कस्टम मॉड्यूल डालते हैं तो आप उन्हें किसी भी अन्य मॉड्यूल की तरह उपयोग कर सकते हैं। –

+0

कोई अन्य तरीका जो उत्तर देने योग्य है उसका समर्थन करता है? –

1

आप 2 विकल्प हैं। उदाहरण के लिए, किसी दिए गए उदाहरण के नाम के लिए आवृत्ति आईडी क्वेरी करने के लिए:

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

विकल्प 2

संस्करण 2.0 (हिल्स एण्ड फार अवे से अधिक) के लिए Ansible अपग्रेड

और नए ec2_remote_facts मॉड्यूल का उपयोग

- ec2_remote_facts: 
    filters: 
     instance-state-name: stopped 
संबंधित मुद्दे