卫星与反塔融合

使用Red Hat Satellite和Red Hat Ansible自动化平台?从Satellite 6.3开始,它们可以彼此集成,以便Ansible Tower中的动态清单从Satellite提取主机列表。此外,如果使用Satellite初始化RHEL主机(即配置),则可以在此过程中内置Ansible Tower,以便它在新主机上自动运行配置脚本。



在本文中,我们将研究如何在Ansible Tower中配置动态广告资源,以使其从Satellite中提取主机,并通过示例展示如何使用它。此外,我们将向您展示在从Satellite初始化新主机后如何组织自动呼叫Ansible Tower。

1. Inventory. Satellite, Dynamic Inventory Ansible Tower


为了使Ansible Tower能够访问主机,主机组和其他相关信息的列表,它需要在Satellite中有一个帐户。该条目具有足够的最小权限,因此我们将在Satellite中创建一个新角色,仅为其授予Ansible Tower所需的权限,然后创建一个新帐户并为其分配此角色。

Satellite 6.6和更高版本已经为此准备好了Ansible Tower库存读取器角色,因此您可以跳过以下步骤来创建角色。

在Satellite 6.3-6.5中,必须手动创建角色。为此,请转到Satellite Web界面,转到“管理”屏幕,选择“角色”,然后单击“创建角色”。

我们将此角色命名为ansible_tower_integration_role为其设置位置和组织



单击提交以创建角色。之后,点击她的名字,然后转到“过滤器”标签。单击绿色的“新建过滤器”按钮,并一次添加以下过滤器:

资源类型:主机,权限:view_hosts
资源类型:主机组,权限:view_hostgroups
资源类型:事实值,权限:view_facts

因此,以下过滤器应具有一定的作用:



因此,我们创建了一个角色。现在,我们将在Satellite中启动一个新用户,进入“ 管理”菜单,选择“ 用户”,然后点击创建用户。我们将此用户命名为ansible_integration,将Authorized by参数更改INTERNAL并设置密码。然后,在“ 位置和组织”选项卡上,选择适当的位置/组织。最后,转到“ 角色”选项卡,并为该用户分配新创建的ansible_tower_integration_role角色(如果您有Satellite 6.3-6.5)或内置的Ansible Tower广告资源阅读器角色(卫星6.6及更高版本)。最后,单击提交为该用户创建一个帐户。

定制Ansible塔


现在转到Ansible Tower Web界面并转到“ 凭证”屏幕单击绿色的+(添加)按钮创建一个新的凭据条目。我们将其称为satellite_integration,在凭据类型中指定Red Hat Satellite 6然后,输入URL(在本例中为Satellite 6)和用户名(在本例中为ansible_integration),密码是我们在上面的Satellite中设置的密码:



然后点击保存

现在,进入“ 库存”屏幕,单击绿色的+(添加)按钮,然后选择“ 库存”指定satellite_inventory作为名称,然后单击“ 保存”以创建清单。之后,转到新创建的清单的“源”选项卡,然后单击绿色的+(添加)按钮。我们使用卫星作为源名称,并将源类型指定为Red Hat Satellite 6。在“凭据”字段中,指定上一步中创建的satellite_integration。启用覆盖复选框“更新选项”控制组中的“ 覆盖变量启动时更新”(您可以使用右侧的问号了解有关这些选项的更多信息)。另外,在“ 缓存超时(秒)”字段中,输入90并单击“ 保存”



现在,无需离开Sources选项卡,单击Start sync process图标



我们等到图标变成绿色-这表明同步已成功完成。

现在,您可以转到“主机”选项卡,查看从Satellite提取的数据:



您还可以查看“网上论坛”标签:



如您所见,同步不仅从Satellite提取主机列表,而且根据Satellite中的相应内容视图,主机组,生命周期环境,位置和组织将它们分为几组。该分组可用于将目标主机上的Ansible脚本作为目标,这是非常强大的功能。

如果在“主机”选项卡上选择一个主机,我们将看到在Satellite和Ansible Tower之间,有关该主机的许多辅助信息都是同步的,这些信息以变量的形式显示。然后可以在Ansible脚本中使用这些变量:



使用与卫星关联的动态广告资源


因此,我们同步了卫星和Ansible塔,现在我们将考虑如何在实践中使用它。

最简单的方法是在Ansible Tower模板中使用satellite_inventory作为清单源。如果在脚本中指定了hosts:all选项,则该脚本将在所有Satellite主机上运行。

一个更高级的选项是在脚本中使用自动创建的清单组(如何创建它们-请参见上文),换句话说,在主机行中指定所需的主机组。例如,在这种情况下,其中安装了屏幕软件包:

