saltstack常用模块

常用模块: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: 644
    - 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.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模块

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模块:只有file模块才能用template函数

.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模块:

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容