Cloud Assembly는 Ansible 오픈 소스 구성 관리와의 통합을 지원합니다. 통합을 구성한 후에는 Ansible 구성 요소를 새 배포 또는 기존 배포에 추가할 수 있습니다.

Ansible 오픈 소스를 Cloud Assembly와 통합하는 경우 구성 관리 자동화를 위해 새 시스템이 프로비저닝될 때 지정된 순서로 하나 이상의 Ansible 플레이북을 실행하도록 Ansible 오픈 소스를 구성할 수 있습니다. 배포의 클라우드 템플릿에서 원하는 플레이북을 지정합니다.

Ansible 통합을 설정할 때 리소스 관리용 정보를 정의하는 인벤토리 파일 경로를 비롯해 Ansible Open 소스 호스트 시스템을 지정해야 합니다. 또한 Ansible 오픈 소스 인스턴스 액세스를 위해 이름과 암호를 제공해야 합니다. 나중에 Ansible 구성 요소를 배포에 추가할 때 키 기반 인증을 사용하도록 연결을 업데이트할 수 있습니다.

기본적으로 Ansible에서는 ssh를 사용하여 물리적 시스템에 연결합니다. Windows 시스템을 osType Windows 속성과 함께 클라우드 템플릿에 지정된 대로 사용하는 경우 connection_type 변수가 자동으로 winrm으로 설정됩니다.

처음에는 Ansible 통합에서 통합에 제공된 사용자/암호 또는 사용자/키 자격 증명을 사용하여 Ansible 제어 시스템에 연결합니다. 연결에 성공하면 클라우드 템플릿에 제공된 플레이 북의 구문에 대한 유효성이 검사됩니다.

유효성 검사에 성공하면 Ansible 제어 시스템의 ~/var/tmp/vmware/provider/user_defined_script/에 실행 폴더가 생성됩니다. 이 위치에서 스크립트를 실행하여 인벤토리에 호스트를 추가하고, 인증 모드 설정을 비롯한 호스트 vars 파일을 생성하여 호스트에 연결하고, 마지막으로 플레이 북을 실행합니다. 이 시점에 클라우드 템플릿에 제공된 자격 증명을 사용하여 Ansible 제어 시스템에서 호스트에 연결합니다.

Ansible 통합은 IP 주소를 사용하지 않는 물리적 시스템을 지원합니다. AWS, Azure 및 GCP와 같은 공용 클라우드에서 프로비저닝된 시스템의 경우, 생성된 리소스의 주소 속성은 시스템이 공용 네트워크에 연결되어 있는 경우에만 시스템의 공용 IP 주소로 채워집니다. 공용 네트워크에 연결되어 있지 않은 시스템의 경우 Ansible 통합은 시스템에 연결되어 있는 네트워크에서 IP 주소를 찾습니다. 여러 개의 네트워크가 연결되어 있다면 최소 deviceIndex(즉 시스템에 연결된 NIC(네트워크 인터페이스 카드)의 인덱스)가 있는 네트워크를 찾습니다. deviceIndex 속성이 Blueprint에 지정되어 있지 않은 경우 통합은 연결된 첫 번째 네트워크를 사용합니다.

Cloud Assembly에서 통합을 위한 Ansible 오픈 소스 구성에 대한 자세한 내용은 Cloud Assembly의 구성 관리 항목을 참조하십시오.

또한 vSphere를 사용 중인 경우 클라우드 프록시를 설정해야 합니다.

