死磕salt系列-salt 常用modules


saltstack 常用模塊介紹

file模塊

被控主機文件常見操作,包括文件讀寫、權限、查找、校驗等

salt '*' file.get_sum /etc/resolv.conf md5
salt '*' file.stats /etc/resolv.conf

file.managed-文件管理

先來一個實例

/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"
        other_var: 123
{% if grains['os'] == 'Ubuntu' %}
    - context:
        custom_var: "override"
{% endif %}

source-指定源文件

source參數可以作為一個列表指定。如果這樣做的話,那么會使用第一個匹配到的文件。這個特性允許你如果請求的文件不存在於salt文件服務器時有一個默認的文件回溯。

/etc/foo.conf:
  file.managed:
    - source:
      - salt://foo.conf.{{ grains['fqdn'] }}
      - salt://foo.conf.fallback
    - user: foo
    - group: users
    - mode: 644
    - backup: minion

source 參數同樣可以指定一個在另一個Salt環境的文件。在這個例子中 foo.conf 將會使用 dev 環境中的來替代。

/etc/foo.conf:
  file.managed:
    - source:
      - salt://foo.conf?saltenv=dev
    - user: foo
    - group: users
    - mode: '0644'

file.directory-目錄管理

創建目錄

/srv/stuff/substuf:
  file.directory:
    - user: fred
    - group: users
    - mode: 755
    - makedirs: True

使用 dir_mode 和 file_mode,同時指定目錄和文件的權限。

/srv/stuff/substuf:
  file.directory:
    - user: fred
    - group: users
    - file_mode: 744
    - dir_mode: 755
    - makedirs: True
    - recurse:
      - user
      - group
      - mode

file.recurse - 遞歸目錄

同步目錄

  file.recurse:
    - name: /data/app/prometheus/rules
    - source: salt://prometheus/files/rules
    - user: prometheus
    - group: prometheus
    - file_mode: 744
    - include_empty: True
    - clean: True
    - require:
      - cmd: prometheus-install
  • - clean: True: 目標路徑有,但是源路徑沒有的,統統刪除。
/etc/grub.conf:
  file.symlink:
    - target: /boot/grub/grub.conf

file.append - 文件后面追加內容

/etc/motd:
  file.append:
    - text:
      - Trust no one unless you have eaten much salt with him.
      - "Salt is born of the purest of parents: the sun and the sea."

官方幫助文檔:https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html

cmd模塊

實現遠程的命令行調用執行

run-執行命令

salt '*' cmd.run 'ss -lntup'

cmd模塊執行windows命令

salt '*' cmd.run 'dir' shell=powershell

getpip:
  cmd.run:
    - name: /usr/bin/python /usr/local/sbin/get-pip.py
    - unless: which pip
    - require:
      - pkg: python
      - file: /usr/local/sbin/get-pip.py
    - reload_modules: True

script-執行腳本

salt://scripts/bar.sh:
  cmd.script:
    - env: "PATH=/some/path:$PATH"

pkg包管理模塊

installed - 安裝包

php.packages:
  pkg.installed:
    - fromrepo: wheezy-php55
    - pkgs:
      - php5-fpm
      - php5-cli
      - php5-curl
      - bar: '>=1.2.3-4'

也可以指定安裝包的位置

mypkgs:
  pkg.installed:
    - sources:
      - foo: salt://rpms/foo.rpm
      - bar: http://somesite.org/bar.rpm
      - baz: ftp://someothersite.org/baz.rpm
      - qux: /minion/path/to/qux.rpm

命令行的方式安裝包

salt '*' pkg.install nmap
salt '*' pkg.file_list nmap

service 服務模塊

running 配置服務啟動

redis:
  service.running:
    - enable: True
    - reload: True
    - watch:
      - pkg: redis

reloadwatch一起使用,watch監控到服務的變化,reload會自動重載服務。

dead 停止服務

redis:
  service.dead:
      - enable: True

確定redis服務已經停止,並加入開機自啟動。

shell端執行命令

使sshd加入開機自啟動
salt '*' service.enable sshd

使sshd加入開機自啟動
salt '*' service.disable sshd

查看sshd的狀態
salt '*' service.status sshd

停止sshd服務
salt '*' service.stop sshd

啟動sshd服務
salt '*' service.start sshd

重啟sshd服務
salt '*' service.restart sshd

重載sshd服務
salt '*' service.reload sshd

useradd用戶模塊

