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: 目標路徑有,但是源路徑沒有的,統統刪除。
file.synlink - 創建快捷方式
/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
reload和watch一起使用,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