---
- name: Install screen package
  hosts: "foreman_hostgroup_rhel6"
  tasks:
  - yum:
      name: screen
      state: installed

在这里,我们已经注册了主机:foreman_hostgroup_rhel6,从而指示了Satellite中组成rhel6主机组的主机列表。因此,该脚本将仅在这些主机上执行。

此外,在脚本中,您可以在主机行中指定Ansible Tower与Satellite同步期间接收到的那些变量。例如,您可以这样做:

---
- name: Install screen package
  hosts: "{{ hosts_var }}"
  tasks:
  - yum:
      name: screen
      state: installed

结果,我们将能够即时更改Ansible Tower中的作业模板,从而通过外部变量指示一个库存组。



在此示例中,模板将仅在Satellite 中属于rhel7组成员的主机上运行

此外,可以配置作业模板,以便在启动时它将要求用户提供hosts_var变量的值(并同时以注释的形式显示可用的库存组):



上面的屏幕说明了启动模板时提示用户输入要在其主机上运行脚本的Satellite清单组的名称的情况。

此外,您可以在同步期间使用从Satellite提取的主机变量。例如,这是脚本的样子,显示了如何引用这些变量:

---
- name: Show Satellite variables
  hosts: all
  tasks:
  - name: Show subscription_status
    debug:
      msg: >
        Subscription Status: {{ foreman.subscription_status_label }}
  - name: Show Errata Counts
    debug:
      msg: >
        Bug fixes: {{ foreman.content_facet_attributes.errata_counts.bugfix }},
        Security: {{ foreman.content_facet_attributes.errata_counts.security }},
        Enhancement: {{ foreman.content_facet_attributes.errata_counts.enhancement }},
        Total: {{ foreman.content_facet_attributes.errata_counts.total }}

如果您在Ansible Tower中运行此脚本,它将显示变量的值:



当然,这些变量可以在有条件的构造中使用,以便仅在某些条件下启动任务。例如,如果主机没有安全补丁,或者主机订阅无效。

总结一下


红帽卫星和红帽Ansible本身是非常强大的工具,它们的集成提供了切实的协同作用。上面,我们展示了如何在Ansible中将Satellite用作动态库存的数据源并在实践中使用它。

第2部分。通过预配置回调自动配置新主机


除了许多其他功能,Satellite还能够初始化主机,换句话说,执行配置。反过来,Ansible Tower则用于配置主机。集成使您可以确保在通过Satellite初始化新的RHEL主机之后,Ansible Tower将自动连接到该主机并在其上运行相应的配置脚本。显然,这种方案为系统管理员节省了大量时间,帮助他们快速响应组织的需求。

应该注意的是,该方案仅在满足多个条件的情况下才有效。首先,应将卫星用作Ansible Tower中的动态库存数据源(我们在上一部分中讨论了此问题)。其次,主机初始化不仅应通过Satellite完成,而且还应通过主机组机制进行工作(有关更多详细信息,请参见《配置指南》)。

下面我们展示了如何配置Satellite和Ansible Tower,以便在初始化主机之后,它将自动运行Ansible配置脚本。

总览


IT自动化工具(例如Ansible Tower)通常分为两类之一:有些通过推入方法进行工作,而另一些通过拉入方法进行工作。在Ansible Tower所属的推送系统中,自动化服务器会启动与主机的连接。在拉式系统中,发起者是主机,其本身与自动化服务器进行通信。

在我们的情况下,通过在新主机上自动编写脚本,使用了混合方案。新初始化的主机与自动化服务器联系,以请求对其进行“回调”并进行配置。此后,自动化服务器将连接到该主机,并在其上运行主机请求的配置脚本。因此,在Ansible Tower中,此机制称为配置回调,可以转换为“初始化回调”。

为了说明为什么根本需要配置回调,请考虑以下情况:我们有一个特定的主机配置脚本,该脚本每天午夜运行。假设在上午8点,我们正在通过Satellite一次初始化几台新服务器。同时,Satellite在Ansible Tower中用作动态库存数据源,因此创建的主机自动落入Ansible。但是,自动化脚本的下一次启动将仅在午夜(即16小时后)进行。显然,这远非理想,我希望脚本在新主​​机初始化后立即运行。为此,还考虑了预配置回调。

通常,预配置回调的配置和工作方式如下:

  1. Ansible Tower credential root, Satellite . Tower , .
  2. Job Template Ansible Tower provisioning callback. URL Host Config Key, Ansible.
  3. Satellite , provisioning callback Ansible Tower, : URL- Ansible Tower, Host Config Key Ansible.
  4. Satellite /etc/systemd/system/ansible-callback.service ( RHEL 7 8; RHEL 6 ). provisioning callback Ansible Tower, , (URL-, Host Config Key ).
  5. Ansible Tower Host Config Key. , Tower , root, Job Template. , .

