salt 基本配置管理

使用salt state执行一个复制文件

1、在master 的file_root目录/srv/salt下编辑top.sls:

base:
  '*':
    - pip

2、在/srv/salt目录下创建pip目录,编辑init.sls文件:

这里是复制get-pip.py文件:

pip:
  file.managed:
    - source: salt://get-pip.py
    - name: /home/cheeron/get-pip.py
    - user: cheeron
    - group: cheeron
    - mode: 644

这里的pip定义,使用了file.managed函数,

  1. source指定要复制的文件在master上的路径,此处salt://是相对于salt root目录的
  2. name 指定复制到minion上的路径
  3. user 指定文件的所有用户 group指定文件的所属用户
  4. mode指定文件的权限用数字表示 4代表读权限 2代表写权限 1代表执行权限

3. 然后就可以通过命令 salt ‘*’ state.highstate 执行文件复制任务

执行过程:

test1:
----------
          ID: pip
    Function: file.managed
        Name: /home/cheeron/get-pip.py
      Result: True
     Comment: File /home/cheeron/get-pip.py is in the correct state
     Started: 14:44:18.203548
    Duration: 36.115 ms
     Changes:   

Summary
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
test2:
----------
          ID: pip
    Function: file.managed
        Name: /home/cheeron/get-pip.py
      Result: True
     Comment: File /home/cheeron/get-pip.py updated
     Started: 18:14:04.441644
    Duration: 5567.605 ms
     Changes:   
              ----------
              diff:
                  New file
              group:
                  cheeron
              mode:
                  0644
              user:
                  cheeron

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

如果get-pip.py文件有变化,那么在执行state.highstate命令时对通过diff对比是哪里有改动。

  1. .sls 这个文件是被放弃的不被允许的 (i.e. webserver.sls 来源于 webserver)

  2. 使用子目录来做组织是个很好的选择
    1. 每个子目录描述一个资源

    2. pip.dev 用来表示子目录 pip/dev.sls

  3. init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``pip/init.sls`` 就是表示``pip``.

  4. 如果同时存在``pip.sls`` 和 pip/init.sls,则 pip/init.sls 被过滤,pip.sls``将被用来表示pip.

复制文件并且执行,通过cmd.run实现:

pip:
  file.managed:
    - source: salt://get-pip.py
    - name: /home/cheeron/get-pip.py
    - user: cheeron
    - group: cheeron
    - mode: 644
  cmd.run:
    - name: python /home/cheeron/get-pip.py
    - require:
      - file: /home/cheeron/get-pip.py

这样,在执行了复制命令之后就会执行python /home/cheeron/get-pip.py

 

posted @ 2015-09-22 15:07  cheerong  阅读(478)  评论(0编辑  收藏  举报