absent - 刪除用戶

nginx:
  user.absent:
    - purge: True  
    - force: True

purge: 清楚用戶家目錄
force: 即使用戶登錄,也要刪除用戶(默認用戶登錄時,清除會失敗)。

present - 創建用戶

一、添加單個用戶:
生成密碼

openssl passwd -1 -salt 'nginx'
Password: 
$1$nginx$LrLRyngZUF2qJ8f3a31cN0
nginx: 
  user.present: 
    - fullname: nginx web
    - shell: /bin/bash
    - password: '$1$nginx$LrLRyngZUF2qJ8f3a31cN0'
    - home: /home/nginx
    - uid: 1000
    - gid: 1000
    - groups: 
      - nginx 
    - require:
      - group: nginx
  group.present: 
      - gid: 1000

創建一個不能登錄,沒有家目錄的用戶

nginx: 
  user.present: 
    - fullname: nginx web
    - shell: /sbin/nologin
    - password: '$1$nginx$LrLRyngZUF2qJ8f3a31cN0'
    - createhome: False
    - uid: 1000
    - gid: 1000
    - groups: 
      - nginx 
    - require:
      - group: nginx
  group.present: 
      - gid: 1000

用戶ID一旦確定不能修改,修改后會報錯。
解決辦法:

id prometheus 
uid=5050(prometheus) gid=1080(prometheus) groups=1080(prometheus)

usermod -u 1080 prometheus  
groupmod -g 1080 prometheus 

id prometheus 
uid=1080(prometheus) gid=1080(prometheus) groups=1080(prometheus)

chown -R prometheus.prometheus  prometheus*
lrwxrwxrwx  1   5050   5050   39 Nov  3 10:40 prometheus -> /data/app/prometheus-1.8.1.linux-amd64/
drwxrwxr-x  6   5050   5050  147 Nov  6 14:28 prometheus-1.8.1.linux-amd64

gid_from_name: 如果設置為_True_,默認的組id將自動設置為和本用戶同名的組id
groups: 分配給該用戶的組列表(a list of groups). 如果組在minion上不存在,則本state會報錯. 如果設置會空,將會刪除本用戶所屬的除了默認組之外的其他組
optional_groups: 分配給用戶的組列表。 如果組在minion上不存在,則state會忽略它.

配合jinja模板批量添加多個用戶

{{ set userlist=['big','little','ant'] }}
{% for user in userlist %}
{{ user }}: 
  user.present: 
    - fullname: {{ user }} web
    - shell: /sbin/nologin
    - password: '$1$nginx$LrLRyngZUF2qJ8f3a31cN0'
    - createhome: False
{% endfor %}

cp模塊

實現遠程文件、目錄的復制,以及下載URL文件等操作

將主服務器file_roots指定位置下的目錄復制到被控主機
salt 'chuye.backup*' cp.get_dir salt://iis-works/files/ /tmp/

將主服務器file_roots指定位置下的文件復制到被控主機
salt 'chuye.backup*' cp.get_file salt://iis-works/files/web-config /tmp/

下載指定URL內容到被控主機指定位置
salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz

cron模塊

present - 管理crontab

實現被控主機的crontab操作

date > /tmp/crontest:
  cron.present:
    - user: root
    - minute: '*/5'
superscript > /tmp/crontest:
  cron.present:
    - identifier: SUPERCRON
    - user: root
    - minute: 3
    - hour: 4

identifier:文件的標示,默認是狀態ID。

file - 為crontab提供類似文件管理的功能

foo_crontab:
  cron.file:
    - name: https://mydomain.tld/dir2/foo.txt
    - source_hash: https://mydomain.tld/hashes
    - source_hash_name: ./dir2/foo.txt

命令行執行

查看指定主機某用戶的crontab
salt '*' cron.raw_cron root

為指定的被控主機、root用戶添加crontab信息
salt '*' cron.set_job root '*/5' '*' '*' '*' '*' 'date >/dev/null 2>&1'

刪除指定的被控主機、root用戶的crontab信息
salt '*' cron.rm_job root 'date >/dev/null 2>&1'

dnsutil模塊

實現被控主機通用DNS操作

為被控主機添加指定的hosts主機配置項
salt '*' dnsutil.hosts_append /etc/hosts 192.168.56.12 linux-node2

network模塊

返回被控主機網絡信息
salt '*' network.ip_addrs

salt '*' network.interfaces

參考鏈接

state modules

execution modules


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM