自定义 Ansible Playbooks¶
Kayobe 支持运行位于 kayobe 项目之外的自定义 Ansible playbooks。这提供了一种灵活的机制来定制控制平面。可以访问 kayobe 变量,确保无需重复配置。
Kayobe 自定义 Playbook API¶
显式允许用户运行具有访问 kayobe 变量权限的自定义 playbooks,将变量命名空间和清单提升为接口。这引发了关于此接口稳定性和其提供的保证的问题。
以下准则适用于自定义 playbook API
仅支持 kayobe 配置文件下
etc/kayobe中定义的变量。支持
etc/kayobe/inventory/groups中定义的组。对受支持变量(重命名、模式更改、默认值更改或删除)或受支持组(重命名或删除)的任何更改都将遵循一个发布周期的弃用期。
Kayobe 的内部角色可能无法使用。
请注意,这些是准则,在适当的情况下可能会做出例外。
运行自定义 Ansible Playbooks¶
运行一个或多个自定义 ansible playbooks
(kayobe) $ kayobe playbook run <playbook>[ <playbook>...]
默认情况下,playbooks 无法访问 Kayobe playbook 组变量、filter 插件和 test 插件,因为这些插件相对于当前 playbook 的目录。可以通过从 Kayobe 配置创建到 Kayobe 仓库的符号链接来解决此问题。
将自定义 Playbooks 与配置一起打包¶
kayobe 项目鼓励其用户使用版本控制来管理云的配置,基于 kayobe-config 仓库。将自定义 Ansible playbooks 存储在此仓库中非常有意义,kayobe 也为此提供了特殊支持。
建议将自定义 playbooks 存储在 $KAYOBE_CONFIG_PATH/ansible/ 中。从 Zed 13.0.0 版本开始,也可以使用以下子目录,并且这些目录将可用于所有 Kayobe playbook 执行。
rolescollectionsaction_pluginsfilter_pluginstest_plugins
请注意,从 Zed 13.0.0 版本开始,不再需要创建符号链接来使用 Kayobe 的角色、collections 或插件。现有的符号链接可以删除。
Ansible Galaxy¶
Ansible Galaxy 提供了一种共享 Ansible 角色和 collections 的方式。Kayobe 配置可以提供一个 Galaxy requirements 文件,该文件定义了要从 Galaxy 安装的角色和 collections。然后,这些角色和 collections 可以被自定义 playbooks 使用。
可以在 $KAYOBE_CONFIG_PATH/ansible/requirements.yml 中定义 Galaxy 依赖项。这些角色和 collections 将在引导 Ansible 控制主机时安装在 $KAYOBE_CONFIG_PATH/ansible/roles/ 和 $KAYOBE_CONFIG_PATH/ansible/collections 中
(kayobe) $ kayobe control host bootstrap
并在升级 Ansible 控制主机时更新
(kayobe) $ kayobe control host upgrade
示例:roles¶
以下示例将 foo.yml playbook 添加到一组 kayobe 配置中。该 playbook 使用 Galaxy 角色 bar.baz。
这是 kayobe 配置仓库结构
etc/kayobe/
ansible/
foo.yml
requirements.yml
roles/
bifrost.yml
...
这是 playbook,ansible/foo.yml
---
- hosts: controllers
roles:
- name: bar.baz
这是 Galaxy requirements 文件,ansible/requirements.yml
---
roles:
- bar.baz
我们应该首先安装 Galaxy 角色依赖项,以下载 bar.baz 角色
(kayobe) $ kayobe control host bootstrap
然后,要运行 foo.yml playbook
(kayobe) $ kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/foo.yml
示例:collections¶
以下示例将 foo.yml playbook 添加到一组 kayobe 配置中。该 playbook 使用 Galaxy collection 中的角色 bar.baz.qux。
这是 kayobe 配置仓库结构
etc/kayobe/
ansible/
collections/
foo.yml
requirements.yml
bifrost.yml
...
这是 playbook,ansible/foo.yml
---
- hosts: controllers
roles:
- name: bar.baz.qux
这是 Galaxy requirements 文件,ansible/requirements.yml
---
collections:
- bar.baz
我们应该首先安装 Galaxy 依赖项,以下载 bar.baz collection
(kayobe) $ kayobe control host bootstrap
然后,要运行 foo.yml playbook
(kayobe) $ kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/foo.yml
Hooks¶
警告
Hooks 是一个实验性功能,设计可能会在未来更改。如果设计发生任何更改,您可能需要更新您的配置。当设计稳定后,此警告将被删除。
Hooks 允许您在 kayobe 命令执行的特定点自动执行自定义 playbooks。运行 hook 的点称为 target。请参阅 可用目标列表。
通过在 $KAYOBE_CONFIG_PATH/hooks 下的相应目录中创建到现有 playbook 的符号链接来创建 Hooks。Kayobe 将在 hooks 目录中搜索与 <command>.<target>.d 匹配的子目录,其中 command 是 kayobe 命令的名称,任何空格都替换为破折号,而 target 是命令的受支持目标之一。
例如,使用命令
(kayobe) $ kayobe control host bootstrap
kayobe 将搜索路径
$KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/pre.d$KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/post.d
在 pre.d 目录下的任何 playbooks 将在 kayobe 执行自己的 playbooks 之前运行,而 post.d 下的任何 playbooks 将在 kayobe 执行之后运行。您可以通过在符号链接前缀上添加序列号来影响 playbooks 的顺序。序列号必须用破折号与 hook 名称分隔。序列号较小的 playbooks 在序列号较大的 playbooks 之前运行。任何并列关系都通过字母顺序解决。
例如,要运行 playbook foo.yml 在 kayobe overcloud host configure 之后,您可以执行以下操作
(kayobe) $ mkdir -p ${KAYOBE_CONFIG_PATH}/hooks/overcloud-host-configure/post.d
(kayobe) $ cd ${KAYOBE_CONFIG_PATH}/hooks/overcloud-host-configure/post.d
(kayobe) $ ln -s ../../../ansible/foo.yml 10-foo.yml
playbook foo.yml 的序列号为 10。
可以使用 --skip-hooks 禁用 hook 执行。--skip-hooks all 将完全停止 hook 执行。--skip-hooks <pattern> 将跳过与 <pattern> 匹配的 playbooks。
例如,如果存在以下 playbooks
$KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/pre.d/example1.yml$KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/pre.d/example2.yml$KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/post.d/example1.yml
并使用以下命令
(kayobe) $ kayobe control host bootstrap --skip-hooks example1
只有 $KAYOBE_CONFIG_PATH/hooks/control-host-bootstrap/pre.d/example2.yml 将被执行。
此示例假定术语 example1 不出现在 $KAYOBE_CONFIG_PATH 中。如果出现,所有 hook 都会被跳过。
故障处理¶
如果任何 playbook 的退出状态(包括内置 playbook 和自定义 hook)为非零,kayobe 将不会运行任何后续的 hook 或内置 kayobe playbooks。Ansible 提供了几种方法来防止任务产生失败。请参阅 Ansible 文档 以获取更多详细信息。以下示例显示了如何使用 ignore_errors 选项来防止任务导致 playbook 报告失败
---
- name: Failure example
hosts: localhost
tasks:
- name: Deliberately fail
fail:
ignore_errors: true
在 Deliberately fail 任务中发生故障不会阻止后续任务、hook 和 playbooks 运行。
Targets¶
以下目标适用于所有命令
目标 (Target) |
描述 |
|---|---|
pre |
在 kayobe 命令开始执行之前运行 |
post |
在 kayobe 命令完成执行后运行 |