2016-05-21 12 views
2

私はEC2停止インスタンスで何かをリストアップして何かをしようとしています。 ec2_remote_factsは私の友人で、結果を得ることができます。しかし、私の人生は、返されたオブジェクトの 'id'コンポーネントをどうやって得るのかについて、私は不可能なノブとして私はできません。ドキュメントは概略的であり、返されるタイプや使用方法はカバーしていません。不可能な2.x:ec2_remote_facts

--- 
- name: remote facts 
    hosts: localhost 

    tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
    register: info 

    - name: print 
    debug: var=info 

これはうまく動作します:

は、ここで私が使って実験しています非常に基本的な脚本です。

また、これは動作します:私の周り私の頭を取得することはできませんどのような

--- 
- name: remote facts 
    hosts: localhost 

    tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
    register: info 

    - name: print 
    debug: var=info.instances[0].id 

は、現在のすべてのインスタンス(3)のために私にちょうど「ID」の要素を与える呪文ですので、私は何かを行うことができますそれらのすべて - 削除、設定、開始、何でも。私はすべてのループ構造とwith_ *オプションを見てきたので、私が望むことをすることができません。

間違いなくこれは「ああ!答えを知っている人には問題ですが、現時点では恐れています。返されるオブジェクトは、次のようになります。

ok: [localhost] => { 
    "info": { 
     "changed": false, 
     "instances": [ 
      { 
       "ami_launch_index": "0", 
       "architecture": "x86_64", 
      "client_token": "vpOGxxxxxxxxxxxxxx", 
      "ebs_optimized": false, 
      "groups": [ 
       { 
        "id": "sg-xxxxxxxx", 
        "name": "launch-wizard-3" 
       } 
      ], 
      "hypervisor": "xen", 
      "id": "i-01xxxxxxxxxxxxxxxx", 

[...]

 "tags": {}, 
     "virtualization_type": "hvm", 
     "vpc_id": "vpc-xxxxxxxx" 
    }, 
     { 
      "ami_launch_index": "1", 
      "architecture": "x86_64", 

[中略、2つの以上のインスタンス]

任意の考えの人は? debug: var=infoの完全な出力を共有していない場合は

- ec2_remote_facts: 
     region: ap-southeast-2 
    register: info 

    - name: print 
    debug: var=item.id 
    with_items: info_instances 

+0

からの出力ということは何ですか?最初のブロック( 'debug:var = info')ですか? – ydaetskcoR

+0

はい。私は全体の出力を貼り付けることは冗長になると思った。それぞれが "ami_launch_index"で始まり "vpc_id"で終わる3つの要素を持つオブジェクト 'instances'があります。私にとっては、それは構造の配列のように見えるが、有能な人はすべてのことについて異なる言葉を持つように見える。私がしたいのは、見つかったすべてのインスタンスの "id"値を参照し、後でそれらと別のことをすることができるということです。私は停止したインスタンスに興味があるので、ec2.pyは現在の状態では動作しません。停止したインスタンスは処理できません。私はバグとして他のところで報告していますが、それは不完全です。 – MrChuck

答えて

0

は、それが動作するはずこれを試してみてください。私はあなたに正確なコードを教えることができるように。また、インスタンスが同じループで変数{{item.instances.id}}としてそれを使用停止にec2のようにそれを任意のタスクを使用したい場合は

with_items: info_instances

+0

申し訳ありませんが、どちらのバージョンでも動作しません。 ' - 名前:プリント デバッグ:varは= with_itemsをitem.instances.id:info_instances' は ' TASK [印刷]を与え******************** ********************************************* ok: [ローカルホスト] =>(項目= info_instances)=> { "項目": "info_instances"、 "item.instances.id": "変数が定義されていません" } ' など、他のバージョンも同様です。 – MrChuck

+0

上記のコードを更新しました。今すぐお試しください –

1

それは、私は少し遅れ容疑者が、私はあなたが単純に忘れてしまったと思いますwith_items変数の周りに "{{}}"を追加してください。私がしなければそう、私の作品:次に

ec2_remote_facts: 
     region: "{{ vpc_region }}" 
     filters: 
     instance-state-name: running 
     vpc-id: "{{ vpc_id }}"   
    register: ec2_info 

set_fact: 
    jenkins_master_instances: "{{ jenkins_master_instances|default([]) + [ item.id ]}}" 
with_items: "{{ ec2_info.instances }}" 

が私のために働くようです。

0

2回目の試行で、同じ問題が発生しましたが、面倒なことにJSONの経験が必要でした。

あなたの2番目のコードスニペット:

--- 
- name: remote facts 
    hosts: localhost 

    tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
    register: info 

    - name: print 
    debug: var=info.instances[0].id 

マイ加え:私は笑これをうまく支援するため

--- 
- name: remote facts 
    hosts: localhost 

    tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
    register: info 

    - name: print 
    debug: var=info.instances[0].id 

    - name: Create AMI from Instance ID 
    ec2_ami: 
     aws_access_key: "{{ aws_access_key }}" 
     aws_secret_key: "{{ aws_secret_key }}" 
     region: "{{ region }}" 
     instance_id: "{{ ec2_remote_facts.instances[0].id }}"   

乾杯。Ansibleから

出力:ループの問題のために

(ansible27) [email protected]:/etc/ansible/playbooks$ sudo ansible-playbook ec2_facts.yml 
[WARNING]: Found both group and host with same name: localhost 


PLAY [localhost] *************************************************************** 

TASK [Gathering Facts] ********************************************************* 
ok: [localhost] 

TASK [EC2 Remote Facts.] ******************************************************* 
ok: [localhost] 

TASK [Display results in JSON format.] ***************************************** 
ok: [localhost] => { 
    "changed": false, 
    "msg": "Most upto date instance is: i-1234567abcdefg " 
} 

TASK [Create AMI from instance ID.] ******************************************** 
changed: [localhost] 

PLAY RECAP ********************************************************************* 
localhost     : ok=4 changed=1 unreachable=0 failed=0 

は、私はそれだけで合格した場合になりますと仮定[1]と[2]の要素指定子。

0

これは、作業する必要があります。

tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
     register: thefacts 

    - debug: var=item.id 
     with_items: "{{thefacts.instances}}" 

が、理由もなく、のような、のために、不要なデバッグ出力の多くを生成します。 それでは、それを除外してみましょう:

tasks: 

    - ec2_remote_facts: 
     region: ap-southeast-2 
     register: thefacts 

    - debug: var=item.0 
     with_together: 
     - "{{ thefacts.instances|map(attribute='id')|list }}" 
関連する問題