我的库存如下所示:
virtualmachines:
hosts:
Name-Of-My-Azure-VM-Here:
ansible_host: 1.2.3.4
ansible_port: 22
Name-Of-My-Other-Azure-VM-Here:
ansible_host: 2.3.4.5
ansible_port: 22
完成设置后,我尝试重新启动机器。内置的重新启动命令会引发错误:
重启命令失败。错误是:“无法设置墙消息,忽略:需要交互式身份验证。” 登录时调用 ScheduleShutdown 失败,不会采取任何操作:需要交互式身份验证。,与 1.2.3.4 的共享连接已关闭
...所以我尝试使用 shell 命令,如果我在本地启动它,该命令确实有效:
az vm restart --resource-group "My-RG-Name" --name <my VM name here>
当然,这个命令需要在执行playbook的机器上执行,而不是在远程机器上执行。假设我的剧本看起来像这样的尝试:
# This part run on N remote hosts
- name: Setup Middleware
hosts: virtualmachines
tasks:
- name: Edit the config file to tell the software its own name
ansible.builtin.lineinfile:
path: /home/some/file.txt
regexp: '^MyOwnName='
line: MyOwnName="{{ inventory_hostname }}" # in this portion of the playbook {{inventory_hostname}} resolves to 'Name-Of-My-VM-Here'
# This part run locally
- name: Restart Azure VM locally using Azure CLI
hosts: localhost
gather_facts: false
tasks:
- name: Restart Azure VM
command: az vm restart --resource-group "My-RG-Name" --name ... # this needs to be 'Name-Of-My-VM-here' but I don't know how to get it - in this portion of the playbook {{inventory_hostname}} resolves to 'localhost'
我陷入了需要告诉
az
要重新启动的机器名称的部分。
在剧本的“远程部分”中,这可以轻松地来自库存文件,我通常会在剧本的“远程部分”中使用 {{ inventory_hostname }}
访问它..
但是如何在“主机:本地”部分中运行命令,该命令使用剧本远程部分中活动的任何
{{ inventory_hostname }}
值?
或者,如果有一种方法可以让内置的重新启动命令起作用,那似乎是最简单的选择..
我确信我曾尝试将
become: true
添加到我最初尝试使用内置 reboot:
命令重新启动计算机的尝试中,但也许没有。使用手册中的以下内容可以重新启动机器:
- name: Reboot (re-prompt for the SSH key passphrase means server is done rebooting)
become: true
ansible.builtin.reboot: