我们想听听您的意见!帮助我们深入了解 Ansible 生态系统的现状。
参加 2024 年 Ansible 项目调查

Ansible 和 ServiceNow 第 3 部分:向 Red Hat Ansible Tower 发出出站 RESTful API 调用

Ansible 和 ServiceNow 第 3 部分:向 Red Hat Ansible Tower 发出出站 RESTful API 调用

Red Hat Ansible Tower 通过允许以受控方式扩展自动化来提供价值 - 用户可以仅为他们需要访问的流程和目标运行剧本,而不会再进行任何操作。 

Ansible Tower 不仅提供大规模自动化,而且还与多个外部平台集成。在许多情况下,这意味着用户可以在后台启动 Ansible Tower 模板时使用他们习惯的界面。 

ServiceNow 是当今最普遍的自助服务平台之一,许多与 Ansible Tower 客户进行的企业对话都集中在 ServiceNow 集成上。考虑到这一点,这篇博文将介绍如何设置 ServiceNow 实例以使用 OAuth2 身份验证向 Ansible Tower 发出出站 RESTful API 调用。

使用以下软件版本

  • Ansible Tower:3.4、3.5
  • ServiceNow:伦敦、马德里

如果您注册 ServiceNow 开发人员帐户,ServiceNow 提供一个免费实例,可用于复制和测试此功能。您的 ServiceNow 实例需要能够连接到 Ansible Tower 实例。此外,您可以访问 https://ansible.org.cn/license 获取 Ansible Tower 的试用版许可证。有关安装 Ansible Tower 的说明,请点击 这里。 

准备 Ansible Tower

  1. 在 Ansible Tower 中,导航到屏幕左侧的应用程序。点击右侧的绿色加号按钮,将显示一个创建应用程序对话框屏幕。填写以下字段

  2. 名称:将与 Ansible Tower 通信的应用程序的描述性名称

  3. 组织:您希望此应用程序所属的组织
  4. 授权授予类型:授权码
  5. 重定向 URI:https://<snow_instance_id>.service-now.com/oauth_redirect.do
  6. 客户端类型:机密

    image3-4

  7. 点击右侧的绿色保存按钮,此时将弹出一个窗口,显示 ServiceNow 与 Ansible Tower 进行 API 调用所需的客户端 ID 和客户端密钥。这将只显示一次,因此请捕获这些值以备后用。

    image18

  8. 接下来,导航到屏幕左侧的设置->系统。您需要将允许外部用户创建 Oauth2 令牌选项切换为开启。点击绿色保存按钮以确认更改。

    image4-4

准备 ServiceNow

  1. 转到 ServiceNow,导航到系统定义->证书。这将带您进入 Service Now 使用的所有证书的屏幕。点击蓝色新建按钮,并填写以下详细信息

  2. 名称:证书的描述性名称

  3. 格式:PEM
  4. 类型:信任存储证书
  5. PEM 证书:用于对 Ansible Tower 进行身份验证的证书。您可以使用 Tower 服务器上的内置证书,该证书位于 /etc/tower/tower.cert。将此文件的内容复制到 ServiceNow 中的字段中。

    点击底部的提交按钮。

    image9-1

  6. 在 ServiceNow 中,导航到系统 OAuth->应用程序注册表。这将带您进入 ServiceNow 与其通信的所有应用程序的屏幕。点击蓝色新建按钮,您将被问及要设置哪种 Oauth 应用程序。选择连接到第三方 Oauth 提供商

    image20

  7. 在新的应用程序屏幕上,填写以下详细信息

  8. 名称:描述性应用程序名称

  9. 客户端 ID:您从 Ansible Tower 获得的客户端 ID
  10. 客户端密钥:您从 Ansible Tower 获得的客户端密钥
  11. 默认授予类型:授权码
  12. 授权 URL:https://<tower_url>/api/o/authorize/
  13. 令牌 URL:https://<tower_url>/api/o/token/
  14. 重定向 URL:https://<snow_instance_id>.service-now.com/oauth_redirect.do

    点击底部的提交按钮。

    image19

  15. 您应该被带到所有应用程序注册表的列表中。点击您刚刚创建的应用程序。在底部,应该有两个选项卡:点击选项卡Oauth 实体范围。在此下方,有一个名为插入新行...的部分。双击此处,并将字段填写为写入范围。点击绿色对勾确认此更改。然后,右键点击顶部显示应用程序注册表的灰色区域,并在弹出的菜单中点击保存。

    image11-1

  16. 写入范围现在应该可以点击了。点击它,在您被带到的对话框窗口中,在 Oauth 范围框中输入write。点击底部的更新按钮。

    image7-1

  17. 回到应用程序设置页面,滚动到底部并点击Oauth 实体配置文件选项卡。应该有一个实体配置文件填充 - 点击进入。

    image21

  18. 您将被带到 Oauth 实体配置文件窗口。在底部,在 Oauth 实体范围字段中输入写入范围。点击绿色对勾并更新。

    image23

  19. 导航到系统 Web 服务->REST 消息。点击蓝色的新建按钮。在出现的对话框窗口中,填写以下字段

  20. 名称:描述性 REST 消息名称

  21. 端点:您希望执行的 Ansible Tower 操作的 URL 端点。这可以从可浏览的 API 中获取,网址为 https://<tower_url>/api
  22. 身份验证类型:Oauth 2.0
  23. Oauth 配置文件:选择您创建的 Oauth 配置文件

    右键点击顶部灰色区域;点击保存

    image10-1

  24. 点击 REST 消息屏幕上的获取 Oauth 令牌按钮。这将生成一个弹出窗口,要求您授权 ServiceNow 对您的 Ansible Tower 实例/集群进行身份验证。点击授权。ServiceNow 现在将拥有一个 OAuth2 令牌来对您的 Ansible Tower 服务器进行身份验证。

    image22

  25. 在底部的 HTTP 方法部分,点击蓝色的新建按钮。在出现的新的对话框窗口中,填写以下字段

  26. HTTP 方法:POST

  27. 名称:描述性 HTTP 方法名称
  28. 端点:您希望执行的 Ansible Tower 操作的 URL 端点。这可以从可浏览的 API 中获取,网址为 https://<tower_url>/api
  29. HTTP 标头(在 HTTP 请求选项卡下)
    • 唯一需要的 HTTP 标头是Content-Type: application/json

