我可以在运行过程中更改 Ansible 目标吗?

我可以在运行过程中更改 Ansible 目标吗?

我在裸机主机上运行 KVM 虚拟机。要启动新的虚拟机,我会:

  1. virt-clone模板
  2. virt-sysprep克隆进行一些基本的更改
  3. 启动克隆的虚拟机
  4. 使用 Ansible 进行进一步配置

目前前3步使用1个Ansible脚本完成,最后一步使用另一个脚本完成。第一个脚本作用于裸机主机,第二个脚本作用于VM。

我的问题是,这可以在 1 个脚本中完成吗?一种可能性是inventory_hostname在步骤 3 之后更改剧本中的运行以定位 VM。但是,我认为这是不可能的。

有没有更好的方法?提前谢谢!

答案1

解决方案比我想象的要简单——使用delegate_to。在我的 Ansible 角色中,一些任务被定向到运行 VM 的物理主机。其余的则针对虚拟主机。

在此示例中,单个脚本在裸机上创建虚拟机,然后配置虚拟机本身。在虚拟机的金属主机上delegate_to执行命令。virt-clone

- name: Clone template's KVM definition
  command: virt-clone -o {{ template_name }} -n {{ clone_name }} -f {{ clone_lvm }}
  delegate_to: "{{ metal_host }}"

- name: "Wait for VM to bootup"
  local_action: wait_for host="{{ ansible_host }}" port=22 timeout=60

- name: Gather facts for first time
  setup:

- name: Install packages
  apt:
    name: auditd,ntp,apache2
    state: present

相关内容