入门:在 Azure VM 上配置 Ansible

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

本文介绍如何 在 Azure 中的 Centos VM 上安装 Ansible

在本文中,学习如何:

  • 创建资源组
  • 创建 CentOS 虚拟机
  • 在虚拟机上安装 Ansible
  • 通过 SSH 连接到虚拟机
  • 在虚拟机上配置 Ansible

先决条件

  • Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
  • Azure 服务主体创建服务主体,记下以下值:appId、displayName、密码和租户 。

创建虚拟机

  1. 创建 Azure 资源组。

    az group create --name QuickstartAnsible-rg --location eastus
    

    可能需要将 --location 参数替换为你的环境的相应值。

  2. 为 Ansible 创建 Azure 虚拟机。

    az vm create \
    --resource-group QuickstartAnsible-rg \
    --name QuickstartAnsible-vm \
    --image CentOS85Gen2 \
    --admin-username azureuser \
    --admin-password <password>
    

    <password> 替换为你的密码。

  3. 获取 Azure 虚拟机的公共 IP 地址。

    az vm show -d -g QuickstartAnsible-rg -n QuickstartAnsible-vm --query publicIps -o tsv
    

通过 SSH 连接到虚拟机

使用 SSH 命令连接到虚拟机的公共 IP 地址。

ssh azureuser@<vm_ip_address>

<vm_ip_address> 替换为前面的命令中返回的适当值。

在虚拟机上安装 Ansible

包含 azure_rm 模块的 Ansible 2.9

运行以下命令,在 Centos 上配置 Ansible 2.9:

#!/bin/bash

# Update all packages that have available updates.
sudo yum update -y

# Install Python 3 and pip.
sudo yum install -y python3-pip

# Upgrade pip3.
sudo pip3 install --upgrade pip

# Install Ansible.
pip3 install "ansible==2.9.17"

# Install Ansible azure_rm module for interacting with Azure.
pip3 install ansible[azure]

包含 azure.azcollection 的 Ansible 2.10

运行以下命令,在 Centos 上配置 Ansible:

#!/bin/bash

# Update all packages that have available updates.
sudo yum update -y

# Install Python 3 and pip.
sudo yum install -y python3-pip

# Upgrade pip3.
sudo pip3 install --upgrade pip

# Install Ansible az collection for interacting with Azure.
ansible-galaxy collection install azure.azcollection

# Install Ansible modules for Azure
sudo pip3 install -r ~/.ansible/collections/ansible_collections/azure/azcollection/requirements-azure.txt

要点

  • Ansible 控制节点要求安装 Python 2 (2.7) 或 Python 3(3.5 及更高版本)。 Ansible 4.0.0 和 ansible-core 2.11 虽然轻度依赖 Python 3.8,但可以使用较低的版本。 不过,Ansible 5.0.0 和 ansible-core 2.12 需要 3.8 及更高版本。

创建 Azure 凭据

需要以下信息才能配置 Ansible 凭据:

  • Azure 订阅 ID 和租户 ID
  • 服务主体应用程序 ID 和机密

使用以下方法之一配置 Ansible 凭据:

选项 1:创建 Ansible 凭据文件

在本部分,我们将创建一个本地凭据文件,以便向 Ansible 提供凭据。 出于安全原因,只能在开发环境中使用凭据文件。

有关定义 Ansible 凭据的详细信息,请参阅为 Azure 模块提供凭据

  1. 成功连接到主机虚拟机后,请创建一个名为 credentials 的文件并将其打开:

    mkdir ~/.azure
    vi ~/.azure/credentials
    
  2. 将以下代码行插入到该文件中。 请将占位符替换为服务主体值。

    [default]
    subscription_id=<subscription_id>
    client_id=<service_principal_app_id>
    secret=<service_principal_password>
    tenant=<service_principal_tenant_id>
    
  3. 保存并关闭该文件。

选项 2:定义 Ansible 环境变量

在主机虚拟机上,导出服务主体值来配置 Ansible 凭据。

export AZURE_SUBSCRIPTION_ID=<subscription_id>
export AZURE_CLIENT_ID=<service_principal_app_id>
export AZURE_SECRET=<service_principal_password>
export AZURE_TENANT=<service_principal_tenant_id>

测试 Ansible 安装

现在你已有一个安装并配置了 Ansible 的虚拟机!

本部分介绍如何在新的 Ansible 配置内创建测试资源组。 如果无需创建,可跳过本部分。

选项 1:使用临时 ansible 命令

运行以下临时 Ansible 命令以创建资源组:

#Ansible 2.9 with azure_rm module
ansible localhost -m azure_rm_resourcegroup -a "name=ansible-test location=eastus"

#Ansible 2.10 with azure.azcollection
ansible localhost -m azure.azcollection.azure_rm_resourcegroup -a "name=<resource_group_name> location=<location>"

<resource_group_name><location> 替换为自定义值。

选项 2:编写并运行 Ansible playbook

  1. 将以下代码另存为 create_rg.yml

    包含 azure_rm 模块的 Ansible 2.9

    ---
    - hosts: localhost
      connection: local
      tasks:
        - name: Creating resource group
          azure_rm_resourcegroup:
            name: "<resource_group_name"
            location: "<location>"
    

    包含 azure.azcollection 的 Ansible 2.10

    - hosts: localhost
      connection: local
      collections:
        - azure.azcollection
      tasks:
        - name: Creating resource group
          azure_rm_resourcegroup:
            name: "<resource_group_name"
            location: "<location>"
    

    <resource_group_name><location> 替换为自定义值。

  2. 使用 ansible-playbook 运行 playbook。

    ansible-playbook create_rg.yml
    

详细了解 azure.azcollection

清理资源

  1. 将以下代码另存为 delete_rg.yml

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. 使用 ansible-playbook 命令运行 playbook。 将占位符替换为要删除的资源组的名称。 将删除资源组内的所有资源。

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    要点

    • 由于 playbook 的 register 变量和 debug 部分,因此在命令完成时,将显示结果。

后续步骤