我试用了Exastro IT Automation的收集比较功能

首先,Exastro IT Automation(以下简称ITA)具有一个名为“收集功能”的功能,可以从系统中获取设置值和文件。最近发布的v1.7.0中似乎添加了一个名为“比较功能”的功能,可以比较已收集的值。这个功能似乎很方便,可以用来确认所设定的值是否已正确应用到设备上,因此我试了一下。

収集機能和比较機能是指从系统中获取在ITA中执行操作的结果,即通过输出为YAML文件的源文件的库存,然后将该值自动登记到ITA的参数表的功能。

收集的流程如下图所示:
1. 通过ITA经由自动化软件(※1)获取要操作系统的清单。
2. 根据预先设置的清单和参数表,将收集的值自动注册到ITA的参数表中。

01.png

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

比較機能概要

本次介绍的场景有以下4个。
收集功能有两种模式:参数获取和文件获取。
比较功能则是将获取的参数和文件与不同的数据进行对比。

    1. 【収集功能】参数获取:获取目标主机的操作系统信息

 

    1. 【収集功能】文件获取:从目标主机获取SSL证书

 

    1. 【比较功能】比较操作系统信息参数

 

    【比较功能】比较SSL证书
03.png

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

e_01.png
e_02.png

在本次介绍的操作步骤中,我们将展示如何操作菜单,具体操作如下:1.1 基本控制台 > 设备列表。

另外,菜单内容大致如下(根据不同的菜单而有所不同)。
其中常见的是 **“注册”** ,您可以通过此选项来注册各种数据,以及连接数据之间的关系。同时,点击 **“筛选”** 按钮,将显示已注册数据的列表和更新选项。

e_03.png

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

e_05.png

如果不明白连接关系了,看这个应该没问题。
下面我将从情景1开始解释。

【收集功能】参数获取:获取目标主机的操作系统信息。

115.png

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

230302_1.png
HW機器種別ホスト名IPアドレスログインユーザIDログインパスワード
> 管理ログインパスワード
> ログインパスワードAnsible利用情報
> Legacy/Role利用情報
>認証方式SVtargethost198.51.100.1root●********パスワード認証

1.2 主要控制台 >> 操作列表

我会把这次操作登记下来。
操作是指ITA自动工作的全部流程。我们将把所有相关的数据与之关联起来。

1.2 基本コンソール >> オペレーション一覧
オペレーション名(任意の名称)実施予定日時(任意の時間)(※)GatherFacts12021/04/22 17:09※ 実施予定時間は情報として入力できるようになっているもので、タイマーではありません。

1.3 Ansible-Legacy >> Movement列表

1.3 Ansible-Legacy >> Movement一覧
Movement名(任意の名称)Ansible利用情報 > ホスト指定形式(プルダウンから選択)Ansible利用情報 > ヘッダーセクションGatherFactsIP(※)

请在标题栏中输入以下内容

- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: yes
  become: yes
关于头部(Header)部分,ITA默认会包含这样的头部部分。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/1ed6747f-be3e-5a52-0412-95ae8e949ade.png)
如果不需要更改默认值,就不需要输入特定内容,留空即可。但是,由于我们这次使用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
118.png
b_05.png

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

07.png
Playbook素材名(任意の名称)Playbook素材GatherFactsGatherFacts.yml

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

08.png
Movement(プルダウンから選択)Playbook素材(プルダウンから選択)インクルード順序1:GatherFactsGatherFacts1(※)

※ 包含顺序指的是将多个Playbook与行动关联时执行任务的顺序。由于只有一个Playbook这次,所以我们将它设为1。

1.6 Ansible-Legacy >> 目标主机进行操作

23.png
オペレーション(プルダウンから選択)Movement(プルダウンから選択)ホスト(プルダウンから選択)1:GatherFacts11:GatherFactstargethost

通过这个操作,已经设定了要对哪个主机执行什么样的操作。

1.7 创建菜单 >> 菜单定义和创建

那么,我们将创建一个参数表,以收集已收集的值。

在「输入用」「自动输入值注册用」「参考用」菜单组中创建一个名为「Gathered Facts」的菜单。该菜单中有一个名为「参数表」的栏目,其中包含获取的值的各个项目。

首先,我們解釋了自己創建菜單而不是使用預設的「輸入用」、「自動註冊值用」和「參考用」菜單組。

