天天看点

Ansible 七(ad hoc任务)

Ansible 七(ad hoc任务)

ansible任务

ad hoc任务就是执行shell命令、或shell脚本。

ansible ad-hoc命令

  可以执行一些简单的命令,不需要将这些执行的命令特别保存下来。

  适合执行简单的命令。

ansible playbook

  可以解决比较复杂的任务,可以将命令保存下来。

  适合执行配置管理或部署客户机。

并行性和shell命令

重启webservers主机组里的所以机器,每次重启10台

<code>ansible webservers </code><code>-</code><code>a </code><code>"/sbin/reboot"</code> <code>-</code><code>f </code><code>10</code>

以test01用户身份在webservers组的所以主机运行foo命令

<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u test01</code>

以test01用户身份sudo执行foo(如果有sudo密码加上--ask-sudo-pass(-k))

<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u test01 </code><code>-</code><code>-</code><code>sudo [</code><code>-</code><code>-</code><code>ask</code><code>-</code><code>sudo</code><code>-</code><code>pass</code><code>]</code>

也可以sudo到其他用户执行命令非root

<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u username </code><code>-</code><code>U otheruser [</code><code>-</code><code>-</code><code>ask</code><code>-</code><code>sudo</code><code>-</code><code>pass</code><code>]</code>

前面命令用到的-f 10选项表示使用10个并行的进程。

这个选项也可以在ansible的配置文件中设置,默认是5。

如果主机数大于设置的并发数,ansible会自行协调,花的时间稍微长一点。

ansible有许多模块,默认是命令模块:“command” ,这个模块不支持shell变量和管道等。

我们可以通过-m选项来指定不同的模块。例如shell模块

使用shell模块在客户主机上执行命令

<code>ansible webservers </code><code>-</code><code>m shell </code><code>-</code><code>a </code><code>"echo $TERM"</code>  <code>#查看当前系统是linux</code>

文件传输(file transfer)

拷贝本地的/etc/hosts文件到webservers主机组所以主机的/tmp/hosts;

<code>ansible webservers </code><code>-</code><code>m copy </code><code>-</code><code>a </code><code>"src=/etc/hosts dest=/tmp/hosts"</code>

若使用playbooks,则可以利用template模块来做到跟进一步的事情:(请参见 module 和 playbook 的文档)

使用file模块修改文件的属主和权限(在这里可替换为copy模块是等效的)

<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/hosts mode=600"</code>

<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/hosts mode=600 owner=test01 group=test01"</code>

#修改远程客户机/tmp/hosts权限为600,属主和属组都为test01

使用file模块创建目录,与执行mkdir -p 效果类似

<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/abc mode=755 owner=test01 group=test01 state=directory"</code>

#在webservers组里的所以主机上创建abc目录,权限为755,属主和属组都为test01

使用file模块删除目录(递归的删除)和删除文件

<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/abc state=absent"</code>

管理软件包(managing packages)

ansible提供对yum和apt的支持,这里是关于yum的示例。

确认httpd软件包安装,不更新(如果已安装不更新)

<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=present"</code>

<code>返回如下:</code>

<code>1.1</code><code>.</code><code>1.2</code> <code>| SUCCESS </code><code>=</code><code>&gt; {</code>

<code>    </code><code>"changed"</code><code>: false, </code>

<code>    </code><code>"msg"</code><code>: "", </code>

<code>    </code><code>"rc"</code><code>: </code><code>0</code><code>, </code>

<code>    </code><code>"results"</code><code>: [</code>

<code>        </code><code>"httpd-2.4.6-45.el7.centos.4.x86_64 providing httpd is already installed"</code>

<code>    </code><code>]</code>

<code>}</code>

<code>1.1</code><code>.</code><code>1.3</code> <code>| SUCCESS </code><code>=</code><code>&gt; {</code>

确认httpd软件包的版本

<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd-2.4* state=present"</code>

确认httpd软件包更新到最新版本

<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=latest"</code> 

<code>        </code><code>"All packages providing httpd are up to date"</code><code>, </code>

<code>        </code><code>""</code>

<code>        </code><code>"All packages providing httpd are up to date"</code><code>,  </code><code>#所有的软件包提供的服务器是最新的</code>

确认httpd软件包还没有安装(卸载httpd)

<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=absent"</code>

用户和组(user and groups)

使用user模块可以方便的创建用户、删除用户、或管理现有的用户

#创建用户test02

<code>ansible </code><code>all</code> <code>-</code><code>m user </code><code>-</code><code>a </code><code>"name=test02 password=123456789"</code>

#删除用户test02

<code>ansible </code><code>all</code> <code>-</code><code>m user </code><code>-</code><code>a </code><code>"name=test02 state=absent"</code>

源码部署

直接使用 git 部署 webapp:

ansible模块能够通知变更,当代码更新时,可以告诉ansible做一些特定的任务。

比如从git部署代码然后重启apache服务等

<code>ansible webservers </code><code>-</code><code>m git </code><code>-</code><code>a </code><code>"repo=git://foo.example.org/repo.git dest=/srv/myapp version=HEAD"</code>

服务管理(managing services)

安装httpd服务

<code>ansible </code><code>all</code> <code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=present"</code>

启动httpd服务

<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=started"</code>

重启httpd服务

<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=restarted"</code>

关闭httpd服务

<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=stopped"</code>

卸载httpd服务

后台运行(需要长时间运行的命令Time Limited Background Operations)

后台执行命令3600s,-B表示后台执行的时间

<code>ansible </code><code>all</code> <code>-</code><code>B </code><code>3600</code> <code>-</code><code>a </code><code>"/usr/bin/long_running_operation --do-stuff"</code>

检查任务的状态

<code>ansible </code><code>all</code> <code>-</code><code>m async_status </code><code>-</code><code>a </code><code>"jid=123456789"</code>

后台执行命令最大时间是1800s 即30 分钟,-P 每60s 检查下状态默认15s

<code>ansible </code><code>all</code> <code>-</code><code>B </code><code>1800</code> <code>-</code><code>P </code><code>60</code> <code>-</code><code>a </code><code>"/usr/bin/long_running_operation --do-stuff"</code>

搜集系统信息(gathering facts)

搜集主机的所以系统信息

<code>ansible webservers </code><code>-</code><code>m setup</code>

搜集系统信息并以主机名为文件名分别保存在/tmp/facts目录

<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>-</code><code>tree </code><code>/</code><code>tmp</code><code>/</code><code>facts</code>

#搜集系统版本信息

<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_distribution*"</code>

搜集和内存相关的信息

<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_*_mb"</code>

搜集和cpu相关的信息

<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_processor*"</code>

搜集网卡信息

<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_eth*"</code>

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