文件管理
还是必须打开/etc/salt/master里面的file_roots
在/srv/salt下编辑filetest.sls,内容如下:
1 file_test: #自定义名称
2 file.managed: #模块=文件管理
3 - name: /tmp/test.txt #放在minion端哪个目录下,并命名文件名字
4 - source: salt://test/file/123.txt #来源的文件,这个目录相当于是在/srv/salt/test/file/里面
5 - uesr: root #定义属主
6 - group: root #定义属组
7 - mode: 600 #定义权限
编辑top.sls,增加- filetest
下面是执行:
[root@master salt]# salt 'minion' state.highstate
minion:
----------
ID: file_test
Function: file.managed
Name: /tmp/test.txt
Result: True
Comment: File /tmp/test.txt updated
Started: 17:06:44.789373
Duration: 242.994 ms
Changes:
----------
diff:
New file
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
执行成功,查看minion端的/tmp下是否有test.txt文件,查看权限、属主属组、内容是否正确。
[root@minion bin]# cat /tmp/test.txt
djasldajsl
dasdl;as;
das;lk;
[root@minion bin]# ls -l /tmp/test.txt
-rw------- 1 root root 29 3月 31 17:06 /tmp/test.txt
目录管理
目录管理和文件管理稍有不同。看测试:
编辑dirtest.sls
1 dir_test:
2 file.recurse:
3 - name: /tmp/dir
4 - source: salt://test/dir
5 - user: root
6 - group: root
7 - file_mode: 600
8 - dir_mode: 644 #设置目录权限,注意空格
9 - mkdir: True #查询是否有/tmp/dir目录,没有创建
10 - clean: True #clean的含义是,如果删除salt://test/dir的文件,那么/tmp/dir也会同步删除,这相当于rsync的--delete,不加不会同步删除。
然后再top.sls里面加入- dirtest
执行salt 'minion' state.highstate
报错:我在执行state后报错如下:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 111: ordinal not in range(128)
Traceback (most recent call last):
File "/usr/bin/salt", line 10, in <module>
salt_main()
File "/usr/lib/python2.6/site-packages/salt/scripts.py", line 349, in salt_main
client.run()
File "/usr/lib/python2.6/site-packages/salt/cli/salt.py", line 210, in run
self._output_ret(ret_, out)
File "/usr/lib/python2.6/site-packages/salt/cli/salt.py", line 300, in _output_ret
salt.output.display_output(ret, out, self.config)
File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 94, in display_output
display_data = try_printout(data, out, opts)
File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 46, in try_printout
return get_printout(out, opts)(data).rstrip()
File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 84, in output
return _format_host(host, hostdata)[0]
File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 112, in _format_host
.format(hcolor, err, colors)))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 111: ordinal not in range(128)
找不到其他原因,再去查看dirtest.sls文件,这次我查看了一下是不是因为空格原因,在低行模式下使用了:set list,截图如下
看到了没,红框标注的地方,就是空格造成的问题,去掉不该有的空格,加上该有空格的地方。再次执行就正常了。
salt states介绍:
salt states的核心是sls文件,该文件使用YAML语法定义了一些k/v的数据。
sls文件存放根路径在master配置文件中定义,默认为/srv/salt
,该目录在操作系统上不存在,需要手动创建。
在salt中可以通过salt://
代替根路径,例如你可以通过salt://top.sls
访问/srv/salt/top.sls
。
在states中top文件也由master配置文件定义,默认为top.sls,该文件为states的入口文件。
只要是sls文件,就需要使用state.highstate去执行。