自动化工具Ansible安装与简单使用

命令行使用

类比SHELL

在一个组中的所有服务器上运行命令,例如,对亚特兰大组,使用10个并行线程:

$ ansible atlanta -a "/sbin/reboot" -f 10

命令ansible默认以你的用户帐户运行。 如果你不喜欢这种行为,请传入“-u username”。 如果您想以不同的用户身份运行命令,它像这样:

$ ansible atlanta -a "/usr/bin/foo" -u username

通常你不会想用你的用户帐户做些事情。 如果您想通过权限升级运行命令:

$ ansible atlanta -a "/usr/bin/foo" -u username --become [--ask-become-pass]

如果您使用有密码特权升级方法(sudo / su / pfexec / doas / etc),请添加–ask-become-pass(-K)。 这将交互式地提示您输入密码。 使用无密码设置使事情更容易自动化,但不是必需的。

上面的-f 10指定了10个同时使用的进程的用法。 您也可以在配置Ansible中进行设置,以避免再次设置。 默认值是5,这是个小而保守的值。 您可能想要与更多的同步主机进行通话,所以请根据情况增加。 如果您的主机数量超过设置的线程数量,Ansible会与他们交谈,但会花费更长的时间。 随意将这个值推高到你的系统可以处理的水平!

您还可以选择要运行的Ansible“模块”。 通常,命令使用-m指定使用的模块,默认的模块名称是’command’,所以我们不需要一直指定。 我们将在后面的示例中使用-m来运行其他一些使用模块。

注意command模块不支持像管道和重定向这样的扩展shell语法(尽管shell变量将始终工作)。 如果您的命令需要特定于shell的语法,请改用shell模块。 详细了解“使用模块”页面上的差异。

使用shell模块像这样:

$ ansible raleigh -m shell -a 'echo $TERM'

文件传输

ansible命令行的另一个用例,Ansible可以 SCP 大量文件并行传输到多台机器上。

要将文件直接传输到多台服务器:

$ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"

file模块允许更改文件的所有权和权限。这些相同的选项也可以直接传递给copy模块:

$ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"

file模块也可以创建目录,类似于mkdir -p:

$ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"

删除目录(递归)和删除文件:

$ ansible webservers -m file -a "dest=/path/to/c state=absent"

包管理

有可用于包管理的yum和apt的模块。 以下是yum的一些例子。

确保已安装软件包,但不更新:

$ ansible webservers -m yum -a "name=acme state=present"

确保已安装指定版本的软件包:

$ ansible webservers -m yum -a "name=acme-1.5 state=present"

确保安装包是最新版本:

$ ansible webservers -m yum -a "name=acme state=latest"

确保安装包未安装:

$ ansible webservers -m yum -a "name=acme state=absent"

用户管理

‘user’模块允许轻松创建和操作现有用户帐户,以及删除可能存在的用户帐户:

$ ansible all -m user -a "name=foo password=<crypted password here>"

$ ansible all -m user -a "name=foo state=absent"

控制部署源

直接从git部署webapp:

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

由于Ansible模块可以通知更改处理程序,因此可以告诉Ansible在代码更新时运行特定任务,例如直接从git部署Perl / Python / PHP / Ruby,然后重新启动apache。

服务管理

确保在所有webservers上启动服务:

$ ansible webservers -m service -a "name=httpd state=started"

或者,在所有webservers上重启服务:

$ ansible webservers -m service -a "name=httpd state=restarted"

确保服务已停止:

$ ansible webservers -m service -a "name=httpd state=stopped"

操作时限

长时间运行的操作可以放入后台,并可以稍后检查其状态。 例如,要在后台异步执行long_running_operation,设置超时时间为3600秒(-B),并且没有轮询(-P):

$ ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"

如果您确定稍后要检查作业状态,则可以使用async_status模块,并向它传递给在后台运行原始作业时返回的作业ID:

$ ansible web1.example.com -m async_status -a "jid=488359678239.2844"

轮询是设置,看起来像这样:

$ ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"

上面的例子说“最长运行30分钟(-B 30 * 60 = 1800),轮询状态(-P)每60秒”。

信息收集

有关系统的已发现变量。 这些可以用来实现任务的条件执行,也可以用来获得有关系统的临时信息。 您可以通过以下方式查看所有信息:

$ ansible all -m setup

发表评论

error: Content is protected !!