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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

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

Q&A

解決済

1回答

939閲覧

ansible 複数ターゲットへの設定変更

goo___

総合スコア15

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

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

0グッド

1クリップ

投稿2020/01/27 07:51

編集2020/01/30 14:14

ansibleで複数ターゲットに設定値に差分ががある設定を一括管理するにはどういった指定方法がいいのでしょうか?

host_varsを使うようなのを聴きましたがうまく構築できません。import_playbookで呼び出していく方法も考えましたがどういった手法がいいのでしょうか。

主にやりたいこと
複数サーバのネットワーク設定等


少し進んだので更新します
import_playbookでは読みだすplaybookでターゲット指定はできますが、呼び出し元のplaybookではターゲット指定はできませんでした。イメージは以下です。出来たらよかったですが...

YAML

1- hosts: X.X.X.X 2 import_playbook: XXX

なのでやり方を変えて進めてます。
参考:https://qiita.com/tanuki_mujina/items/43aa769c2ddc8a3a98f9

ターゲットのアドレスを変数にし、別ファイルに作成して呼び出すやり方です。
ターゲット分のファイルは必要になりますが簡単に作成できるかと思いました。
呼び出すファイルにモジュールのパラメータ値も変数として格納したら同じように呼び出そうとしたがうまくいきません。
以下に実際の構文を載せます。この内容で設定値まで一緒に変数として格納はできないのでしょうか。もしくはモジュール内ファイル/変数の呼び出しが必要になるのでしょうか。。。

YAML

1・inventoryファイル 2Client01 3 4・Client01.yml 5--- 6ipaddr: 192.168.0.1 7new_ipaddr: 172.16.0.10 8new_prefix: 24 9new_gateway: 172.16.0.200 10 11・playbook.yml 12--- 13- hosts: all 14 vars_files: 15 - vars/{{ansible_hostname}}.yml 16 tasks: 17 - name:ipv4設定 18 lineinfile: 19 dest: /etc/sysconfig/network-scripts/ifcfg-eth0 20 line: "{{ item }}" 21 with_items: 22 - IPADDR="new_ipaddr" 23 - PREFIX="new_prefix" 24 - GATEWAY="new_gateway"

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

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

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

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

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

guest

回答1

0

ベストアンサー

inventory、varsファイルについては問題なさそうです。
task部分は要修正です。

  • name:ipv4設定

":"の後にスペースが必要です。

 lineinfile:

モジュール名の前に全角スペースが混入しています。
インデントも足りません。

  • IPADDR="new_ipaddr"
  • PREFIX="new_prefix"
  • GATEWAY="new_gateway"

各値が、変数でなく、単なる文字列として呼ばれています。
変数を呼ぶ場合は、ブレースで括る必要があります。

以上を踏まえて、書き直したplaybook例を以下に記載します。

YAML

1- hosts: all 2 vars_files: 3 - vars/{{ansible_hostname}}.yml 4 tasks: 5 - name: ipv4設定 6 lineinfile: 7 dest: /etc/sysconfig/network-scripts/ifcfg-eth0 8 line: "{{ item }}" 9 with_items: 10 - "IPADDR={{ new_ipaddr }}" 11 - "PREFIX={{ new_prefix }}" 12 - "GATEWAY={{ new_gateway }}"

これで一応動作するplaybookは書けるかと思いますが、いくつか補足です。

  • 当初の「ansibleで複数ターゲットに設定値に差分ががある設定を一括管理する」という目的に

対しては、参照されているqiita記事のコメントにあるhost_vars、あるいは、group_vars、facts等の
利用が手段としてあるかと思います。今回のパターンは、task、roleよりかはホストに
紐づく情報、かつ、純粋に追加設定のためfactsでも採れないので、個人的にはhost_varsで
定義しておくと後々の管理が楽かなと思います。hosts_varsに関して、うまくいかなかったと
おっしゃられている部分について、具体的にご説明いただければ、助力できるかもしれません。

  • Ansibleが疎通しているインタフェースの設定をAnsibleから変更する際は、十分検証してから

実施されることをお勧めします。

  • ifcfgのようなファイルは、lineinfileモジュールで追記すると、後に設定変更が生じた場合に

少々つらいかと思いますので、templateモジュールの利用をお勧めします。

もう少し細かくご説明すべきかとも思いましたが、観点が増えすぎて収集が
つかなくなりそうでしたので、一旦以上とさせていただきます。

投稿2020/02/04 17:19

ikiri96hyo

総合スコア20

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

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

goo___

2020/02/11 17:42

回答ありがとうございました。修正したところ上手く動きました。またネットワーク設定の際の管理NWは別に分けておいた方が良いですね。 気になっているのですが今回、複数台サーバに設定値の違うモジュール実行をしましたが、この複数台中の特定のサーバにだけ別のモジュールを実行しようとしたら、別のplaybookを作成・実行するしかないのでしょうか? 用途を分けたplaybookを作成し、管理していくのが整理もついて良いと考えてはいるのですが、上記のようなやり方はそもそもできるのかできないのかが判断がつきません。もしお時間あればご教授頂けないでしょうか?
goo___

2020/02/11 17:48

少し意図がわかりづらいかもしれませんが、1つのplaybookでモジュールごとに対象のサーバ又はグループを記述し、設定していくというものです。基本的なplaybookは冒頭に対象サーバを記述し、それ以降でモジュールを書いていくだけだと認識しています。
ikiri96hyo

2020/02/12 16:20

結果のご報告、ありがとうございます。うまくいって何よりです。 モジュールの実行分けの件ですが、例えば、Playbook内の特定のtaskについて、Inventory上で定義しているノード名/グループ名を条件として、特定のノード名/グループ名に合致する場合のみ実行したい、ということであれば、whenステートメントと、fact変数かmagic変数を組み合わせれば実装可能です。 コメント欄では色々不都合があるため、詳細は割愛させていただきます。一度ご自分でお調べいただき、行き詰ったら、質問の別建てをご検討ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問