Stateファイル配置場所について
確認バージョン:
マスター、ミニオンともに
# salt --version
salt 2016.11.3 (Carbon)
gitでStateファイルを公開した場合、どうやってcloneしてきて使うのが良いのかよくわからなかった。
下記のように設定されているとして、
# tail /etc/salt/master
log_level_logfile: info
default_include: master.d/*.conf
file_roots:
base:
- /srv/salt ←ここ
pillar_roots:
base:
- /srv/pillar
下記のようにデプロイして実行してみようとする。
# pwd
/srv/salt/
# git clone https://github.com/YasuhiroOsajima/salt_kubernetes.git
# cd salt_kubernetes
# pwd
/srv/salt/salt_kubernetes
# ls -l
total 16
-rw-r--r--. 1 root root 268 Apr 1 14:35 deploy_kube-master.sls
-rw-r--r--. 1 root root 231 Apr 1 14:36 deploy_kube-minion.sls
drwxr-xr-x. 2 root root 26 Apr 1 14:32 kube-defaults
drwxr-xr-x. 3 root root 130 Apr 1 14:20 kube-master
drwxr-xr-x. 3 root root 114 Apr 1 14:20 kube-minion
-rw-r--r--. 1 root root 138 Apr 1 14:20 README.md
-rw-r--r--. 1 root root 347 Apr 1 14:20 top.sls
この状態でStateを実行すると怒られる。
# salt -N 'kube-minion' state.sls deploy_kube-minion
kube-minion1:
Data failed to compile:
----------
No matching sls found for 'deploy_kube-minion' in env 'base'
調べたてみたけど、/etc/salt/masterに「default_top: xxx」の設定(だけでいいのか自信はない)が入ってない場合、Saltはデフォルトで「base」という環境へのデプロイだと判断してStateを解析し始めるっぽい。
/etc/salt/masterに書いた「file_roots:base:- /srv/salt」の部分が、/srv/saltの直下にあるファイルが「base」環境へのデプロイに使えることを示してるっぽい。
そして、file_rootsに定義した以外のディレクトリにあるStateファイルを実行しようとすると、 エラーになる。
# salt -N 'kube-minion' state.sls deploy_kube-minion
kube-minion1:
Data failed to compile:
----------
No matching sls found for 'deploy_kube-minion' in env 'base' ←この部分
slsモジュールが、このStateファイルが「base」環境として実行していいものなのか、わからなかったのだと思われる。
で、いくつか試したところ下記のどちらかで対応できそう。
file_rootsで定義したディレクトリの直下にシンボリックリンクを作る。
# pwd /srv/salt/ # ln -s salt_kubernetes/deploy_kube-master.sls deploy_kube-master.sls # ls -l total 4 lrwxrwxrwx. 1 root root 38 Apr 1 14:37 deploy_kube-master.sls -> salt_kubernetes/deploy_kube-master.sls drwxr-xr-x. 6 root root 169 Apr 1 14:36 salt_kubernetes -rw-r--r--. 1 root root 43 Apr 1 14:23 top.sls # salt -N 'kube-minion' state.sls deploy_kube-master
環境を指定してslsモジュールを実行する。
# pwd /srv/salt/ # salt -N 'kube-minion' state.sls salt_kubernetes/deploy_kube-master saltenv=base
本来ならどんな使い方がいいのか、まだ良くわからないけれども、なんとか動かすことはできそう。