Ansible Tower Provisioning Callback


让我们从在Ansible Tower服务器上创建配置脚本开始,该脚本更改/ etc / motd的内容,创建某种用户,并安装特定的软件包。然后,我们将使用此脚本在初始化新主机后立即对其进行配置。

在现实生活中,自动化脚本很可能存储在某个版本控制系统中,但为简单起见,我们假设它们直接位于Ansible Tower服务器上。因此,我们通过运行以下命令,通过SSH进入Ansible Tower服务器并为其创建目录/ var / lib / awx / projects / provision:

# mkdir /var/lib/awx/projects/provision

然后,我们在此目录中创建脚本,将其称为provision.yaml,并将以下内容写入其中:

---

- name: Provision new host

  hosts: all

  tasks:

  - name: Set content in /etc/motd 

    copy:

      content: Authorized use only!

      dest: /etc/motd

      mode: 644

      owner: root

      group: root


  - name: Create brian user account

    user:

      name: brian

      uid: 10000

      state: present


  - name: Install tmux package

    yum:

      name: tmux

      state: present


现在转到塔式Web界面,然后转到“凭据”屏幕。我们单击带有绿色加号的按钮以创建新的凭据记录,为其命名为Provisioning_root,还将凭据类型设置为Machine。在“用户名”字段中,写入root,在“密码”字段中,指定在Satellite中指定的密码,以在Satellite中相应主机组的新主机上使用(其名称可以在“操作系统”选项卡上的Satellite Web界面中找到)。使用此条目,Ansible Tower将能够登录通过Satellite初始化期间创建的新主机。



之后,在Ansible Tower界面中,转到“项目”屏幕,然后单击绿色加号创建一个新项目。将其称为提供,将“ SCM类型”更改为“手动”,然后将提供指定为“ Playbook目录”:



然后,在Ansible Tower界面中,转到“模板”屏幕,单击绿色加号以创建新的作业模板。我们将其称为“供应”,在“库存”字段中编写“卫星”,在“项目”字段-“供应”中,在“ Playbook”字段中-“ provision.yaml”,在“凭据”字段中-“ provisioning_root”。此外,您需要启用“允许配置回调”复选框,然后单击“主机配置密钥”字段右侧的魔术棒图标以生成密钥。为了请求配置回调,此密钥是必需的,它不能是任何人,而只能是知道主机配置密钥的人。如果没有正确的密钥,Ansible Tower服务器将无法响应该请求。



现在,我们需要记住主机配置密钥的未来值以及模板ID,可以从此作业模板的URL中找到它们:

https://tower.example.com/#/templates/job_template/11

在此示例中,ID为11。

配置卫星以配置回调


现在转到卫星Web界面,转到“配置”屏幕,然后单击“主机组”。我们选择用于初始化新主机的现有主机组,在本例中为RHEL8。

在主机组编辑屏幕上,转到“参数”选项卡并创建4个新参数:

ansible_host_config_key-在这里,我们从Ansible Tower模板中输入主机配置密钥。
ansible_job_template_id-在这里,我们编写模板ID,该ID是我们先前从模板URL中找到的。
ansible_tower_fqdn是Ansible塔服务器的标准域名。
ansible_tower_provisioning-设置为true。



检查一切如何


现在,从Satellite初始化新主机,并验证预配置回调函数是否正常运行,并在该主机上自动运行我们的脚本。

在Satellite Web界面中,转到Hosts屏幕,单击Create Host并验证是否使用了刚刚为其创建4个新参数的组,即RHEL 8组。



主机初始化完成后,我们需要确保已成功启动其上的模板。为此,请转到Ansible Tower Web界面中的“模板”屏幕,在列表中查找我们的模板,然后查看其指示器最左边的正方形是否变为绿色:



我们单击此绿色框以查看启动详细信息,在我们的情况下成功完成了。请注意,此任务有一个限制(Limit)-仅启动在初始化期间创建的新主机。嗯,这并不奇怪,因为配置回调机制仅在请求模板的主机上运行模板。



现在,我们转到新创建的主机,并检查它是否与脚本中编写的内容匹配:

[root@provision-test-rhel8 ~]# rpm -qa | grep tmux
tmux-2.7-1.el8.x86_64

[root@provision-test-rhel8 ~]# id brian
uid=10000(brian) gid=10000(brian) groups=10000(brian)

[root@provision-test-rhel8 ~]# cat /etc/motd
Authorized use only!

故障排除


如果Ansible Tower模板未在通过Satellite初始化的新主机上自动启动,则需要检查一些事项。