菜单定义和创建界面与其他菜单不同,呈现出了这样的图形用户界面,需要在①基本信息、②目标菜单组和③项目三个区域输入所需信息。

09.png

那么我们开始输入吧。
①基本信息有以下的3个位置。

メニュー名(任意の名称)作成対象(プルダウンから選択)表示順序(※)Gathered Factsパラメータシート(ホスト/オペレーションあり)1

※ 表示顺序表示了菜单组内菜单从上到下的顺序。

对应的菜单组是指所创建的菜单所属的菜单组,但这次将设为默认值。
有关目标菜单组的详细信息请参阅此处。

入力用代入値自動登録用参照用入力用代入値自動登録用参照用
19.png

因为Playbook中有17个变量,所以需要创建17个变量。点击左上角的”项目”按钮将会创建新项目。请注意,项目名称与Playbook的变量名称对应,这样会更易于理解。

項目名(任意の名称)入力方式最大バイト数(任意の値)ansible_architecture文字列(単一行)128ansible_bios_version文字列(単一行)128ansible_default_ipv4 > address(※)文字列(単一行)128ansible_default_ipv4 > interface(※)文字列(単一行)128ansible_default_ipv4 > network(※)文字列(単一行)128ansible_distribution文字列(単一行)128ansible_distribution_file_path文字列(単一行)128ansible_distribution_file_variety文字列(単一行)128ansible_distribution_major_version文字列(単一行)128ansible_distribution_release文字列(単一行)128ansible_distribution_version文字列(単一行)128ansible_machine文字列(単一行)128ansible_memtotal_mb文字列(単一行)128ansible_nodename文字列(単一行)128ansible_os_family文字列(単一行)128ansible_pkg_mgr文字列(単一行)128ansible_processor_cores文字列(単一行)128

创建名为ansible_default_ipv4的组,并将以下三个项目放入其中。

一旦完成输入后,项目将呈现成长长的一排。
如果一切OK的话,请点击”创建”按钮。

10.png
11.png
12.png

1.8 Ansible共通 >> 收集项目值管理

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

请在此处输入。

13.png

收集项目(来源)

パース形式(プルダウンから選択)PREFIX(ファイル名)変数名YAMLgatherfacts※1

参数表格

メニューグループ:メニュー(プルダウンから選択)項目(プルダウンから選択)代入値自動登録用:2:Gathered Facts※2

由于此次有17个变量,因此我们将注册17个变量。并按照下表的方式,将※1和※2进行对应。

※1(変数名)※2(項目名)ansible_architectureパラメータ/ansible_architectureansible_bios_versionパラメータ/ansible_bios_versionansible_default_ipv4__addressパラメータ/ansible_default_ipv4/addressansible_default_ipv4__interfaceパラメータ/ansible_default_ipv4/interfaceansible_default_ipv4__networkパラメータ/ansible_default_ipv4/networkansible_distributionパラメータ/ansible_distributionansible_distribution_file_pathパラメータ/ansible_distribution_file_pathansible_distribution_file_varietyパラメータ/ansible_distribution_file_varietyansible_distribution_major_versionパラメータ/ansible_distribution_major_versionansible_distribution_releaseパラメータ/ansible_distribution_releaseansible_distribution_versionパラメータ/ansible_distribution_versionansible_machineパラメータ/ansible_machineansible_memtotal_mbパラメータ/ansible_memtotal_mbansible_nodenameパラメータ/ansible_nodenameansible_os_familyパラメータ/ansible_os_familyansible_pkg_mgrパラメータ/ansible_pkg_mgransible_processor_coresパラメータ/ansible_processor_cores

1.9 Ansible共通: 收集接口信息

为了将收集到的值注册到ITA的CMDB中,需要使用RESTAPI访问,因此需要使用具有执行权限的用户注册REST用户/密码。

15.png

因为本次登录使用ITA管理员账户,并且具备执行权限,所以正在以REST用户:administrator身份输入密码。

RESTユーザーRESTパスワード実行権限のあるユーザーそのユーザーのパスワード

点击更新按钮。

1. 使用Ansible-Legacy执行操作。

16.png
18.png
21.png

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

17.png

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

123.png

2.1 主要控制台 >> 设备清单

因为这次与1.1版本的目标主机相同,所以保持不变即可。

2.2 主控制台>>操作列表

我会注册这次的操作。

オペレーション名(任意の名称)実施予定日時(任意の時間)(※)getSSL12021/04/23 17:10

※ 安排的时间是作为信息输入的,而不是计时器。

