SaltStack使用教程(六):管理服務妙用pillar實現centos6和centos7通配

    隨着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的配置即可,這裏就直說這些了,大家如果有疑問可以直接評論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章