天天看点

saltstack学习四:自定义modules

根据官网的说法,自定义modules的文件目录应该是放在/srv/salt/_modules下面,同步到minion的方法有三个:

<a href="http://docs.saltstack.cn/ref/modules/all/salt.modules.state.html#salt.modules.state.highstate" target="_blank">state.highstate</a>

<a href="http://docs.saltstack.cn/ref/modules/all/salt.modules.saltutil.html#salt.modules.saltutil.sync_modules" target="_blank">saltutil.sync_modules</a>

<a href="http://docs.saltstack.cn/ref/modules/all/salt.modules.saltutil.html#salt.modules.saltutil.sync_all" target="_blank">saltutil.sync_all</a>

好吧,先来写个简单的modules试试看,就返回一个当前时间吧:

/srv/salt/_modules/test.py

1

2

3

4

<code>#!/usr/bin/python</code>

<code>import</code> <code>time</code>

<code>def </code><code>date</code><code>():</code>

<code>    </code><code>return</code> <code>time</code><code>.</code><code>time</code><code>()</code>

接下来推送到minion:

<code>salt </code><code>'*'</code> <code>saltutil.sync_modules</code>

推送完之后运行一下这个modules,方法是:文件名.函数名

<a href="http://s3.51cto.com/wyfs02/M01/24/38/wKiom1NM_vSw1LsQAACbNwcIurw503.jpg" target="_blank"></a>

恩,感觉还可以,接下来看一下modules如何使用grains和pillar的数据:

5

6

7

8

<code>def</code> <code>date():</code>

<code>    </code><code>return</code> <code>time.time()</code>

<code>def</code> <code>get_osfinger():</code>

<code>    </code><code>return</code> <code>__grains__[</code><code>'osfinger'</code><code>]</code>

<code>def</code> <code>get_cachedir():</code>

<code>    </code><code>return</code> <code>__pillar__[</code><code>'master'</code><code>][</code><code>'cachedir'</code><code>]</code>

__grains__ 和 __pillar__ 保存了grains和pillar的数据,我们可以在module中这样来读取,推送到minion之后看看结果:

<a href="http://s3.51cto.com/wyfs02/M02/24/41/wKiom1NN7izCu7qtAAD6RcMUBb8352.jpg" target="_blank"></a>

然后官网还说到一个功能就是调用其它的模块:

9

10

<code>def</code> <code>foo():</code>

<code>    </code><code>return</code> <code>__salt__[</code><code>'cmd.run'</code><code>](</code><code>'df'</code><code>)</code>

所有的模块都包含在__salt__字典里面,我试试执行cmd.run "df",看看结果:

<a href="http://s3.51cto.com/wyfs02/M02/24/43/wKiom1NN_LbQMsjrAAEcsJUXFVg730.jpg" target="_blank"></a>

这样感觉就可以把一些日常经需要做的工作写成modules,虽然现在还不知道写些什么好。。囧。。。

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1396279如需转载请自行联系原作者

lihuipeng