zoukankan      html  css  js  c++  java
  • saltstack管理八之常用执行模块

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

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

     1 ##先看一个简单的例子:
     2 salt:
     3   pkg.latest:
     4     - name: salt
     5   service.running:
     6     - names:                     #多个值,一行一个,且为names,复数
     7       - salt-master
     8       - salt-minion
     9     - require:
    10       - pkg: salt
    11     - watch:
    12       - file: /etc/salt/minion
    13  
    14 /etc/salt/minion:
    15   file.managed:
    16     - source: salt://salt/minion
    17     - user: root
    18     - group: root
    19     - mode: 644
    20     - require:
    21       - pkg: salt
    22        
    23  
    24 ##一个小的注意:
    25 /dbdata:
    26   file.directory:               #如果只有一个函数,这样写是错误的
    27 要改成:
    28 /dbdata:
    29   file:
    30     - directory
     

        cmd模块:

     1 name:要执行的命令,记住该命令将会在salt-minion的路径和权限下执行
     2 onlyif:用于检查的命令,仅当``onlyif``选项指向的命令返回true时才执行name定义的命令
     3 unless:用于检查的命令,仅当``unless``选项指向的命令返回false时才执行name指向的命令
     4 cwd:执行命令时的当前工作目录,默认是/root
     5 user:以指定用户身份运行命令
     6 group:以指定用户组身份运行命令
     7 shell:用于执行命令的shell,默认shell grain
     8 run:运行name后的命令      
     9 [root@test81 ~]# cat install.sls 
    10 nginx_source:
    11   file.managed:
    12     - name: /tmp/nginx-1.4.5.tar.gz
    13     - unless: test -f /tmp/nginx-1.4.5.tar.gz       ##若minion端不存在/tmp/nginx-1.4.5.tar.gz这个文件,才会执行这个file模块
    14     - source: salt://nginx/files/nginx-1.4.5.tar.gz
    15  
    16 tar_nginx:
    17   cmd.run:
    18     - cwd: /usr/local/src                              ##当前工作目录
    19     - name: tar zxvf nginx-1.4.5.tar.gz
    20     - unless: test -d /usr/local/src/nginx-1.4.5       ##若minion端不存在/usr/local/src/nginx-1.4.5 这个目录,才会执行name后命令
    21     - require:
    22       - file: nginx_source
    23 ##unless:后面的条件不满足(条件为假)时才会执行
    24 ##onlyif:条件为真时执行
     1 ntpdate_cron:
     2   cron:
     3     - present
     4     - name: /usr/sbin/ntpdate pool.ntp.org
     5     - minute: '*/30'
     6     - require:
     7       - cmd: isntp
     8  
     9 isntp:
    10   cmd:
    11     - run
    12     - name: yum -y install ntp
    13     - unless: test ! -z `rpm -qa ntp`          ##反逗点调用shell命令(tab键上面那个)

       cron模块:

     1 minute:分
     2 hour:时
     3 daymonth:日
     4 month:月
     5 dayweek:周
     6 user:用户名
     7 present:创建计划任务
     8 name:计划任务内容
     9 [root@scj cron]# cat cron.sls 
    10 mysql_cron:
    11   cron:
    12     - present
    13     - name: cd /tmp/scripts;./mysql_backup.sh
    14     - user: root
    15     - minute: 0
    16     - hour: 1
    17     #- daymonth: 
    18     #- month:
    19     #- dayweek:
    20     #- minute: "*/5"
     1 ##修改计划任务:
     2 ##如上面的例子:
     3 mysql_cron:
     4   cron:
     5     - present
     6     - name: cd /tmp/scripts;./mysql_backup.sh
     7     - user: root
     8     - minute: 0
     9     - hour: 2                #将1改为2
    10     #- daymonth: 
    11     #- month:
    12     #- dayweek:
    13     #- minute: "*/5" 
    14 注意:以name后面的命令为主
    15      可以理解为name后面的命令是唯一键
    16      若把name后面的命令改了,则是重新创建了一个计划任务
    17  
    18 ##删除一个计划任务:
    19 ##如上面的例子:
    20 mysql_cron:
    21   cron:
    22     - absent            ##absent删除计划任务
    23     - name: cd /tmp/scripts;./mysql_backup.sh      ##只要保证name后命令不变,能匹配到
    24     - user: root
    25     - minute: 0
    26     - hour: 2  
    27     #- daymonth: 
    28     #- month:
    29     #- dayweek:
    30     #- minute: "*/5"
     

       file模块:

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

     1 .sls文件1:
     2 /tmp/salt/:
     3   file:
     4     - directory                 #目录不存在,则创建目录
     5     - name: /tmp/salt/
     6     - user: nobody
     7     - group: nobody
     8     - file_mode: 644            #与recurse递归函数一起用
     9     - dir_mode: 755             #文件权限644,目录权限755
    10     - makedirs: True
    11     - recurse:                 #递归目录权限,包括用户和权限
    12       - user                   #若本来此目录就存在,且此目录下有很多文件,则recurse函数会把此目录和目录下的所有文件的权限都修改(nobody 644 75513       - group
    14       - mode                   #文件644,目录755,就是上面的file_mode和dir_mode
    15       #- ignore_files           #忽略文件
    16       #- ignore_dirs
    17  
    18 /tmp/salt/file:
    19   file:
    20     - managed                   #创建文件
    21     - name: /tmp/salt/file
    22     - source: salt://web/files/httpd.conf
    23     - user: nobody
    24     - group: nobody               #若此文件本来就存在,则会修改此文件的权限(nobody 64425     - mode: 644
    26     #- backup: minion
    27     #- template: jinja          #调用pillar变量和grains变量
    28     - require:
    29       - file: /tmp/salt/
    30     
    31  
    32 .sls文件2:
    33 {% set site_user = 'testuser' %}         #定义变量
    34 {% set site_name = 'test_site' %}
    35 {% set project_name = 'test_proj' %}
    36 {% set sites_dir = 'test_dir' %}
    37 django-project:
    38   file.recurse:
    39     - name: {{ sites_dir }}/{{ site_name }}/{{ project_name }}
    40     - user: {{ site_user }}              #直接调用变量
    41     - dir_mode: 2775
    42     - file_mode: '0644'
    43     - template: jinja                   #指定template: jinja
    44     - source: salt://project/templates_dir
    45     - include_empty: True 
    46      
    47  
    48  
    49 .sls文件3:
    50 /etc/http/conf/http.conf:
    51   file.managed:
    52     - source: salt://apache/http.conf
    53     - user: root
    54     - group: root
    55     - mode: 644
    56     - template: jinja
    57     - defaults:               #默认变量,多个一行一个
    58         custom_var: "default value"        #这些变量将会在salt://apache/http.conf这个文件里使用
    59         other_var: 123
    60 {% if grains['os'] == 'Ubuntu' %}          ##if语句要定格##
    61     - context:                #以context下的变量为准,没有时再用defaults下的变量
    62         custom_var: "override"      #这里以这个变量为准,defaults里的是无效的
    63 {% endif %}
    64  
    65 .sls文件4:
    66 /tmp/dir1/file1:
    67   file:
    68     - managed
    69     - makedirs: True
    70 ##若minion端没有dir1目录,使用makedirs函数可以直接创建dir1目录,再创建file1文件

        group模块:

     1 absent:删除用户组
     2 name:与absent一起用,则是删除的用户组名
     3 present:管理用户组,不存在则创建;存在则管理其属性
     4 name:与present一起用,则是被管理的用户组名
     5 ##下面的属性全都是与present一起用的##
     6 gid:组ID分配给命名组;如果留空,那么下一个可用的组ID将被分配
     7 system:命名组是否是一个系统组,这本质上是groupadd“-r”选项
     8 addusers:添加更多的用户列表作为组成员
     9 delusers:确保这些用户从组成员中删除
    10 members:用新成员的名单替换现有组成员。
    11 ##注:选项'members''adduser/delusers'是相互排斥的,不能一起使用
    12 cheese:
    13   group.present:            #用户组不存在,则创建;若存在,则管理,包括将用户添加到此组中或将用户从组中移除
    14     - gid: 7648
    15     - system: True
    16     - addusers:
    17       - user1               #将user1添加到组中
    18       - users2
    19     - delusers:
    20       - foo
    21  
    22        
    23 cheese:
    24   group.present:
    25     - gid: 7648
    26     - system: True
    27     - members:              #只有这4个用户属于这个组
    28       - foo
    29       - bar
    30       - user1
    31       - user2

        iptables模块:

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

        lvm模块:

     1 /dev/sda:
     2   lvm:
     3     - pv_present           #创建pv
     4     #-name: /dev/sda
     5  
     6 my_vg:
     7   lvm.vg_present:          #创建vg
     8     - devices: /dev/sda    #指定pv
     9  
    10 lvroot:
    11   lvm.lv_present:
    12     - vgname: my_vg        #指定vg
    13     - name: lvroot
    14     - size: 10G
    15     #- stripes: 5
    16     #- stripesize: 8K

        mount模块:

     1 /mnt/sdb:                        #标识,没有name函数则表示挂载点
     2   mount.mounted:
     3     - device: /dev/sdb1          #挂载的设备名
     4     #- name: /mnt/sdb            #挂载点
     5     - fstype: ext4
     6     - mkmnt: True                #挂载点不存在则自动创建,最好将其设置为True
     7     - opts:
     8       - defaults
     9  
    10 /srv/bigdata:
    11   mount:
    12     - mounted:
    13     - device: UUID=066e0200-2867-4ebe-b9e6-f30026ca2314
    14     - fstype: xfs
    15     - opts: nobootwait,noatime,nodiratime,nobarrier,logbufs=8
    16     #- dump: 0               #默认是0
    17     #- pass_num: 2           #默认是0
    18     #- persist: True         #是不是将其写入/etc/fstab文件里,默认是True,写入
    19     - mkmnt: True
    20      
    21 ##dump: The dump value to be passed into the fstab, Default is 0
    22 ##pass_num: The pass value to be passed into the fstab, Default is 0

        pkg模块:

     1 mypkgs:
     2   pkg.installed:
     3     - pkgs:              #安装多个软件包,用pkgs函数,一行一个
     4       - gcc
     5       - cmake
     6       - make
     7     #- name: httpd       #安装的软件包名,与pkgs一起用时,此函数将被忽略
     8      
     9 ##installed:安装软件包
    10 ##latest:将软件更新到最新
    11 ##removed:卸载软件包
    12 ##pkgs:安装多个软件包时,一次全部安装(推荐)
    13 ##names:安装多个软件包时,一次安装一个,需安装多次(不推荐)

        service模块:

     1 httpd:
     2   service:
     3     - running               #使服务处于运行状态
     4     - enable: True          #设置开机自动启动
     5     - reload: True          #watch函数下监控的/etc/httpd/conf/httpd.conf文件发生变化,则会重新加载reload;若reload函数不存在或reload值为False,则会重新启动restart
     6     - watch:
     7       - file: /etc/httpd/conf/httpd.conf
     8     - require:
     9       - pkg: httpd
    10        
    11 ##dead:使服务处于stop状态
    12  
    13 ##reload值为True:
    14           ID: httpd
    15     Function: service.running
    16       Result: True
    17      Comment: Service reloaded            ##reload服务
    18      Started: 14:56:31.920445
    19     Duration: 1702.923 ms
    20      Changes:   
    21               ----------
    22               httpd:
    23                   True
    24                    
    25 ##不存在reload函数或reload值为False:
    26           ID: httpd
    27     Function: service.running
    28       Result: True
    29      Comment: Service restarted           ##restart服务
    30      Started: 14:58:05.723261
    31     Duration: 1193.026 ms
    32      Changes:   
    33               ----------
    34               httpd:
    35                   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:强制删除用户(即便用户正在登陆)

    实例:

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

    1 ##先创建MD5加密密码
    2 [root@dbm133 ~]# openssl passwd -1 -salt 'shencj'       ##用户名,如这个shencj用户可以不存在;但是必须和下面创建的新用户对应
    3 Password:                                               ##输入密码
    4 $1$shencj$i3JtzHYM7hFcNP63VLK..1                        ##生成的加密密码
    1 ##定义pillar变量
    2 [root@dbm133 ~]# cat /srv/pillar/user/init.sls 
    3 username: shencj
    4 password: '$1$shencj$i3JtzHYM7hFcNP63VLK..1'
     1 ##创建state的.sls文件
     2 [root@dbm133 ~]#cat /srv/salt/user/adduser.sls
     3 {{ pillar['username'] }}:
     4   user:
     5     - present
     6 #    - uid: 1001
     7 #    - gid: 1001
     8     - password: {{ pillar['password'] }}
     9     - groups:
    10       - nobody
    11  
    12 /home/{{ pillar['username'] }}/.ssh:
    13   file:
    14     - directory
    15     - require:
    16       - user: {{ pillar['username'] }}
    17  
    18 /home/{{ pillar['username'] }}/.ssh/authorized_keys:
    19   file:
    20     - managed
    21     - source: salt://files/authorized_keys
    22     - mode: 400
    23     - user: {{ pillar['username'] }}
    24     - group: {{ pillar['username'] }}
    25     - require:
    26       - file: /home/{{ pillar['username'] }}/.ssh
    1 ##master端数据推送
    2 [root@dbm133 ~]# salt '*' state.sls user.adduse
     
  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/xialiaoliao0911/p/7592370.html
Copyright © 2011-2022 走看看