saltstack常用功能模块编写
一.简介
Master - 控制中心,salt命令运行和资源状态管理端
Minions - 需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息
States - 配置管理的指令集
Modules- 包含命令行下运行的指令,和在配置文件里面使用的指令模块可以的函数可以在命令行下运行
Grains - minion端的变量,静态
pillar - minion端的变量,动态,可自定义
highstate - 给minion永久添加状态,从sls配置文件读取到
salt schedule - 自动保持客户端配置
二.常用功能
执行命令cmd.run
Sls模板state.sls
Pillar
自定义模块
三.State.sls
本文主要介绍state.sls常用基础功能写法,主要包含通过sls模板实现以下几块的管理:
- 1. 用户管理
- 2. 文件管理
- 3. 目录管理
- 4. 安装包管理
- 5. 计划任务
用户管理:
用户管理分为创建和删除用户,分别对应user.present和user.absent,如下sls模板,如用户不存在,则新建用户admin和admin1,并设置相关属性:
[[email protected]]# catinit.sls
admin:
user.present:
- shell: /bin/bash
- home: /home/admin
- uid: 888
admin1:
user.present:
- uid: 1111
如下则是删除用户
admin:
user.absent:
- purge:True
- force:True
Purge:为True指删除该用户家目录以及下面的文件,类似于userdel –r
Force:为True指即使该用户当前在线也强制删除
添加用户的模板一般用于其他sls调用,如安装mysql的sls模板可以先调用此模板新建mysql用户。如果是临时需要新建用户,直接用cmd.run即可
文件管理:
文件管理主要分为文件的上传和文件附加内容
文件上传管理一般通过file.managed,如下sls,即为在minion端备份gz包之后,将gz包传到minion目录/usr/local下,并设置相关属性
[[email protected]]# cat init.sls
/usr/local/nginx-2.1.2.tar.gz:
file.managed:
- source:salt://nginx/nginx-xxx.xxx.tar.gz
- user: root
- group:root
- mode: 755
- backup:minion
- template:jinja
先备份在minion端的目录/var/cache/salt/minion/file_backup下,然后上传,长期使用备份目录会增大,恢复可用salt命令恢复或者直接手动考备份文件均可
file.append用于追加文件,如下,用于安装完jdk之后将环境变量追加入profile文件里面(假设jdk安装目录为下),用于jdk安装模块调用:
/etc/profile:
file.append:
- text:
- "exportJAVA_HOME=/usr/local/jdk1.6.0_13"
- "exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH"
- "exportCLASSPATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/lib:$CLASSPATH"
目录管理
file.recurse将目录下的所有文件覆盖到目标minion目录,目录递归复制,类似于rsync,如果master端减少了文件,minion端默认不会删除,如下将本地conf目录的文件全部同步到线上conf,并设置相关属性
/usr/local/nginx/conf:
file.recurse:
-source: salt://nginx/conf
-user: root
-group: root
-file_mode: 644
-dir_mode: 755
-template: jinja
- backup: minion
- makedirs: True
- include_empty: True
- recurse:
- user
- group
- mode
以上模板注意空格调整成一致,一般缩进空2格
新建目录,如新建/web/logstash目录,并设置相关属性,一般用于其他模板调用
/web/logstash:
file.directory:
- user: web
- group: web
- file_mode:644
- dir_mode:755
- makedirs:True
-include_empty: True
- template:jinja
- backup:minion
包管理
如下,如在linux下即调用系统yum命令安装相关包,常用于初始化环境或者其他模块调用依赖包,如nginx的pcre-devel等
installpackages:
pkg.latest:
- pkgs:
- aspell
- ncurses
- ncurses-devel
- pcre-devel
- telnet
- libcurl
- libcurl-devel
计划任务
添加计划任务salt ‘xxx‘ cron.set_job root 0 3 ‘*‘ ‘*‘ ‘*‘ "echo‘abc‘" "mytest"
删除计划任务salt ‘xxx‘ cron.rm_job root "echo ‘abc‘“
第二种方式就是写sls也可做计划任务
/usr/local/test.sh >> /var/log/test.log2>&1:
cron.present:
- identifier:test cron #计划任务描述,同上面的mytest
-user: root
-minute: ‘0‘
- hour: ‘4‘
/usr/sbin/ntpdatetime.windows.com:
cron.present:
- identifier: ntpdate rsync
- user: root
- minute: ‘*/30‘
如下是一个完整的nginx安装模板:整个模板的功能就是讲nginx安装包通过file.managed上传到相关目录,调用cmd.run执行安装命令,调用用户管理模板新建用户,调用目录管理上传配置文件目录以及目录内部配置文件。
#用include调用引入外部模板,用于新建nginx需要的用户,新建用户模板见上面用户管理
include:
- nginx_user
#安装nginx
install_nginx:
cmd.run:
- name: tar -zxvf nginx-2.1.2.tar.gz&& cd nginx-2.1.2 && sh configure --prefix=/usr/local/nginx--with-http_ssl_module --with-http_stub_status_module && make&& make install
- cwd: /usr/local #执行上面的命令需要在此目录
- unless: test -f/usr/local/nginx/sbin/nginx #测试nginx此文件不存在,则执行上面name后面的命令
- require:
- file: /usr/local/nginx-2.1.2.tar.gz #执行之前需要先执行此模块,此模块写在下面
#上传nginx安装包模块
/usr/local/nginx-2.1.2.tar.gz:
file.managed:
- source: salt://nginx/nginx-2.1.2.tar.gz
- unless: test -f /usr/local/nginx-2.1.2.tar.gz
- user: root
- group: root
- mode: 755
- template: jinja
- require:
- sls: nginx_user
#上传nginx配置文件模块
/usr/local/nginx/conf:
file.recurse:
- source: salt://nginx/conf
- user: root
- group: root
- file_mode: 644
- dir_mode: 755
- template: jinja
- backup: minion
- makedirs: True
- include_empty: True
- recurse:
- user
- group
- mode
- require:
- cmd: install_nginx
注意上面用到的依赖关系和模板外部调用方法,如下,这里不做详解,可自行查询
include
- modulename
require
- file:
- cmd:
- sls:
此外还有:
变量使用
Watch用法
Pillar自定义变量
以及模块开发等,此文不做详述,后面文章可能会写到