• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Ansible第二篇:开始简单使用

Ansible 彭东稳 8年前 (2016-08-31) 33815次浏览 已收录 0个评论

一、开始使用Ansible

Ansible使用语法

其中-i用来指定inventory文件,默认就是使用/etc/ansible/hosts,其中all是针对hosts定义的所有主机执行,这里也可以指定hosts中定义的组名或模式。

[options]

开始使用Ansible

1)定义Inventory

Inventory文件用来定义你要管理的主机,其默认位置在/etc/ansible/hosts,如果不保存在默认位置,也可通过-i选项指定。被管理的机器可以通过其IP或域名指定。每个中括号里代表一个分组,其下的机器列表都归属于这个分组,直到出现下一个中括号为止。通常我们按组来执行任务,同一组受控服务器应用相同的配置。一台服务器也可以归属到多个组,以完成多个功能角色的配置。低耦合、模块化,非常灵活!如下定义一个分组[webservers],并给定一台主机。

2)执行ansible命令

配置好主机列表之后,就可以开始执行批量任务了。Ansible自带了ping模块,可以测试“管理节点”和和“受控节点”之间的网络联通情况。

Linux服务器均使用SSH进行远程管理,SSH服务是服务器必备组件。Ansible在设计上简化使用成本,在“管理节点”上使用SSH连接“受控节点”。通过创建SSH连接来发送指使并执行,达到配置管理的目的。这样避免了不同版本的操作系统、甚至不同发行版的操作系统下使用Agent带来的兼容性问题。

首先,我们来赶紧体验一下Ansible的强大魅力。使用Ansible来测试“受控节点”的网络联通情况:

输入主机密码后,输出正确信息如下:

注意了,如果是第一次使用SSH连接agent端,那么就不能使用-k了,要先进行公钥保存确认。然后再使用-k进行连接。

如果你使用密钥方式登录SSH,去掉-k参数即可。可以为Ansible设置一个特定的用户,所有操作均以此用户来执行。甚至可以为每个“受控节点”设置各自不同的用户。

全局用户的设置见配置文件/etc/ansible/ansible.cfg,修改[defaults]段落里的remote_user的值即可。也可以通过修改remote_port 来定义Ansible去使用非标准的22/SSH 端口来进行连接和管理。在没有给“受控节点”或“受控组”进行特定设置时,Ansible将默认使用全局设置。

二、Inventory格式

Ansible通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务,默认路径可以通过修改ansible.cfg的hostfile参数指定路径。主机清单配置格式如下:

另外可以通过设置ansible_ssh_user来用指定用户在“受控节点”上执行任务,还可以通过设置ansible_ssh_host来指定不同的主机或域名,SSH对应的端口也可以通过ansible_ssh_port来修改,同时你还能使用特定的密钥登录。

常用参数如下

我们对上述提到的配置进行示范:

可能有些场景下,执行配置管理需要用root权限。但由于安全原因,可能会限制root使用SSH登录。比如:Ubuntu系统默认就不能使用 root 直接SSH登录系统。Ansible设计时也考虑到此类场景,这种情况下我们只需要告诉Ansible使用sudo的方式执行那些需要 root 权限的配置任务。前提条件是执行Ansible任务的用户需要有sudo的权限。要设定Ansible使用sudo,执行Ansible的任务的用户必须要有sudo权限。可以通过修改/etc/sudoers文件或visudo命令来完成,或者直接使用现在符合条件的用户。参数-sudo即告诉Ansible使用sudo来运行任务,如果sudo需要密码,则需要添加-k参数,或者在配置文件/etc/ansible/ansible.cfg中添加ask_sudo_pass的属性。

Ansible使用键值方式接受参数,即传统的KV方式(key=value)。每次执行任务后,将以JSON格式返回结果。它可以解析复杂的参数,或者用playbooks方式(后面会讲解)。Ansible返回会明确指明运行是否成功、是否有变动以及失败时的错信息。

通常都用playbooks的方式来执行Ansible任务,少数情况下使用命令行模式运行。过去,我们用Ansible的ping模块来检查“受控节点”是否正常受控。而实际上,ping模块仅仅执行了Ansible最核心的功能并检查了网络联通性,并未做其它实际性动作。

进而产生了setup模块,它不仅可以反馈“受控节点”的可用性,还会收集一些系统信息以供其它模块使用。Setup 模块定义了一系列的采集指令,比如:内核版本、机器名、IP地址等等,并将这些信息保存在内置变量,其它模块再执行任务时可以直接引用或用于判断条件等。

主机变量和组变量

Inventory除了上述的基本功能外,还可以在主机后面定义变量以便于在playbook中使用,例如:

不光对主机可以定义变量,对组也可以定义变量。组变量是指赋予给组内所有主机,都可以在playbook中使用,格式如下:

这就是针对web01组设置的组变量,:vars是固定格式,组内的所有变量都可以给组内的主机使用。

更多模块介绍下一章介绍。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (7)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!