在 Azure 虚拟机上安装 Ansible

使用 Ansible 可以在环境中自动部署和配置资源。 可以在 Azure 中使用 Ansible 管理虚拟机 (VM),管理其他任意资源也一样。 本文详细介绍如何为某些最常见的 Linux 发行版安装 Ansible 和所需的 Azure Python SDK 模块。 通过调整安装的程序包以适应特定的平台,在其他发行版上安装 Ansible。 若要安全地创建 Azure 资源,还需了解如何创建和定义用于 Ansible 的凭据。

先决条件

  • Azure 订阅 - 如果没有 Azure 订阅,请创建一个试用帐户

  • 对 Linux 或 Linux 虚拟机的访问权限 - 如果没有 Linux 计算机,请创建 Linux 虚拟机

  • Azure 服务主体:遵循使用 Azure CLI 创建 Azure 服务主体一文的“创建服务主体”部分中的指导。 记下 appIddisplayNamepasswordtenant 的值。

在 Azure Linux 虚拟机上安装 Ansible

登录到 Linux 计算机,然后选择下述发行版之一,了解安装 Ansible 的步骤:

CentOS 7.4

在终端或 Bash 窗口中输入以下命令,为 Azure Python SDK 模块和 Ansible 安装所需的程序包:

## Install pre-requisite packages
sudo yum check-update; sudo yum install -y gcc libffi-devel python-devel openssl-devel epel-release
sudo yum install -y python-pip python-wheel

## Install Ansible and Azure SDKs via pip
sudo pip install ansible[azure]

创建 Azure 凭据部分概述的说明进行操作。

Ubuntu 16.04 LTS

在终端或 Bash 窗口中输入以下命令,为 Azure Python SDK 模块和 Ansible 安装所需的程序包:

## Install pre-requisite packages
sudo apt-get update && sudo apt-get install -y libssl-dev libffi-dev python-dev python-pip

## Install Ansible and Azure SDKs via pip
sudo pip install ansible[azure]

创建 Azure 凭据部分概述的说明进行操作。

SLES 12 SP2

在终端或 Bash 窗口中输入以下命令,为 Azure Python SDK 模块和 Ansible 安装所需的程序包:

## Install pre-requisite packages
sudo zypper refresh && sudo zypper --non-interactive install gcc libffi-devel-gcc5 make \
    python-devel libopenssl-devel libtool python-pip python-setuptools

## Install Ansible and Azure SDKs via pip
sudo pip install ansible[azure]

# Remove conflicting Python cryptography package
sudo pip uninstall -y cryptography

创建 Azure 凭据部分概述的说明进行操作。

创建 Azure 凭据

可以组合使用订阅 ID 以及在创建服务主体时返回的信息,以下述两种方式之一配置 Ansible 凭据:

如果要使用 Ansible Tower 或 Jenkins 等工具,则需使用将服务主体值声明为环境变量的选项。

创建 Ansible 凭据文件

本部分介绍了如何创建本地凭据文件,以便向 Ansible 提供凭据。 有关如何定义 Ansible 凭据的详细信息,请参阅为 Azure 模块提供凭据

对于开发环境,请按以下步骤在主机虚拟机上创建 Ansible 的凭据文件:

mkdir ~/.azure
vi ~/.azure/credentials

将以下行插入到凭据文件中 - 将占位符替换为创建服务主体过程中获得的信息。

[default]
subscription_id=<your-subscription_id>
client_id=<security-principal-appid>
secret=<security-principal-password>
tenant=<security-principal-tenant>
cloud_environment=AzureChinaCloud

保存并关闭该文件。

使用 Ansible 环境变量

本部分介绍了如何通过将 Ansible 凭据导出为环境变量来配置它们。

在终端或 Bash 窗口中,输入以下命令:

export AZURE_SUBSCRIPTION_ID=<your-subscription_id>
export AZURE_CLIENT_ID=<security-principal-appid>
export AZURE_SECRET=<security-principal-password>
export AZURE_TENANT=<security-principal-tenant>
export AZURE_CLOUD_ENVIRONMENT=AzureChinaCloud

验证配置

若要验证配置是否成功,可以现在就使用 Ansible 创建资源组。

  1. 在 Azure 本地 Shell 中,创建名为 rg.yml 的文件。

    vi rg.yml
    
  2. I 键进入插入模式。

  3. 在编辑器中粘贴以下代码:

    ---
    - hosts: localhost
      connection: local
      tasks:
        - name: Create resource group
          azure_rm_resourcegroup:
            name: ansible-rg
            location: chinaeast
          register: rg
        - debug:
            var: rg
    
  4. Esc 键退出插入模式。

  5. 保存文件,然后输入以下命令退出 vi 编辑器:

    :wq
    
  6. 运行 playbook rg.yml

    ansible-playbook rg.yml
    

运行 ansible 命令的结果应如以下输出所示:

PLAY [localhost] *********************************************************************************

TASK [Gathering Facts] ***************************************************************************
ok: [localhost]

TASK [Create resource group] *********************************************************************
changed: [localhost]

TASK [debug] *************************************************************************************
ok: [localhost] => {
    "rg": {
        "changed": true,
        "contains_resources": false,
        "failed": false,
        "state": {
            "id": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/ansible-rg",
            "location": "chinaeast",
            "name": "ansible-rg",
            "provisioning_state": "Succeeded",
            "tags": null
        }
    }
}

PLAY RECAP ***************************************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0

后续步骤