もう少しプレイブックの中身を細かく勉強してみます。
前回の記事
プレイブックで使用できるモジュールについては
以下のサイトにあるようです。が、数多すぎぃ・・
ということでネットサーフィンしながら実際に
自分がサーバ構築する想定で使えそうなモジュールを検証してみます。
またプレイブックの中で変数を使用できるようなので合わせて試してみます。
Vars 変数宣言
変数を宣言して使用することができます。
複数個所で使用している名称とかは変数化したほうがメンテナンスは
楽になりますね。
変数の書き方はかなり柔軟でそれぞれの強弱があります。
今回は検証なので同じプレイブック内に記載する方法を試してみます。
前回作成したプレイブック
- hosts: all
tasks:
- name: slインストール
yum: name=sl
一部変数化したプレイブック
- hosts: all
vars:
sname: sl
tasks:
- name: slインストール
yum: name={{sname}}
この二つのプレイブックは同じ結果になります。
変数snameを宣言してslという値を設定します。
参照するときは{{変数名}}とします。
凄いまとまっていて参考にさせていただいた記事
copy モジュール
Ansibleサーバにあるファイル、ディレクトリをクライアントにコピーします。
初期構築時にコンフィグファイルをコピーすることがあるので
使う機会は多そうに感じます。
コンフィグファイル(仮)をAnsibleサーバーに作成します。
次にプレイブックを作成します。
折角なので変数で指定しました。
srcにコピー元(Ansibleサーバ側)のファイルの絶対パス
destにクライアント側の配置先ディレクトリを指定します。
- hosts: all
vars:
sname: /home/cp.file
tasks:
- name: ファイルコピーテスト
copy:
src={{sname}}
dest=/root
実行してみると正常に完了しました。
クライアント側にファイルがコピーされていることを確認しました。
コマンドを再実行すると既にファイルがあるのでchanged=0のままでOKになります。
ちなみにクライアント側でcp.fileの中身を書き換えた後で
コマンドを再実行するとファイルが上書きされたので冪等性は担保されてるということですね。
unarchive モジュール
copyモジュールに似ていますが
こちらはAnsibleサーバにあるtar.gzファイルをクライアントにコピーし
展開まで実施してくれるモジュールです。
コピー後のtar.gzファイルは削除して展開後のファイルだけが残ります。
プレイブックを作成します。
- hosts: all
vars:
sname: /home/test.tar.gz
tasks:
- name: ファイルコピーテスト
unarchive:
src={{sname}}
dest=/root
実行すると正常に完了しました。
クライアント側を確認すると /root配下に圧縮ファイルが展開されています。
展開前の圧縮ファイルはありません。
yum モジュール
yumモジュールは前回にコマンドで実施した通りです。
クライアント側でyumを実行する場合に使用します。
stateを指定することでアンインストールも可能になります。
presentでインストール removedでアンインストール
- hosts: all
tasks:
- name: slインストール
yum:
name=sl
state=present
名前にバージョンを入れていない場合は最新をインストールすることになるので
コマンド実行時期でバージョンが変わる可能性があります。
yumはdnfにリダイレクトされているのでこちらの記事を参照
file モジュール
ファイル、ディレクトリを作成します。
権限や所有者の設定も可能です。
プレイブックを作成します。
ちょっと小細工をやってみたくて1つのプレイブックにまとめてみました。
- hosts: all
vars:
sname: testdir
tasks:
- name: ディレクトリ作成
file:
path=/root/{{sname}}
state=directory
mode=0755
- name: ファイル作成
file:
path=/root/{{sname}}/testfile
state=touch
owner=root
group=root
実行してクライアントを確認するとディレクトリとファイルが作成されていることが
確認できました。
user モジュール
ユーザーの作成削除編集をすることができます。
パスワードは平文で良くなったみたいなのでとりあえずそのまま作成します。
- hosts: all
vars:
sname: test
tasks:
- name: ユーザー作成
user:
name={{sname}}
password=password
state=present
実行すると結果はOKですがハッシュ化しなさいと怒られます。。
ちょっと調べて↓の様に修正してみました。
- hosts: all
vars:
sname: test
pword: password
tasks:
- name: ユーザー作成
user:
name={{sname}}
password={{ pword | password_hash('sha512') }}
state=present
アカウント自体は作成できておりSSH接続もできました。
service モジュール
サービスを開始したり停止したりできます。
検証としてhttpdをインストールして開始するプレイブックを作成します。
- hosts: all
vars:
sname: httpd
tasks:
- name: httpインストール
yum:
name={{sname}}
state=present
- name: serviceスタート
service:
name=httpd
state=started
- name: FW無効化
service:
name=firewalld
state=stopped
コマンド実行後webブラウザで確認してみると
テストページが表示されました。
最初上手く表示できなくて
FW無効化にたどり着くまでちょっと時間かかりました。。
プレイブックの小技が少しありそうなので次回はそのあたりを
試してみたいと思います。