我试用了Exastro IT Automation的收集比较功能
首先,Exastro IT Automation(以下简称ITA)具有一个名为“收集功能”的功能,可以从系统中获取设置值和文件。最近发布的v1.7.0中似乎添加了一个名为“比较功能”的功能,可以比较已收集的值。这个功能似乎很方便,可以用来确认所设定的值是否已正确应用到设备上,因此我试了一下。
収集機能和比较機能是指从系统中获取在ITA中执行操作的结果,即通过输出为YAML文件的源文件的库存,然后将该值自动登记到ITA的参数表的功能。
收集的流程如下图所示:
1. 通过ITA经由自动化软件(※1)获取要操作系统的清单。
2. 根据预先设置的清单和参数表,将收集的值自动注册到ITA的参数表中。

比较功能可以与收集功能结合实现以下利用:
③ 比较期望值和从实际设备中获取的值。
④ 比较获取的值之间的差异,比如过去某一时刻的值与当前值等。

本次介绍的场景有以下4个。
收集功能有两种模式:参数获取和文件获取。
比较功能则是将获取的参数和文件与不同的数据进行对比。
-
- 【収集功能】参数获取:获取目标主机的操作系统信息
-
- 【収集功能】文件获取:从目标主机获取SSL证书
-
- 【比较功能】比较操作系统信息参数
- 【比较功能】比较SSL证书

在介绍操作步骤之前,我稍微解释一下ITA的用户界面。


在本次介绍的操作步骤中,我们将展示如何操作菜单,具体操作如下:1.1 基本控制台 > 设备列表。
另外,菜单内容大致如下(根据不同的菜单而有所不同)。
其中常见的是 **“注册”** ,您可以通过此选项来注册各种数据,以及连接数据之间的关系。同时,点击 **“筛选”** 按钮,将显示已注册数据的列表和更新选项。

然而,当实际操作时,我会迷失方向,不知道我正在注册什么数据,以及它们与何种联系在一起。

如果不明白连接关系了,看这个应该没问题。
下面我将从情景1开始解释。
【收集功能】参数获取:获取目标主机的操作系统信息。

1.1 主要控制台 >> 设备列表 >>

> 管理ログインパスワード
> ログインパスワードAnsible利用情報
> Legacy/Role利用情報
>認証方式SVtargethost198.51.100.1root●********パスワード認証
1.2 主要控制台 >> 操作列表
我会把这次操作登记下来。
操作是指ITA自动工作的全部流程。我们将把所有相关的数据与之关联起来。

1.3 Ansible-Legacy >> Movement列表

请在标题栏中输入以下内容
- hosts: all
remote_user: "{{ __loginuser__ }}"
gather_facts: yes
become: yes

如果不需要更改默认值,就不需要输入特定内容,留空即可。但是,由于我们这次使用gather_facts来获取操作系统信息,
所以需要将**gather_facts: no → gather_facts: yes**进行修改。
1.4 Ansible-Legacy > Playbook素材集
1.4 Ansible-Legacy > Playbook资源库
我将注册Playbook。
这次我们使用了这本Playbook。
它的内容是生成YAML文件并获取操作系统信息。
- name: make yaml file
blockinfile:
create: yes
mode: 644
insertbefore: EOF
marker: ""
dest: "{{ __parameter_dir__ }}/{{ inventory_hostname }}/gatherfacts.yml"
content: |
ansible_architecture : {{ ansible_architecture }}
ansible_bios_version : {{ ansible_bios_version }}
ansible_default_ipv4__address : {{ ansible_default_ipv4.address }}
ansible_default_ipv4__interface : {{ ansible_default_ipv4.interface }}
ansible_default_ipv4__network : {{ ansible_default_ipv4.network }}
ansible_distribution : {{ ansible_distribution }}
ansible_distribution_file_path : {{ ansible_distribution_file_path }}
ansible_distribution_file_variety : {{ ansible_distribution_file_variety }}
ansible_distribution_major_version: {{ ansible_distribution_major_version }}
ansible_distribution_release : {{ ansible_distribution_release }}
ansible_distribution_version : {{ ansible_distribution_version }}
ansible_machine : {{ ansible_machine }}
ansible_memtotal_mb : {{ ansible_memtotal_mb }}
ansible_nodename : {{ ansible_nodename }}
ansible_os_family : {{ ansible_os_family }}
ansible_pkg_mgr : {{ ansible_pkg_mgr }}
ansible_processor_cores : {{ ansible_processor_cores }}
delegate_to: 127.0.0.1


