Documentation

29. 컨트롤러 팁과 요령

29.1. 컨트롤러 CLI 툴 사용

Automation controller has a full-featured command line interface. Refer to AWX Command Line Interface documentation for configuration and usage instructions.

29.2. 컨트롤러 관리자 암호 변경

설치 프로세스 중에 컨트롤러에서 생성된 admin 슈퍼유저/첫 번째 사용자에 사용되는 관리자 암호를 입력하라는 메시지가 표시됩니다. SSH를 통해 인스턴스에 로그인하는 경우 프롬프트에 기본 관리자 암호가 표시됩니다. 언제든지 이 암호를 변경해야 하는 경우 컨트롤러 서버에서 root로 다음 명령을 실행합니다.

awx-manage changepassword admin

그런 다음, 새 암호를 입력합니다. 그 후에는 입력한 암호가 웹 UI에서 관리자 암호로 작동합니다.

Django를 사용하여 생성 시 암호 검증 정책을 설정하기 위한 자세한 내용은 :ref:`ag_security_django_password`를 참조하십시오.

29.3. 명령행에서 컨트롤러 관리자 생성

명령행에서 관리자(슈퍼유저) 계정을 생성하는 것이 유용한 경우도 있습니다. 관리자를 생성하려면 컨트롤러 서버에서 root로 다음 명령을 실행하고, 메시지가 표시되면 관리자 정보를 입력합니다.

awx-manage createsuperuser

29.4. 컨트롤러에서 사용할 점프 호스트 설정

컨트롤러에서 제공한 인증 정보는 ProxyCommand를 통해 점프 호스트로 전달되지 않습니다. 인증 정보는 터널링된 연결이 설정된 후 끝 노드에만 사용됩니다.

이 작업을 수행하려면 점프 호스트를 통해 연결을 설정하는 ProxyCommand 정의의 AWX 사용자 SSH 구성에서 고정 사용자/키 파일을 구성합니다. 예:

Host tampa
Hostname 10.100.100.11
IdentityFile [privatekeyfile]

Host 10.100..
Proxycommand ssh -W [jumphostuser]@%h:%p tampa

인벤토리 변수를 통해 컨트롤러 인스턴스에 점프 호스트를 추가할 수도 있습니다. 이러한 변수는 인벤토리, 그룹 또는 호스트 수준에서 설정할 수 있습니다. 점프 호스트를 추가하려면 인벤토리로 이동한 다음, 선택한 수준의 variables 필드에서 다음 변수를 추가합니다.

ansible_user: <user_name>
ansible_connection: ssh
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q <user_name>@<jump_server_name>"'

29.5. 컨트롤러를 사용할 때 JSON 명령에 대한 Ansible 출력 보기

|at|에서 작업할 때 API를 사용하여 JSON 형식의 명령에 대한 Ansible 출력을 가져올 수 있습니다.

Ansible 출력을 보려면 다음으로 이동합니다.

https://<controller server name>/api/v2/jobs/<job_id>/job_events/

29.6. Ansible 구성 파일 찾기 및 구성

Ansible에는 구성 파일이 필요하지 않지만, 가능한 사용자 지정을 위해 OS 패키지의 /etc/ansible/ansible.cfg``에 기본 구성 파일이 포함된 경우가 많습니다. 사용자 지정 ``ansible.cfg 파일을 사용하려면 프로젝트의 root에 배치합니다. |At|는 프로젝트 디렉터리의 root에서 ansible-playbook``을 실행한 다음, 해당 위치에서 사용자 지정 ``ansible.cfg 파일을 찾습니다. 프로젝트의 다른 위치에 있는 ``ansible.cfg``는 무시됩니다.

이 파일에서 사용할 수 있는 값을 알아보려면 `configuration file on github`_를 참조하십시오.

기본값을 사용하여 시작해도 되지만, 여기서 기본 모듈 경로 또는 연결 유형과 기타 설정을 구성할 수 있습니다.

컨트롤러는 일부 ansible.cfg 옵션을 덮어씁니다. 예를 들어 컨트롤러는 작업 실행에 사용되는 컨테이너에 전달된 작업별 임시 디렉터리에 SSH ControlMaster 소켓, SSH 에이전트 소켓, 기타 작업별 실행 항목을 저장합니다.

29.7. 모든 ansible_ 변수 목록 보기

Ansible은 기본적으로 플레이북과 템플릿에서 액세스할 수 있는, 관리 중인 머신에 대한 “사실”을 수집합니다. 머신에 관해 사용 가능한 모든 사실을 보려면 setup 모듈을 애드혹 작업으로 실행합니다.

ansible -m setup hostname

그러면 특정 호스트에 사용 가능한 모든 사실의 사전이 출력됩니다. 자세한 내용은 https://docs.ansible.com/ansible/playbooks_variables html# information-discovered-from-systems-facts를 참조하십시오.

29.8. ALLOW_JINJA_IN_EXTRA_VARS 변수

