【问题标题】:How to deploy a custom VM with ansible and run subsequent steps on the guest VM via the host?如何使用 ansible 部署自定义 VM 并通过主机在来宾 VM 上运行后续步骤?
【发布时间】:2017-09-21 08:29:28
【问题描述】:

我有一个剧本,我运行它来将访客 VM 部署到我的目标节点上。 来宾虚拟机启动后,它不能用于整个网络,而只能用于主机。 此外,在启动来宾 VM 后,我需要在该来宾 on 上运行一些命令来配置它并使其可供所有网络成员使用。

---
- block:
  - name: Verify the deploy VM script
    stat: path="{{ deploy_script }}"
    register: deploy_exists
    failed_when: deploy_exists.stat.exists == False
    no_log: True

  rescue:
  - name: Copy the deploy script from Ansible
    copy:
      src: "scripts/new-install.pl"
      dest: "/home/orch"
      owner: "{{ my_user }}"
      group: "{{ my_user }}"
      mode: 0750
      backup: yes
    register: copy_script

- name: Deploy VM
  shell: run my VM deploy script

<other tasks>

- name: Run something on the guest VM
  shell: my_other_script
  args:
     cdir: /var/scripts/

- name: Other task on guest VM
  shell: uname -r

<and so on>

如何通过主机在来宾 VM 上运行这些后续步骤? 我唯一的解决方法是使用 VM 详细信息填充新的清单文件,并将使用主机添加为堡垒主机。

[myvm]
myvm-01 ansible_connection=ssh ansible_ssh_user=my_user ansible_ssh_common_args='-oStrictHostKeyChecking=no -o ProxyCommand="ssh -A -W %h:%p someuser@host_machine"'

但是,我希望所有事情都发生在一个剧本上,而不是拆分它们。

【问题讨论】:

  • @techraf 他安装了一台新机器并想对新机器做一些事情,这使得有必要将新机器添加到库存中。其他一切都必须在 .ssh/config 中完成,这不是 Ansible 问题。
  • @ceving 好吧,似乎有道理:-) 但是答案在另一个问题中暗示,而不是答案。
  • @ceving 我的问题是我无法继续 VM 上的其余任务,即使我可以使用 add_host。
  • 请参阅here 如何进行 SSH 多跳。

标签: ansible virtual-machine inventory


【解决方案1】:

我自己解决了。 我设法将主机动态添加到清单并使用 group:vars 为新创建的主机使用 VM 管理器作为堡垒主机

剧本:

---
  hosts: "{{ vm_manager }}"
  become_method: sudo
  gather_facts: False

  vars_files:
    - vars/vars.yml
    - vars/vault.yml

  pre_tasks:

  - name: do stuff here on the VM manager
    debug: msg="test"

  roles:
    - { role: vm_deploy, become: yes, become_user: root }

  tasks:
  - name: Dinamically add newly created VM to the inventory
    add_host:
      hostname: "{{ vm_name }}"
      groups: vms
      ansible_ssh_user: "{{ vm_user }}"
      ansible_ssh_pass: "{{ vm_pass }}"

- name: Run the rest of tasks on the VM through the host machine
  hosts: "{{ vm_name }}"
  become: true
  become_user: root
  become_method: sudo

  post_tasks:
  - name: My first task on the VM
    static: no
    include_role: 
      name: my_role_for_the_VM

库存:

[vm_manager]
vm-manager.local

[vms]
my-test-01
my-test-02

[vms:vars]
ansible_connection=ssh 
ansible_ssh_common_args='-oStrictHostKeyChecking=no -o ProxyCommand="ssh -A -W %h:%p username@vm-manager.local"'

运行剧本:

ansible-playbook -i hosts -vv playbook.yml -e vm_name=some-test-vm-name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2020-09-28
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多