b_01.png

2.3 Ansible-Legacy >> Movement一覧

2.3 Ansible-Legacy >> 迁移列表

将Movement进行注册。
随后将其与Playbook相关联,以获取SSL证书的任务。

Movement名(任意の名称)Ansible利用情報 > ホスト指定形式getSSLIP
b_02.png

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

119.png
b_05.png

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

Playbook素材名(任意の名称)Playbook素材getSSLgetSSL.yml
b_03.png

2.5 Ansible-Legacy与Movement-Playbook关联

将注册的Movement和Playbook进行关联。

Movement(プルダウンから選択)Playbook素材(プルダウンから選択)インクルード順序2:getSSLgetSSL1(※)
b_06.png

2.6 Ansible-Legacy >> 自动设置变量注册。

接下来,在Playbook中将变量(VAR_ssl_name)设定为具体值(test.crt)。
有两种方法可以实现:直接输入数值和使用参数表的数值。但本次选择后者。

我已经设置了这个参数。
~~~~~
创建菜单 >> 定义和创建菜单
输入以下内容以创建菜单(有关创建菜单的详细信息,请参考1.7和2.7)。
※省略了可以使用默认值的部分。

メニュー名(任意の名称)表示順序項目名(任意の名称)最大バイト数SSL証明書名4ファイル名128
109.png
ホスト名(プルダウンから選択)オペレーションパラメータ > ファイル名targethostgetSSL1test.crt~~~~~

e_10.png
パラメータシート(From) > メニューグループ:メニューパラメータシート(From) > 項目名登録方式IaC変数(To) > MovementIaC変数(To) > Value変数 > 変数名代入値自動登録用:SSL証明書名パラメータ/ファイル名Value型getSSLVAR_ssl_name

(请选择下拉菜单中的选项)

现在,VAR_ssl_name和test.crt已经连接在一起了。

2.7 菜单制作 >> 菜单定义·制作

现在,我们将像1号方案一样,制作一个参数表作为收集到的值的容器。

在「输入用」、「自动注册代入值用」和「参考用」菜单组中创建一个名为「SSL证书」的菜单。通过该菜单可以下载SSL证书。

b_07.png
メニュー名(任意の名称)作成対象(プルダウンから選択)表示順序(※)SSL証明書パラメータシート(ホスト/オペレーションあり)2

※ 這表示了在菜單組中菜單的順序是從上面數起的第幾個。

②目标菜单组指定了所创建的菜单所属的菜单组,但这次我们将其设置为默认值。

入力用代入値自動登録用参照用入力用代入値自動登録用参照用
b_08.png
項目名(任意の名称)入力方式(プルダウンから選択)最大バイト数(任意の値)ファイル名文字列(単一行)128ファイルファイルアップロード1000000
b_09.png
b_09.png
b_10.png

2.8 Ansible共通 >> 收集项目值管理

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

b_11.png

收集项目(来自)

パース形式(プルダウンから選択)PREFIX(ファイル名)変数名YAMLgetSSL※1

参数表(至)

メニューグループ:メニュー(プルダウンから選択)項目(プルダウンから選択)代入値自動登録用:5:SSL証明書※2

由于有两个变量,这次我们将注册两个变量。根据下表,将※1和※2相对应。

※1(変数名)※2(項目名)SSL_file_nameパラメータ/ファイル名SSL_fileパラメータ/ファイル

2.9 Ansible通用 >> 收集接口信息

为了在注册ITA的CMDB时使用REST API访问收集到的值,需要使用具有执行权限的用户来注册REST用户/密码。

15.png
RESTユーザーRESTパスワード実行権限のあるユーザーそのユーザーのパスワード

点击更新按钮。

2.10 Ansible-传统>>执行任务

b_13.png

2.11 输入用 >> SSL证书

122.png

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

102.png

3.1 基本控制台 >> 操作列表

注册期望值操作。

オペレーション名(任意の名称)実施予定日時(任意の時間)GatherFacts1012021/10/01 09:25
c_02.png

3.2 创建菜单 >> 菜单定义列表

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

c_03.png
c_04.png
c_05.png
メニュー名(任意の名称)表示順序OS情報3
c_06.png

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

