ansibleの勉強シリーズ第3回です。
今回は、
- playbook実行中に、今処理しているホスト名をテンプレートファイルに書き込む。
- 変数の値に変数を埋め込む。
です。
playbook実行中に、今処理しているホスト名をテンプレートファイルに書き込む。
現在playbook処理中のホスト名を一意のキーとして使用したい場合がありますね。
この場合はちゃんとansibleに組み込み変数として定義されているので、簡単に利用する事ができます。
The trick about going through hostvars is necessary because it’s a dictionary of the entire namespace of variables. ‘inventory_hostname’ is a magic variable that indicates the current host you are looping over in the host loop.
http://docs.ansible.com/faq.html#how-do-i-access-a-variable-name-programmatically
例えば hosts が
[webserver] node1
の場合、templates/xxx.txtに、
# {{ inventory_hostname }}
と書いてからplay-bookを実行すると、
# node1
と書き込まれます。
IPアドレスを取得する場合はもう少し工夫が必要のようです。
{{ hostvars[inventory_hostname]['ansible_eth0']['ipv4']['address'] }}
http://docs.ansible.com/faq.html#how-do-i-access-a-variable-name-programmatically
こんな感じで辞書を何度か引くと、ホスト名からIPアドレスが引けるようです。
環境によっては「ansible_eth0」が「ansible_eth1」の場合もあります。
変数の値に変数を埋め込む。
シェルスクリプト等でよく以下のような事をします。
MYSQL_HOME=/var/lib/mysql MYSQL_ERROR_LOG=$MYSQL_HOME/error.log
これをansibleでやるには、以下のようにします。
mysql_home: /var/lib/mysql mysql_db_name: hoge mysql_db_encoding: utf8 mysql_login_port: 3306 mysql_login_unix_socket: '{{ mysql_home }}/mysql.sock' mysql_pid: '{{ mysql_home }}/mysql.pid' mysql_user_name: '{{ os_default_user }}' mysql_user_password: '{{ os_default_user }}' mysql_error_log: '{{ mysql_home }}/error.log'
何故なのか解ってないのですが、シングルクォートで囲まないとエラーになるのです。囲むと、変数の値に変数を利用でき、2重管理を避ける事ができます。
雑感
vagrantとansibleの組み合わせが便利すぎますね。
vagrantの上にdocker乗せたらOS再作成が高速化されるのかな!?
ansibleを勉強すればする程、サーバ管理の基本が全然解って無い事に気付かされ、泣けてきます・・
今もfluentdを設定中ですが、権限周りが全然で、apacheのログ転送で精一杯です
Ansible実践ガイド 第2版 (impress top gear)
- 作者: 北山晋吾,塚本正隆,畠中幸司
- 出版社/メーカー: インプレス
- 発売日: 2018/03/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ansibleを学ぶ:vol02:Oracle JDK1.8のインストール、ユーザパスワード設定等 - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol03:実行中のホスト名を書き込む、変数の値に変数を使用する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol04:よくハマる部分とその解決法 - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol05:対象サーバのid_rsa.pubを対象サーバのauthorized_keysに登録する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol06:mysql-serverのインストールからcreate databaseまでを自動化する - 文系プログラマによるTIPSブログ
ansibleを学ぶ:vol07:figletで動的にホスト名をmotdに書き込んでニヤニヤする - 文系プログラマによるTIPSブログ