目录
一、创建 Ansible 清单:
1、清单定义:
2、使用静态清单指定受管主机:
(1)主机名称指定:
(2)IP 地址指定:
3、验证清单:
(1)以交互方式浏览清单和组:
(2)列出组中的主机:
(3)列出清单中的主机:
4、覆盖清单的位置:
二、管理 Ansible 配置文件:
1、Ansible 配置文件:
(1)ansible.cfg :
(3)查看当前配置文件:
(4)配置文件注释:
2、管理 Ansible 设置( ansible.cfg ):
3、查看 Ansible 配置:
(1)查找顺序:
5、配置连接:
一、创建 Ansible 清单:
1、清单定义:
主机清单( inventory )定义 Ansible 所管理的主机。主机可以从属于组,组通常用于标识主机的角色,一个主机可以属于多个组。
可以通过两种方式定义主机清单。
(1)通过文本文件定义静态主机清单;
(2)从外部 provider 生成动态主机清单。
2、使用静态清单指定受管主机:
静态清单文件可指定 Ansible 目标受管主机的文本文件。
Ansible 静态主机清单在 INI 或 YAML 格式文本文件中定义,每一部分的开头由方括号 [ ] 括起的部分是主机组的名称,其后是主机条目,它们列出组中的每一台受管主机,每个受管主机占一行。主机条目由受管主机的主机名称或 IP 地址组成,可定义 Ansible 与受管主机的通信方式,其中包含传输和用户帐户信息。
用户可以指定主机名称或 IP 地址的范围来简化 Ansible 主机清单。
(1)主机名称指定:
server[01:20].example.com 匹配名称为 server01.example.com 到 server20.example.com 的所有主机。
注:多个主机组也可构成主机组,通过 :children 后缀来实现,见上图绿色方框处。
(2)IP 地址指定:
192.168.[4:7].[0:255] 匹配 192.168.4.0 到 192.168.7.255 这一网段中的所有 IP 地址。
3、验证清单:
如有疑问,可使用 ansible-navigator inventory 命令验证计算机是否存在于清单之中。
(1)以交互方式浏览清单和组:
运行 ansible-navigator inventory 命令,以交互式方式浏览清单主机和组。
注:若清单中有相同名称的主机和主机组,ansible-navigator inventory 命令将显示警告。
(2)列出组中的主机:
ansible-navigator inventory -m stdout --graph us 命令将绘制 us 组中的所有受管主机。
--graph 后加 ungrouped 可绘制出不属于某个组的所有受管主机(下图中的清单文件中不存在未分组的受管主机)。
(3)列出清单中的主机:
使用 ansible-navigator inventory -m stdout --list 命令可列出清单中的所有主机。
4、覆盖清单的位置:
/etc/ansible/hosts 文件是默认的静态 inventory 文件,但是通常不直接使用它,而是指定其他位置获取清单文件,通常定义到工作目录中。
运行 playbook 时使用的 ansible-navigator 命令可通过 --inventory PATHNAME 或 –i PATHNAME 选项在命令行中指定清单文件的位置,其中 PATHNAME 是所需清单文件的路径。
注:也可在 Ansible 配置文件中将其他位置指定为获取清单文件的默认位置。
Ansible inventory 内容可以动态生成,动态清单信息的来源包括公共 / 私有云提供商、Cobbler 系统信息和 LDAP 数据库,以及配置管理数据库( CMDB )。
注:Ansible 含有处理来自最常见提供商的动态主机、主机组和变量信息的脚本,如 Amazon EC2 、Cobbler 、Rackspace Cloud 和 OpenStack 等提供商。
二、管理 Ansible 配置文件:
1、Ansible 配置文件:
用户可在每个 Ansible 项目目录中创建和编辑两个文件,用于配置 Ansible 的行为和 ansible-navigator 命令的选项。
(1)ansible.cfg :
ansible.cfg 文件用于配置多个 Ansible 工具的行为。
(2)ansible-navigator.yml :
ansible-navigator.yml 文件用于配置 ansible-navigator 命令的默认选项。
(3)查看当前配置文件:
由于 Ansible 配置文件有多种,当前使用哪一个配置文件可能令人困惑,用户可使用 ansible --version 命令,显示安装的 Ansible 版本以及当前生效的配置文件。
执行 ansible 命令时使用 -v 选项也可以显示当前有效的 Ansible 配置文件。Ansible 只使用最高优先级配置文件中的设置,忽略其它配置文件的设置。
(4)配置文件注释:
Ansible 配置文件中支持通过 # 和 ; 的方式进行注释。
1)# 只支持行首注释,不支持行间注释;
2); 支持行间注释,左侧为有效内容,右侧为注释。
2、管理 Ansible 设置( ansible.cfg ):
ansible.cfg 由几个部分( section )组成,每一 section 的内容以键值对形式定义,section 的标题用方括号括起。
ansible.cfg 文件的基本配置包括以下两个部分:
(1)[defaults] :设置 Ansible 的默认值;
(2)[privilege_escalation] :配置 Ansible 如何在受管主机上执行特权升级。
注:参数说明如下表:
指令 描述 inventory 指定清单文件的路径 remote_user 指定 Ansible 用于连接受管主机的用户名,若未指定,则使用当前用户的名称
(注:在由 ansible-navigation 运行的基于容器自动化执行环境中,此参数始终为 root )
ask_pass 指示是否提示输入 SSH 密码
(注:若使用 SSH 公钥身份验证,默认值为 false )
become 指定连接后是否在受管主机上自动切换用户 become_method 指定如何切换用户(注:默认为 sudo )
become_user 指定要在受管主机上切换到哪个用户(注:默认为 root ) become_ask_pass 指示是否提示输入 become_method 参数密码(注:默认为 false )
3、查看 Ansible 配置:
ansible-navigator config 命令将显示当前 Ansible 配置,每一行描述一个 Ansible 配置参数。
注:(1)如果项目目录中不含 ansible.cfg 文件,Ansible 会查询用户主目录中的 ~/.ansible.cfg 文件,如果该也文件不存在,则会尝试使用 /etc/ansible/ansible.cfg 文件;
(2)如果使用 ansible-navigator ,则 ansible-navigator 命令会在自动化执行环境中查找以上这些文件。但在红帽支持的当前执行环境中,这些文件不存在或为空。
4、管理自动化内容导航( ansible-navigator.yml ):
用户可为 ansible-navigator 创建配置文件,以覆盖设置的默认值。文件可采用 JSON( .json ) 或 YAML( .yml 或 .yaml )格式。
(1)查找顺序:
自动化内容导航( Automation Content Navigator )按以下顺序查找配置文件,并使用它找到的第一个文件:
1)如果设置了 ANSIBLE_NAVIGATOR_CONFIG 环境变量,则使用所指定位置处的配置文件;
2)当前 Ansible 项目目录中的 ansible-navigator.yml 文件;
3)~/.ansible-navigator.yml 文件(主目录中)。
(2)ansible-navigator.yml 文件常见配置:
1)execution-environment 部分配置 ansible-navigator 命令所用的执行环境的设置;
2)定义执行环境要使用的容器镜像名称;
3)只有在本地机器上不存在容器镜像时,才需要拉取容器镜像;
4)enable 部分可禁用在使用 ansible-navigator run 命令时生成 playbook 工件( artifact )。如果运行 playbook 时需要提示输入密码,则必须禁用 playbook artifact 。
5、配置连接:
Ansible 需要知道如何与受管主机通信,而这可以在配置文件( ansible.cfg )中设置,包括如下内容:
(1)inventory 的地址。
(2)与受管主机的连接方式,默认为 SSH 。
注:1)Ansible 默认尝试连接与控制节点相同的用户,除非在 remote_user 参数中定义。
2)如果控制节点用户 SSH 到受管主机不需要输入密码,Ansible 将自动登录。如果不能,则需要 Ansbile 提示管理员输入密码( ask_pass = true );
3)建议提前为控制节点和受管主机建立 SSH password-less 连接。
(3)受管主机上的远程用户名,可能是 root,也可能是普通用户。
注:基于安全考虑,Ansible 需连接到受管主机的普通用户,然后进行提权获得 root 权限。
(4)如果是普通用户,需要知道如何提权成为 root( sudo )。
注:为了安全考虑,建议在 playbook 中设置 become: true ,而不是在 ansible.cfg 中设置 become = true(按需提权)。
(5)提权时是否需要提示输入 sudo 密码。