<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>https://blog.liuts.com/index.php</link> 
<description><![CDATA[互联网运维与架构]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>https://blog.liuts.com/post/240/</link>
<title><![CDATA[基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[saltstack]]></category>
<pubDate>Mon, 26 Aug 2013 14:39:32 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.saltstack.com" target="_blank">Saltstack</a>是一个具备puppet与func功能为一身的集中化管理平台，saltstack基于python实现，功能十分强大，各模块融合度及复用性极高，官方极力推荐作为云计算平台的基础架构。轻松维护成千上万台服务器不是问题，现分享作者基于saltstack实现一个集中化的配置管理平台，以Nginx配置例子展开，涉及salt的grains、grains_module、pillar、States、jinja（template）等，本文适合有salt基础的同学阅读。<br/><strong>一、设备环境说明</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;有两组web业务服务器，组名分别为web1group与web2group，设备硬件配置、web根目录存在异常，见下图：<br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://liuts-blog.b0.upaiyun.com/201308/1377527944_7042d619.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377527944_7042d619.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>二、master配置说明</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;1、关键配置定义：<br/><textarea name="code" class="python" rows="15" cols="100">
nodegroups:
&nbsp;&nbsp; web1group: 'L@SN2012-07-010,SN2012-07-011,SN2012-07-012'
&nbsp;&nbsp; web2group: 'L@SN2013-08-021,SN2013-08-022'

file_roots:
&nbsp;&nbsp;base:
&nbsp;&nbsp;&nbsp;&nbsp;- /srv/salt

pillar_roots:
&nbsp;&nbsp;base:
&nbsp;&nbsp;&nbsp;&nbsp;- /srv/pillar
</textarea><br/>&nbsp;&nbsp;&nbsp;&nbsp;2、定义的文件树结构（具体文件后续说明）<br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377528805_5539570b.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377528805_5539570b.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>三、自定义grains_module</strong><br/>1）#vi /srv/salt/_grains/nginx_config.py<br/><textarea name="code" class="python" rows="15" cols="100">
import os,sys,commands

def NginxGrains():
&nbsp;&nbsp;&nbsp;&nbsp;'''
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Nginx config grains value
&nbsp;&nbsp;&nbsp;&nbsp;'''
&nbsp;&nbsp;&nbsp;&nbsp;grains = &#123;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;max_open_file=65536
&nbsp;&nbsp;&nbsp;&nbsp;#Worker_info=&#123;'cpus2':'01 10','cpus4':'1000 0100 0010 0001','cpus8':'10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001'&#125;
&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
&nbsp;&nbsp;&nbsp;&nbsp;except Exception,e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass
&nbsp;&nbsp;&nbsp;&nbsp;if getulimit[0]==0:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_open_file=int(getulimit[1])
&nbsp;&nbsp;&nbsp;&nbsp;grains['max_open_file'] = max_open_file
&nbsp;&nbsp;&nbsp;&nbsp;return grains
</textarea><br/>2)同步grains模块<br/>salt '*' saltutil.sync_all<br/><br/>3)刷新模块(让minion编译模块)<br/>salt '*' sys.reload_modules<br/><br/>4)验证max_open_file key的value<br/>[root@SN2013-08-020 _grains]# salt '*' grains.item max_open_file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>SN2013-08-022:<br/>&nbsp;&nbsp;max_open_file: 1024<br/>SN2013-08-021:<br/>&nbsp;&nbsp;max_open_file: 1024<br/>SN2012-07-011:<br/>&nbsp;&nbsp;max_open_file: 1024<br/>SN2012-07-012:<br/>&nbsp;&nbsp;max_open_file: 1024<br/>SN2012-07-010:<br/>&nbsp;&nbsp;max_open_file: 1024<br/><br/><strong>四、配置pillar</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;本例使用分组规则定义pillar，即不同分组引用各自的sls属性<br/>1)定义入口top.sls<br/>#vi /srv/pillar/top.sls<br/><textarea name="code" class="python" rows="15" cols="100">
base:
&nbsp;&nbsp;web1group:
&nbsp;&nbsp;&nbsp;&nbsp;- match: nodegroup
&nbsp;&nbsp;&nbsp;&nbsp;- web1server
&nbsp;&nbsp;web2group:
&nbsp;&nbsp;&nbsp;&nbsp;- match: nodegroup
&nbsp;&nbsp;&nbsp;&nbsp;- web2server
</textarea><br/>2)定义私有配置，本例只配置web_root的数据，当然可以根据不同需求进行定制，格式为python的字典形式，即"key:value"。<br/>#vi /srv/pillar/web1server.sls <br/><textarea name="code" class="python" rows="15" cols="100">
nginx:
&nbsp;&nbsp;&nbsp;&nbsp;root: /www
</textarea><br/>#vi /srv/pillar/web2server.sls <br/><textarea name="code" class="python" rows="15" cols="100">
nginx:
&nbsp;&nbsp;&nbsp;&nbsp;root: /data
</textarea><br/>3）验证配置结果：<br/>#salt 'SN2013-08-021' pillar.data nginx<br/>SN2013-08-021:<br/>&nbsp;&nbsp;&nbsp;&nbsp;----------<br/>&nbsp;&nbsp;&nbsp;&nbsp;root:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/data<br/><br/>#salt 'SN2012-07-010' pillar.data nginx <br/>SN2012-07-010:<br/>&nbsp;&nbsp;&nbsp;&nbsp;----------<br/>&nbsp;&nbsp;&nbsp;&nbsp;root:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www<br/><br/><strong>五、配置States</strong><br/>1）定义入口top.sls<br/>#vi /srv/salt/top.sls<br/><textarea name="code" class="python" rows="15" cols="100">
base:
&nbsp;&nbsp;'*':
&nbsp;&nbsp;&nbsp;&nbsp;- nginx 
</textarea><br/>2)定义nginx配置及重启服务SLS,其中salt://nginx/nginx.conf为配置模板文件位置。<br/>#vi /srv/salt/nginx.sls<br/><textarea name="code" class="python" rows="15" cols="100">
nginx:
&nbsp;&nbsp;pkg:
&nbsp;&nbsp; - installed
&nbsp;&nbsp;file.managed:
&nbsp;&nbsp; - source: salt://nginx/nginx.conf
&nbsp;&nbsp; - name: /etc/nginx/nginx.conf
&nbsp;&nbsp; - user: root
&nbsp;&nbsp; - group: root
&nbsp;&nbsp; - mode: 644
&nbsp;&nbsp; - template: jinja

