質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

2回答

1506閲覧

ホスト単位で処理実行を分ける時の記述について

hap_cmd

総合スコア3

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/10/10 23:17

運用しているシステムで2つのサーバ内に置いていますsample.txtがあります。

このsample.txtについて以下のようなコマンドをサーバ毎に設定記述を変更する事が目的です
これをansibleにして、他のシステムにも同じように適用させる場合について質問となります

'ssh user@server1 "echo AAA > target.txt"'

server1サーバでは、echo AAA
server2サーバでは、echo BBB
としたい

files/sample.txtを 置いていて、sample.txtの末尾に下記を記載することとしています

- '# ssh set' - 'ssh user@server1 "echo AAA > target.txt"'

sample.txt内の記述変更は
lineinfileモジュールを用いて
ec2のDNS名を条件にして、以下の「汎用性ないもの」のように記述して実行できるのですが
汎用性のあるものとしたい時

質問1
他システムにも汎用性を持たせるために、varsでホスト名を変数化して処理させる場合、
どのような設定をしていけばいいのでしょうか

質問2
条件判別するとき、inventory_hostname と ansible_hostname
どちらを使用していけば効率よくなるのでしょうか

質問3
lineinfileのwith_itemsを用いてコマンド処理実行するとき

'ssh user@server1 "echo AAA > target.txt"' 'ssh user@server2 "echo BBB > target.txt"'

のように実行コマンドそのまま書く事は汎用性がないかと思っていまして
汎用性になるために、「試作中内」の

set-target.yml
name: host1 apply

で記述しているような

'ssh user@hostname1 "echo AAA > target.txt"'

name: host2 apply

で記述しているような
replaceモジュールを使用して該当箇所だけ変更する形でいいのかと思っています

このようにサーバ単位でファイル内の記述を一部変更していくとき
replaceモジュールが最適なのでしょうか
他、最もよい記載方法がありましたら、ご教示ください

● 汎用性ないもの

tasks/set_target.yml

# host1 apply - name: host1 lineinfile: path: /tmp/target.txt line: "{{ item }}" with_items: - '# host1' - 'ssh user@server1 "echo AAA > target.txt"' when: inventory_hostname == 'server1' tags: add_target # host2 apply - name: host2 lineinfile: path: /tmp/target.txt line: "{{ item }}" with_items: - '# host2' - 'ssh user@server2 "echo BBB > target.txt"' when: inventory_hostname == 'server2' tags: add_target

● 汎用性になるための試作中

■ vars/host1.yml

host1: host: "server1"

■ vars/host2.yml

host2: host: "server2"

==================
■ set-target.yml

- name: include vars include_vars: host.yml # when: "'host1' in ansible_hostname - name: include vars include_vars: host.yml # when: "'host2' in ansible_hostname - name: host1 apply lineinfile: path: /tmp/target.txt line: "{{ item }}" with_items: - '# add-target' - 'ssh user@server1 "echo AAA > target.txt"' when: "'host1' in ansible_hostname tags: add_target - name: host2 apply replace: path: /tmp/target.txt regexp: '\server1' replace: line: ' server2' regexp: '\AAA' line: ' BBB' when: "'host2' in ansible_hostname tags: add_target

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問内容から意図を汲めなかったので
コードからホスト毎に挙動を変えたいというふうに捉えました。

host_varsを利用してはだめなんですかね?

■host_vars/host1

yaml

1echo_var: AAA 2server: server1

■host_vars/host2

yaml

1echo_var: BBB 2server: server2

■set-target.yml

yaml

1- name: 2 lineinfile: 3 path: /tmp/target.txt 4 line: 'ssh user@{{ server }} "echo {{ echo_vars }} > target.txt"' 5 tags: add_target

>質問2
>条件判別するとき、inventory_hostname と ansible_hostname
>どちらを使用していけば効率よくなるのでしょうか
どんな条件判別をしたいかによるので、一概には言えないと思ってます。
inventory_hostname はAnsibleで定義されているターゲットホストの名前
ansible_hostname はターゲットホストの物理ホスト名

投稿2020/10/11 01:00

jir01030

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hap_cmd

2020/10/11 16:52

ありがとうございます host_varsについて確認を行ってみます
guest

0

少し気になりましたので、質問させて頂きます。

ec2のDNS名を条件にして、以下の「汎用性ないもの」のように記述して実行できるのですが

汎用性のあるものとしたい時

上記の例にならってec2のDNS名がserver1の時にAAA、server2の時にBBBとなっていますが、汎用性のあるものとしたいとのことなので、EC2のDNS名が変わっても大丈夫なようにするという意図でしょうか?
そうではなければ @jir01030さんが提案して頂いた実装でよいかと思います。

もう一つが気になったこととしては、
出力しているテキストの内容が気になりました。

'ssh user@{{ server }} "echo {{ echo_vars }} > target.txt"'

もしかしたら後続の処理で {{ server }} にSSH接続する処理があるのでしょうか?
それによって全体の構成が違ってくる可能性もあります。

投稿2020/10/11 04:37

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hap_cmd

2020/10/11 16:50

ご回答ありがとうございます 複数のシステムで同じ処理をしたいと考えていますので 各システムのEC2のDNS名が変わっても大丈夫なようにしたいです >SSH接続する処理があるのでしょうか? 特に後続処理はないですが、今後処理が追加される可能性もあります よろしくお願いします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問