ibm.infosvr-openigc
ansible-role-infosvr-openigc
用于自动化在IBM信息服务器中部署信息治理目录的OpenIGC对象的Ansible角色。
对Ansible不熟悉?这个简单介绍可能对你有所帮助。
要求
- Ansible v2.6.x
- 在控制机器上预安装以下工具:
- zip
- curl
该角色不使用任何特权提升,主要在控制机器上执行(仅直接向环境中的相关API推送生成的文件)。
由于该角色使用了高级的Jinja模板进行基于YAML的输入,要求使用最近版本的Ansible(v2.4版本不足,因此提高到v2.6.x)。虽然v2.7现在允许uri
模块提交文件,但它不提供覆盖证书颁发机构的能力,因此为了验证自签名证书,而不必修改控制机器的CA,我们目前仍然依赖curl
。
角色变量
有关内联文档,请参见defaults/main.yml
,以下是主要所需变量的示例。
该角色将尝试自动重用来自IBM.infosvr角色的变量,例如通过使用tasks_from=setup_vars.yml
导入IBM.infosvr
的剧本。
默认情况下,如果您使用IBM.infosvr
的get_certificate.yml
任务检索了自签名证书,则该角色将进行SSL验证(请参见下面的示例剧本)。这由角色的ibm_infosvr_openigc_verify_selfsigned_ssl
变量控制:如果您只想验证正确签名和受信任的SSL证书,可以将此变量设置为False
,那么任何自签名的域级证书将不再被信任。
示例剧本
该角色主要用于根据需要导入其他剧本,以便部署OpenIGC对象——包括包和资产实例。(因此需要Ansible v2.4.x和import_role
模块。)
---
- name: 设置信息服务器变量
hosts: all
tasks:
- import_role: name=IBM.infosvr tasks_from=setup_vars.yml
- import_role: name=IBM.infosvr tasks_from=get_certificate.yml
- name: 加载OpenIGC包和资产
hosts: ibm_information_server_engine
roles:
- IBM.infosvr-openigc
vars:
bundles:
- /some/directory/<BundleId>
assets_as_xml:
- /some/directory/asset_instances-<BundleId>.xml
assets_as_yaml:
- /some/directory/assets.yml
flows_as_xml:
- /some/directory/lineage_flows-<BundleId>.xml
flows_as_yaml:
- /some/directory/lineage.yml
动作(和对象)结构
以下描述了该角色当前涵盖的所有动作和对象类型及其预期结构。无论变量在剧本中列出的顺序如何,它们将按照以下列出顺序加载。
bundles
通过此变量提供的目录列表应为包形式,具体应包含以下结构:
<BundleId>
:您指向的根目录应与包本身具有相同的大小写名称asset_type_descriptor.xml
:描述该包的XML(即所有类、它们的关系/包含等)i18n
:一个包含标签的目录labels.properties
:可翻译的类和属性标签集
icons
:一个目录,包含每个由包定义的类的两个.gif
文件:<ClassId>-icon.gif
:应为类的16x16像素表示,也可以是.png
文件,但无论如何应命名为.gif
<ClassId>-bigIcon.gif
:应为类的32x32像素表示,也可以是.png
文件,但无论如何应命名为.gif
assets_as_xml
通过此变量提供的XML文件列表应为完全可用的资产实例XML文件,可以是已生成的(例如,通过下面的变量)或手动创建的。
assets_as_yaml
该变量提供了一种比学习上述assets_as_xml
所需的XML格式更便捷/可读的方式来指定资产实例。
通过此变量提供的YAML文件列表用于生成有效的资产实例XML,随后将自动加载。每个YAML文件的结构应如下所示:
---
bundleId: $<BundleId>
contains:
- class: <ClassName>
name: <name>
contains:
- class: <NestedClassName>
name: <name>
contains:
...
contains
子结构可以按需嵌套任意次数,以创建所需的资产包含层次结构。每个子结构至少必须定义class
和name
。
此外,还可以根据包定义和所有对象的默认属性集指定任意数量的附加属性(例如short_description
、long_description
)。任何包定义的属性只需以$
为前缀。例如:
---
bundleId: $TestBundle
contains:
- class: Folder
name: level1
short_description: 顶级目录
$filesystem: UNIX
contains:
- class: Folder
name: level2
short_description: 目录结构中的下一级
contains:
- class: File
name: MyFile.txt
short_description: 位于/level1/level2/MyFile.txt的文件
$encoding: UTF-8
在这个示例中,TestBundle
包定义了Folder
和File
,其中Folder
可以定义filesystem
属性,而File
可以定义encoding
。两者都可以具有short_description
,因为IGC中的所有对象都有此属性。
对于允许多个值的属性,只需将值指定为YAML列表。在这个示例中,特定于包的users_with_access
属性允许多个值,因此我们将每个值作为该属性的YAML列表的一部分进行指定:
---
bundleId: $TestBundle
contains:
- class: Folder
name: root
$users_with_access:
- user123
- user456
- user789
最后,names
快捷方式存在于包含层次结构的叶节点中,其中您只需指定每个节点的name
——这避免了需要为每个叶节点重复指定相同的class
:
---
bundleId: $TestBundle
contains:
- class: Folder
name: root
contains:
- class: File
names:
- MyFile.txt
- YourFile.txt
- OtherFile.txt
flows_as_xml
通过此变量提供的XML文件列表应为完全可用的谱系流XML文件,可以是已生成的(例如,通过下面的变量)或手动创建的。
flows_as_yaml
该变量提供了一种比学习上述flows_as_xml
所需的XML格式更便捷/可读的方式来指定资产实例。
通过此变量提供的YAML文件列表用于生成有效的谱系流XML,随后将自动加载。每个YAML文件的结构应如下所示:
---
assets:
- class: <FullClassName>
name: <name>
contains:
- class: <NestedFullClassName>
name: <name>
id: <unique identifier>
contains:
...
flows:
- name: <有意义的注释>
within: <id>
contains:
- name: <有意义的注释>
from:
- <id>
- ...
to:
- <id>
- ...
- ...
assets
的contains
子结构可以按需嵌套任意次数,以创建所需的资产包含层次结构。每个子结构至少必须定义class
和name
(实际上,任何其他属性都被忽略,因为这些在谱系流XML中未使用)。在这种情况下,您应指定完全限定的类名,包括bundleId
,例如$BundleId-ClassName
。这确保您可以在谱系流中结合OpenIGC和本地资产(并创建跨多个OpenIGC包的谱系流)。
对于您计划在流中使用的任何资产,还请包含一个显式的id
属性来指定您将在flows
变量中引用它们的方式。此标识符在YAML文件中应唯一,并且不得包含空格或其他特殊字符(仅限.
和_
)。这是必要的,因为id
提供了文件中的一个扁平唯一引用;name
实际上是一个嵌套标识符,其取决于它所在的包含结构,因此本身并不唯一(仅在考虑其整个包含结构时才唯一)。
flows
变量中的每个name
用作生成的XML中的注释,但实际上并不在IGC中出现。
考虑以下示例:
---
assets:
- class: $TestBundle-Folder
name: root
contains:
- class: $TestBundle-File
name: MyFile.txt
id: MyFile.txt
- class: $TestBundle-File
name: YourFile.txt
id: YourFile.txt
- class: $TestBundle-File
name: OtherFile.txt
id: OtherFile.txt
- class: $TestBundle-Command
name: copy
id: copy
flows:
- name: 复制命令以复制文件
within: copy
contains:
- name: 从My到Your和Other的复制
from:
- MyFile.txt
to:
- YourFile.txt
- OtherFile.txt
在此示例中,我们有一个定义了Folder
、File
和Command
的新对象的TestBundle
。assets
部分只定义了我们希望在谱系中描述的对象及其包含层次结构。对于我们将在谱系中使用的每个资产,我们定义了一个唯一的id
属性。
在flows
部分中,我们创建了谱系:外部的within
定义了负责谱系中所描绘的任何操作的过程,而其中的contains
则指定了该操作的特定输入和输出。
许可证
Apache 2.0
作者信息
Christopher Grote
Automates deployment and management of custom asset types for IBM Information Governance Catalog
ansible-galaxy install ibm.infosvr-openigc