saltstack常用模塊

常用模塊:cmd, cron, file, mount, ntp, pkg, service, user, group

先看一個(gè)簡(jiǎn)單的例子:

salt:
  pkg.latest:
    - name: salt
  service.running:
    - names:                     #多個(gè)值,一行一個(gè),且為names,復(fù)數(shù)
      - salt-master
      - salt-minion
    - require:
      - pkg: salt
    - watch:
      - file: /etc/salt/minion
 
/etc/salt/minion:
  file.managed:
    - source: salt://salt/minion
    - user: root
    - group: root
    - mode: 644
    - require:
      - pkg: salt
       
 
##一個(gè)小的注意:
/dbdata:
  file.directory:               #如果只有一個(gè)函數(shù),這樣寫是錯(cuò)誤的
要改成:
/dbdata:
  file:
    - directory

cmd模塊

name:要執(zhí)行的命令,記住該命令將會(huì)在salt-minion的路徑和權(quán)限下執(zhí)行
onlyif:用于檢查的命令,僅當(dāng)``onlyif``選項(xiàng)指向的命令返回true時(shí)才執(zhí)行name定義的命令
unless:用于檢查的命令,僅當(dāng)``unless``選項(xiàng)指向的命令返回false時(shí)才執(zhí)行name指向的命令
cwd:執(zhí)行命令時(shí)的當(dāng)前工作目錄,默認(rèn)是/root
user:以指定用戶身份運(yùn)行命令
group:以指定用戶組身份運(yùn)行命令
shell:用于執(zhí)行命令的shell,默認(rèn)shell grain
run:運(yùn)行name后的命令      
[root@test81 ~]# cat install.sls 
nginx_source:
  file.managed:
    - name: /tmp/nginx-1.4.5.tar.gz
    - unless: test -f /tmp/nginx-1.4.5.tar.gz       ##若minion端不存在/tmp/nginx-1.4.5.tar.gz這個(gè)文件,才會(huì)執(zhí)行這個(gè)file模塊
    - source: salt://nginx/files/nginx-1.4.5.tar.gz
 
tar_nginx:
  cmd.run:
    - cwd: /usr/local/src                              ##當(dāng)前工作目錄
    - name: tar zxvf nginx-1.4.5.tar.gz
    - unless: test -d /usr/local/src/nginx-1.4.5       ##若minion端不存在/usr/local/src/nginx-1.4.5 這個(gè)目錄,才會(huì)執(zhí)行name后命令
    - require:
      - file: nginx_source
##unless:后面的條件不滿足(條件為假)時(shí)才會(huì)執(zhí)行
##onlyif:條件為真時(shí)執(zhí)行
ntpdate_cron:
  cron:
    - present
    - name: /usr/sbin/ntpdate pool.ntp.org
    - minute: '*/30'
    - require:
      - cmd: isntp
 
isntp:
  cmd:
    - run
    - name: yum -y install ntp
    - unless: test ! -z `rpm -qa ntp`          ##反逗點(diǎn)調(diào)用shell命令(tab鍵上面那個(gè))

cron模塊

minute:分
hour:時(shí)
daymonth:日
month:月
dayweek:周
user:用戶名
present:創(chuàng)建計(jì)劃任務(wù)
name:計(jì)劃任務(wù)內(nèi)容
[root@scj cron]# cat cron.sls 
mysql_cron:
  cron:
    - present
    - name: cd /tmp/scripts;./mysql_backup.sh
    - user: root
    - minute: 0
    - hour: 1
    #- daymonth: 
    #- month:
    #- dayweek:
    #- minute: "*/5"
##修改計(jì)劃任務(wù):
##如上面的例子:
mysql_cron:
  cron:
    - present
    - name: cd /tmp/scripts;./mysql_backup.sh
    - user: root
    - minute: 0
    - hour: 2                #將1改為2
    #- daymonth: 
    #- month:
    #- dayweek:
    #- minute: "*/5" 
注意:以name后面的命令為主
     可以理解為name后面的命令是唯一鍵
     若把name后面的命令改了,則是重新創(chuàng)建了一個(gè)計(jì)劃任務(wù)
 
##刪除一個(gè)計(jì)劃任務(wù):
##如上面的例子:
mysql_cron:
  cron:
    - absent            ##absent刪除計(jì)劃任務(wù)
    - name: cd /tmp/scripts;./mysql_backup.sh      ##只要保證name后命令不變,能匹配到
    - user: root
    - minute: 0
    - hour: 2  
    #- daymonth: 
    #- month:
    #- dayweek:
    #- minute: "*/5"

file模塊:只有file模塊才能用template函數(shù)

