saltstack之jinja

States配置管理
States是Saltstack中的配置語言,在日常進(jìn)行配置管理時需要編寫大量的States SLS文件拿诸,而編寫這些SLS文件的一般步驟也就是我們平時手動配置一臺服務(wù)器的步驟:首先安裝源碼包衙猪,然后管理一個配置文件笙什,最后再保證這個服務(wù)的開機(jī)啟動及正常運(yùn)行形导。其中使用到的states模塊功能需要我們一邊學(xué)習(xí)一邊實(shí)踐加強(qiáng)理解婉烟。

接下來鼻弧,我們通過一個簡單的例子來理解Saltstack配置管理的基本原理--安裝keepalived
1)修改master配置文件的file_roots根目錄地址

[root@saltstack-node1 ~]# vim /etc/salt/master

file_roots:
base:
- /srv/salt
[root@saltstack-node1 ~]# systemctl restart salt-master

2)創(chuàng)建states sls文件

[root@saltstack-node1 ~]# cd /srv/salt/

[root@saltstack-node1 salt]# mkdir keepalived
[root@saltstack-node1 salt]# cd keepalived/
[root@saltstack-node1 keepalived]# mkdir files #創(chuàng)建一個files文件來存放我們的源碼包和配置文件
[root@saltstack-node1 keepalived]# cd /srv/salt/keepalived/files/
[root@saltstack-node1 files]# rz #我們rz上傳一個keepalived源碼包
[root@saltstack-node1 files]# ll
total 236
-rw-r--r-- 1 root root 239438 Oct 8 2016 keepalived-1.2.1.tar.gz
[root@saltstack-node1 files]# cd ..
[root@saltstack-node1 keepalived]# vim install.sls
/application/tools: # ID聲明,在配置管理高級狀態(tài)中锦茁,這個ID必須唯一
file.directory: # State聲明攘轩,也可以叫狀態(tài)聲明(新建一個新文件夾)
- user: root # 選項(xiàng)聲明
- group: root
- mode: 755
- makedirs: True
keepalived-install: # ID聲明的第二種寫法也可以這么寫,表明以下管理功能
file.managed: # 管理一個文件
- name: /application/tools/keepalived-1.2.1.tar.gz
- source: salt://keepalived/files/keepalived-1.2.1.tar.gz
- user: root
- group: root
- mode: 755
cmd.run: # 調(diào)用系統(tǒng)命令來執(zhí)行解壓和安裝
- name: cd /application/tools/ && tar zxf keepalived-1.2.1.tar.gz && cd keepalived-1.2.1 && ./configure --prefix=/application/keepalived --disable-fwmark && make && make install
- unless: test -d /application/keepalived # unless作用是先決條件码俩,如果這么文件夾存在就不再重復(fù)執(zhí)行上面的make和make insall安裝命令度帮,節(jié)省時間
- require: # require是各ID之間的依賴,意思是只有keepalived-install下面的壓縮包存在才會繼續(xù)執(zhí)行
- file: keepalived-install

上面的install.sls就是我們需要編輯的states SLS文件格式了稿存,其中最主要的就是ID聲明和狀態(tài)聲明笨篷,ID不能唯一,狀態(tài)模塊使用可以查看幫助文檔瓣履,功能還是十分豐富和完善的

https://www.unixhot.com/docs/saltstack/ref/states/all/index.html

[root@saltstack-node1 keepalived]# salt '*' state.sls keepalived.install
...
Summary for saltstack-node2.lichengbing.com


Succeeded: 3 (changed=1)
Failed: 0


Total states run: 3
Total run time: 21.593 s
Summary for saltstack-node1.lichengbing.com


Succeeded: 3 (changed=1)
Failed: 0


Total states run: 3
Total run time: 22.882 s

到這里率翅,我們遠(yuǎn)程配置批量安裝keepalived就算完成了,接下來就是拷貝配置文件和啟動服務(wù)

4)配置文件
因?yàn)镵eepalived分為主袖迎、備節(jié)點(diǎn)冕臭,一些配置在主節(jié)點(diǎn)和備節(jié)點(diǎn)上是不同的。如果按照傳統(tǒng)的配置管理下發(fā)配置文件是行不通的燕锥,因?yàn)樗械南掳l(fā)文件都是一樣辜贵,讓我們一臺臺去修改還是比較痛苦的,所以我們需要借用Jinja模板來幫助我們完成配置文件的管理归形,文章下面有Jinja模板的介紹