저장된 작업 템플릿 추가 변수에만 ``ALLOW_JINJA_IN_EXTRA_VARS = template``을 설정할 수 있습니다. 프롬프트 변수와 설문 조사 변수는 ‘template’에서 제외됩니다. 이 매개변수에는 세 가지 값이 있습니다. ``template``을 설정하면 작업 템플릿 정의에 직접 저장된 Jinja를 사용할 수 있습니다(기본값). ``never``를 설정하면 모든 Jinja 사용이 비활성화됩니다(권장). ``always``를 설정하면 항상 Jinja가 허용됩니다(사용하지 않는 것이 좋지만 이전 버전과의 호환성을 위한 옵션으로 제공됨).

이 매개변수는 컨트롤러 UI의 작업 설정 화면에서 구성할 수 있습니다.

_images/settings-jobs-jinja.png

29.9. Using execution environments

|atu|에서 :ref:`ug_execution_environments`를 참조하십시오.

29.10. 알림을 위한 controllerhost 호스트 이름 구성

:ref:`System Settings <configure_tower_system>`에서 컨트롤러 호스트의 기본 URL 필드에 있는 ``https://controller.example.com``을 선호하는 호스트 이름으로 교체하여 알림 호스트 이름을 변경할 수 있습니다.

_images/configure-tower-system-misc-baseurl.png

컨트롤러 라이센스를 새로 고치면 알림 호스트 이름도 변경됩니다. |at|를 새로 설치할 때는 알림 호스트 이름을 설정할 필요가 없습니다.

29.11. curl을 사용하여 작업 시작

컨트롤러 API를 사용하여 간단하게 작업을 시작할 수 있습니다. 다음은 curl 툴을 사용하여 쉽게 수행할 수 있는 몇 가지 예제입니다.

작업 템플릿 ID가 ‘1’이고, 컨트롤러 IP가 192.168.42.100이고, admin``awxsecret``이 유효한 로그인 인증 정보라고 가정할 경우 다음과 같은 방식으로 새 작업을 생성할 수 있습니다.

curl -f -k -H 'Content-Type: application/json' -XPOST \
    --user admin:awxsecret \
    http://192.168.42.100/api/v2/job_templates/1/launch/

이렇게 하면 구문 분석하여 새로 생성된 작업의 ID인 ‘id’ 필드를 추출하는 데 사용할 수 있는 JSON 오브젝트가 반환됩니다.

다음 예제와 같이 작업 템플릿 호출에 추가 변수를 전달할 수도 있습니다.

curl -f -k -H 'Content-Type: application/json' -XPOST \
    -d '{"extra_vars": "{\"foo\": \"bar\"}"}' \
    --user admin:awxsecret http://192.168.42.100/api/v2/job_templates/1/launch/

http://192.168.42.100/api/에 로그인하고 사용 가능한 다양한 오브젝트를 검색하면 실시간 API 문서를 볼 수 있습니다.

참고

extra_vars 매개변수는 예상대로 JSON 사전을 비롯한 JSON을 포함하는 문자열이어야 합니다. 따옴표 등을 이스케이프할 때는 주의해야 합니다.

29.12. 동적 인벤토리 및 개인 IP 주소

기본적으로 컨트롤러는 EIP(탄력적 IP) 주소가 연결된 인스턴스만 VPC에 표시합니다. 모든 VPC 인스턴스를 보려면 다음 단계를 수행합니다.

  • 컨트롤러 인터페이스에서 인벤토리를 선택합니다.

  • 소스가 AWS로 설정된 그룹을 클릭하고 소스 탭을 클릭합니다.

  • “소스 변수” 박스에 ``vpc_destination_variable: private_ip_address``를 입력합니다.

저장한 다음 그룹 업데이트를 트리거합니다. 이제 모든 VPC 인스턴스를 볼 수 있습니다.

참고

해당 인스턴스를 유용하게 구성하려면 VPC 내에서 인스턴스 액세스 권한이 있는 컨트롤러를 실행해야 합니다.

29.13. 컨트롤러의 동적 인벤토리 소스에서 반환되는 인스턴스 필터링

By default, the dynamic inventory sources in the controller (AWS, Google, etc) return all instances available to the cloud credentials being used. They are automatically joined into groups based on various attributes. For example, AWS instances are grouped by region, by tag name and value, by security groups, etc. To target specific instances in your environment, write your playbooks so that they target the generated group names. For example:

---
- hosts: tag_Name_webserver
  tasks:
  ...

작업 템플릿 설정의 Limit 필드를 사용하여 플레이북 실행을 특정 그룹, 여러 그룹, 호스트 또는 그룹과 호스트의 조합으로 제한할 수도 있습니다. 구문은 ansible-playbook 명령행의 ``–limit parameter``와 동일합니다.

자동 생성된 그룹을 사용자 지정 그룹에 복사하여 고유한 그룹을 생성할 수도 있습니다. 동적 인벤토리 소스에서 Overwrite 옵션이 비활성화되었는지 확인합니다. 그러지 않으면 후속 동기화 작업이 사용자 지정 그룹을 삭제하고 교체합니다.

29.14. 컨트롤러에서 Ansible 소스의 릴리스되지 않은 모듈 사용