&nbsp;&nbsp;service.running:
&nbsp;&nbsp; - enable: True
&nbsp;&nbsp; - reload: True
&nbsp;&nbsp; - watch:
&nbsp;&nbsp;&nbsp;&nbsp; - file: /etc/nginx/nginx.conf
&nbsp;&nbsp;&nbsp;&nbsp; - pkg: nginx
</textarea><br/>3）Nginx配置文件（引用jinja模板）<br/>功能点：<br/> 1、worker_processes参数采用grains['num_cpus'] 上报值（与设备CPU核数一致）；<br/> 2、worker_cpu_affinity分配多核CPU根据当前设备核数进行匹配，分别为2&#92;4&#92;8&#92;其它核；<br/> 3、worker_rlimit_nofile参数与grains['max_open_file'] 获取的系统ulimit -n一致；<br/> 4、worker_connections 参数理论上为grains['max_open_file']；<br/> 5、 root参数为定制的pillar['nginx']['root']值。<br/>#vi /srv/salt/nginx/nginx.conf<br/><textarea name="code" class="c" rows="15" cols="100">
# For more information on configuration, see:
user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nginx;
worker_processes&nbsp;&nbsp;&#123;&#123; grains['num_cpus'] &#125;&#125;;
&#123;% if grains['num_cpus'] == 2 %&#125;
worker_cpu_affinity 01 10;
&#123;% elif grains['num_cpus'] == 4 %&#125;
worker_cpu_affinity 1000 0100 0010 0001;
&#123;% elif grains['num_cpus'] >= 8 %&#125;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
&#123;% else %&#125;
worker_cpu_affinity 1000 0100 0010 0001;
&#123;% endif %&#125;
worker_rlimit_nofile &#123;&#123; grains['max_open_file'] &#125;&#125;;

error_log&nbsp;&nbsp;/var/log/nginx/error.log;
#error_log&nbsp;&nbsp;/var/log/nginx/error.log&nbsp;&nbsp;notice;
#error_log&nbsp;&nbsp;/var/log/nginx/error.log&nbsp;&nbsp;info;

pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/run/nginx.pid;

events &#123;
&nbsp;&nbsp;&nbsp;&nbsp;worker_connections&nbsp;&nbsp;&#123;&#123; grains['max_open_file'] &#125;&#125;;
&#125;


http &#123;
&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/nginx/mime.types;
&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;&nbsp;application/octet-stream;

&nbsp;&nbsp;&nbsp;&nbsp;log_format&nbsp;&nbsp;main&nbsp;&nbsp;'$remote_addr - $remote_user [$time_local] "$request" '
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$status $body_bytes_sent "$http_referer" '
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$http_user_agent" "$http_x_forwarded_for"';

&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;/var/log/nginx/access.log&nbsp;&nbsp;main;

