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
许可证
Unknown
下载
93
拥有者