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
     
  • 相关阅读:
    SAP CRM 开发学习资料和教程整理【不定时更新】
    HANA CDS与ABAP CDS
    在CDS(Core Data Services)中使用DCL(Data Control Language)
    SAP中的ALE, IDOC
    ABAP 中JSON格式的转换与解析
    ABAP 在被访问的程序中获取访问程序的全局变量
    这不是我想要的ABAP开发者
    Macvlan技术
    Dockerfile
    css之position
  • 原文地址:https://www.cnblogs.com/xialiaoliao0911/p/7592370.html
Copyright © 2011-2022 走看看