.sls文件1:
/tmp/salt/:
  file:
    - directory                 #目錄不存在,則創(chuàng)建目錄
    - name: /tmp/salt/
    - user: nobody
    - group: nobody
    - file_mode: 644            #與recurse遞歸函數(shù)一起用
    - dir_mode: 755             #文件權(quán)限644,目錄權(quán)限755
    - makedirs: True
    - recurse:                 #遞歸目錄權(quán)限,包括用戶和權(quán)限
      - user                   #若本來(lái)此目錄就存在,且此目錄下有很多文件,則recurse函數(shù)會(huì)把此目錄和目錄下的所有文件的權(quán)限都修改(nobody 644 755)
      - group
      - mode                   #文件644,目錄755,就是上面的file_mode和dir_mode
      #- ignore_files           #忽略文件
      #- ignore_dirs
 
/tmp/salt/file:
  file:
    - managed                   #創(chuàng)建文件
    - name: /tmp/salt/file
    - source: salt://web/files/httpd.conf
    - user: nobody
    - group: nobody               #若此文件本來(lái)就存在,則會(huì)修改此文件的權(quán)限(nobody 644)
    - mode: 644
    #- backup: minion
    #- template: jinja          #調(diào)用pillar變量和grains變量
    - require:
      - file: /tmp/salt/
    
 
.sls文件2:
{% set site_user = 'testuser' %}         #定義變量
{% set site_name = 'test_site' %}
{% set project_name = 'test_proj' %}
{% set sites_dir = 'test_dir' %}
django-project:
  file.recurse:
    - name: {{ sites_dir }}/{{ site_name }}/{{ project_name }}
    - user: {{ site_user }}              #直接調(diào)用變量
    - dir_mode: 2775
    - file_mode: '0644'
    - template: jinja                   #指定template: jinja
    - source: salt://project/templates_dir
    - include_empty: True 
     
 
 
.sls文件3:
/etc/http/conf/http.conf:
  file.managed:
    - source: salt://apache/http.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:               #默認(rèn)變量,多個(gè)一行一個(gè)
        custom_var: "default value"        #這些變量將會(huì)在salt://apache/http.conf這個(gè)文件里使用
        other_var: 123
{% if grains['os'] == 'Ubuntu' %}          ##if語(yǔ)句要定格##
    - context:                #以context下的變量為準(zhǔn),沒有時(shí)再用defaults下的變量
        custom_var: "override"      #這里以這個(gè)變量為準(zhǔn),defaults里的是無(wú)效的
{% endif %}
 
.sls文件4:
/tmp/dir1/file1:
  file:
    - managed
    - makedirs: True
##若minion端沒有dir1目錄,使用makedirs函數(shù)可以直接創(chuàng)建dir1目錄,再創(chuàng)建file1文件

group模塊:

absent:刪除用戶組
name:與absent一起用,則是刪除的用戶組名
present:管理用戶組,不存在則創(chuàng)建;存在則管理其屬性
name:與present一起用,則是被管理的用戶組名
##下面的屬性全都是與present一起用的##
gid:組ID分配給命名組;如果留空,那么下一個(gè)可用的組ID將被分配
system:命名組是否是一個(gè)系統(tǒng)組,這本質(zhì)上是groupadd“-r”選項(xiàng)
addusers:添加更多的用戶列表作為組成員
delusers:確保這些用戶從組成員中刪除
members:用新成員的名單替換現(xiàn)有組成員。
##注:選項(xiàng)'members'和'adduser/delusers'是相互排斥的,不能一起使用
cheese:
  group.present:            #用戶組不存在,則創(chuàng)建;若存在,則管理,包括將用戶添加到此組中或?qū)⒂脩魪慕M中移除
    - gid: 7648
    - system: True
    - addusers:
      - user1               #將user1添加到組中
      - users2
    - delusers:
      - foo
 
       
cheese:
  group.present:
    - gid: 7648
    - system: True
    - members:              #只有這4個(gè)用戶屬于這個(gè)組
      - foo
      - bar
      - user1
      - user2

mount模塊:

/mnt/sdb:                        #標(biāo)識(shí),沒有name函數(shù)則表示掛載點(diǎn)
  mount.mounted:
    - device: /dev/sdb1          #掛載的設(shè)備名
    #- name: /mnt/sdb            #掛載點(diǎn)
    - fstype: ext4
    - mkmnt: True                #掛載點(diǎn)不存在則自動(dòng)創(chuàng)建,最好將其設(shè)置為True
    - opts:
      - defaults
 
/srv/bigdata:
  mount:
    - mounted:
    - device: UUID=066e0200-2867-4ebe-b9e6-f30026ca2314
    - fstype: xfs
    - opts: nobootwait,noatime,nodiratime,nobarrier,logbufs=8
    #- dump: 0               #默認(rèn)是0
    #- pass_num: 2           #默認(rèn)是0
    #- persist: True         #是不是將其寫入/etc/fstab文件里,默認(rèn)是True,寫入
    - mkmnt: True
     
##dump: The dump value to be passed into the fstab, Default is 0
##pass_num: The pass value to be passed into the fstab, Default is 0

pkg模塊:

mypkgs:
  pkg.installed:
    - pkgs:              #安裝多個(gè)軟件包,用pkgs函數(shù),一行一個(gè)
      - gcc
      - cmake
      - make
    #- name: httpd       #安裝的軟件包名,與pkgs一起用時(shí),此函數(shù)將被忽略
     
