SaltStack自定义modules模块
SaltStack可以分为Master和Minion,自定义modules模块可以让你更加便捷的在两者之间进行信息收集和获取。
首先需要在master机器的file_roots 下建一个_modules文件夹,里面放.py 文件,也就是自定义模块。
- 1.1: file_roots 在/etc/salt/master 里可以设置,默认是/srv/salt/,即你需要在这个目录下新建文件夹_modules
srv \-- salt \-- _modules \-- test.py
-
1.2: test.py
def world(): return 'hello world'
- 1.3 在master使用salt "*" saltutil.sync_modules对_modules里面的文件同步到minion
- 1.4 然后使用salt "*" test.hello,输出结果,记得test.py文件里面要加return,不然在master是无法显示接收到的信息。
- ---------------------------------------------------------------------------------------------------------------------------------------------------------
- 2.1 windows安装的minion默认路径存放在C:\salt
- 2.2 同步之后的_modules模块存放在C:\salt\var\cache\salt\minion\extmods\modules
- 2.3 如果在master写好Python文件之后进行推送测试未免太麻烦,可以在salt目录下,按住Shift键打开命令行,输入salt-call.bat a(文件名).world(文件当中的模块名),进行快速测试PS:每一次测试完记得要将__pycache__文件夹删除,不然他会重新编译之前的文件,无法得到你想要的结果
- 例子
- 如果pillar取不到数据,很可能是你没有定义,或者忘了刷新pillar数据 salt '*' saltutil.refresh_pillar
- ---------------------------------------------------------------------------------------------------------------------------------------------------------
- 3.1 runner模块其实可以用salt-run来快速调用,首先在打开master的配置文件,vim /etc/salt/master,在里面加入如下代码,然后创建相应的文件夹。
- 3.2 在 /srv/runner/ 文件夹当中可以编写你所需要的Python文件,如新建一个a.py文件
- 这样一来便可以在任何目录输入这条指令,直接执行,只不过在编写比较复杂的程序时,需要注意导入模块的路径问题,最好使用os.path.abspath来获取文件的绝对路径,而不是使用os.getpwd,因为os.getcwd是会获取当前的工作目录,得到的是salt-run语句执行的目录,并不会到python文件的执行目录,这一点要特别注意