質問: ansibleで複数ターゲットに設定値に差分ががある設定を一括管理するにはどういった指定方法がいいのでしょうか? host_varsを使うようなのを聴きましたがうまく構築できません。import_playbookで呼び出していく方法も考えましたがどういった手法がいいのでしょうか。 主にやりたいこと 複数サーバのネットワーク設定等 ↓ 少し進んだので更新します import_playbookでは読みだすplaybookでターゲット指定はできますが、呼び出し元のplaybookではターゲット指定はできませんでした。イメージは以下です。出来たらよかったですが... ``` - hosts: X.X.X.X import_playbook: XXX ``` なのでやり方を変えて進めてます。 参考:https://qiita.com/tanuki_mujina/items/43aa769c2ddc8a3a98f9 ターゲットのアドレスを変数にし、別ファイルに作成して呼び出すやり方です。 ターゲット分のファイルは必要になりますが簡単に作成できるかと思いました。 呼び出すファイルにモジュールのパラメータ値も変数として格納したら同じように呼び出そうとしたがうまくいきません。 以下に実際の構文を載せます。この内容で設定値まで一緒に変数として格納はできないのでしょうか。もしくはモジュール内ファイル/変数の呼び出しが必要になるのでしょうか。。。 ``` ・inventoryファイル Client01 ・Client01.yml --- ipaddr: 192.168.0.1 new_ipaddr: 172.16.0.10 new_prefix: 24 new_gateway: 172.16.0.200 ・playbook.yml --- - hosts: all vars_files: - vars/{{ansible_hostname}}.yml tasks: - name:ipv4設定 lineinfile: dest: /etc/sysconfig/network-scripts/ifcfg-eth0 line: "{{ item }}" with_items: - IPADDR="new_ipaddr" - PREFIX="new_prefix" - GATEWAY="new_gateway" ```
回答: inventory、varsファイルについては問題なさそうです。 task部分は要修正です。 > > - name:ipv4設定 > > > ":"の後にスペースが必要です。 > > lineinfile: > > > モジュール名の前に全角スペースが混入しています。 インデントも足りません。 > > - IPADDR="new_ipaddr" > > - PREFIX="new_prefix" > > - GATEWAY="new_gateway" > > > 各値が、変数でなく、単なる文字列として呼ばれています。 変数を呼ぶ場合は、ブレースで括る必要があります。 以上を踏まえて、書き直したplaybook例を以下に記載します。 ``` - hosts: all vars_files: - vars/{{ansible_hostname}}.yml tasks: - name: ipv4設定 lineinfile: dest: /etc/sysconfig/network-scripts/ifcfg-eth0 line: "{{ item }}" with_items: - "IPADDR={{ new_ipaddr }}" - "PREFIX={{ new_prefix }}" - "GATEWAY={{ new_gateway }}" ``` これで一応動作するplaybookは書けるかと思いますが、いくつか補足です。 * 当初の「ansibleで複数ターゲットに設定値に差分ががある設定を一括管理する」という目的に 対しては、参照されているqiita記事のコメントにあるhost_vars、あるいは、group_vars、facts等の 利用が手段としてあるかと思います。今回のパターンは、task、roleよりかはホストに 紐づく情報、かつ、純粋に追加設定のためfactsでも採れないので、個人的にはhost_varsで 定義しておくと後々の管理が楽かなと思います。hosts_varsに関して、うまくいかなかったと おっしゃられている部分について、具体的にご説明いただければ、助力できるかもしれません。 * Ansibleが疎通しているインタフェースの設定をAnsibleから変更する際は、十分検証してから 実施されることをお勧めします。 * ifcfgのようなファイルは、lineinfileモジュールで追記すると、後に設定変更が生じた場合に 少々つらいかと思いますので、templateモジュールの利用をお勧めします。 もう少し細かくご説明すべきかとも思いましたが、観点が増えすぎて収集が つかなくなりそうでしたので、一旦以上とさせていただきます。