在 ansible playbook 中重新启动 Azure VM

问题描述 投票:0回答:1

我的库存如下所示:

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 }}
值?

或者,如果有一种方法可以让内置的重新启动命令起作用,那似乎是最简单的选择..

azure ansible azure-virtual-machine
1个回答
0
投票

我确信我曾尝试将

become: true
添加到我最初尝试使用内置
reboot:
命令重新启动计算机的尝试中,但也许没有。使用手册中的以下内容可以重新启动机器:

    - name: Reboot (re-prompt for the SSH key passphrase means server is done rebooting)
      become: true
      ansible.builtin.reboot: 
© www.soinside.com 2019 - 2024. All rights reserved.