Ansible 和 ServiceNow 第 1 部分,创建和关闭工单
Ansible 和 ServiceNow 第 1 部分,创建和关闭工单
作为一名网络工程师,我讨厌填写工单。无论何时路由器重启或远程站点发生停电,随之而来的工单生成几乎占据了我一天中的 50%。如果有一种方法可以自动化工单创建,我就能节省大量时间。唯一需要提供的东西就是特定于案例的评论部分,需要提供有关问题的更多信息。
虽然工单创建是一项重要的活动,但在当时自动化并不是一个选项。这令人惊讶,因为我的管理层总是要求我在工单中包含更多信息。工单通常会在几个月后才会被审查,有时根本没有创建或包含的信息不相关。
快进到今天,公司现在从工单中进行数据挖掘,使用从工单创建期间直接从设备提取的一组标准事实,例如网络平台、软件版本、正常运行时间等。网络运营 (NetOps) 团队现在使用海量的工单数据来做出预算决策。
例如,如果由于电源问题导致 400 次网络中断,那么 NetOps 就可以提出一个理由,花费 40,000 美元用于电池备份,因为这已经证明可以每年防止大约 400 次中断。能够访问这些指标对于做出明智的业务决策非常有价值。
本系列中的第一个博客介绍了 Ansible 如何自动化来自 ServiceNow(一个流行的基于云的 SaaS 提供商)的变更请求。为了方便起见,ServiceNow 为开发人员提供了一个测试实例来使用 Ansible Playbook,这将用于本博客文章和以后的博客文章。您可以在 ServiceNow 开发人员门户网站上注册您自己的免费开发人员实例。
创建 ServiceNow 工单
Ansible 发行版包含snow_record 模块,该模块使打开和关闭 ServiceNow 工单变得容易。首先需要安装 pysnow
Python 库才能使用此模块。
下一个要求是获取用于向您最近创建的基于云的 ServiceNow 开发人员实例进行身份验证的 username
、password
和 instance
。
注意:实例应类似于以下格式:dev99999,而不是完整的 URL
instance:_http://dev99999.service-now.com
,如下面的 change_request_vars.yml
中所示
--- #snow_record variables sn_username: admin sn_password: my_password sn_instance: dev99999 #data variables sn_severity: 2 sn_priority: 2
以下是创建 ServiceNow 工单的 Ansible Playbook
--- - name: Create ticket with notes hosts: localhost gather_facts: no connection: local tasks: - name: include vars include_vars: change_request_vars.yml - name: Create a change request snow_record: state: present table: change_request username: "{{ sn_username }}" password: "{{ sn_password }}" instance: "{{ sn_instance }}" data: severity: "{{ sn_severity }}" priority: "{{ sn_priority }}" short_description: "This is a test opened by Ansible" register: new_incident - debug: var: new_incident.record
利用 ServiceNow API
table
参数决定将打开哪种类型的工单。确定可用其他参数的一个好方法是查看 ServiceNow API 在您创建工单后发回的 JSON 字典。我正在使用 register
为该字典指定一个变量名称,然后使用 debug
在终端中查看它。出于简洁起见,以下是完整字典的一部分
这在详细说明您可以在任务的 data
部分添加的参数方面非常方便。如果您只想查看字典的一个参数,例如工单号,您可以简单地修改您的调试使其如下所示
- debug: var=new_incident.record.number
此变量 (var) 定义为从存储的寄存器 new_change_request
中提取,然后显示名为 record
的字典和该字典中名为 number
的参数。
您可以对记录字典的任何参数执行相同的操作,例如 close_code
、state
、comments
等。
在 ServiceNow Web 门户中验证更改
接下来,登录到您的 ServiceNow 开发人员实例,并在左侧菜单栏中查看“更改 -> 全部”部分。您应该在列表中看到您的变更请求。
请注意,简短描述已由我们的 Ansible Playbook 任务填写:这是一个由 Ansible 打开的测试,以及优先级 2 - 高
。
关闭 ServiceNow 工单
既然我们已经演示了如何打开 ServiceNow 工单,我们也应该演示如何关闭或解决工单。这可以通过在另一个 Ansible 任务中指定 state
参数来完成。这里可能会变得棘手,因为 state
既是记录字典的参数,也是 snow_record
模块的参数。请注意 Ansible 中使用的此多用途参数。
以下是我们在创建工单时从 record
字典中提取的片段
请注意,原始 state
为 -5
。下面的 Ansible 任务将其更改为 -3
,这会导致工单状态从“新建”更改为“授权”。
--- - name: Modify a change request snow_record: state: present table: change_request username: "{{ sn_username }}" password: "{{ sn_password }}" instance: "{{ sn_instance }}" number: CHG0030002 data: state: -3 register: incident - debug: var: incident.record.state
在 ServiceNow 中,change_request
需要经历几个不同的状态才能关闭。不同状态的数字值可以在 ServiceNow 文档中找到。我建议您创建五个独立的 Ansible 任务,每个任务按以下顺序更改状态:-3
、-2
、-1
、0
、3
。请注意,这些值适用于 ServiceNow Kingston 版本,其他版本可能使用不同的状态编号。您的组织可能还需要其他步骤,但希望本文足以让您入门。此时,您已经学习了如何通过 Ansible Playbook 打开工单和使用特定标签关闭工单。
敬请期待第 2 部分 - 我将描述如何将一组解析后的事实添加到您的工单中。