使用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函数,
- source指定要复制的文件在master上的路径,此处salt://是相对于salt root目录的
- name 指定复制到minion上的路径
- user 指定文件的所有用户 group指定文件的所属用户
- 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对比是哪里有改动。
-
.sls 这个文件是被放弃的不被允许的 (i.e. webserver.sls 来源于 webserver)
- 使用子目录来做组织是个很好的选择
-
每个子目录描述一个资源
-
pip.dev 用来表示子目录 pip/dev.sls
-
-
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``pip/init.sls`` 就是表示``pip``.
-
如果同时存在``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