隨着centos7的不斷穩定和新的特性吸引,公司慢慢開始用centos6向centos7遷移。因爲早起寫了很多專用於centos6的sls最近抽時間把一部分地方進行了修改,例如centos6的mysql到cnetos7默認變爲了“mariadb ”pkg.installd在centos7進行安裝的時候就會失敗,很多軟件是源碼安裝啓動腳本位置不同系統會不同。
爲了解決這個不兼容的問題,我在這是使用pillar定義了變量通過不同系統版本選擇不同的軟件名或者腳本路徑。當然你也可以使用grains來達到這種目的,但是這樣會使你陷入無限的if...else裏面,導致你以後越發的難以維護
下面是一個grains的sls使centos6~7通用的sls
nginx-server: file.managed: {% if grains['osmajorrelease'][0] == '6' %} - name: /etc/init.d/nginx - source: salt://web/files/nginx-init {% elif grains['osmajorrelease'][0] == '7' %} - name: /usr/lib/systemd/system/nginx.service - source: salt://web/files/nginx.service {% endif %} - mode: 755 - user: root - group: root service.enabled: - name: nginx - enable: True - require: - file: nginx-server service.running: - name: nginx - reload: True - watch: - file: /usr/local/nginx/conf/nginx.conf
下面直接粘貼我的pillar的sls文件,這裏類似於建立一個系統通用性變量庫,通過你自定義的條件使你的變量獲取想要的內容
[root@salt-node1 states]# cat base/pillar/pkg/packages.sls pkg-common: {% if grains['osmajorrelease'] == '6' %} mysql_lib: mysql-libs mysql_devel: mysql-devel mysql: mysql zabbix_agent: zabbix20-agent nginx_init: nginx-init nginx_init_path: /etc/init.d/nginx keepalived_init: keepalived.init keepalived_init_path: /etc/init.d/keepalived {% elif grains['osmajorrelease'] == '7' %} mysql_lib: mariadb-libs mysql_devel: mariadb-devel mysql: mariadb zabbix_agent: zabbix22-agent nginx_init: nginx-systemd nginx_init_path: /usr/lib/systemd/system/nginx.service keepalived_init: keepalived-systemd keepalived_init_path: /usr/lib/systemd/system/keepalived.service {% endif %}
下面通過pillar獲取到你定義的變量,這樣你就不用每個nginx都寫一堆if..else,簡單清晰還容易維護,何樂不爲。
nginx-server: file.managed: - name: {{ pillar['pkg-common']['nginx_init_path'] }} - source: salt://nginx/files/{{ pillar['pkg-common']['nginx_init'] }} - mode: 755 - user: root - group: root service.enabled: - name: nginx - enable: True - require: - file: nginx-server
當然pillar的用法還有好多,例如你的一個服務的ip如果出現在很多的地方可以直接配置pillar裏面,使用jinja模版直接調用,這樣你只需要修改pillar的配置即可,這裏就直說這些了,大家如果有疑問可以直接評論