2015-12-28 10 views
8

stop/startgrouphostsファイルのグループ[target]にリストされているインスタンスのうち、特定のものを試そうとしています。プレイバックに続く は、インスタンスを停止するのに問題ありません。実行中のプレイブックを使用して停止したAWSインスタンスを開始

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

しかし、私はこれらのインスタンスを起動しようとしていたときに(彼らは現在停止しているので)ec2_factsは、インスタンスへのsshことができないとして、それは働いていないと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ホストのためにdynamic inventoryファイルを使用する文書と、instance-idsをハードコーディングする方法をすでに見てきました。私はIPsのインスタンスがグループhostsファイルに記載されているインスタンスを開始したいと思います。

あなたは、彼らが実行していないので、ホストにSSHしようとしているからAnsibleを防ぐために gather_facts: Falseを追加する必要があり
+2

あなたはそれによって何を意味するか、エラーメッセージは何に動作していませんか? – helloV

+0

あなたのAnsibleバージョンは何ですか? – 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

:あなたは事実を収集する必要がある場合はインスタンスが起動した後、あなたがsetupを使用することができます

- hosts: target 
    remote_user: ubuntu 
    gather_facts: false 

モジュールを起動した後、明示的にファクトを収集します。

編集:インスタンスがダウンしているために取得できないansible_ec2_instance_idのファクトにアクセスしようとしているという問題が発生したことがわかりました。 this custom module called ec2_lookupを見て、インスタンスがダウンしていてもAWSインスタンスIDを取得することができます。これを使用して、関心のあるインスタンスのリストを取得し、それらを起動することができます。

+0

ありがとうございました。しかし、これはカスタムモジュールで、正確に使用する方法です。 –

+0

[ベストプラクティス](http://docs.ansible.com/ansible/playbooks_best_practices.html)ドキュメントでは、ディレクトリ構造の使用について説明しています。 'library'という名前のディレクトリを作成してそこにカスタムモジュールを置くと、他のモジュールと同じように使用できます。 –

+0

他の方法で、それ自体がサポートしていますか? –

1

あなたは2つのオプションがあります:

オプション1

は、そのIPまたは名前を使用して停止したインスタンスのインスタンスIDを照会するAWS CLIを使用してください。例えば、特定のインスタンス名のインスタンスIDを照会します

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 
関連する問題