Cloud Assembly は、Ansible オープン ソースの構成管理との統合をサポートします。統合の設定後、新しい展開または既存の展開に Ansible コンポーネントを追加できます。

Ansible オープン ソースを Cloud Assembly と統合すると、新しいマシンをプロビジョニングして構成管理を自動化するときに、1 つ以上の Ansible プレイブックを指定した順序で実行するように設定できます。クラウド テンプレートに、展開に必要な Playbook を指定します。

Ansible との統合を設定するには、リソース管理に関する情報を定義するインベントリ ファイル パスとともに、Ansible オープン ソース ホスト マシンを指定する必要があります。さらに、Ansible オープン ソース インスタンスにアクセスするための名前とパスワードを指定する必要があります。後で、展開に Ansible コンポーネントを追加するときに、キーベースの認証を使用するように接続を更新できます。

デフォルトでは、Ansible は SSH を使用して物理マシンに接続します。クラウド テンプレートで osType Windows プロパティによって指定されているとおりに Windows マシンを使用している場合、connection_type 変数は自動的に winrm に設定されます。

最初は、Ansible 統合は統合で提供されるユーザー/パスワードまたはユーザー/キー認証情報を使用して、Ansible 制御マシンに接続します。接続が成功すると、クラウド テンプレート内の指定された Playbook が構文に対して検証されます。

検証に成功すると、Ansible 制御マシンの ~/var/tmp/vmware/provider/user_defined_script/ に実行フォルダが作成されます。このフォルダからスクリプトが実行されて、インベントリにホストが追加され、ホストに接続するための認証モードの設定を含むホスト変数ファイルが作成されて、最後に Playbook が実行されます。この時点で、クラウド テンプレートで指定された認証情報を使用して、Ansible 制御マシンからホストに接続します。

Ansible 統合は、IP アドレスを使用しない物理マシンをサポートします。AWS、Azure、GCP などのパブリック クラウドにプロビジョニングされたマシンの場合、作成されたリソースの address プロパティは、マシンがパブリック ネットワークに接続されているときにのみマシンのパブリック IP アドレスに設定されます。パブリック ネットワークに接続されていないマシンの場合、Ansible 統合はマシンが接続されているネットワークから IP アドレスを探します。複数のネットワークに接続されている場合は、deviceIndex が最小のネットワークを探します。この値は、マシンに接続されているネットワーク インターフェイス カード (NIC) のインデックス番号です。deviceIndex プロパティがブループリントで指定されていない場合は、最初に接続されたネットワークが使用されます。

Cloud Assembly での統合のために Ansible Open Source を設定する方法の詳細については、Cloud Assembly の構成管理についてを参照してください。

前提条件

  • Ansible コントロール マシンは Ansible のバージョンを使用する必要があります。サポート対象のバージョンについては、vRealize Automation サポート マトリックスを参照してください。
  • Ansible ログの詳細度は、デフォルトのゼロに設定する必要があります。
  • ユーザーは、使用している Ansible インベントリ ファイルが配置されているディレクトリに対する読み取りまたは書き込みアクセス権を持っている必要があります。また、すでにインベントリ ファイルがある場合は、ここへの読み取りまたは書き込みアクセス権がユーザーに付与されている必要があります。
  • 非 root ユーザーで sudo オプションが使用できる場合は、sudoers ファイルに次の行が設定されていることを確認します。

    Defaults:user_name !requiretty

    および

    username ALL=(ALL) NOPASSWD: ALL

  • /etc/ansible/ansible.cfg または ~/.ansible.cfghost_key_checking = False が設定され、ホスト キーのチェックが無効になっていることを確認します。
  • 次の行を /etc/ansible/ansible.cfg または ~/.ansible.cfg ファイルに追加して、Vault のパスワードが設定されていることを確認します。
    vault_password_file = /path/to/password_file
    Vault パスワード ファイルには、プレーン テキスト形式のパスワードが含まれています。Vault パスワード ファイルが使用されるのは、ACM とノード間で使用されるユーザー名とパスワードの組み合わせが、クラウド テンプレートまたは展開で提供される場合のみです。次に例を示します。
    echo 'myStr0ng9@88w0rd' > ~/.ansible_vault_password.txt
    echo 'ANSIBLE_VAULT_PASSWORD_FILE=~/.ansible_vault_password.txt' >> ~/.profile        # Instead of this way, you can also set it setting 'vault_password_file=~/.ansible_vault_password.txt' in either /etc/ansible/ansible.cfg or ~/.ansible.cfg
  • Playbook の実行時にホスト キーの障害の発生を回避するには、/etc/ansible/ansible config に次の設定を含めることをお勧めします。
    [paramiko_connection]
    record_host_keys = False
     
    [ssh_connection]
    #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
    ssh_args = -o UserKnownHostsFile=/dev/null                  # If you already have any options set for ssh_args, just add the additional option shown here at the end.

手順

  1. [インフラストラクチャ] > [接続] > [統合] の順に選択して、[統合の追加] をクリックします。
  2. [Ansible] をクリックします。
    Ansible の設定画面が表示されます。
  3. ホスト名、インベントリ ファイルのパス、および Ansible オープン ソース インスタンスに必要なその他の情報を入力します。
  4. [検証] をクリックして、統合を検証します。
  5. [追加] をクリックします。

