經常使用執行模塊html
全部執行模塊: http://docs.saltstack.cn/zh_CN/latest/ref/states/all/index.htmlmysql
經常使用模塊:cmd, cron, file, mount, ntp, pkg, service, user, groupnginx
##先看一個簡單的例子: salt: pkg.latest: - name: salt service.running: - names: #多個值,一行一個,且爲names,複數 - 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: #若是隻有一個函數,這樣寫是錯誤的 要改爲: /dbdata: file: - directory
cmd模塊:web
name:要執行的命令,記住該命令將會在salt-minion的路徑和權限下執行 onlyif:用於檢查的命令,僅當``onlyif``選項指向的命令返回true時才執行name定義的命令 unless:用於檢查的命令,僅當``unless``選項指向的命令返回false時才執行name指向的命令 cwd:執行命令時的當前工做目錄,默認是/root user:以指定用戶身份運行命令 group:以指定用戶組身份運行命令 shell:用於執行命令的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這個文件,纔會執行這個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 這個目錄,纔會執行name後命令 - require: - file: nginx_source ##unless:後面的條件不知足(條件爲假)時纔會執行 ##onlyif:條件爲真時執行
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` ##反逗點調用shell命令(tab鍵上面那個)
cron模塊:sql
minute:分 hour:時 daymonth:日 month:月 dayweek:周 user:用戶名 present:建立計劃任務 name:計劃任務內容 [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後面的命令改了,則是從新建立了一個計劃任務 ##刪除一個計劃任務: ##如上面的例子: 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模塊:shell
注意:只有file模塊裏纔可使用template函數apache
.sls文件1: /tmp/salt/: file: - directory #目錄不存在,則建立目錄 - name: /tmp/salt/ - user: nobody - group: nobody - file_mode: 644 #與recurse遞歸函數一塊兒用 - dir_mode: 755 #文件權限644,目錄權限755 - makedirs: True - recurse: #遞歸目錄權限,包括用戶和權限 - user #若原本此目錄就存在,且此目錄下有不少文件,則recurse函數會把此目錄和目錄下的全部文件的權限都修改(nobody 644 755) - group - mode #文件644,目錄755,就是上面的file_mode和dir_mode #- ignore_files #忽略文件 #- ignore_dirs /tmp/salt/file: file: - managed #建立文件 - name: /tmp/salt/file - source: salt://web/files/httpd.conf - user: nobody - group: nobody #若此文件原本就存在,則會修改此文件的權限(nobody 644) - mode: 644 #- backup: minion #- template: jinja #調用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 }} #直接調用變量 - 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函數能夠直接建立dir1目錄,再建立file1文件
group模塊:django
absent:刪除用戶組 name:與absent一塊兒用,則是刪除的用戶組名 present:管理用戶組,不存在則建立;存在則管理其屬性 name:與present一塊兒用,則是被管理的用戶組名 ##下面的屬性全都是與present一塊兒用的## gid:組ID分配給命名組;若是留空,那麼下一個可用的組ID將被分配 system:命名組是不是一個系統組,這本質上是groupadd「-r」選項 addusers:添加更多的用戶列表做爲組成員 delusers:確保這些用戶從組成員中刪除 members:用新成員的名單替換現有組成員。 ##注:選項'members'和'adduser/delusers'是相互排斥的,不能一塊兒使用 cheese: group.present: #用戶組不存在,則建立;若存在,則管理,包括將用戶添加到此組中或將用戶從組中移除 - gid: 7648 - system: True - addusers: - user1 #將user1添加到組中 - users2 - delusers: - foo cheese: group.present: - gid: 7648 - system: True - members: #只有這4個用戶屬於這個組 - foo - bar - user1 - user2
iptables模塊:bash
lvm模塊:
/dev/sda: lvm: - pv_present #建立pv #-name: /dev/sda my_vg: lvm.vg_present: #建立vg - devices: /dev/sda #指定pv lvroot: lvm.lv_present: - vgname: my_vg #指定vg - name: lvroot - size: 10G #- stripes: 5 #- stripesize: 8K
mount模塊:
/mnt/sdb: #標識,沒有name函數則表示掛載點 mount.mounted: - device: /dev/sdb1 #掛載的設備名 #- name: /mnt/sdb #掛載點 - fstype: ext4 - mkmnt: True #掛載點不存在則自動建立,最好將其設置爲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函數,一行一個 - gcc - cmake - make #- name: httpd #安裝的軟件包名,與pkgs一塊兒用時,此函數將被忽略 ##installed:安裝軟件包 ##latest:將軟件更新到最新 ##removed:卸載軟件包 ##pkgs:安裝多個軟件包時,一次所有安裝(推薦) ##names:安裝多個軟件包時,一次安裝一個,需安裝屢次(不推薦)
service模塊:
httpd: service: - running #使服務處於運行狀態 - enable: True #設置開機自動啓動 - reload: True #watch函數下監控的/etc/httpd/conf/httpd.conf文件發生變化,則會從新加載reload;若reload函數不存在或reload值爲False,則會從新啓動restart - watch: - file: /etc/httpd/conf/httpd.conf - require: - pkg: httpd ##dead:使服務處於stop狀態 ##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函數或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 #設置爲系統用戶 - groups: #設置用戶的所屬組 - nobody #把user1用戶加入到nobody組中,且僅屬於nobody組;若是用戶本來在jeff組中,執行後用戶只在nobody組中,再也不屬於jeff組了 #- group1 ##absent:刪除用戶 ##force:強制刪除用戶(即使用戶正在登錄)
實例:
公司來新的員工,須要在全部的服務器上添加一個普通帳號:
##先建立MD5加密密碼 [root@dbm133 ~]# openssl passwd -1 -salt 'shencj' ##用戶名,如這個shencj用戶能夠不存在;可是必須和下面建立的新用戶對應 Password: ##輸入密碼 $1$shencj$i3JtzHYM7hFcNP63VLK..1 ##生成的加密密碼
##定義pillar變量 [root@dbm133 ~]# cat /srv/pillar/user/init.sls username: shencj password: '$1$shencj$i3JtzHYM7hFcNP63VLK..1'
##建立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端數據推送 [root@dbm133 ~]# salt '*' state.sls user.adduser