天天看點

用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,如需轉載請自行聯系原作者

繼續閱讀