2017-02-23 50 views
0

我想我在這裏錯過了一些非常重要的東西,但我似乎無法找到它。根據minion角色調用鹽狀態

我正在部署一個使用Salt的中間層環境,我想要做的是根據角色的角色運行狀態文件。

我已經看到一個例子here他們使用top.sls文件進行定位,但是我可以找到很少的例子來做同樣的事情。

所以,如果我的文件結構是這樣的:

mesos 
     |_ init.sls 
     |_ mesos-master.sls 
     |_ mesos-slave 

,我只希望在與從屬角色的僕從運行mesos-slave.sls,什麼是做到這一點的最好辦法。

在我無窮的智慧我以爲做以下將工作(見根本性的誤解首段)

init.sls

add_mesosphere_apt_repo: 
    pkgrepo.managed: 
    - name: deb http://repos.mesosphere.io/ubuntu {{ UBUNTU_VER }} main 
    - dist: {{ UBUNTU_VER }} 
    - file: /etc/apt/sources.list.d/mesosphere.list 
    - keyid: E56151BF 
    - keyserver: keyserver.ubuntu.com 

{% if salt[grains.get]('role') == 'master' %} 
    include: 
    - .mesos-master 
{% endif %} 

但我得到這裏有重複的ID的錯誤。

我相信答案很簡單,我似乎無法找到任何結論使用谷歌。

回答

0

我已決定通過top.sls下井瞄準像這樣:

'roles:ms': 
    - match:grain 
    - mesos.mesos-slave 
0

使用匹配的穀物

目標爪牙時,您可以使用粒度的數據:

salt -G 'role:mesos-slave' test.ping 

使用匹配的穀物在頂部文件中

使用g在top.sls雨可以非常有效的:

'role:mesos-slave': 
    - match: grain 
    - mesos.mesos-slave 

手動同步穀物

state.highstate被稱爲穀物都會自動同步。但是,可以手動同步並重新加載它們:

salt '*' saltutil.sync_grains 
salt '*' saltutil.sync_all 

是否使用穀物安全定位?

穀物可以由有權訪問本地系統上的minion配置文件的用戶設置,因此穀物被認爲不如Salt中的其他標識符安全!

注意:最好的做法是不要在您的支柱頂部文件中使用穀物匹配任何敏感支柱!

重複ID的

...但我得到這裏有重複的ID的錯誤。

Salt當前在執行前檢查重複ID。該ID在整個狀態樹中必須是唯一的。所有後續具有相同名稱的ID聲明都將被忽略。

這個問題的簡單解決方案可能會確保每個ID都是唯一的。例如,您可以包括在ID聲明SLS文件名:

對於mesos.mesos_master你可以使用:

mesos_master: 
    file.managed: 
    - name: ... 
    - ... 

對於mesos.mesos_slave你可以使用:

mesos_slave: 
    file.managed: 
    - name: ... 
    - ... 

這種方式,你贏了在包含和排除其他SLS文件時,不會收到'重複ID'錯誤。