(三)、通過state模塊定義主機(jī)狀態(tài)

一、state和之前執(zhí)行模塊的區(qū)別

執(zhí)行模塊是過程式的,而狀態(tài)模塊是描述式的。當(dāng)連續(xù)幾次調(diào)用同一個執(zhí)行模塊時,實(shí)際上是執(zhí)行相同的邏輯和指令。狀態(tài)模塊則恰恰相反,它們只執(zhí)行必要的工作,在目標(biāo)minion上創(chuàng)建根據(jù)描述文件指定的狀態(tài)。

連續(xù)執(zhí)行 pkg.install
連續(xù)執(zhí)行 state配置
# /srv/salt/vsftpd.sls
install_vsftpd:
    pkg.installed:
        - name: vsftpd

從上面的例子上可以看到 pkg.install 只是運(yùn)行了 yum install vsftpd -y 的命令,而 state 模塊會先判斷 vsftpd 軟件是否已經(jīng)安裝了,如果沒有安裝就進(jìn)行安裝操作,如果已經(jīng)安裝過了就什么都不做。所有的狀態(tài)描述都會遵循這個原則,只有在檢測到真實(shí)狀態(tài)和所需狀態(tài)不同的時候才會執(zhí)行功能。

二、state模塊的語法

SLS配置文件使用YAML語言描述,主要有以下規(guī)則:

  • 1、縮進(jìn):YAML使用了固定的縮進(jìn)風(fēng)格來表示數(shù)據(jù)層級的關(guān)系(和Python用縮進(jìn)來進(jìn)行流程控制一樣),每個縮進(jìn)級別可以使用2個或者4個空格(不要用制表符)
  • 2、冒號:字典中的keys在YAML中的表現(xiàn)形式是一個以冒號結(jié)尾的字符串,value的表現(xiàn)形式是冒號后面空一格然后寫value
key: value

在python中,上面的將映射為下面的字典

{'key': 'value'}
  • 3、短橫杠:用一個短橫杠加一個空格來表示列表項(xiàng),多個項(xiàng)使用同一個縮進(jìn)級別作為同一列表的一部分。
my_list:
  - value_one
  - value_two
  - vlaue_three

在python中,上面的將映射為下面的結(jié)構(gòu)

{'my_list':['value_one','value_two','value_three']}

三、常用狀態(tài)模塊的語法

先介紹兩個命令

salt '*' sys.list_state_functions #查看可用的狀態(tài)模塊

salt '*' sys.list_state_functions pkg #查看狀態(tài)模塊中可用的函數(shù)
  1. cmd 和 archive 狀態(tài)模塊常用函數(shù)
extract_myapp:
    archive.extracted:
        - name: /usr/src #解壓文件在minion上的位置

        # 解壓zip文件
        # - use_cmd_unzip: True
        # - source: salt://src/nginx-1.12.1.zip #要解壓的文件的位置
        
        - source: salt://src/nginx-1.12.2.tar.gz #要解壓的文件的位置
        - user: root
        - group: root
        - if_missing: /usr/src/nginx-1.12.2
cmd_test:
    cmd.run:
        - cwd: /usr/src #執(zhí)行命令的目錄
        - name: pwd && date #多條命令一定要用&&,不要一條一條執(zhí)行
  1. file 狀態(tài)模塊的常用函數(shù)
# file.managed: 下發(fā)文件到指定minion,確保文件存在
/usr/src/vsftpd.sls: # 發(fā)送到minion上的位置
    file.managed:
        - source:
            - salt://vsftpd.sls
        - user: root
        - group: root
        - mode: 644

# file.directory: 在指定minion上創(chuàng)建文件夾
/tmp/mk_salt:
    file.directory:
        - user: root
        - group: root
        - mode: 755
        - makedirs: True

# file.recurse: 下發(fā)整個目錄
/root/httpd: #發(fā)送到minion上的目錄位置
    file.recurse:
        - source: salt://service/httpd
        - include_empty: True
# file.symlink: 建立軟連接
/tmp/test: # 鏈接文件位置
    file.symlink:
        - target: /root/httpd/test # 源文件位置
  1. pkg 狀態(tài)模塊的常用函數(shù)