第一步是查明Ansible Tower是否收到配置回叫的请求,脚本的运行方式以及是否启动。为此,请转到塔式界面中的“模板”屏幕,然后查看模板名称旁边的指示器的颜色:绿色-启动成功,红色-启动失败。



如果该框为红色,则单击它并查找其他信息以了解启动失败的原因(这些错误既可能是脚本中的语法错误,也可能是其他问题)。

如果正方形为绿色,则无论如何我们都单击并查找,因为该任务可以报告成功执行,但实际上并没有在主机上启动。例如,如果脚本中的主机行指示特定的主机和组,但不包括初始化期间创建的主机,则该任务将报告成功,但是其他信息将显示为“正在跳过:没有匹配的主机”。

如果指示器正方形既不是绿色也不是红色,则需要从检查Satellite中的主机组的参数开始。确保在此处正确指定Ansible Tower服务器URL,主机配置密钥和模板ID。

接下来,转到新初始化的主机,并检查是否存在文件/etc/systemd/system/ansible-callback.service(在RHEL 7或8系统上)或文件/root/ansible_provisioning_call.sh(RHEL 6)。

如果该文件不存在,请验证此主机组的ansible_tower_provisioning参数是否设置为true,以及Satellite服务器上的初始化模式是否未更改。
如果主机上存在文件/etc/systemd/system/ansible-callback.service,则将其打开并查找发送配置回调请求的URL:

[root@provision-test-rhel8 ~]# cat /etc/systemd/system/ansible-callback.service
[Unit]
Description=Provisioning callback to Ansible Tower
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -k -s --data "host_config_key=aa5ebe82-491c-4fbb-bd36-a6657549451e" https://tower.example.com/api/v2/job_templates/11/callback/
ExecStartPost=/usr/bin/systemctl disable ansible-callback

[Install]
WantedBy=multi-user.target

您可以运行curl并手动复制此文件中指定的命令,以手动启动配置回调:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=aa5ebe82-491c-4fbb-bd36-a6657549451e" https://tower.example.com/api/v2/job_templates/11/callback/

如果指定了无效的主机配置密钥,我们将收到以下错误消息:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=wrong-key-here" https://tower.example.com/api/v2/job_templates/11/callback/

{"detail":"You do not have permission to perform this action."}

如果未正确指定模板ID(此处为-43,而不是11),则答案如下:

[root@provision-test-rhel8 ~]# /usr/bin/curl -k -s --data "host_config_key=wrong-key-here" https://tower.example.com/api/v2/job_templates/43/callback/

{"detail":"Not found."}

您还可以在curl命令中禁用静默(-s)模式,以使其显示与解析主机名有关的错误,如以下示例所示,其中我们用不正确的ansible-tower.example.com替换了正确的名称ansible.example.com。 :

[root@provision-test-rhel8 ~]# /usr/bin/curl -k  --data "host_config_key=wrong-key-here" https://ansible-tower.example.com/api/v2/job_templates/11/callback/

curl: (6) Could not resolve host: ansible-tower.example.com

另外,在找出错误原因时,Ansible Tower服务器上的/var/log/tower/tower.log文件可能会派上用场。
例如,此文件记录无效的主机配置密钥的使用:

2019-11-19 23:19:17,371 WARNING  awx.api.generics status 403 received by user AnonymousUser attempting to access /api/v2/job_templates/11/callback/ from 192.168.0.138

这也解决了无效模板ID的使用:

2019-11-19 23:19:49,093 WARNING  awx.api.generics status 404 received by user AnonymousUser attempting to access /api/v2/job_templates/43/callback/ from 192.168.0.138

2019-11-19 23:19:49,095 WARNING  django.request Not Found: /api/v2/job_templates/43/callback/

总结一下


Satellite和Ansible Tower的集成可以极大地优化新主机的初始化和配置,从而为系统管理员节省了大量时间,帮助他们更快地响应组织的需求。

3月24日,从11:00到12:30,Red Hat将举行一个网络研讨会“您需要了解的自动化知识:基本的Ansible技能”。

自动化是一个热门话题,并且涉及数字化转换的请求数量。我们将与Ansible和Ansible Tower一起介绍您对自动化的看法,这将是为您打开声明性自动化工具的美好新世界的基本信息。
在这次网络研讨会之后,您将了解基本的Ansible实体,例如剧本,广告资源,模块。我们将与您一起掌握基本的YAML语法,以便您可以编写自己的脚本。它还将考虑启动脚本和提升权限。

结果,您将获得一套基本的技能,使您能够成功地学习文档和其他文献,而不会一直感到自己缺少某些东西。注册并过来!

All Articles