##installed:安裝軟件包
##latest:將軟件更新到最新
##removed:卸載軟件包
##pkgs:安裝多個(gè)軟件包時(shí),一次全部安裝(推薦)
##names:安裝多個(gè)軟件包時(shí),一次安裝一個(gè),需安裝多次(不推薦)

service模塊:

httpd:
  service:
    - running               #使服務(wù)處于運(yùn)行狀態(tài)
    - enable: True          #設(shè)置開機(jī)自動(dòng)啟動(dòng)
    - reload: True          #watch函數(shù)下監(jiān)控的/etc/httpd/conf/httpd.conf文件發(fā)生變化,則會(huì)重新加載reload;若reload函數(shù)不存在或reload值為False,則會(huì)重新啟動(dòng)restart
    - watch:
      - file: /etc/httpd/conf/httpd.conf
    - require:
      - pkg: httpd
       
##dead:使服務(wù)處于stop狀態(tài)
 
##reload值為True:
          ID: httpd
    Function: service.running
      Result: True
     Comment: Service reloaded            ##reload服務(wù)
     Started: 14:56:31.920445
    Duration: 1702.923 ms
     Changes:   
              ----------
              httpd:
                  True
                   
##不存在reload函數(shù)或reload值為False:
          ID: httpd
    Function: service.running
      Result: True
     Comment: Service restarted           ##restart服務(wù)
     Started: 14:58:05.723261
    Duration: 1193.026 ms
     Changes:   
              ----------
              httpd:
                  True

user模塊:

user1:
  user:
    - present
    #- name: user1
    #- home: /home/user1
    #- shell: /bin/bash
    - uid: 600
    - gid: 600
    - system: True               #設(shè)置為系統(tǒng)用戶
    - groups:                    #設(shè)置用戶的所屬組
      - nobody                   #把user1用戶加入到nobody組中,且僅屬于nobody組;如果用戶原本在jeff組中,執(zhí)行后用戶只在nobody組中,不再屬于jeff組了
      #- group1
       
##absent:刪除用戶
##force:強(qiáng)制刪除用戶(即便用戶正在登陸)

公司新來(lái)個(gè)員工在服務(wù)器上添加普通賬號(hào):

##先創(chuàng)建MD5加密密碼
[root@dbm133 ~]# openssl passwd -1 -salt 'shencj'       ##用戶名,如這個(gè)shencj用戶可以不存在;但是必須和下面創(chuàng)建的新用戶對(duì)應(yīng)
Password:                                               ##輸入密碼
$1$shencj$i3JtzHYM7hFcNP63VLK..1                        ##生成的加密密碼
##定義pillar變量
[root@dbm133 ~]# cat /srv/pillar/user/init.sls 
username: shencj
password: '$1$shencj$i3JtzHYM7hFcNP63VLK..1'
##創(chuàng)建state的.sls文件
[root@dbm133 ~]#cat /srv/salt/user/adduser.sls
{{ pillar['username'] }}:
  user:
    - present
#    - uid: 1001
#    - gid: 1001
    - password: {{ pillar['password'] }}
    - groups:
      - nobody
 
/home/{{ pillar['username'] }}/.ssh:
  file:
    - directory
    - require:
      - user: {{ pillar['username'] }}
 
/home/{{ pillar['username'] }}/.ssh/authorized_keys:
  file:
    - managed
    - source: salt://files/authorized_keys
    - mode: 400
    - user: {{ pillar['username'] }}
    - group: {{ pillar['username'] }}
    - require:
      - file: /home/{{ pillar['username'] }}/.ssh
##master端數(shù)據(jù)推送
[root@dbm133 ~]# salt '*' state.sls user.adduser
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Saltstack提供了非常豐富的功能模塊,涉及操作系統(tǒng)的基礎(chǔ)功能、常用工具支持等,更多模塊信息可以查看官網(wǎng)模塊介...
    六弦極品閱讀 1,735評(píng)論 0 1
  • 一、test 模塊 二、salt-run:查看minion狀態(tài) 三、salt-cp:分發(fā)文件到minion端(不能...
    w也不知道閱讀 655評(píng)論 0 0
  • saltstack常用模塊及API 列出當(dāng)前版本支持的模塊 API原理是通過調(diào)用master client模塊,實(shí)...
    很少更新了閱讀 524評(píng)論 0 3
  • 一、項(xiàng)目目標(biāo) 搭建一個(gè)高可用web集群網(wǎng)站 二、項(xiàng)目規(guī)劃 2.1 ip地址規(guī)劃 2.2 拓?fù)鋱D 2.3 相關(guān)說明 ...
    夏日之光閱讀 3,709評(píng)論 0 1
  • 人生,就是需要一場(chǎng)說走就走的旅行。 九月九日又重陽(yáng),花舞人間來(lái)賞菊。 前兩天,幾個(gè)同事聚在一起,想著陽(yáng)光很好,我們...
    箜溪曉閱讀 401評(píng)論 2 4