当准备好Playbook后,从注册界面输入以下内容。

1.5 Ansible-Legacy 转化为 Movement-Playbook的关联

※ 包含顺序指的是将多个Playbook与行动关联时执行任务的顺序。由于只有一个Playbook这次,所以我们将它设为1。
1.6 Ansible-Legacy >> 目标主机进行操作

通过这个操作,已经设定了要对哪个主机执行什么样的操作。
1.7 创建菜单 >> 菜单定义和创建
那么,我们将创建一个参数表,以收集已收集的值。
在「输入用」「自动输入值注册用」「参考用」菜单组中创建一个名为「Gathered Facts」的菜单。该菜单中有一个名为「参数表」的栏目,其中包含获取的值的各个项目。
首先,我們解釋了自己創建菜單而不是使用預設的「輸入用」、「自動註冊值用」和「參考用」菜單組。
菜单定义和创建界面与其他菜单不同,呈现出了这样的图形用户界面,需要在①基本信息、②目标菜单组和③项目三个区域输入所需信息。

那么我们开始输入吧。
①基本信息有以下的3个位置。
※ 表示顺序表示了菜单组内菜单从上到下的顺序。
对应的菜单组是指所创建的菜单所属的菜单组,但这次将设为默认值。
有关目标菜单组的详细信息请参阅此处。

因为Playbook中有17个变量,所以需要创建17个变量。点击左上角的”项目”按钮将会创建新项目。请注意,项目名称与Playbook的变量名称对应,这样会更易于理解。
创建名为ansible_default_ipv4的组,并将以下三个项目放入其中。
一旦完成输入后,项目将呈现成长长的一排。
如果一切OK的话,请点击”创建”按钮。



1.8 Ansible共通 >> 收集项目值管理
在收集项目值管理中,需要将收集项目(FROM)中的YAML文件名和变量名与参数表(TO)中的菜单组名、菜单名和项目名进行关联。
请在此处输入。

收集项目(来源)
参数表格
由于此次有17个变量,因此我们将注册17个变量。并按照下表的方式,将※1和※2进行对应。
1.9 Ansible共通: 收集接口信息
为了将收集到的值注册到ITA的CMDB中,需要使用RESTAPI访问,因此需要使用具有执行权限的用户注册REST用户/密码。

因为本次登录使用ITA管理员账户,并且具备执行权限,所以正在以REST用户:administrator身份输入密码。
点击更新按钮。
1. 使用Ansible-Legacy执行操作。



1.11 收集的事实(或可作为参考)

【数据收集功能】文件获取:从目标主机获取SSL证书。

2.1 主要控制台 >> 设备清单
因为这次与1.1版本的目标主机相同,所以保持不变即可。
2.2 主控制台>>操作列表
我会注册这次的操作。
※ 安排的时间是作为信息输入的,而不是计时器。

2.3 Ansible-Legacy >> Movement一覧
2.3 Ansible-Legacy >> 迁移列表
将Movement进行注册。
随后将其与Playbook相关联,以获取SSL证书的任务。

2.4 Ansible之前版本 > Playbook资料库
我会注册 Playbook。
这次我使用了这个 Playbook。
创建了一个用于获取 SSL 证书文件的 YAML 文件 -> 将 SSL 证书文件复制到收集目录中。
- name: make yaml file
blockinfile:
create: yes
mode: 644
insertbefore: EOF
marker: ""
dest: "{{ __parameter_dir__ }}/{{ inventory_hostname }}/getSSL.yml"
content: |
SSL_file_name : {{ VAR_ssl_name }}
SSL_file : {{ VAR_ssl_name }}
delegate_to: 127.0.0.1
- name: get SSL file
fetch:
src: /etc/pki/tls/certs/{{ VAR_ssl_name }}
dest: "{{ __parameters_file_dir__ }}/{{ inventory_hostname }}/"
flat: yes


一旦准备好Playbook后,将进行以下登记。

2.5 Ansible-Legacy与Movement-Playbook关联
将注册的Movement和Playbook进行关联。

2.6 Ansible-Legacy >> 自动设置变量注册。
接下来,在Playbook中将变量(VAR_ssl_name)设定为具体值(test.crt)。
有两种方法可以实现:直接输入数值和使用参数表的数值。但本次选择后者。
我已经设置了这个参数。
~~~~~
创建菜单 >> 定义和创建菜单
输入以下内容以创建菜单(有关创建菜单的详细信息,请参考1.7和2.7)。
※省略了可以使用默认值的部分。