install_vsftpd:
    pkg.installed: # yum安裝軟件
        - pkgs:
            - vsftpd
            - ftp
            - lftp
        - sources: #指定rpm包的位置
            - httpd: salt://rpm/httpd.rpm
  1. service 狀態(tài)模塊常用函數(shù)
run_vsftpd:
    service.running:
        - name: vsftpd #啟動的服務(wù)名
        - enable: True #是否開機(jī)自啟
        - reload: True
  1. cron 狀態(tài)模塊常用函數(shù)
netdate times.aliyun.com &>/dev/null:
    cron.present:
        - user: root
        - minute: '6'
        - hour: '5'
        - daymonth: '6'
        - month: '12'
        - dayweek: 5
  1. user 狀態(tài)模塊常用函數(shù)
add_user:
    user.present:
        - name: hong #要添加的用戶名
        - fullname: This is test user #用戶說明信息
        - shell: /bin/zsh
        - createhome: True # 創(chuàng)建家目錄,F(xiàn)alse時不創(chuàng)建
        - password: $1$f7Mff5j4$H/10mh4IkqgY9y39EKHTj1 # 用戶密碼,用 openssl passwd -l '密碼' 命令來生成
        - groups: # 用戶附加組
            - root
            - daemon
  1. 使用 require 和 watch 進(jìn)行排序控制
    ??require:只有以來的步驟操作成功后才開始進(jìn)行本步驟
    ??watch:一旦檢測到 vsftpd.conf 文件發(fā)生變化,就重新加載 vsftpd 服務(wù)
install_vsftpd:
    pkg.installed:
        - pkgs:
            - vsftpd
            - ftp
            - lftp

run_vsftpd:
    service.running:
        - name: vsftpd #啟動的服務(wù)名
        - enable: True #是否開機(jī)自啟
        - reload: True
        - require:
            - pkg: install_vsftpd
        - watch:
            - file: vsftpd_conf 

vsftpd_conf:
    file.managed:
        - name: /etc/vsftpd/vsftpd.conf
        - source: salt://vsftpd.conf
        - user: root
        - group: root
        - mode: 600

四、使用狀態(tài)模塊yum安裝 LAMP 環(huán)境

apache_install:
    pkg.installed:
        - name: httpd

mysql_install:
    pkg.installed:
        - pkgs:
            - mysql-server
            - mysql
            - mysql-devel

php_install:
    pkg.installed:
        - pkgs:
            - php
            - php-common
            - php-gd
            - php-mbstring
            - php-mcrypt
            - php-devel
            - php-xml
            - php-soap
        - require:
            - pkg: apache_install


httpd_conf:
    file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://httpd.conf
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: apache_install

php_conf:
    file.managed:
        - name: /etc/php.ini
        - source: salt://php.ini
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: php_install

mysql_conf:
    file.managed:
        - name: /etc/my.cnf
        - source: salt://my.cnf
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: mysql_install

apache_run:
    service.running:
        - name: httpd
        - enable: True
        - reload: True
        - require:
            - pkg: apache_install
        - watch:
            - file: httpd_conf
            - file: php_conf

mysql_run:
    service.running:
        - name: mysqld
        - enable: True
        - reload: True
        - require:
            - pkg: mysql_install
        - watch:
            - file: mysql_conf
LAMP狀態(tài)模塊部署結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,644評論 19 139
  • 學(xué)習(xí)地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt簡...
    J書越來越垃圾了閱讀 31,209評論 9 36
  • 什么是state模塊? 遠(yuǎn)程執(zhí)行是salt的核心所在。 管理員可與通過執(zhí)行遠(yuǎn)程執(zhí)行模塊,達(dá)到對minion的控制(...
    風(fēng)逍H閱讀 958評論 0 0
  • 步入18的我 有些許不一樣了 爸媽口中的我已經(jīng)長大了 別人眼中的我是一個大姑娘了 而我眼中的自己要開始另一種人生了...
    北港時遇閱讀 299評論 0 0
  • 人們過往總結(jié)出來的經(jīng)驗(yàn)教訓(xùn)很多時候都值得我們?nèi)W(xué)習(xí),因?yàn)椤敖?jīng)驗(yàn)有一個結(jié)構(gòu),別人能,我也能”?!敖虠l主義”和...
    玄奇閱讀 542評論 0 0

友情鏈接更多精彩內(nèi)容