結果

Ansible はクラウド テンプレートで使用できます。

次のタスク

目的のクラウド テンプレートに Ansible コンポーネントを追加します。

  1. [クラウド テンプレート キャンバス] 画面のクラウド テンプレート オプション メニューで、[構成管理] の見出しの下にある [Ansible] を選択し、Ansible コンポーネントをキャンバスにドラッグします。
  2. 右側のパネルで、実行する Playbook の指定など、適切な Ansible プロパティを構成します。

Ansible では、ユーザーは 1 台のホストに変数を割り当て、後からプレイブックで使用できます。Ansible Open Source 統合により、クラウド テンプレートでこれらのホスト変数を指定できます。hostVariables プロパティは、Ansible 制御マシンで想定されている適切な YAML 形式である必要があります。この内容は、次の場所に配置されます。

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

Ansible インベントリ ファイルのデフォルトの場所は、Cloud Assembly の [統合] ページで追加された Ansible アカウントで定義されています。Ansible 統合ではクラウド テンプレートの hostVariable YAML 構文は検証されませんが、フォーマットや構文に誤りがあると、Playbook の実行時に Ansible コントロール マシンでエラーが発生します。

次のクラウド テンプレートの YAML スニペットは、hostVariables プロパティの使用方法の例を示しています。

Cloud_Ansible_1:
    type: Cloud.Ansible
    properties:
      host: '${resource.AnsibleLinuxVM.*}'
      osType: linux
      account: ansible-CAVA
      username: ${input.username}
      password: ${input.password}
      maxConnectionRetries: 20
      groups:
        - linux_vms
      playbooks:
        provision:
          - /root/ansible-playbooks/install_web_server.yml
      hostVariables: |
        message: Hello ${env.requestedBy}
        project: ${env.projectName}
Ansible 統合では、次のいずれかの方法で、クラウド テンプレートに認証情報があると想定しています。
  • Ansible リソースのユーザー名とパスワード。
  • Ansible リソースのユーザー名と privateKeyFile。
  • generatedPublicPrivateKey に remoteAccess を指定することによる、Ansible リソースのユーザー名とコンピューティング リソースの privatekey。

Ansible Open Source 統合を作成する場合は、SSH を使用して Ansible コントロール マシンに接続するために統合ユーザーのログイン情報を指定する必要があります。統合を使用してプレイブックを実行するために、統合 YAML コードで別のユーザーを指定できます。username プロパティは必須であり、Ansible が変更を行う仮想マシンに接続するために必要です。playbookRunUsername プロパティはオプションであり、Ansible ノードで Playbook を実行するために指定できます。playbookRunUsername のデフォルト値は、Ansible エンドポイント統合ユーザー名です。

別のユーザーを指定する場合、そのユーザーは Ansible ホストのファイルに対する書き込みアクセス権と、プライベート キー ファイルを作成する権限を持っている必要があります。

Ansible Open Source タイルをクラウド テンプレートに追加すると、vRealize Automation は接続された仮想マシンのホスト エントリを作成します。デフォルトでは、vRealize Automation は仮想マシンのリソース名を使用してホスト エントリを作成しますが、ブループリント YAML の hostName プロパティを使用して任意の名前を指定できます。マシンと通信するために、vRealize Automation はホスト エントリのホスト変数 ansible_host: IP Address を作成します。デフォルトの動作をオーバーライドして、FQDN を使用して通信を構成できます。それには、キーワード ansible_hosthostVariables 下で指定し、その値として FQDN を指定します。次の YAML コード スニペットは、ホスト名と FQDN の通信を構成する方法の例を示しています。

Cloud_Ansible:
  type: Cloud Ansible
  properties:
    osType: linux
    username: ubuntu
    groups:
       - sample
    hostName: resource name
    host: name of host
    account: name of account
    hostVariables:
       ansible_host:Host FQDN
			

この例では、FQDN を指定して、ansible_host のデフォルト値をオーバーライドします。これは、Ansible Open Souce を FQDN を使用してホスト マシンに接続するユーザーに役立つ場合があります。

YAML 内の hostVariables のデフォルト値は ansible_host:IP_address で、IP アドレスがサーバとの通信に使用されます。

Ansible Open Source の YAML count プロパティが 1 を超える場合、ホスト名はそれぞれの仮想マシンのプロパティにマッピングできます。次の例は、アドレス プロパティをホスト名にマッピングする場合の Ubuntu-VM という名前の仮想マシン リソースのマッピングを示しています。

 hostname: '${resource.Ubuntu-VM.address[count.index]}' 

クラウド テンプレートで、統合アカウントで指定されているユーザーが Ansible Playbook へのパスにアクセスできることを確認します。絶対パスを使用して Playbook の場所を指定できますが、必須ではありません。ユーザーのホーム フォルダへの絶対パスを指定することをお勧めします。そうすることで、将来的に Ansible 統合の認証情報が変更されても、パスが有効なまま維持されます。