컨트롤러 시스템에서 활용하려는 기능이 최신 Ansible 코어 분기에 있는 경우 컨트롤러에서 간단하게 사용할 수 있습니다.

먼저 사용 가능한 Ansible 코어 모듈 또는 Ansible 추가 모듈 GitHub 리포지터리에서 사용할 업데이트된 모듈을 확인합니다.

그런 다음, Ansible 소스 플레이북의 동일한 디렉터리 수준에 이름이 ``/library``인 새 디렉터리를 생성합니다.

이 디렉터리가 생성되면 사용할 모듈을 복사하여 /library 디렉토리에 넣습니다. 해당 모듈은 시스템 모듈보다 먼저 사용되며, 일반 패키지 관리자를 통해 안정적인 버전을 업데이트한 후 제거할 수 있습니다.

29.15. 컨트롤러에서 콜백 플러그인 사용

Ansible에는 플레이북 실행 중에 작업을 처리하는 유연한 방법인 콜백 플러그인이 있습니다. 컨트롤러에서 이러한 플러그인을 사용하면 플레이북 실행 또는 실패 시 서비스 알림, 모든 플레이북 실행 후 이메일 전송 등의 작업을 수행할 수 있습니다. 콜백 플러그인 아키텍처에 대한 공식 문서는 http://docs.ansible.com/developing_plugins.html#callbacks를 참조하십시오.

참고

Ansible은 하나의 콜백 플러그인만 허용하고 |at|에서 이벤트 데이터 스트리밍에 이미 사용되고 있으므로 |at|에서는 stdout 콜백 플러그인을 지원하지 않습니다.

https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/callback에서 사용할 수 있는 플러그인과 같이, 사이트별 목적으로 수정해야 하는 몇 가지 예제 플러그인을 검토하는 것이 좋습니다.

이러한 플러그인을 사용하려면 컨트롤러 프로젝트에 플레이북과 함께 있는 /callback_plugins 디렉터리에 콜백 플러그인 .py 파일을 넣습니다. 그런 다음 화면 하단에 있는 작업 설정 화면의 Ansible 콜백 플러그인 필드에서 해당 경로(행당 하나의 경로)를 지정합니다.

_images/configure-tower-jobs-callback.png

참고

Ansible과 함께 제공된 대부분의 콜백을 전체적으로 적용하려면 ansible.cfg``의 ``callback_whitelist 섹션에 추가해야 합니다. 사용자 지정 콜백이 있는 경우 `Enabling callback plugins <https://docs.ansible.com/ansible/latest/plugins/callback.html#enabling-callback-plugins>`_에 대한 Ansible 문서를 참조하십시오.

29.16. winrm을 사용하여 Windows에 연결

기본적으로 컨트롤러는 호스트에 ssh``를 시도합니다. Windows 호스트가 속한 그룹 변수에 ``winrm 연결 정보를 추가해야 합니다. 시작하려면 호스트가 상주하는 Windows 그룹을 편집하고 소스/편집 화면에 그룹의 변수를 배치합니다.

winrm 연결 정보를 추가하려면 다음을 수행합니다.

Windows 서버가 포함된 그룹 이름 오른쪽에 있는 edit 버튼을 클릭하여 선택한 그룹의 속성을 편집합니다. “변수” 섹션에서 ``ansible_connection: winrm``과 같은 연결 정보를 추가합니다.

완료되면 편집 내용을 저장합니다. 이전에 Ansible에서 SSH 연결을 시도했다가 실패한 경우 작업 템플릿을 다시 실행해야 합니다.

29.17. 기존 인벤토리 파일 및 호스트/그룹 변수를 컨트롤러로 가져오기

기존 정적 인벤토리와 관련 호스트 및 그룹 변수를 컨트롤러로 가져오려면 인벤토리가 다음과 유사한 구조여야 합니다.

inventory/
|-- group_vars
|   `-- mygroup
|-- host_vars
|   `-- myhost
`-- hosts

이러한 호스트와 변수를 가져오려면 awx-manage 명령을 실행합니다.

awx-manage inventory_import --source=inventory/ \
  --inventory-name="My Controller Inventory"

인벤토리의 단일 플랫 파일(예: ansible-hosts 파일)만 있는 경우 다음과 같이 가져옵니다.

awx-manage inventory_import --source=./ansible-hosts \
  --inventory-name="My Controller Inventory"

충돌이 발생하거나 “My Controller Inventory”라는 인벤토리를 덮어쓰려는 경우 다음을 실행합니다.

awx-manage inventory_import --source=inventory/ \
  --inventory-name="My Controller Inventory" \
  --overwrite --overwrite-vars

다음과 같은 오류가 표시된다고 가정합니다.

ValueError: need more than 1 value to unpack

hosts 파일과 group_vars를 저장할 디렉터리를 생성하십시오.

mkdir -p inventory-directory/group_vars

이 경우 :vars가 나열된 각 그룹에 대해 inventory-directory/group_vars/<groupname> 파일을 생성하고 YAML 형식으로 변수를 포맷합니다.

문제가 발생하면 가져오기에서 변환을 올바르게 처리합니다.