salt の紹介やインストール方法とノードをマスタで承認するまでを こちら や
こちら で紹介しました。最後は salt を最小限構成ではじめる為の設定について説明します。
salt を設定する
salt の設定全体の流れとしては以下のようになります。
- ターゲットを定義する
- ターゲットの状態を定義する
- 状態を反映するコマンドを実行する
これらをそれぞれ順番に説明します。
ターゲットを定義する
salt の定義ファイルは SLS ファイルと呼ばれ、[yaml] 形式になっています。この形式で /srv/salt/top.sls ※1 にターゲット定義を記載します。
$ sudo mkdir -p /srv/salt
$ sudo vi /srv/salt/top.sls
今回は top.sls に次のように定義しました。
base:
'*': # 全てのサーバが対象
- webserver # 状態の名称
'os:CentOS': # CentOS が対象
- match: grain # grain を使う
- centos-webserver # 状態の名称
'os:Ubuntu': # Ubuntu が対象
- match: grain # grain を使う
- ubuntu-webserver # 状態の名称
base は最初のルートを示します。これはそのまま定義して下さい。次の階層の ‘*’ や ‘os:CentOS’ はターゲットになります。
このターゲットは「どのノードで実行するか?」を意味しており、例えば ‘*’ の場合は全てのサーバが対象になったり、'[ホスト名]' の場合はホストが対象になったりします。ここでは ‘os:CentOS’ という事前に定義されたグループ(Grains)でも指定しています。
次の階層の ‘webserver’ は状態の名称で、実際の状態の定義が /srv/salt/[状態の名称].sls で設定されていることを意味します。
‘webserver’ を状態名にしたなら /srv/salt/webserver.sls に状態を定義します。
ターゲットの状態を定義する
次に状態の定義を行います。今回は /srv/salt/webserver.sls に「apache2 がインストールされていて、稼働していること」を状態として設定してみます。
httpd: # ID の定義
pkg: # 状態の定義
- installed # function の定義、httpd パッケージのインストール
service:
- running # サービスが稼働していること
- require: # httpd パッケージがインストールされていること
- pkg: httpd
この定義は一番上に ID(パッケージであればパッケージ名)を定義し、この下に function を設定します。上に記載されているのはある程度直感的なのでそのまま分かるかもしれませんがこれらをカスタマイズするには(英語ですが)以下のドキュメントが参考になります。
Highstate data structure definitions
http://docs.saltstack.com/ref/states/highstate.html#term-function-declaration
状態を反映する
最後に定義した状態を反映する為にコマンドを実行します。このコマンドは管理下に置かれている全てのノードに反映するので注意して下さい。
$ sudo salt '*' state.highstate
なお、今回使用している ‘os:CentOS’ のように grains の機能を使いたい場合は -G オプションもつけます。
$ sudo salt -G 'os:CentOS' state.highstate
以上で salt の設定は終わりです。上の webserver.sls は CentOS(Redhat 系)を前提に定義しています。Ubuntu で試したい場合は httpd を apache2 に置き換える必要があります。
※1 /etc/salt/master の file_roots にこのディレクトリを定義します。デフォルトは /srv/salt になっています。