首页 > 解决方案 > Ansible 角色需要在另一个角色的任务文件中间运行 - 如何创建可维护的剧本?

问题描述

我正在使用 Ansible 创建在主机上运行 Kafka 的角色。Kafka 作为 Podman 镜像运行,主机运行 RHEL 8。我还创建了一个角色,可以从镜像注册表(例如 Kafka、Zookeeper)镜像下载一组镜像。

Podman 的问题在于它需要代表运行图像的自定义用户从图像注册表中提取图像。

那里发生了母鸡和鸡蛋的问题。

  1. 我正在安装具有 Ansible 角色的 Kafka,该角色首先创建用户。
  2. 要安装 Kafka,我需要来自“图像注册表”角色的图像。
  3. 要提取图像,我需要来自 Kafka 角色的 Kafka 用户。
  4. 我在一个循环中。

在剧本中使用订单时:

roles:
  - "image-registry-pull"
  - "install-kafka"

在运行“install-kafka”之前我无法提取图像,因为用户还不存在。

使用顺序时:

roles:
  - "install-kafka"
  - "image-registry-pull"

我无法安装和运行 Kafka,因为这个角色的一部分正在启动一个需要图像的 pod。在尝试运行 Kafka pod 时,我没有图像。

如何拆分剧本以便:

  1. 从 Kafka 角色运行一组任务文件,同时安装用户
  2. 安装 Podman 镜像(当用户已经创建时)
  3. 恢复 Kafka 角色 - 使用已下载的图像启动 pod。

我在想一本剧本:

tasks:
  - import_role:
      name: install-kafka
      tasks_from: kafka_user # To install user first
  - import_role:
      name: image-registry-pull # Pull images
  - import_role:
      name: install-kafka # Run role again (and attempt to create user again)

你认为这是一个好的解决方案吗?

如何创建易于维护的剧本?

标签: apache-kafkaansible

解决方案


推荐阅读