かなり標準的なタスクのように思えるので、誰かが私を助けてくれることを願っています。私はこれを狂ったように笑ってしまいました。ほとんどの例はVPCにはなく、廃止された構造を使用しているため、ユースケースで間違ったり使えなくなったりします。ここでAWS EC2 VPCでn個の新しいインスタンスを作成してそれらを設定する
が私の目標です:
- 私は私のVPCで新しいインスタンスの全体の混乱を起動する(以下同じ コードは3を持っていますが、それは百かもしれない)
- 私は待ちたいですthoseinstancesは、(などなど、いくつかのサービスを有効にする、 ホスト名を変更、それらにはsshを)私はその後、それらのインスタンスを設定したい
- 生きて来るのを
N私はおそらく2つのタスクでこれを行うことができます。私は1つの演劇帳でインスタンスを作成することができました。彼らが落ち着くのを待ってください。次に、第2プレイブックを実行して設定します。それはおそらく今私がやっていることなので、私は動いていきたいと思っていますが、これにワンショットで答える必要があります。
は、ここで私は脚本
---
- hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Provision Lunch
with_items:
- hostname: eggroll1
- hostname: eggroll2
- hostname: eggroll3
ec2:
region: us-east-1
key_name: eggfooyong
vpc_subnet_id: subnet-8675309
instance_type: t2.micro
image: ami-8675309
wait: true
group_id: sg-8675309
exact_count: 1
count_tag:
Name: "{{ item.hostname }}"
instance_tags:
Name: "{{ item.hostname }}"
role: "supper"
ansibleowned: "True"
register: ec2
- name: Wait for SSH to come up
wait_for: host={{ item.private_ip }} port=22 delay=60 timeout=900 state=started
with_items: '{{ec2.instances}}'
- name: Update hostname on instances
hostname: name={{ item.private_ip }}
with_items: '{{ec2.instances}}'
そして、そのdoens't仕事のために、これまで持っているものです。私が得るのは
TASK [Wait for SSH to come up] *************************************************
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
TASK [Update hostname on instances] ********************************************
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
私は悲しいです。これは私の最新作です。しかし、私はインターネット上で見つけることができるすべての例を使って書き直そうとしました。彼らのほとんどはwith_itemsが別の方法で書かれていますが、ansibleは道が分かりにくく、失敗すると私に伝えます。
これまでのところ、楽しく簡単でしたが、これは私のノートパソコンを通りの向こう側に投げたいと思っています。
提案がありますか?私はregisterとwith_itemsを使うべきですか?私はこのような何かを使うのがよいのでしょうか?
add_host: hostname={{item.public_ip}} groupname=deploy
私はここに書き直すために広く開いています。私は2つのプレイブックにこれを書いて、提案を得るのが大好きです。
ありがとうございます!
**** EDIT **** 今は壊れているか、または大きく変更され始めています。私は数多くの例を捜したが、それらはすべて同じ方法で書かれており、すべて同じエラーで失敗する。これは私の簡単なプレイブックです:
---
- hosts: localhost
connection: local
gather_facts: False
vars:
builderstart: 93
builderend: 94
tasks:
- name: Provision Lunch
ec2:
region: us-east-1
key_name: dakey
vpc_subnet_id: subnet-8675309
instance_type: t2.micro
image: ami-8675309
wait: True
group_id: sg-OU812
exact_count: 1
count_tag:
Name: "{{ item }}"
instance_tags:
Name: "{{ item }}"
role: "dostuff"
extracheese: "True"
register: ec2
with_sequence: start="{{builderstart}}" end="{{builderend}}" format=builder%03d
- name: the newies
debug: msg="{{ item }}"
with_items: "{{ ec2.instances }}"
これは本当に簡単ではありませんでした。 「{{ec2.instances}}」行のエラーを引き起こしている:だからそれはwith_itemsをだように見える
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.: 'dict object' has no attribute 'instances'.
:どんなに私はそれを書くか、関係なく、私はそれをどのように変化するか、私は同じ基本的なエラーを取得していません。
私はec2を印刷するためにdebugを使用しましたが、そのエラーは正確です。構造が私に変わったようです。 ec2に、結果が別の辞書オブジェクトのキーとしての辞書を含み、そのインスタンスがその辞書のキーであるように見えます。しかし、私はデータにアクセスするための純粋な方法を見つけることができません。
これは価値がありますが、私は2.0.1,2.0.2、および2.2でこれにアクセスしようとしましたが、すべてのケースで同じ問題が発生します。
残りの人は1.9などですか?どこでも動作するサンプルが見つかりません。非常にイライラしています。
もう一度お手数をおかけします。
"可変インフラストラクチャ"パラダイムを使用する必要がありますか? 1つの選択肢は、Packerを使用して事前にAMIを設定することです。あなたはPackerにあなたのためにAnsibleのプレイブックを実行させることさえできます。その後、AMIを直接起動することができます。あなたの可能性のあるエラーについては、それには分かりません。 –
まあ、あなたの問題は、EC2モジュールをどう使用しているのですか? – vvchik
自動拡張グループを使ってec2を追加してから、設定をオフにすることができます – Vorsprung