[root@saltstack-node1 files]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     saltstack@example.com
   }
   notification_email_from keepalived@example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id {{ROUTEID}}
}
vrrp_instance haproxy_ha {
state {{STATEID}}
interface eth0
    virtual_router_id 36
priority {{PRIORITYID}}
    advert_int 1
authentication {
auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       10.0.0.184
    }
}

配置正確的服務(wù)啟動參數(shù)

[root@saltstack-node1 files]# vim keepalived.sysconfig

Options for keepalived. See `keepalived --help' output and keepalived(8) and

keepalived.conf(5) man pages for a list of all options. Here are the most

common ones :

--vrrp -P Only run with VRRP subsystem.

--check -C Only run with Health-checker subsystem.

--dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.

--dont-release-ipvs -I Dont remove IPVS topology on daemon stop.

--dump-conf -d Dump the configuration data.

--log-detail -D Detailed log messages.

--log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)

KEEPALIVED_OPTIONS="-D"

5)繼續(xù)編寫installer.sls文件托慨,在后面添加

[root@saltstack-node1 keepalived]# vim install.sls
/etc/sysconfig/keepalived:
  file.managed:
    - source: salt://keepalived/files/keepalived.sysconfig
    - mode: 644
    - user: root
    - group: root
/etc/init.d/keepalived:
  file.managed:
    - source: salt://keepalived/files/keepalived.init
    - mode: 755
    - user: root
    - group: root
keepalived-init:
  cmd.run:
    - name: chkconfig --add keepalived
    - unless: chkconfig --list | grep keepalived
    - require:
      - file: /etc/init.d/keepalived
/etc/keepalived:
  file.directory:
    - user: root
    - group: root
keepalived-server:
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf
    - mode: 644
    - user: root
    - group: root
    - template: jinja
    {% if grains['fqdn'] == 'saltstack-node1.lichengbing.com' %}
    - ROUTEID: haproxy_ha
    - STATEID: MASTER
    - PRIORITYID: 150
    {% elif grains['fqdn'] == 'saltstack-node2.lichengbing.com' %}
    - ROUTEID: haproxy_ha
    - STATEID: BACKUP
    - PRIORITYID: 100
    {% endif %}
  service.running:
    - name: keepalived
    - enable: True
    - watch:
      - file: keepalived-server

6)啟動文件
[root@saltstack-node1 files]# cat keepalived.init

#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived
# Source function library
. /etc/rc.d/init.d/functions
# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived
RETVAL=0
prog="keepalived"
start() {
    echo -n $"Starting $prog: "
    daemon /application/keepalived/sbin/keepalived ${KEEPALIVED_OPTIONS} #修改正確的啟動地址
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status keepalived
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1
esac
exit $RETVAL

7)執(zhí)行配置管理啟動所有服務(wù)

[root@saltstack-node1 keepalived]# salt '*' state.sls keepalived.install

Jinja
Saltstack除了使用了YAML語言以外,我們還需要學(xué)習(xí)一點(diǎn)jinja語法知識暇榴,因?yàn)樵谂渲霉芾碇薪?jīng)常會用到厚棵,這也是saltstack能真正實(shí)現(xiàn)高度自動化配置的一個重要技能
Jinja是現(xiàn)代的,設(shè)計(jì)者友好的跺撼,仿照Django模板的Python模板語言窟感,是基于pythonde 模板引擎,功能類似于PHP的smarty歉井,J2EE的Freemarker柿祈,由于速度快,被廣泛開發(fā)者接受并使用哩至。

#詳細(xì)參考資料:

http://docs.jinkan.org/docs/jinja2/

Jinja在saltstack中的作用
yaml_jinja工作流程是先用jinja2模板引擎處理SLS,然后再調(diào)用YAML解析器躏嚎。所以在開始解析YAML之前,我們可以使用jinja干一些我們想干的事情菩貌,比如:定義一個類似變量或者表達(dá)式卢佣;模板引用
1)變量

[root@saltstack-node1 keepalived]# vim install.sls #借配置管理的一個sls文件演示,有時候我們使用的源碼包可能要換不一樣的版本箭阶,一處處修改或者替換會出問題虚茶,這個定義變量的形式就比較方便了

{% set keepalived_tar = 'keeplived-1.2.17.tar.gz' %} # 用{%...%}符號定義
{% set keepalived_source = 'salt://modules/keepalived/files/keepalived-1.2.17.tar.gz' %}

keepalived-install:
  file.managed:
    - name: /usr/local/src/{{ keepalived_tar }} # 這里用{{...}}引用
    - source: {{ keepalived_source }}
    - mode: 755
    - user: root
    - group: root
  cmd.run:
    - name: cd /usr/local/src && tar zxf keepalived-1.2.17.tar.gz && cd keepalived-1.2.17 && ./configure --prefix=/usr/local/keepalived --disable-fwmark && make && make install
    - unless: test -d /usr/local/keepalived
    - require:
      - file: keepalived-install

2)模板引用
這里我們以keepalived自定義配置文件為例(keepalived的master和backup優(yōu)先級還有routeid要單獨(dú)指定)戈鲁,演示jinja在saltstack中的作用
我們以修改在進(jìn)行配置模板引用的時候分三個步驟
a. 告訴模塊,你使用的使用的是jinja模板
b. 你出你要的參數(shù)列表

[root@linux-node2 cluster]# vim haproxy-outside-keepalived.sls

keepalived-server:
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://cluster/files/haproxy-outside-keepalived.conf
    - mode: 644
    - user: root
    - group: root
    - template: jinja # 告訴模板文件嘹叫,這是一個jinja模板
    {% if grains['fqdn'] == 'saltstack-node1.lichengbing.cn' %} # 這里是借助grains自定義
如果hostname為saltstack-node1.lichengbing.cn的主機(jī)定義以下參數(shù)
    - ROUTEID: haproxy_ha # 列出我們要自定義的參數(shù)
    - STATEID: MASTER
    - PRIORITYID: 150
    {% elif grains['fqdn'] == 'saltstack-node2.lichengbing.cn' %}
    - ROUTEID: haproxy_ha
    - STATEID: BACKUP
    - PRIORITYID: 100
    {% endif %}

c. 最后再進(jìn)行模板引用

[root@linux-node2 files]# vim haproxy-outside-keepalived.conf

global_defs {
   notification_email {
     saltstack@example.com
   }
   notification_email_from keepalived@example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id {{ROUTEID}} # 引用定義好的參數(shù)ROUTEID
}
vrrp_instance haproxy_ha {
state {{STATEID}} # 引用定義好的參數(shù)STATEID
interface eth0
    virtual_router_id 36
priority {{PRIORITYID}} # 引用定義好的參數(shù)PRIORITYI
    advert_int 1
authentication {
auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       10.0.0.179
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婆殿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罩扇,更是在濱河造成了極大的恐慌婆芦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喂饥,死亡現(xiàn)場離奇詭異消约,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)员帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門或粮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人集侯,你說我怎么就攤上這事被啼。” “怎么了棠枉?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泡挺。 經(jīng)常有香客問我辈讶,道長,這世上最難降的妖魔是什么娄猫? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任贱除,我火速辦了婚禮,結(jié)果婚禮上媳溺,老公的妹妹穿的比我還像新娘月幌。我一直安慰自己,他們只是感情好悬蔽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布扯躺。 她就那樣靜靜地躺著,像睡著了一般蝎困。 火紅的嫁衣襯著肌膚如雪录语。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天禾乘,我揣著相機(jī)與錄音澎埠,去河邊找鬼。 笑死始藕,一個胖子當(dāng)著我的面吹牛蒲稳,可吹牛的內(nèi)容都是我干的氮趋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼江耀,長吁一口氣:“原來是場噩夢啊……” “哼凭峡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起决记,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤摧冀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后系宫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體索昂,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年扩借,在試婚紗的時候發(fā)現(xiàn)自己被綠了椒惨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡潮罪,死狀恐怖康谆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫉到,我是刑警寧澤沃暗,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站何恶,受9級特大地震影響孽锥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜细层,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一惜辑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疫赎,春花似錦盛撑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至实牡,卻和暖如春陌僵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背创坞。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工碗短, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人题涨。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓偎谁,卻偏偏與公主長得像总滩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巡雨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理闰渔,服務(wù)發(fā)現(xiàn),斷路器铐望,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 學(xué)習(xí)地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt簡...
    J書越來越垃圾了閱讀 30,849評論 9 36
  • 關(guān)于冈涧,SaltStack 這個牛逼的配置管理神器,上周我寫了篇入門級的 《SaltStack 一日游》正蛙。 今天督弓,深...
    hxzqlh閱讀 2,493評論 0 1
  • 內(nèi)心有種莫名的觸動, 說不清乒验, 但總是想要掉眼淚愚隧。 靈魂安逸, 空氣安靜锻全, 蟬鳴也安靜狂塘。 連立秋之后高居不下的溫度...
    陳如也閱讀 165評論 0 2