天天看点

用saltstack cp模块实现文件管理

<code>1.</code><code>先看配置,</code><code>2.</code><code>配置,看日志</code><code>3</code><code>,日志不行,只能源代码了</code>

<code>基础篇</code>

<code>官网 http:</code><code>/</code><code>/</code><code>salt.readthedocs.io</code><code>/</code><code>en</code><code>/</code><code>stable</code><code>/</code><code>topics</code><code>/</code><code>tutorials</code><code>/</code><code>minionfs.html</code><code>#tutorial-minionfs</code>

<code>第一看卡壳 Saltstack的配置Salt master配置文件</code>

<code>http:</code><code>/</code><code>/</code><code>blog.csdn.net</code><code>/</code><code>zhs2014150551</code><code>/</code><code>article</code><code>/</code><code>details</code><code>/</code><code>48951581</code>

<code>fileserver_backend:</code>

<code>    </code><code>– roots</code>

<code>salt支持模块化的后端文件系统服务器,它允许salt通过第三方的系统来管理收集文件并提供给minions使用,可以配置多个后端文件系统,这里支持gitfs、hgfs、roots、s3fs文件调用的搜索顺序按照后台文件系统的配置顺序来搜索,默认的设置只开启了标准的后端服务器roots,具体的根选项配置通过file_roots参数设置</code>

<code>分发到minion</code>

<code>salt </code><code>'*'</code> <code>cp.get_file  salt:</code><code>/</code><code>/</code><code>test.sls </code><code>/</code><code>root</code><code>/</code><code>test.sls </code><code>-</code><code>-</code><code>log</code><code>-</code><code>level</code><code>=</code><code>all</code>

<code>上传到master</code>

<code>salt </code><code>'*'</code> <code>cp.push  </code><code>/</code><code>root</code><code>/</code><code>install.log </code><code>-</code><code>-</code><code>log</code><code>-</code><code>level</code><code>=</code><code>all</code>

<code>上传的文件存放在master端的 </code><code>/</code><code>var</code><code>/</code><code>cache</code><code>/</code><code>salt</code><code>/</code><code>master</code><code>/</code><code>minions</code><code>/</code><code>&lt;minion_id&gt;</code><code>/</code><code>files</code><code>/</code> <code>目录下</code>

<code>源代码解析</code>

<code>http:</code><code>/</code><code>/</code><code>liuping0906.blog.</code><code>51cto</code><code>.com</code><code>/</code><code>2516248</code><code>/</code><code>1553252</code>

<code>def</code> <code>push(path):</code>