230302_2.png
パラメータ値ansible_architecturex86_64ansible_bios_version1.11.0-2.el7ansible_default_ipv4__address198.51.100.2ansible_default_ipv4__interfaceeth0ansible_default_ipv4__network198.51.100.0ansible_distributionCentOSansible_distribution_file_path/etc/redhat-releaseansible_distribution_file_varietyRedHatansible_distribution_major_version7ansible_distribution_releaseCoreansible_distribution_version7.8ansible_machinex86_64ansible_memtotal_mb1771ansible_nodenameabcd.localdomainansible_os_familyRedHatansible_pkg_mgryumansible_processor_cores1

输入完毕后,请点击注册按钮。

3.4 比较 >> 比较定义

3.4 比较 >> 比较的定义

在比较的定义中,我们选择两个要比较的菜单。这次选择的是“收集的事实”和“操作系统信息”。

c_08.png
c_09.png
比較定義名(任意の名称)比較対象メニュー1(プルダウンから選択)比較対象メニュー2(プルダウンから選択)全件一致(プルダウンから選択)OS情報代入値自動登録用:8:OS情報代入値自動登録用:2:Gathered Facts●

3.5 比较优于比较执行。

现在我们来进行比较。

c_10.png
230302_3_edit.png

用这个来成功地比较期望值和收集到的值!

~小貼士~ 只比較特定項目

我們已經介紹了一種比較所有參數表項目的方法,但也有一種方法可以限定比較項目,現在來介紹一下。

c_18.png
比較定義名(任意の名称)比較対象メニュー1(プルダウンから選択)比較対象メニュー2(プルダウンから選択)全件一致(プルダウンから選択)IPアドレス代入値自動登録用:2:Gathered Facts代入値自動登録用:8:OS情報-
c_19.png
比較定義名(プルダウンから選択)表示項目名(任意の名称)対象カラム1(プルダウンから選択)対象カラム2(プルダウンから選択)表示順IPアドレス [ 2:Gathered Facts-8:OS情報 ]IPアドレス代入値自動登録用:2:Gathered Facts:3:パラメータ/ansible_default_ipv4/address代入値自動登録用:8:OS情報:33:パラメータ/ansible_default_ipv4/address1
c_20.png
230302_4_edit.png

只要能够比较指定的项目,就算成功!

4. SSL证书的比较功能

22.png

4.1 基本控制台 >> 操作清单

创建一个用于比较的操作。

c_12.png

准备一份具有不同内容的SSL证书。

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

4.3 输入的SSL证书名称

111.png
ホスト名(プルダウンから選択)オペレーションパラメータ > ファイル名targethostgetSSL2test.crt

4.4 Ansible-Legacy >> 执行任务

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

c_13.png
Movement(プルダウンから選択)Operation(プルダウンから選択)getSSLgetSSL2実行ボタンを押して、収集。

4.5 输入使用 >> SSL证书

121.png

4.6 比较 >> 比较定义

4.6 对比 >> 对比定义

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

c_08.png
c_15.png
比較定義名(任意の名称)比較対象メニュー1(プルダウンから選択)比較対象メニュー2(プルダウンから選択)全件一致(プルダウンから選択)SSL証明書代入値自動登録用:5:SSL証明書代入値自動登録用:5:SSL証明書●

4.7 比较大 > 比较实施

那么我们来进行比较吧。

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

比較定義(プルダウンから選択)基準日1基準日2SSL証明書2021/4/22 14:302021/4/22 15:00
117.png
120.png

现在可以进行文件之间的比较了!

附注:关于Conductor
这次只有一个Movement,所以我们直接从Ansible-Legacy的”作业执行”中执行了Movement(作业)。但是,ITA配备了一个名为Conductor的作业流功能,似乎可以连接多个Movement并执行。如果想要与其他Movement进行联动并执行更复杂的作业,似乎可以使用这个功能。

详细内容请参考Exastro社区网站。

收集比较功能的应用例
在实际工作中,有很多可以应用该功能的场景。
例如,可以将网络设备的show running-config命令结果保存到文件中,或者在AWS上获取EC2列表等。这样不需要手动操作,可以提高工作效率并减少错误的发生。

在比较功能中,可以通过比较预期值和实际值(从实际设备获得的值)来比较操作执行前后的差异。这样可以检查作业前仅出现“想要修改的部分”作为差异/作业后未出现差异的情况,并进行比较和检查。

##相关链接

    • ITA_利用手順マニュアル 収集機能

 

    • Exastroコミュニティサイト

 

    【随時更新】Exastroの参考になる記事をまとめてみた
广告
将在 10 秒后关闭
bannerAds