您可以使用这些参数与测试链接一起启动对 Ansible Tower 的 RESTful 调用。

image6-3

测试 ServiceNow 和 Ansible Tower 之间的连接

点击测试链接将带您进入一个结果屏幕,该屏幕应该表明 RESTful 调用已成功发送到 Ansible Tower。在本例中,ServiceNow 启动了一个 Ansible Tower 作业模板,并且响应包括 Ansible Tower 中的作业 ID:276。

image eight

您可以通过返回 Ansible Tower 并点击屏幕左侧的作业部分来确认此作业模板实际上已启动;列表中应该有一个具有相同 ID 的作业(并且,根据剧本的大小,该作业可能仍在处理中)。

image15

创建用于启动 Ansible Tower 作业模板的 ServiceNow 目录项

现在您能够从 ServiceNow 向 Ansible Tower 发出出站 RESTful 调用,是时候创建一个目录项,以便用户以生产自助服务的方式在 ServiceNow 中选择该目录项了。在 HTTP 方法选项中,点击预览脚本使用情况链接

image nine

复制出现的脚本,并将其粘贴到文本编辑器中以备后用。

  1. 在 ServiceNow 中,导航到工作流->工作流编辑器。这将打开一个新的选项卡,其中包含所有现有 ServiceNow 工作流的列表。点击蓝色的新建工作流按钮

    image16

  2. 在出现的新建工作流对话框中,填写以下选项

  3. 名称:工作流的描述性名称

  4. 表:请求的项目 sc_req_item

    其他所有内容都可以保留。点击提交按钮。

    image1-10

  5. 结果工作流编辑器将只有一个开始框和一个结束框。点击该行(它将变为蓝色,表示已选中),然后按删除键将其删除。

    image14-1

  6. 在工作流编辑器屏幕的右侧,选择核心选项卡,并在核心活动->实用程序下,将运行脚本选项拖动到工作流编辑器中。在出现的新的对话框中,输入一个描述性名称,并粘贴您之前捕获的脚本。点击提交保存脚本。

    image12-1

  7. 开始绘制一条连接到新创建的运行脚本框的连接线,再从运行脚本框绘制一条连接到结束的连接线。之后,点击工作流名称左侧的三个水平线,然后选择发布选项。现在您已准备好将此工作流与目录项关联。

    image8-1

  8. 导航到服务目录->目录定义->维护项目。点击结果项目列表中的蓝色新建按钮。在出现的对话框中,填写以下字段

  9. 名称:目录项的描述性名称

  10. 目录:此项应该属于的目录
  11. 类别:如果您希望用户能够搜索此项目,则需要此项

    在流程引擎选项卡中,使用您刚创建的工作流填充 **工作流** 字段。点击提交按钮。您尚未创建新的目录项目!

    image5-4

  12. 最后,要运行此目录项目,请导航到 **自助服务 -> 主页** 并搜索您刚创建的目录项目。找到后,点击 **立即订购** 按钮。您可以在 ServiceNow 中看到结果页面弹出,并可以确认作业正在 Ansible Tower 中运行。

恭喜!完成这些步骤后,您现在可以使用 ServiceNow 目录项目在 Ansible Tower 中启动作业和工作流模板。这非常适合允许最终用户使用他们熟悉的前端来执行各种复杂程度的自动化任务。这种熟悉程度对整个企业的价值实现时间大有帮助,而不仅仅是负责编写所用剧本的团队。