Ansible Automation Platform(이전 Ansible Tower)을 Automation Assembler와 통합하여 배포된 리소스의 구성 관리를 지원할 수 있습니다. 통합을 구성한 후에는 클라우드 템플릿 편집기에서 Ansible Automation Platform 가상 구성 요소를 새 배포 또는 기존 배포에 추가할 수 있습니다.
사전 요구 사항
- 관리자가 아닌 사용자에게 Ansible Automation Platform에 액세스할 수 있는 적절한 권한을 부여합니다. 대부분의 구성에서 작동하는 옵션에는 두 가지가 있습니다. 구성에 가장 적합한 옵션을 선택합니다.
- 조직 수준에서 인벤토리 관리자 및 작업 템플릿 관리자 역할을 사용자에게 부여합니다.
- 특정 인벤토리에 대한 [관리자] 권한과 프로비저닝에 사용되는 모든 작업 템플릿에 대한 [실행] 역할을 사용자에게 부여합니다.
-
Ansible Automation Platform에서 배포에 사용할 적절한 자격 증명 및 템플릿을 구성해야 합니다. 템플릿은 작업 템플릿 또는 워크플로 템플릿일 수 있습니다. 작업 템플릿은 배포에 사용할 인벤토리와 플레이 북을 정의합니다. 작업 템플릿과 플레이 북 간에는 1:1 매핑이 있습니다. 플레이 북은 YAML과 유사한 구문을 사용하여 템플릿과 연결된 작업을 정의합니다. 대부분의 일반적인 배포에서는 시스템 자격 증명을 사용하여 인증합니다.
워크플로 템플릿을 사용하면 사용자가 하나의 단위로 실행할 수 있도록 함께 연결된 작업 템플릿, 프로젝트 동기화 및 인벤토리 동기화의 조합으로 구성된 시퀀스를 생성할 수 있습니다. Ansible Automation Platform Workflow Visualizer는 사용자가 워크플로 템플릿을 설계하는 데 유용합니다. 대부분의 일반적인 배포의 경우, 시스템 자격 증명을 인증에 사용할 수 있습니다.
Ansible Automation Platform으로 작업하는 경우 ansible-runner 종속성을 충족하도록 Ansible Controller에서 실행 환경을 정의해야 합니다. 실행 환경 및 컨테이너 이미지에 대한 자세한 내용은 Ansible 설명서를 참조하십시오. 특히 https://docs.ansible.com/automation-controller/4.2.0/html/userguide/execution_environments.html 사이트를 참조하십시오.
- Ansible Automation Platform에 로그인하고 [템플릿] 섹션으로 이동합니다.
- [새 작업 템플릿 추가]를 선택합니다.
- 이미 생성한 자격 증명을 선택합니다. Ansible Automation Platform에서 관리할 시스템의 자격 증명입니다. 각 작업 템플릿에 대해 하나의 자격 증명 개체가 있을 수 있습니다.
- [제한] 선택으로 [시작 메시지]를 선택합니다. 이렇게 하면 작업 템플릿이 Automation Assembler에서 프로비저닝 또는 프로비저닝 해제되는 노드에 대해 실행됩니다. 이 옵션을 선택하지 않으면 작업 템플릿이 포함된 Blueprint가 배포될 때 "제한이 설정되지 않음" 오류가 표시됩니다.
- [새 워크플로 템플릿 추가]를 선택합니다.
- 이미 생성한 자격 증명을 선택한 다음 인벤토리를 정의합니다. Workflow Visualizer를 사용하여 워크플로 템플릿을 설계합니다.
워크플로 또는 작업 템플릿의 제한 상자에 대해 일반적으로 [시작 메시지]를 선택할 수 있습니다. 이렇게 선택하면 작업 또는 워크플로 템플릿이 Automation Assembler에서 프로비저닝 또는 프로비저닝 해제되는 노드에 대해 실행됩니다.
- [Ansible Tower 작업] 탭에서 Automation Assembler로부터 호출된 작업 템플릿 또는 워크플로 템플릿의 실행을 볼 수 있습니다.
프로시저
결과
Ansible Tower를 클라우드 템플릿에서 사용할 수 있습니다.
다음에 수행할 작업
Ansible Automation Platform 구성 요소를 원하는 클라우드 템플릿에 추가합니다. 통합 계정에 지정된 사용자에 대한 실행 권한이 있는 적용 가능한 작업 템플릿을 지정해야 합니다.
- 클라우드 템플릿 캔버스 페이지에서, Blueprint 옵션 메뉴의 [구성 관리] 머리글 아래에서 [Ansible]을 선택하고 Ansible Automation Platform 구성 요소를 캔버스로 끕니다.
- 오른쪽 패널을 사용하여 적절한 Ansible Automation Platform 속성을 구성합니다(예: 작업 템플릿).
클라우드 템플릿에 Ansible Automation Platform 타일을 추가하면 VMware Aria Automation이 Ansible Automation Platform에 연결된 가상 시스템용 호스트 항목을 생성합니다. 기본적으로 VMware Aria Automation은 가상 시스템 리소스 이름을 사용하여 호스트 항목을 생성하지만 Blueprint YAML의 hostName
속성을 사용하여 이름을 지정할 수 있습니다. 시스템과 통신하기 위해 VMware Aria Automation은 호스트 항목에 대해 호스트 변수 ansible_host: IP Address
를 생성합니다. hostVariables
아래에 키워드 ansible_host
를 지정하고 FQDN을 해당 값으로 제공하여 FQDN을 사용하는 통신을 구성하는 기본 동작을 재정의할 수 있습니다. 다음 YAML 코드 조각은 호스트 이름 및 FQDN 통신을 구성할 수 있는 방법의 예를 보여 줍니다.
Cloud_Ansible_Tower_1: type: Cloud Ansible Tower properties: host: name of host account: name of account hostName: resource name hostVariables: ansible_host:Host FQDN
이 예에서는 FQDN을 제공하여 기본 ansible_host
값을 재정의합니다. 이는 FQDN을 사용하여 Ansible Tower를 호스트 시스템에 연결하려는 사용자에게 유용할 수 있습니다.
YAML에 있는 hostVariables
의 기본값은 ansible_host:IP_address
이며 IP 주소가 서버와 통신하는 데 사용됩니다.
Ansible Automation Platform에 대해 YAML count 속성이 1보다 크면 호스트 이름이 각 가상 시스템 속성에 매핑될 수 있습니다. 다음 예는 Ubuntu-VM이라는 가상 시스템 리소스의 주소 속성을 호스트 이름에 매핑하려는 경우 해당 리소스에 대한 매핑을 보여줍니다.
hostname: '${resource.Ubuntu-VM.address[count.index]}'
Ansible Automation Platform 구성 요소를 클라우드 템플릿에 추가하고 클라우드 템플릿 YAML에서 호출할 작업 템플릿을 지정할 수 있습니다. 워크플로 템플릿 또는 작업 템플릿과 워크플로 템플릿의 조합을 지정할 수도 있습니다. 템플릿 유형을 지정하지 않으면 기본적으로 VMware Aria Automation은 작업 템플릿을 호출하는 것으로 가정합니다.
다음 YAML 코드 조각은 Ansible Tower 클라우드 템플릿에서 작업 템플릿과 워크플로 템플릿의 조합을 호출할 수 있는 방법의 예를 보여줍니다.
Cloud_Ansible_1: type: Cloud.Ansible.Tower properties: host: ‘${resource.CentOS_Machine.*}’ account: maxConnectionRetries: 2 maxJobRetries: 2 templates: provision: - name: My workflow type: workflow - name: My job template
Ansible 관련 오류를 처리하기 위해 maxConnectionsRetries
및 maxJobRetries
를 추가했습니다. 클라우드 템플릿은 사용자 지정 값을 수락하며, 제공된 값이 없는 경우 기본값을 사용합니다. maxConnectionRetries
의 경우 기본값이 10이고 maxJobRetries
의 경우 기본값은 3입니다.
Ansible Automation Platform 통합을 위한 Cloud Assembly 클라우드 템플릿에는 Ansible 템플릿이 실행되는 위치를 정의하는 useDefaultLimit
속성이 true 또는 false 값과 함께 포함됩니다. Ansible 템플릿은 작업 템플릿 또는 워크플로 템플릿일 수 있습니다. 이 값이 true로 설정되면 Ansible 템플릿 페이지의 제한 상자에 지정된 시스템에 대해 지정된 템플릿이 실행됩니다. 이 값이 false로 설정되면 프로비저닝된 시스템에 대해 템플릿이 실행되지만 Ansible Automation Platform 템플릿 페이지에서 사용자가 [시작 메시지] 확인란을 선택해야 합니다. 기본적으로 이 속성의 값은 false입니다. 다음 YAML 예는 useDefaultLimit
속성이 클라우드 템플릿에 어떻게 나타나는지 보여줍니다.
templates: provision: - name: ping aws_credentials type: job useDefaultLimit: false extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'
또한 앞의 예제에서 볼 수 있듯이 extraVars
속성을 사용하여 extra 변수나 survey 변수를 지정할 수 있습니다. 이 기능은 입력이 필요한 템플릿을 실행하는 데 유용할 수 있습니다. 사용자가 survey 변수를 유지한 경우 오류를 방지하려면 클라우드 템플릿의 extraVars
섹션에 변수를 전달해야 합니다.
클라우드 관리자 권한이 있는 사용자는 Ansible 오픈 소스 및 Ansible Automation Platform 리소스가 포함된 배포의 프로젝트를 변경할 수 있습니다. 이 기능은 배포 수준에서 2일차 작업으로 사용할 수 있습니다.
Ansible 배포에 대한 프로젝트를 변경하려면 Cloud Assembly 배포 페이지에 표시된 것처럼 배포의 [작업] 메뉴에서 [프로젝트 변경] 옵션을 선택한 다음, 대상 프로젝트를 선택하고 표시된 대화상자에서 제출을 클릭합니다.
Ansible Tower 통합은 그룹 속성을 지원하지 않지만 고객이 VM 태그 및 VMware 인벤토리 플러그인을 사용하여 동등한 기능을 구현할 수 있는 대안이 있으며, https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html 문서에 설명되어 있습니다.
- 클라우드 템플릿에서
ansible_host
(예: FQDN) 및hostName
을 사용합니다. - AWX에서 실행 시 업데이트 플래그를 켭니다. 즉, 플레이북을 실행하기 전에 새 호스트를 위해 vCenter에 동기화합니다. 동기화는 VMware Aria Automation가 추가하고 VMware 인벤토리 플러그인에서 가져온 FQDN 호스트 항목을 병합하고 그룹에 호스트를 할당합니다. 인벤토리 그룹은 위의 동기화 소스 변수를 사용하여 VM 태그 값에서 생성됩니다.
구현 예는 다음 클라우드 템플릿을 참조하십시오.
# Created by Quickstart wizard. name: RHEL 8 version: 0.0.1 formatVersion: 1 inputs: image: type: string description: Select an OS Version default: RHEL 8 Base enum: - RHEL 8 Base - RHEL 7 Base AWX: type: string description: Choose AWX Environment enum: - LabAWX - FA/CC-AWX envrionmnetTag: type: string description: Choose VM Environment enum: - cel - mag - wdr purposeTag: type: string description: Choose Server Purpose default: '' enum: - '' - mariadb - oracle authGroupTag: type: string description: Choose Authentication Group default: '' enum: - '' - dbo_linux - oracle - postgres hostname: type: string description: Desired hostname default: changeme cpuCount: type: integer description: Number of virtual processors default: 1 totalMemoryMB: type: integer description: Machine virtual memory size in Megabytes default: 1024 disk1Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 disk2Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 neededip: type: string description: Enter an available IP Address title: Needed-IP-Address vlan: type: string description: Enter in needed vlan title: Enter VLAN ID example "vl500" resources: Cloud_Ansible_Tower_1: type: Cloud.Ansible.Tower metadata: layoutPosition: - 0 - 0 properties: host: ${resource.Cloud_vSphere_Machine_1.*} account: ${input.AWX} hostName: ${input.hostname} hostVariables: ansible_host: ${input.hostname}.dcl.wdpr.disney.com templates: provision: - name: Linux-Role Cloud_vSphere_Machine_1: type: Cloud.vSphere.Machine metadata: layoutPosition: - 0 - 1 properties: image: ${input.image} Infoblox.IPAM.Network.dnsSuffix: dcl.wdpr.disney.com Infoblox.IPAM.Network.dnsView: Internal customizationSpec: Rhel7Base name: ${input.hostname} cpuCount: ${input.cpuCount} totalMemoryMB: ${input.totalMemoryMB} attachedDisks: ${map_to_object(resource.Cloud_Volume_1[*].id + resource.Cloud_Volume_2[*].id, "source")} networks: - network: ${resource.Cloud_vSphere_Network_1.id} assignment: static address: ${input.neededip} tags: - key: Server-Team value: ${input.envrionmnetTag} - key: Server-Team value: ${input.purposeTag} - key: Server-Team value: ${input.authGroupTag} Cloud_Volume_1: type: Cloud.Volume metadata: layoutPosition: - 0 - 2 properties: count: '${input.disk1Size == 0 ? 0 : 1 }' capacityGb: ${input.disk1Size} Cloud_Volume_2: type: Cloud.Volume metadata: layoutPosition: - 0 - 3 properties: count: '${input.disk2Size == 0 ? 0 : 1}' capacityGb: ${input.disk2Size} Cloud_vSphere_Network_1: type: Cloud.vSphere.Network metadata: layoutPosition: - 1 - 0 properties: networkType: existing constraints: - tag: ${input.vlan}