&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;
&nbsp;&nbsp;&nbsp;&nbsp;#tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp; on;

&nbsp;&nbsp;&nbsp;&nbsp;#keepalive_timeout&nbsp;&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout&nbsp;&nbsp;65;

&nbsp;&nbsp;&nbsp;&nbsp;#gzip&nbsp;&nbsp;on;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;# Load config files from the /etc/nginx/conf.d directory
&nbsp;&nbsp;&nbsp;&nbsp;# The default server is in conf.d/default.conf
&nbsp;&nbsp;&nbsp;&nbsp;#include /etc/nginx/conf.d/*.conf;
&nbsp;&nbsp;&nbsp;&nbsp;server &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80 default_server;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;_;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#charset koi8-r;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/host.access.log&nbsp;&nbsp;main;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; &#123;&#123; pillar['nginx']['root'] &#125;&#125;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;index.html index.htm;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp;404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/404.html;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location = /404.html &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; /usr/share/nginx/html;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# redirect server error pages to the static page /50x.html
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp; 500 502 503 504&nbsp;&nbsp;/50x.html;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location = /50x.html &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; /usr/share/nginx/html;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&#125;
</textarea><br/>4)同步配置<br/>#salt '*' state.highstate<br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377531042_6934786c.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377531042_6934786c.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>（由于非第一次运行，看不到配置文件比对的信息）<br/><br/>5）验证结果：<br/> 1、登录root@SN2013-08-021<br/>#vi /etc/nginx/nginx.conf<br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377531518_1377da89.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377531518_1377da89.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377531518_1533999a.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377531518_1533999a.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/> 2、登录root@SN2012-07-010<br/>#vi /etc/nginx/nginx.conf<br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377531591_9419285f.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377531591_9419285f.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/><a href="http://liuts-blog.b0.upaiyun.com/201308/1377531591_5057d534.png" target="_blank"><img src="http://liuts-blog.b0.upaiyun.com/201308/1377531591_5057d534.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="https://blog.liuts.com/tags/saltstack/" rel="tag">saltstack</a> , <a href="https://blog.liuts.com/tags/salt/" rel="tag">salt</a> , <a href="https://blog.liuts.com/tags/%25E8%25BF%2590%25E7%25BB%25B4/" rel="tag">运维</a> , <a href="https://blog.liuts.com/tags/%25E8%2587%25AA%25E5%258A%25A8%25E5%258C%2596/" rel="tag">自动化</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2411</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>chenqing &lt;chenqing663@foxmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 04 Sep 2013 04:59:41 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2411</guid> 
<description>
<![CDATA[ 
	不错，楼主依然强悍。。。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2424</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>北南 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 05 Sep 2013 08:46:21 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2424</guid> 
<description>
<![CDATA[ 
	谢谢分享！回去捣鼓下。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2430</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>藤家具 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 24 Sep 2013 09:25:06 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2430</guid> 
<description>
<![CDATA[ 
	确实很有压力的呀
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2432</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>一路狂飙 &lt;ne09@qq.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Mon, 14 Oct 2013 01:18:32 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2432</guid> 
<description>
<![CDATA[ 
	生成了如何分发呢？
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2433</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>张伟 &lt;potaski@qq.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 23 Oct 2013 07:52:16 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2433</guid> 
<description>
<![CDATA[ 
	哈哈，我被主机名勾引出来了
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2438</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>ran &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 21 Feb 2014 06:31:26 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2438</guid> 
<description>
<![CDATA[ 
	saltstack针对编译安装的服务怎么维护呢？怎么进行服务的 - enable: True&nbsp;&nbsp;&nbsp;&nbsp;- reload: True这两个功能？
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2449</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>胶水 &lt;cc@12.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Mon, 21 Jul 2014 08:10:07 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2449</guid> 
<description>
<![CDATA[ 
	我是来打酱油的，欢迎回访我的博客。
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2452</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>园林假山 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 24 Jul 2014 00:44:43 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2452</guid> 
<description>
<![CDATA[ 
	不错，学习学习，欢迎回访
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2453</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>变压器 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sun, 27 Jul 2014 12:50:24 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2453</guid> 
<description>
<![CDATA[ 
	路过，偷偷带走，谢谢分享
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/240/#blogcomment2470</link>
<title><![CDATA[[评论] 基于saltstack实现的配置集中化管理[原创]]]></title> 
<author>网游加速器 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sun, 17 Aug 2014 08:55:00 +0000</pubDate> 
<guid>https://blog.liuts.com/post/240/#blogcomment2470</guid> 
<description>
<![CDATA[ 
	感觉管理好麻烦的啊
]]>
</description>
</item>
</channel>
</rss>