saltstack常用模塊

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

先看一個簡單的例子:

salt:
  pkg.latest:
    - name: salt
  service.running:
    - names:                     #多個值,一行一個,且為names,復數(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
       
 
##一個小的注意:
/dbdata:
  file.directory:               #如果只有一個函數(shù),這樣寫是錯誤的
要改成:
/dbdata:
  file:
    - directory

cmd模塊

name:要執(zhí)行的命令,記住該命令將會在salt-minion的路徑和權(quán)限下執(zhí)行
onlyif:用于檢查的命令,僅當``onlyif``選項指向的命令返回true時才執(zhí)行name定義的命令
unless:用于檢查的命令,僅當``unless``選項指向的命令返回false時才執(zhí)行name指向的命令
cwd:執(zhí)行命令時的當前工作目錄,默認是/root
user:以指定用戶身份運行命令
group:以指定用戶組身份運行命令
shell:用于執(zhí)行命令的shell,默認shell grain
run:運行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這個文件,才會執(zhí)行這個file模塊
    - source: salt://nginx/files/nginx-1.4.5.tar.gz
 
tar_nginx:
  cmd.run:
    - cwd: /usr/local/src                              ##當前工作目錄
    - 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 這個目錄,才會執(zhí)行name后命令
    - require:
      - file: nginx_source
##unless:后面的條件不滿足(條件為假)時才會執(zhí)行
##onlyif:條件為真時執(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ào)用shell命令(tab鍵上面那個)

cron模塊

minute:分
hour:時
daymonth:日
month:月
dayweek:周
user:用戶名
present:創(chuàng)建計劃任務
name:計劃任務內(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"
##修改計劃任務:
##如上面的例子:
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)建了一個計劃任務
 
##刪除一個計劃任務:
##如上面的例子:
mysql_cron:
  cron:
    - absent            ##absent刪除計劃任務
    - 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                   #若本來此目錄就存在,且此目錄下有很多文件,則recurse函數(shù)會把此目錄和目錄下的所有文件的權(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               #若此文件本來就存在,則會修改此文件的權(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:               #默認變量,多個一行一個
        custom_var: "default value"        #這些變量將會在salt://apache/http.conf這個文件里使用
        other_var: 123
{% if grains['os'] == 'Ubuntu' %}          ##if語句要定格##
    - context:                #以context下的變量為準,沒有時再用defaults下的變量
        custom_var: "override"      #這里以這個變量為準,defaults里的是無效的
{% 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分配給命名組;如果留空,那么下一個可用的組ID將被分配
system:命名組是否是一個系統(tǒng)組,這本質(zhì)上是groupadd“-r”選項
addusers:添加更多的用戶列表作為組成員
delusers:確保這些用戶從組成員中刪除
members:用新成員的名單替換現(xiàn)有組成員。
##注:選項'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個用戶屬于這個組
      - foo
      - bar
      - user1
      - user2

mount模塊:

/mnt/sdb:                        #標識,沒有name函數(shù)則表示掛載點
  mount.mounted:
    - device: /dev/sdb1          #掛載的設備名
    #- name: /mnt/sdb            #掛載點
    - fstype: ext4
    - mkmnt: True                #掛載點不存在則自動創(chuàng)建,最好將其設置為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               #默認是0
    #- pass_num: 2           #默認是0
    #- persist: True         #是不是將其寫入/etc/fstab文件里,默認是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:              #安裝多個軟件包,用pkgs函數(shù),一行一個
      - gcc
      - cmake
      - make
    #- name: httpd       #安裝的軟件包名,與pkgs一起用時,此函數(shù)將被忽略
     
##installed:安裝軟件包
##latest:將軟件更新到最新
##removed:卸載軟件包
##pkgs:安裝多個軟件包時,一次全部安裝(推薦)
##names:安裝多個軟件包時,一次安裝一個,需安裝多次(不推薦)

service模塊:

httpd:
  service:
    - running               #使服務處于運行狀態(tài)
    - enable: True          #設置開機自動啟動
    - reload: True          #watch函數(shù)下監(jiān)控的/etc/httpd/conf/httpd.conf文件發(fā)生變化,則會重新加載reload;若reload函數(shù)不存在或reload值為False,則會重新啟動restart
    - watch:
      - file: /etc/httpd/conf/httpd.conf
    - require:
      - pkg: httpd
       
##dead:使服務處于stop狀態(tài)
 
##reload值為True:
          ID: httpd
    Function: service.running
      Result: True
     Comment: Service reloaded            ##reload服務
     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服務
     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               #設置為系統(tǒng)用戶
    - groups:                    #設置用戶的所屬組
      - nobody                   #把user1用戶加入到nobody組中,且僅屬于nobody組;如果用戶原本在jeff組中,執(zhí)行后用戶只在nobody組中,不再屬于jeff組了
      #- group1
       
##absent:刪除用戶
##force:強制刪除用戶(即便用戶正在登陸)

公司新來個員工在服務器上添加普通賬號:

##先創(chuàng)建MD5加密密碼
[root@dbm133 ~]# openssl passwd -1 -salt 'shencj'       ##用戶名,如這個shencj用戶可以不存在;但是必須和下面創(chuà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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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

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