aglitke.prism
棱镜
棱镜角色创建了一个框架,以统一的剧本接口控制一组多样化的目标。例如,您可能希望在不同类型的存储阵列上配置卷,或管理来自不同厂商的交换机上的VLAN。棱镜允许您定义支持一系列操作的后端,并配置使用这些后端的特定目标。一旦配置完成,可以生成剧本以对目标执行特定操作,而不必考虑其底层实现。
此角色旨在作为其他提供自身后端和操作的角色的基础。
需求
经过与 Ansible >= 2.3.0 的测试,但也可能与较旧版本兼容。
配置
为了有效使用此角色,您必须首先理解其操作、后端和目标的概念。操作表示您希望执行的工作。后端描述可以被控制的系统类型。最后,目标表示系统的特定实例。为了简单起见,假设我们想抽象出远程对象存储。我们需要的操作有:创建、获取、更新和删除。可以有很多后端,但两个明显的例子是:HTTP/REST 和 FTP。现在,假设我们有一个可以通过http://api.example.com/v2访问的REST API,用户名为'foo'和密码'pass',还有一个FTP服务器在192.168.2.47,目录为'/pub/api',用户名为'ftp'和密码'secret'。每一个都表示一个目标。
要配置后端,首先创建一个目录以存储您的剧本模板。默认位置是这个角色中的templates/
。接下来,为您希望支持的每个后端创建一个子目录(例如ftp和http)。然后在每个后端目录中创建每个操作的模板剧本(见下面的示例)。文件应命名为<operation>.yml.j2
。
要配置目标,创建一个目录来存储目标定义文件。默认位置是/etc/prism/targets
。对于每个目标,创建一个配置文件<target>.yml
(见下面的示例)。
示例操作
以下文件(保存在模板目录的rest/
子目录中,命名为create.yml.j2
)定义了'rest'后端的创建操作。
- hosts: "{{ target_host }}"
remote_user: "{{ target_user }}"
tasks:
- name: REST: 创建操作
uri:
url: "{{ backend_config.base_url }}/{{ params.path }}"
method: POST
user: "{{ backend_config.auth.username }}"
password: "{{ backend_config.auth.password }}"
body: "{{ params.object.data }}"
示例目标定义
以下文件(保存在web.yml
中)定义了一个名为'web'的目标。
# 执行生成的剧本时使用的主机和用户
target_host: host.example.com
target_user: admin
# 此目标使用的后端
backend: rest
# 目标特定的配置参数
backend_config:
base_url: http://api.example.com/v2
auth:
username: foo
password: pass
生成剧本
以下剧本可用于生成将使用'web'目标存储对象的剧本:
# 使用本地机器生成剧本
- hosts: localhost
roles:
- prism
vars:
# 可选:如果不使用默认值则重写
target_definitions_dir: /etc/prism/targets
# 可选:如果不使用默认值则重写
playbook_templates_dir: /etc/prism/templates
# 设置生成剧本的名称。如果未提供此变量,将不会生成任何剧本。
generated_playbook: /tmp/prism-playbook.yml
# 为此操作选择目标
target: web
# 选择操作
operation: create
params:
path: messages
object:
id: 1
data: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=
# 不需要任务,因为剧本生成任务在角色中定义。
这将在/tmp/prism-playbook.yml
中生成一个剧本,可以使用ansible-playbook
来执行该操作:
- hosts: host.example.com
remote_user: admin
tasks:
- name: REST: 创建操作
uri:
url: "http://api.example.com/v2/messages"
method: POST
user: foo
password: pass
body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=
要切换到'ftp'目标,您只需更改一行,生成的剧本将根据ftp操作模板和目标配置与ftp服务器进行通信。
target: ftp
许可证
GPLv3
作者信息
由 Adam Litke 撰写 - alitke@redhat.com
Control a heterogeneous set of targets from a uniform playbook interface
ansible-galaxy install aglitke.prism