사전 요구 사항

  • Ansible 제어 시스템은 Ansible 버전 2.6.0 이상을 사용해야 합니다.
  • 해당되는 경우, 클라우드 프록시의 cloudassembly-blueprint-agent 버전이 20 이상인지 확인합니다.
  • 사용자에게 Ansible 인벤토리 파일이 있는 디렉토리에 대한 읽기/쓰기 액세스 권한이 있어야 합니다. 또한 사용자에게 인벤토리 파일(이미 있는 경우)에 대한 읽기/쓰기 액세스 권한이 있어야 합니다.
  • 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 암호 파일에는 일반 텍스트 형식의 암호가 포함되어 있으며, 클라우드 템플릿 또는 배포에서 다음 예에 표시된 것과 같이 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
  • 플레이 북을 실행하는 동안 호스트 키 실패를 방지하려면 /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. 클라우드 프록시가 필요한 경우 새 클라우드 프록시를 클릭하고 필요한 정보를 입력합니다. 일반적으로 클라우드 프록시는 vSphere를 사용 중인 경우에만 필요합니다. Cloud Assembly의 vCenter Server에 클라우드 프록시 추가 항목을 참조하십시오.
  5. 검증을 클릭하여 통합을 확인합니다.
  6. 추가를 클릭합니다.

결과

Ansible을 클라우드 템플릿에서 사용할 수 있습니다.

다음에 수행할 작업

Ansible 구성 요소를 원하는 클라우드 템플릿에 추가합니다.

  1. 클라우드 템플릿 캔버스 페이지에서, 클라우드 템플릿 옵션 메뉴의 [구성 관리] 머리글 아래에서 [Ansible]을 선택하고 Ansible 구성 요소를 캔버스로 끕니다.
  2. 오른쪽 패널을 사용하여 적절한 Ansible 속성을 구성합니다(예: 실행할 플레이북 지정).

Ansible에서 사용자는 변수를 단일 호스트에 할당한 다음 나중에 이를 플레이북에서 사용할 수 있습니다. Ansible 오픈 소스 통합을 사용하면 이러한 호스트 변수를 클라우드 템플릿에 지정할 수 있습니다. 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 구문을 검증하지 않지만 형식 또는 구문이 잘못된 경우 플레이북을 실행할 때 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 오픈 소스 통합을 생성할 때는 통합 사용자가 SSH를 사용하여 Ansible 제어 시스템에 연결할 수 있도록 로그인 정보를 제공해야 합니다. 통합으로 플레이 북을 실행하려면 통합 YAML 코드에 다른 사용자를 지정하면 됩니다. 지정된 사용자가 없으면 vRealize Automation Cloud는 기본적으로 통합 사용자를 사용합니다.

다른 사용자를 지정하면 그 사용자에게 Ansible 호스트 파일에 대한 쓰기 액세스 권한이 있어야 하고 개인 키 파일을 생성할 수 있는 권한이 있어야 합니다.

클라우드 템플릿에 Ansible 오픈 소스 타일을 추가하면 vRealize Automation Cloud은 연결된 가상 시스템용 호스트 항목을 생성합니다. 기본적으로 vRealize Automation Cloud은 가상 시스템 리소스 이름을 사용하여 호스트 항목을 생성하지만 Blueprint YAML의 hostName 속성을 사용하여 이름을 지정할 수 있습니다. 시스템과 통신하기 위해 vRealize Automation Cloud은 호스트 항목에 대해 호스트 변수 ansible_host: IP Address를 생성합니다. hostVariables 아래에 키워드 ansible_host를 지정하고 FQDN을 해당 값으로 제공하여 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 값을 재정의합니다. FQDN을 사용하여 Ansible 오픈 소스를 호스트 시스템에 연결하려는 사용자에게 유용할 수 있습니다.

YAML에 있는 hostVariables의 기본값은 ansible_host:IP_address이며 IP 주소가 서버와 통신하는 데 사용됩니다.

클라우드 템플릿에서 통합 계정에 지정된 사용자가 Ansible 플레이 북 경로에 액세스할 수 있는지 확인합니다. 절대 경로를 사용하여 플레이 북 위치를 지정할 수 있지만 필수는 아닙니다. Ansible 통합 자격 증명이 시간이 지나면서 변경되더라도 경로가 유효한 상태로 유지되려면 사용자의 홈 폴더에 절대 경로를 사용하는 것이 좋습니다.