Skip to content

Ansible 之旅(四) 配置 Ansible

配置 Ansible

Ansible 可以通过修改其配置文件来改变 Ansible 的行为,在控制节点中,配置文件可能存在以下位置:
1. /etc/ansible/ansible.cfg 此配置文件是 Ansible 默认配置文件位置,作用于全局。
2. ~/.ansible.cfg 此配置文件是存放用户家目录中的配置文件,作用于这个用户。
3. ./ansible.cfg 此配置文件是存放在某个目录下,作用与这个目录。
4. $ANSIBLE_CONFIG 通过变量来指定配置文件的路径,作用于全局。
由上可知配置文件可以存放在不同的位置,但是推荐的做法是在一个目录中创建 ansible.cfg ,将项目所需的 inventoryplaybook 都放在此目录中,这样配置文件就可以针对不同的项目,来设置不同的属性。然而不同的位置的配置文件会不会相互影响呢?它们之间存在什么关系呢?

配置文件优先级

在不同位置的配置文件中遵循以下优先级:
首先是 $ANSIBLE_CONFIG 变量会覆盖所有其它的配置文件,优先级最高。如果没有设置该变量,接下来就是在当前目录中的 ./ansible.cfg 优先级高,假设目录中未设置 ansible.cfg 配置文件,那么接下来就是用户家目录中的 ~/.ansible.cfg 配置文件优先级高,假设也不存在用户家目录中的配置文件,最后就是默认全局配置文件了 /etc/ansible.cfg
归纳起来优先等级是:
$ANSIBLE_CONFIG > ./ansible.cfg > ~/.ansible.cfg > /etc/ansible/ansible.cfg
为了不混淆当前使用的是哪一个配置文件,在执行 Ansible 操作前可以使用 ansible --version 命令可以查看当前所使用的配置文件:

$ ansible --version
  ansible 2.5.3
   config file = /etc/ansible/ansible.cfg  #此处显示当前使用的配置文件
   ... output ...

Ansible 配置文件设置

在 Ansible 的默认配置文件中存在以下几节内容:

$ grep "^\[" /etc/ansible/ansible.cfg 
    [defaults]
    [inventory]
    [privilege_escalation]
    [paramiko_connection]
    [ssh_connection]
    [persistent_connection]
    [accelerate]
    [selinux]
    [colors]
    [diff]

配置文件一旦更改立即生效,不需要重启服务(Ansible 本来也没有服务)。

配置连接

在以上配置中最常用的配置节是 defaults 节。Ansible 在对托管主机进行管理时,需要知道如何与托管主机进行通信,所需信息包括:
1. Inventory 文件位置,用来列出主机和主机组。
2. 与托管主机通信使用哪种协议(默认 SSH),是否标准端口。
3. 在管理节点上以哪一个用户进行远程登录(称之为远程用户),可以是 root 用户或者是其它普通用户。
4. 如果远程用户没有特权,是否可以进行特权提升(su or sudo)。
5. 假设能够使用 sudo ,但是使用 sudo 需不需要密码。
在 [defaults] 配置中有以下配置来定义以上的问题:

配置 描述
inventory inventory 文件的位置,可以是文件或者是目录
remote_user 连接托管主机使用的用户
ask_pass 使用远程用户登录托管主机需要输入密码
become 允许远程用户特权提升
become_method 远程用户进行提权提升的方式(su or sudo)
become_user 远程用户提升至谁的权限(如:root)
become_ask_pass 在提升权限时需要输入密码

非 SSH 连接

在 Ansible 配置文件中定义了 transport 的值是 smart 这就决定了 Ansible 使用了 SSH 这种最有效的连接方式,当然也可以在不同情况下更改为其它值:
1. local:如果托管主机就是本身 localhost 时,使用 local ,将会忽略配置文件中的 remote_user 的配置。
2. winrm:如果托管主机是 Windows 操作系统时,则应该使用 winrm 这种连接方式,并且还需要指定远程托管主机的端口是 5986 。
如果在 inventory 中同时存在 Linux 和 Windows 操作系统时,通常是设置变量来区分它们之间不同的连接方式,变量的设置在后面的章节中会被提到。

配置文件中的注释

跟普通的配置文件一样,在 Ansible 的配置文件中,也有注释。
在 Ansible 配置文件中存在两种注释符:分别是(#)和(;):
1. # 是用来注释一整行,配置和注释不能写在同一行。
2. ; 是用来注释配置右边的内容,配置和注释可以写在同一行。


小菜园 原创文章,未经允许,请勿转载!

本文链接: https://www.imxcai.com/devops/ansible/ansible-config.html


发表评论

电子邮件地址不会被公开。 必填项已用*标注