Cloud Assembly 支持与 Ansible 开源配置管理集成。配置集成后,可以将 Ansible 组件添加到新部署或现有部署中。
将 Ansible 开源与 Cloud Assembly 集成时,可以将其配置为置备新计算机时按给定顺序运行一个或多个 Ansible playbook,以自动执行配置管理。可以在云模板中为部署指定所需的 playbook。
设置 Ansible 集成时,必须指定 Ansible 开源主机,以及可为管理资源定义信息的清单文件路径。此外,还必须提供用于访问 Ansible 开源实例的名称和密码。稍后,在将 Ansible 组件添加到部署时,可以更新连接以使用基于密钥的身份验证。
默认情况下,Ansible 使用 ssh 连接到物理计算机。如果使用的是在云模板中通过 osType Windows 属性指定的 Windows 计算机,则 connection_type
变量将自动设置为 winrm
。
最初,Ansible 集成使用集成中提供的用户/密码或用户/密钥凭据连接到 Ansible 控制计算机。连接成功后,将验证云模板中所提供 Playbook 的语法。
如果验证成功,则会在 Ansible 控制计算机中的 ~/var/tmp/vmware/provider/user_defined_script/ 下创建执行文件夹。将从此文件夹运行脚本,以将主机添加到清单,创建主机变量文件(包括设置身份验证模式以连接到主机),最后运行 Playbook。此时,云模板中提供的凭据用于从 Ansible 控制计算机连接到主机。
Ansible 集成支持不使用 IP 地址的物理机。对于在公有云(如 AWS、Azure 和 GCP)上置备的计算机,仅当计算机连接到公共网络时,才会在所创建资源的 address 属性中填充计算机的公共 IP 地址。对于未连接到公共网络的计算机,Ansible 集成将从连接到该计算机的网络查找 IP 地址。如果连接了多个网络,Ansible 集成将查找 deviceIndex(即,连接到计算机的网卡 (NIC) 的索引)为最小的网络。如果蓝图中未指定 deviceIndex 属性,则集成将使用第一个连接的网络。
有关为 Cloud Assembly 中的集成配置 Ansible 开源的更多详细信息,请参见什么是 Cloud Assembly 中的配置管理。
前提条件
- Ansible 控制计算机必须使用 Ansible 版本。有关受支持版本的信息,请参见 vRealize Automation 支持列表。
- Ansible 日志详细级别必须设置为默认值零。
- 用户必须具有 Ansible 清单文件所在目录的读取/写入权限。此外,如果已存在清单文件,用户也必须具有该文件的读取/写入权限。
- 如果使用的是具有 sudo 选项的非 root 用户,请确保在 sudoers 文件中设置以下内容:
Defaults:user_name !requiretty
和
username ALL=(ALL) NOPASSWD: ALL
- 通过在 /etc/ansible/ansible.cfg 或 ~/.ansible.cfg 中设置
host_key_checking = False
,确保停用主机密钥检查。 - 通过将以下行添加到 /etc/ansible/ansible.cfg 或 ~/.ansible.cfg 文件,确保设置保管库密码:
vault_password_file = /path/to/password_file
保管库密码文件包含纯文本格式的密码,仅当云模板或部署提供在 ACM 和节点之间使用的用户名和密码组合时,才会使用该密码,如以下示例中所示。echo 'myStr0ng9@88w0rd' > ~/.ansible_vault_password.txt echo 'ANSIBLE_VAULT_PASSWORD_FILE=~/.ansible_vault_password.txt' >> ~/.profile # Instead of this way, you can also set it setting 'vault_password_file=~/.ansible_vault_password.txt' in either /etc/ansible/ansible.cfg or ~/.ansible.cfg
- 为避免在尝试运行 playbook 时出现主机密钥故障,建议您在 /etc/ansible/ansible config 中包含以下设置。
[paramiko_connection] record_host_keys = False [ssh_connection] #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s ssh_args = -o UserKnownHostsFile=/dev/null # If you already have any options set for ssh_args, just add the additional option shown here at the end.
过程
结果
Ansible 可与云模板一同使用。
下一步做什么
将 Ansible 组件添加到所需云模板。
- 在云模板画布页面上,选择云模板选项菜单上“配置管理”标题下的“Ansible”,然后将 Ansible 组件拖动到画布。
- 使用右侧面板配置适当的 Ansible 属性,例如,指定要运行的 playbook。
在 Ansible 中,用户可以为单个主机分配一个变量,然后在 playbook 中使用该变量。通过 Ansible 开源集成,可以在云模板中指定这些主机变量。hostVariables
属性必须采用正确的 YAML 格式(Ansible 控制计算机要求采用此格式),且此内容将放置在以下位置:
parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml
Ansible 清单文件的默认位置在 Cloud Assembly 的“集成”页面中添加的 Ansible 帐户中进行定义。Ansible 集成不会在云模板中验证 hostVariable
YAML 语法,但如果在格式或语法错误的情况下运行 playbook,Ansible 控制计算机将出现错误。
以下云模板 YAML 代码段显示了 hostVariables
属性的示例用法。
Cloud_Ansible_1: type: Cloud.Ansible properties: host: '${resource.AnsibleLinuxVM.*}' osType: linux account: ansible-CAVA username: ${input.username} password: ${input.password} maxConnectionRetries: 20 groups: - linux_vms playbooks: provision: - /root/ansible-playbooks/install_web_server.yml hostVariables: | message: Hello ${env.requestedBy} project: ${env.projectName}
- Ansible 资源中的用户名和密码。
- Ansible 资源中的用户名和 privateKeyFile。
- Ansible 资源中的用户名和计算资源中的 privatekey,方法是将 remoteAccess 指定为
generatedPublicPrivateKey
。
创建 Ansible 开源集成时,必须提供登录信息,以便集成用户使用 SSH 连接到 Ansible 控制计算机。要在集成中运行 Playbook,可以在集成 YAML 代码中指定其他用户。username
属性是必需项,需要该属性才能连接到 Ansible 将在其中进行更改的虚拟机。playbookRunUsername
属性是可选项,可以提供该属性以在 Ansible 节点上执行 Playbook。playbookRunUsername
的默认值为 Ansible 端点集成用户名。
如果指定其他用户,该用户应具有对 Ansible 主机文件的写入访问权限,并且应有权创建私钥文件。
将 Ansible 开源图标添加到云模板时,vRealize Automation 会为连接的虚拟机创建主机条目。默认情况下,vRealize Automation 将使用虚拟机的资源名称创建主机条目,但可以使用蓝图 YAML 中的 hostName
属性指定任何名称。为了与计算机进行通信,vRealize Automation 将为主机条目创建 ansible_host: IP Address
变量。可以覆盖默认行为,使用 FQDN 配置通信,具体方法为在 hostVariables
下指定关键字 ansible_host
,并提供 FQDN 作为其值。以下 YAML 代码片段显示了如何配置主机名和 FQDN 通信的示例:
Cloud_Ansible: type: Cloud Ansible properties: osType: linux username: ubuntu groups: - sample hostName: resource name host: name of host account: name of account hostVariables: ansible_host:Host FQDN
在此示例中,通过提供 FQDN 覆盖默认的 ansible_host
值。如果用户希望 Ansible 开源使用 FQDN 连接到主机,此功能可能非常有用。
YAML 中 hostVariables
的默认值为 ansible_host:IP_address
,并且 IP 地址用来与服务器通信。
如果 Ansible 开源的 YAML 计数属性大于 1,则主机名可以映射到相应虚拟机的任何属性。以下示例显示了名为 Ubuntu-VM 的虚拟机资源的映射(如果要将其地址属性映射到主机名)。
hostname: '${resource.Ubuntu-VM.address[count.index]}'
在云模板中,确保在集成帐户中指定的用户可以访问 Ansible Playbook 的路径。可以使用绝对路径指定 Playbook 位置,但这不是必需操作。建议使用用户主文件夹的绝对路径,这样,即使 Ansible 集成凭据随时间发生更改,路径仍保持有效。