2017-03-20 23 views
1

ec2_instancesを起動するときに、2つの2つのIPを変数に保存する必要があります。with_itemsを使って文字列を連結し、Ansibleで変数に代入する

これは、私は、単一のサーバーのIPを保存しています方法です:

- name: Save server public IP to vars file 
    lineinfile: line="server_public_ip{{':'}} {{ item.public_ip }}" 
       dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}" 
    with_items: server.instances #server is registered in previous task 

私はdynamic_ipsファイルを持っている出力はserver_public_ip: xxx.xxx.xx.x

今、私はサーバとして2台のサーバーを立ち上げ、登録しているです。

私は、空の文字列を宣言し、それにIPSを追加するために、このような何かを試してみましたが、私はエラーを取得していますserver_public_ips: xxx.xx.x.xx , xxx.x.xx.x

としてこれを保存する必要があります。

set_fact: 
    ips: "" 
set_fact: 
    ips: " {{ ips }} + {{ item.public_ip}} " 
with_items: servers.instances #servers is registered in previous task 
lineinfile: line="server_public_ips{{':'}} {{ ips }}" 
      dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}" 

私はlineinfile insertafterとregexを使って行うことができると思います。

は最後に、私はservers.instancesがリストされたときに、実際に動作するはずです

- name: Restrict access to outside world 
    command: iptables INPUT {{ item }} ACCEPT 
    with_items: {{ server_public_ips }}.split(,) #grant access for each ip 
    command: iptables INPUT DROP 
+0

このコードには多くの構文エラーがあります...そして、なぜ静的ファイルに* dynamic * ipsを保存する必要があるのですか?実行時にそれらを照会する必要があります。 –

+0

@ ConstantinSuvorov実行時にIPをクエリする方法を教えてください。私はec2のインスタンス名しか持っていません。実行時にインスタンス名を使用してIPを取得することは可能ですか?また、同じ名前のインスタンスが2つあります。どんな助けもありがとうございます。 – Charan

答えて

3
set_fact: 
    ips: " {{servers.instances | join(',') }} " 

、別のサーバでこれを行うために、これを必要とします。

+0

servers.instancesはリストですか?サーバーはjsonです。 – Charan

+0

さて、jsonをdictに変換するfrom_jsonメソッドを使用してください –

関連する問題