<code>    </code><code>'''</code>

<code>    </code><code>Push a file from the minion up to the master, the file will be saved to</code>

<code>    </code><code>the salt master in the master's minion files cachedir</code>

<code>    </code><code>(defaults to /var/cache/salt/master/minions/files)</code>

<code>    </code><code>Since this feature allows a minion to push a file up to the master server</code>

<code>    </code><code>it is disabled by default for security purposes. To enable add the option:</code>

<code>    </code><code>file_recv: True</code>

<code>    </code><code>to the master configuration and restart the master</code>

<code>    </code><code>CLI Example::</code>

<code>        </code><code>salt '*' cp.push /etc/fstab</code>

<code>    </code><code>path</code><code>=</code><code>os.path.basename(path)</code>

<code>    </code><code>if</code> <code>'../'</code> <code>in</code> <code>path </code><code>or</code> <code>not</code> <code>os.path.isabs(path):</code>

<code>        </code><code>return</code> <code>False</code>

<code>    </code><code>if</code> <code>not</code> <code>os.path.isfile(path):</code>

<code>    </code><code>auth </code><code>=</code> <code>_auth()</code>

<code>    </code><code>load </code><code>=</code> <code>{</code><code>'cmd'</code><code>: </code><code>'_file_recv'</code><code>,</code>

<code>            </code><code>'id'</code><code>: __opts__[</code><code>'id'</code><code>],</code>

<code>            </code><code>'path'</code><code>: path.lstrip(os.sep)}</code>

<code>    </code><code>sreq </code><code>=</code> <code>salt.payload.SREQ(__opts__[</code><code>'master_uri'</code><code>])</code>

<code>    </code><code>with salt.utils.fopen(path) as fp_:</code>

<code>        </code><code>while</code> <code>True</code><code>:</code>

<code>            </code><code>load[</code><code>'loc'</code><code>] </code><code>=</code> <code>fp_.tell()</code>

<code>            </code><code>load[</code><code>'data'</code><code>] </code><code>=</code> <code>fp_.read(__opts__[</code><code>'file_buffer_size'</code><code>])</code>

<code>            </code><code>if</code> <code>not</code> <code>load[</code><code>'data'</code><code>]:</code>

<code>                </code><code>return</code> <code>True</code>

<code>            </code><code>ret </code><code>=</code> <code>sreq.send(</code><code>'aes'</code><code>, auth.crypticle.dumps(load))</code>

<code>            </code><code>if</code> <code>not</code> <code>ret:</code>

<code>                </code><code>return</code> <code>ret</code>

<code>进阶</code>

<code>http:</code><code>/</code><code>/</code><code>rfyiamcool.blog.</code><code>51cto</code><code>.com</code><code>/</code><code>1030776</code><code>/</code><code>1360468</code><code>/</code>

<code>用saltstack cp模块实现文件管理、拉取和回滚下发</code>

<code>要实现的效果:</code>

<code>通过mongodb记录数据,然后web api接口渲染配置文件来的更方便。</code>

<code>web</code><code>-</code><code>api http:</code><code>/</code><code>/</code><code>salt</code><code>-</code><code>api.readthedocs.io</code><code>/</code><code>en</code><code>/</code><code>latest</code><code>/</code><code>ref</code><code>/</code><code>netapis</code><code>/</code><code>all</code><code>/</code><code>saltapi.netapi.rest_cherrypy.html</code><code>#a-rest-api-for-salt</code>

cp.push 好像有点问题,老是返回false,不知道什么原因。 

。。。

<code>MINIONFS master端配置</code>

<code>-</code> <code>roots</code>

<code>-</code> <code>minion</code>

<code>file_recv: </code><code>True</code>

<code>fileserver_backend在文件服务器那一部分讲过,roots是设置本地的文件服务器的目录环境,</code>

<code>同样的fileserver_backend可以将从minion端拉取过来的文件通过文件服务器发布出去,pull</code>

<code>到其他minion上。</code>

<code>以下有两个常用的方法:</code>

<code>(</code><code>1</code><code>)查看master端有哪些可以推送的文件</code>

<code>    salt </code><code>'*'</code> <code>cp.list_master_dirs</code>

<code>(</code><code>2</code><code>)将某一minion下的文件或目录pull到其他minion上</code>

<code>    salt </code><code>'minion2'</code> <code>cp.get_file salt:</code><code>/</code><code>/</code><code>minion1</code><code>/</code><code>opt</code><code>/</code><code>1.txt</code> <code>/</code><code>opt</code><code>/</code><code>1.txt</code>

<code>使用minionFS进行公钥分发实例:</code>

<code>被连接方:minion</code><code>-</code><code>destination,存放公钥,存放在</code><code>/</code><code>root</code><code>/</code><code>.ssh</code><code>/</code><code>authorized_keys</code>

<code>连接方:minion</code><code>-</code><code>source,存放私钥,存放在</code><code>/</code><code>root</code><code>/</code><code>.ssh</code><code>/</code><code>id_rsa</code>

<code>(</code><code>1</code><code>)在目标主机上创建密钥存放目录</code>

<code>    salt </code><code>'XX'</code> <code>file</code><code>.mkdir dir_path</code><code>=</code><code>/</code><code>root</code><code>/</code><code>.ssh user</code><code>=</code><code>root group</code><code>=</code><code>root mode</code><code>=</code><code>700</code>

<code>(</code><code>2</code><code>)在minion</code><code>-</code><code>source主机上生成密钥对</code>

<code>    salt </code><code>'minion-source'</code> <code>cmd.run </code><code>'ssh-keygen -N "" -f /root/.ssh/id_rsa'</code>

<code>(</code><code>3</code><code>)将minion</code><code>-</code><code>source上的公钥push到master端</code>

<code>    salt </code><code>'minion-source'</code> <code>cp.push </code><code>/</code><code>root</code><code>/</code><code>.ssh</code><code>/</code><code>id_rsa.pub</code>

<code>(</code><code>4</code><code>)分发minion</code><code>-</code><code>source主机上的公钥到minion</code><code>-</code><code>destination主机上的指定目录</code>

<code>    salt </code><code>'minion-destination'</code> <code>cp.get_file salt:</code><code>/</code><code>/</code><code>minion</code><code>-</code><code>source</code><code>/</code><code>root</code><code>/</code><code>.ssh</code><code>/</code><code>id_rsa.pub </code><code>/</code><code>root</code><code>/</code><code>.ssh</code><code>/</code><code>authorized_keys</code>

本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1961438,如需转载请自行联系原作者

继续阅读