所有执行模块: http://docs.saltstack.cn/zh_CN/latest/ref/states/all/index.html

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

 ##先看一个简单的例子:
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:
- require:
- pkg: salt ##一个小的注意:
/dbdata:
file.directory: #如果只有一个函数,这样写是错误的
要改成:
/dbdata:
file:
- directory
 

    cmd模块:

 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..tar.gz
- unless: test -f /tmp/nginx-1.4..tar.gz ##若minion端不存在/tmp/nginx-1.4..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..tar.gz
- unless: test -d /usr/local/src/nginx-1.4. ##若minion端不存在/usr/local/src/nginx-1.4. 这个目录,才会执行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模块:

 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:
- hour:
#- daymonth:
#- month:
#- dayweek:
#- minute: "*/5"
 ##修改计划任务:
##如上面的例子:
mysql_cron:
cron:
- present
- name: cd /tmp/scripts;./mysql_backup.sh
- user: root
- minute:
- hour: #将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:
- hour:
#- daymonth:
#- month:
#- dayweek:
#- minute: "*/5"
 

 file模块:

        注意:只有file模块里才可以使用template函数

 .sls文件1:
/tmp/salt/:
file:
- directory #目录不存在,则创建目录
- name: /tmp/salt/
- user: nobody
- group: nobody
- file_mode: #与recurse递归函数一起用
- dir_mode: #文件权限644,目录权限755
- makedirs: True
- recurse: #递归目录权限,包括用户和权限
- user #若本来此目录就存在,且此目录下有很多文件,则recurse函数会把此目录和目录下的所有文件的权限都修改(nobody )
- 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 )
- mode:
#- 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:
- file_mode: ''
- 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:
- template: jinja
- defaults: #默认变量,多个一行一个
custom_var: "default value" #这些变量将会在salt://apache/http.conf这个文件里使用
other_var:
{% 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模块:

 absent:删除用户组
name:与absent一起用,则是删除的用户组名
present:管理用户组,不存在则创建;存在则管理其属性
name:与present一起用,则是被管理的用户组名
##下面的属性全都是与present一起用的##
gid:组ID分配给命名组;如果留空,那么下一个可用的组ID将被分配
system:命名组是否是一个系统组,这本质上是groupadd“-r”选项
addusers:添加更多的用户列表作为组成员
delusers:确保这些用户从组成员中删除
members:用新成员的名单替换现有组成员。
##注:选项'members'和'adduser/delusers'是相互排斥的,不能一起使用
cheese:
group.present: #用户组不存在,则创建;若存在,则管理,包括将用户添加到此组中或将用户从组中移除
- gid:
- system: True
- addusers:
- user1 #将user1添加到组中
- users2
- delusers:
- foo cheese:
group.present:
- gid:
- system: True
- members: #只有这4个用户属于这个组
- foo
- bar
- user1
- user2

 iptables模块:

http://docs.saltstack.cn/zh_CN/latest/ref/states/all/salt.states.iptables.html#module-salt.states.iptables

    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:
#- 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--4ebe-b9e6-f30026ca2314
- fstype: xfs
- opts: nobootwait,noatime,nodiratime,nobarrier,logbufs=
#- dump: #默认是0
#- pass_num: #默认是0
#- persist: True #是不是将其写入/etc/fstab文件里,默认是True,写入
- mkmnt: True ##dump: The dump value to be passed into the fstab, Default is
##pass_num: The pass value to be passed into the fstab, Default is

    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: ::31.920445
Duration: 1702.923 ms
Changes:
----------
httpd:
True ##不存在reload函数或reload值为False:
ID: httpd
Function: service.running
Result: True
Comment: Service restarted ##restart服务
Started: ::05.723261
Duration: 1193.026 ms
Changes:
----------
httpd:
True

   user模块:

user1:
user:
- present
#- name: user1
#- home: /home/user1
#- shell: /bin/bash
- uid:
- gid:
- system: True #设置为系统用户
- groups: #设置用户的所属组
- nobody #把user1用户加入到nobody组中,且仅属于nobody组;如果用户原本在jeff组中,执行后用户只在nobody组中,不再属于jeff组了
#- group1 ##absent:删除用户
##force:强制删除用户(即便用户正在登陆)

实例:

公司来新的员工,需要在所有的服务器上添加一个普通账号:

 ##先创建MD5加密密码
[root@dbm133 ~]# openssl passwd - -salt 'shencj' ##用户名,如这个shencj用户可以不存在;但是必须和下面创建的新用户对应
Password: ##输入密码
$$shencj$i3JtzHYM7hFcNP63VLK.. ##生成的加密密码
 ##定义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:
# - gid:
- 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:
- user: {{ pillar['username'] }}
- group: {{ pillar['username'] }}
- require:
- file: /home/{{ pillar['username'] }}/.ssh
 ##master端数据推送
[root@dbm133 ~]# salt '*' state.sls user.adduse
 

saltstack管理八之常用执行模块的更多相关文章

  1. 跟我一起读postgresql源码(八)——Executor(查询执行模块之——可优化语句的执行)

    2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.Executo ...

  2. SaltStack远程执行-模块

    上一篇:SaltStack数据系统-Pillar 执行模块 salt 'linux-node2.example.com' service.status sshd 其中service是模块名称statu ...

  3. Day6 Python常用的模块

    一.logging模块 一.日志级别 critical=50 error=40 waring=30 info=20 debug=10 notset=0 二.默认的日志级别是waring(30),默认的 ...

  4. 上网八个常用cmd命令你掌握了几个?

                   上网八个常用cmd命令你掌握了几个? 一.ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握 ...

  5. Linux驱动学习之常用的模块操作命令

    1.常用的模块操作命令 (1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 (2)insmod(install module,安装模块),功能是向当前 ...

  6. 10 masterless、高可用、salt执行模块开发、sydic架构

    1.salt无master 官方文档: http://docs.saltstack.cn/topics/tutorials/quickstart.html 1.使用场景 1.在项目中使用salt,写一 ...

  7. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

  8. Ansible_常用文件模块使用详解

    一.Ansibel常用文件模块使用详解 1.file模块 1️⃣:file模块常用的参数列表: path       被管理文件的路径 state状态常用参数: absent           删除 ...

  9. Ansible4:Ad-hoc与命令执行模块【转】

    Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook.Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块. 如:command ...

随机推荐

  1. How to detect the presence of the Visual C++ 2010 redistributable package

    Question: I have seen your previous blog posts that describe how to detect the presence of the Visua ...

  2. hihocoder1829 Tomb Raider

    思路: 暴力枚举. 实现: #include <iostream> #include <set> #include <vector> using namespace ...

  3. 内存泄露--contentView缓存使用与ListView优化

    引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...

  4. java.lang.IllegalArgumentException: name MUST NOT NULL! at org.nutz.dao.impl.NutDao.fetch

    Nutz传值报错问题 作者:Vashon 时间:20150902 平台:Nutz框架 Java后台方法中拿值时报的错 报错信息: java.lang.IllegalArgumentException: ...

  5. Nginx常用命令介绍

    #安装nginx准备工作yum install gcyum -y install pcre-develyum install -y zlib-devel #编译安装./configuremake &a ...

  6. HDU 3033 I love sneakers! 我爱运动鞋 (分组背包+01背包,变形)

    题意: 有n<=100双鞋子,分别属于一个牌子,共k<=10个牌子.现有m<=10000钱,问每个牌子至少挑1双,能获得的最大价值是多少? 思路: 分组背包的变形,变成了相反的,每组 ...

  7. iOS图片目录批量复制到android图片目录

    复制shell脚本 #!/bin/bash for i in `ls` do for imgname in `ls $i | grep '^WM.*'` do echo $imgname cp $i/ ...

  8. 说说三四月的app审核中的几个坑

    苹果的审核在3月异常严格,听说和换了部门领导有关(道听途说),恰逢三月公司新出了一个产品,我们的产品被苹果打回四五次,今天就在简书上把这些坑填下,也让遇到的朋友以后留意,也许是近期的最后一篇文章. 坑 ...

  9. 最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题 (文档 ID 1524455.1)

    适用于: Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 11.2.0.3 [发行版 10.1 到 11.2]本文档所含信息适用于所有平台 用 ...

  10. nginx “403 Forbidden” 错误 解决方法

    错误的原因是缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件 只需要配置时加一句  index  index.h ...