决策环境
注意
本节中的某些示例引用了存储在集合(collections)中的 Rulebooks。如果您有兴趣将您的事件驱动自动化打包在集合中,请参阅 Rulebook 与集合 章节。
决策环境(Decision Environments)是专门为运行 Ansible Rulebook 任务而定制的 执行环境(Execution Environments)。它们是容器镜像,用于启动和运行 rulebook 进程,并包含运行 rulebook 所需的所有依赖项、集合和配置。
仓库根目录下包含了一个基础且最小化的 decision_environment。这是构建您自己的环境的一个良好起点。
ansible-builder build -f minimal-decision-environment.yml -t minimal-decision-environment:latest
这将构建一个名为 minimal-decision-environment:latest 的容器镜像,可用作您自定义决策环境的基础。
让我们使用此决策环境运行一个 rulebook,首先确保我们有一个包含 localhost 的本地清单(inventory)供我们使用。
echo "localhost ansible_connection=local" > inventory
现在,让我们使用此决策环境运行一个 rulebook。
docker run -it --rm -v ./inventory:/tmp/inventory ansible-execution-env:latest ansible-rulebook -r ansible.eda.hello_events -i /tmp/inventory
在决策环境中使用您自己的 rulebooks 和项目
最小化决策环境是一个良好的起点,但您可能希望将自己的 rulebooks 和项目添加到其中。
注意
请参阅 Ansible Builder 执行环境定义,了解如何向决策环境添加集合和依赖项的详细信息。
---
version: 3
images:
base_image:
name: 'minimal-decision-environment:latest'
dependencies:
python:
- pywinrm
system:
- iputils [platform:rpm]
galaxy:
collections:
- name: my_namespace.my_awesome_collection
- name: community.windows
- name: ansible.utils
version: 2.10.1
这是一个示例,其中您可能拥有一个包含 rulebooks 和 playbooks 的自定义集合,但需要将它们与其他一些集合以及某些 Python 和系统依赖项结合在一起。
您还可以使用 Builder,通过 additional-build-steps 将您自己的 rulebooks 和 playbooks 添加到决策环境中,然后利用 Containerfile 的 ADD 或 COPY 命令将文件导入环境。
---
version: 3
images:
base_image:
name: 'minimal-decision-environment:latest'
dependencies:
python:
- pywinrm
system:
- iputils [platform:rpm]
galaxy:
collections:
- name: community.windows
- name: ansible.utils
version: 2.10.1
additional_build_steps:
prepend_builder:
- 'RUN mkdir -p /opt/ansible/my_rulebooks'
- 'COPY my_rulebook.yml /opt/ansible/my_rulebooks'
注意
container_init.cmd 是一个可选的覆盖项,可用于覆盖容器启动时运行的默认命令。如果您想在无需提供完整命令行参数的情况下运行 playbook 或 rulebook,这非常有用。在运行时,仍可以通过向容器传递命令来覆盖它。