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」環境として実行していいものなのか、わからなかったのだと思われる。

で、いくつか試したところ下記のどちらかで対応できそう。

  1. 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
    
  2. 環境を指定してslsモジュールを実行する。

    # pwd
      /srv/salt/
    
    # salt -N 'kube-minion' state.sls salt_kubernetes/deploy_kube-master saltenv=base
    

本来ならどんな使い方がいいのか、まだ良くわからないけれども、なんとか動かすことはできそう。