CentOS 7 x86_64 Minimal
配置网络:
<code>vi</code> <code>/etc/sysconfig/network-scripts/ifcfg-eth0</code>
<code>NAME=eth0</code>
<code>TYPE=Ethernet</code>
<code>ONBOOT=yes</code>
<code>BOOTPROTO=static</code>
<code>IPADDR=172.16.4.243</code>
<code>GATEWAY=172.16.4.254</code>
<code>NETMASK=255.255.255.0</code>
<code>DNS1=114.114.114.114</code>
<code>systemctl restart network</code>
安装 ansible:
<code>easy_install simplejson</code>
<code>easy_install pip</code>
<code>yum </code><code>install</code> <code>gcc python-devel</code>
<code>easy_install ansible</code>
<code>pip list</code>
自动把远程主机的公钥加入known_hosts:
<code>vi</code> <code>/etc/ssh/ssh_config</code>
<code>StrictHostKeyChecking no</code>
<code>systemctl reload sshd</code>
设置无密码ssh访问远程主机:
<code>ssh</code><code>-keygen -t rsa</code>
<code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub [email protected]</code>
编辑远程主机列表:
主机列表可以是静态配置文件,也可以通过external inventory scripts动态获取,通过 -i 选项指定。
<code>vi</code> <code>~</code><code>/hosts</code>
<code># hosts</code>
<code>[test]</code>
<code>172.16.4.247</code>
测试远程主机的运行状态:
<code>ansible all -i ~</code><code>/hosts</code> <code>-m </code><code>ping</code>
YUM安装软件:
<code>ansible all -i ~</code><code>/hosts</code> <code>-m yum -a </code><code>'name=libselinux-python state=present'</code>
复制文件到远程主机并执行:
<code>ansible all -i ~</code><code>/hosts</code> <code>-m copy -a </code><code>'src=test.sh dest=/root'</code>
<code>ansible all -i ~</code><code>/hosts</code> <code>-a </code><code>'bash test.sh'</code>
ansible api example:
<code>#!/usr/bin/python</code>
<code>import</code> <code>ansible.runner</code>
<code>import</code> <code>sys</code>
<code># construct the ansible runner and execute on all hosts</code>
<code>results </code><code>=</code> <code>ansible.runner.Runner(</code>
<code> </code><code>host_list</code><code>=</code><code>'/root/hosts'</code><code>,</code>
<code> </code><code>pattern</code><code>=</code><code>'*'</code><code>, forks</code><code>=</code><code>10</code><code>,</code>
<code> </code><code>module_name</code><code>=</code><code>'command'</code><code>, module_args</code><code>=</code><code>'which systemctl'</code><code>,</code>
<code>).run()</code>
<code>if</code> <code>results </code><code>is</code> <code>None</code><code>:</code>
<code> </code><code>print</code> <code>"No hosts found"</code>
<code> </code><code>sys.exit(</code><code>1</code><code>)</code>
<code>print</code> <code>"\033[32mUP ***********\033[0m"</code>
<code>for</code> <code>(hostname, result) </code><code>in</code> <code>results[</code><code>'contacted'</code><code>].items():</code>
<code> </code><code>if</code> <code>not</code> <code>'failed'</code> <code>in</code> <code>result:</code>
<code> </code><code>if</code> <code>len</code><code>(result[</code><code>'stdout'</code><code>]):</code>
<code> </code><code>print</code> <code>"%s >>>stdout: %s"</code> <code>%</code> <code>(hostname, result[</code><code>'stdout'</code><code>])</code>
<code> </code><code>if</code> <code>len</code><code>(result[</code><code>'stderr'</code><code>]):</code>
<code> </code><code>print</code> <code>"%s >>>stderr: %s"</code> <code>%</code> <code>(hostname, result[</code><code>'stderr'</code><code>])</code>
<code>print</code> <code>"\033[31mFAILED *******\033[0m"</code>
<code> </code><code>if</code> <code>'failed'</code> <code>in</code> <code>result:</code>
<code> </code><code>print</code> <code>"%s >>> %s"</code> <code>%</code> <code>(hostname, result[</code><code>'msg'</code><code>])</code>
<code>print</code> <code>"\033[33mDOWN *********\033[0m"</code>
<code>for</code> <code>(hostname, result) </code><code>in</code> <code>results[</code><code>'dark'</code><code>].items():</code>
<code> </code><code>print</code> <code>"%s >>> %s"</code> <code>%</code> <code>(hostname, result)</code>
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任
本文转自 张斌_青岛 51CTO博客,原文链接:http://blog.51cto.com/qicheng0211/1614369