(请选择下拉菜单中的选项)
现在,VAR_ssl_name和test.crt已经连接在一起了。
2.7 菜单制作 >> 菜单定义·制作
现在,我们将像1号方案一样,制作一个参数表作为收集到的值的容器。
在「输入用」、「自动注册代入值用」和「参考用」菜单组中创建一个名为「SSL证书」的菜单。通过该菜单可以下载SSL证书。

※ 這表示了在菜單組中菜單的順序是從上面數起的第幾個。
②目标菜单组指定了所创建的菜单所属的菜单组,但这次我们将其设置为默认值。




2.8 Ansible共通 >> 收集项目值管理
在収集项目值管理中,将収集项目(FROM)的YAML文件名和变量名与参数表格(TO)的菜单组名、菜单名和项目名进行关联。

收集项目(来自)
参数表(至)
由于有两个变量,这次我们将注册两个变量。根据下表,将※1和※2相对应。
2.9 Ansible通用 >> 收集接口信息
为了在注册ITA的CMDB时使用REST API访问收集到的值,需要使用具有执行权限的用户来注册REST用户/密码。

点击更新按钮。
2.10 Ansible-传统>>执行任务

2.11 输入用 >> SSL证书

3. 操作系统信息参数的比较功能

3.1 基本控制台 >> 操作列表
注册期望值操作。

3.2 创建菜单 >> 菜单定义列表
我們將創建一個與Gathered Facts完全相同的菜單,只需修改”菜單名稱”和”顯示順序”。我們將複製Gathered Facts並進行部分修改。




3.3 输入用 >> 操作系统信息

输入完毕后,请点击注册按钮。
3.4 比较 >> 比较定义
3.4 比较 >> 比较的定义
在比较的定义中,我们选择两个要比较的菜单。这次选择的是“收集的事实”和“操作系统信息”。


3.5 比较优于比较执行。
现在我们来进行比较。


用这个来成功地比较期望值和收集到的值!
~小貼士~ 只比較特定項目
我們已經介紹了一種比較所有參數表項目的方法,但也有一種方法可以限定比較項目,現在來介紹一下。




只要能够比较指定的项目,就算成功!
4. SSL证书的比较功能

4.1 基本控制台 >> 操作清单
创建一个用于比较的操作。

准备一份具有不同内容的SSL证书。
我想准备一个有差异的文件,所以我用Teraterm进入了目标服务器的/etc/pki/tls/certs/目录,然后部分修改了SSL证书(test.crt)的内容。
4.3 输入的SSL证书名称

4.4 Ansible-Legacy >> 执行任务
我们会收集带有差分的SSL证书。
与场景2相同,我们使用getSSL来移动,只是为了比较我们会使用getSSL2作为操作。

4.5 输入使用 >> SSL证书

4.6 比较 >> 比较定义
4.6 对比 >> 对比定义
在比较定义中,我们会选择两个要比较的菜单。这次我们选择的两个菜单都是“SSL证书”。


4.7 比较大 > 比较实施
那么我们来进行比较吧。
选择刚刚注册的”SSL证书”的比较定义,并输入两个比较日期和时间的基准。
这次选择如下基准日期和时间:
getSSL1:2021/4/22 14:24
getSSL2:2021/4/22 14:32
在这个时间点上,我们将尝试比较已收集到的文件是否反映在以下日期和时间上。


现在可以进行文件之间的比较了!
附注:关于Conductor
这次只有一个Movement,所以我们直接从Ansible-Legacy的”作业执行”中执行了Movement(作业)。但是,ITA配备了一个名为Conductor的作业流功能,似乎可以连接多个Movement并执行。如果想要与其他Movement进行联动并执行更复杂的作业,似乎可以使用这个功能。
详细内容请参考Exastro社区网站。
收集比较功能的应用例
在实际工作中,有很多可以应用该功能的场景。
例如,可以将网络设备的show running-config命令结果保存到文件中,或者在AWS上获取EC2列表等。这样不需要手动操作,可以提高工作效率并减少错误的发生。
在比较功能中,可以通过比较预期值和实际值(从实际设备获得的值)来比较操作执行前后的差异。这样可以检查作业前仅出现“想要修改的部分”作为差异/作业后未出现差异的情况,并进行比较和检查。
##相关链接
-
- ITA_利用手順マニュアル 収集機能
-
- Exastroコミュニティサイト
- 【随時更新】Exastroの参考になる記事をまとめてみた