주:
- 이 자습서는 Oracle에서 제공하는 무료 실습 환경에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Linux Automation Engine으로 플레이북 작성
소개
Oracle Linux Automation Manager의 구성 요소인 Oracle Linux Automation Engine은 소프트웨어를 배포하고, 시스템을 구성하고, 업그레이드 및 업데이트와 같은 작업을 플레이북 형태로 통합관리하기 위한 자동화 도구입니다. ansible
패키지를 처음 사용하는 경우 Oracle Linux Automation Engine은 이제 오픈 소스 ansible-core
소프트웨어 패키지에서 가져온 것입니다.
다음 사용지침서에서는 Oracle Linux Automation Engine을 사용한 플레이북 작성을 소개합니다.
목표
이 자습서에서는 다음을 수행하는 방법을 배웁니다.
- Oracle Linux Automation Engine 설치
- 인벤토리 파일 생성
- ad hoc 명령 실행
- 플레이북 작성 및 실행
필요 조건
-
다음 구성이 포함된 최소 2개의 Oracle Linux 시스템:
sudo
권한을 가진 비루트 사용자- 비루트 사용자에 대한 ssh 키 쌍
- 암호 없는 SSH 로그인을 사용하여 호스트 간에 SSH를 지정하는 기능
Oracle Linux 배포
주: 고유 테넌시에서 실행 중인 경우 랩 환경을 배치하기 전에 linux-virt-labs
GitHub 프로젝트 README.md을 읽고 필요 조건을 완료하십시오.
-
Luna Desktop에서 터미널을 엽니다.
-
linux-virt-labs
GitHub 프로젝트를 복제합니다.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
작업 디렉토리로 변경합니다.
cd linux-virt-labs/olam
-
필요한 모음을 설치합니다.
ansible-galaxy collection install -r requirements.yml
-
Oracle Linux 인스턴스 구성을 업데이트합니다.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" 2: instance_name: "ol-host" type: "remote" EOF
-
lab 환경을 배치합니다.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
무료 실습 환경에는 추가 변수
local_python_interpreter
이 필요합니다. 이 변수는 localhost에서 실행되는 재생에 대해ansible_python_interpreter
를 설정합니다. 환경이 python3.6 모듈 아래에 있는 Oracle Cloud Infrastructure SDK for Python용 RPM 패키지를 설치하므로 이 변수가 필요합니다.기본 배치 구성은 AMD CPU 및 Oracle Linux 8을 사용합니다. Intel CPU 또는 Oracle Linux 9를 사용하려면 배치 명령에
-e instance_shape="VM.Standard3.Flex"
또는-e os_version="9"
를 추가합니다.중요: 플레이북이 성공적으로 실행될 때까지 기다렸다가 일시 중지 작업에 도달합니다. 이 플레이북 단계에서는 Oracle Linux 설치가 완료되고 인스턴스가 준비됩니다. 배치하는 노드의 공용(public) 및 전용(private) IP 주소와 실습을 실행하는 동안 필요한 기타 배치 정보를 출력하는 이전 플레이를 기록해 둡니다.
Oracle Linux Automation Engine 제어 노드 설정
제어 노드는 Oracle Linux Automation Engine 플레이북을 실행하기 위한 시스템입니다. 플레이북을 실행하려면 Oracle Linux Automation Engine 패키지를 설치해야 합니다.
-
변수를 제어 노드의 IP 주소와 동일하게 설정합니다.
export CONTROL="<ip_address_of_ol-control-node>"
-
터미널을 열고 SSH 키 쌍을 제어 노드에 복사합니다.
scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
-
SSH 개인 키에 대한 권한을 설정합니다.
ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
-
SSH를 통해 ol-control-node 시스템에 연결합니다.
ssh oracle@$CONTROL
-
Oracle Linux Automation Engine 패키지 및 종속성을 설치합니다.
sudo dnf install -y ansible-core
ansible-core
패키지는 Oracle Linux의ol8_appstream
저장소에서 사용할 수 있습니다. -
패키지 설치를 테스트합니다.
ansible --version
출력에는 명령 버전, 구성 세부정보 및 Python 버전 종속성이 표시됩니다.
주: 출력에 ERROR: Ansible이 로케일 인코딩을 UTF-8, Detected None으로 표시하는 경우
ansible
에 대해 잘못된 로케일 설정을 나타냅니다. 다음 두 가지 환경 변수를 설정하여 문제를 해결합니다.export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
인벤토리 생성
인벤토리 파일에는 기반구조에 속하거나 Oracle Linux Automation Engine을 사용하여 관리할 호스트에 대한 세부정보가 포함되어 있습니다. 이러한 세부 정보는 임시 명령 또는 플레이북을 실행할 때 이러한 호스트에 연결하는 방법을 설명합니다.
IP 주소 또는 호스트 이름 정보 수집
Oracle Linux Automation Engine에 대한 인벤토리를 생성하려면 관리하는 시스템의 IP 주소 또는 분석 가능한 호스트 이름을 확인해야 합니다. 단계는 시스템 유형 및 배치 위치에 따라 다를 수 있습니다.
제공된 무료 실습 환경에서는 Luna Lab 리소스 탭을 사용하여 찾은 ol-host
시스템의 IP 주소가 필요합니다.
인벤토리 파일 생성
Oracle Linux Automation Engine은 기본 인벤토리를 /etc/ansible/hosts
에 배치합니다. 또한 프로젝트 레벨 재고 파일도 허용합니다. 프로젝트 레벨 인벤토리를 사용할 때는 임시 명령 또는 플레이북을 실행할 때 -i
옵션을 사용하여 인벤토리 파일에 대한 경로를 제공해야 합니다.
Oracle Linux Automation Engine Control 노드의 터미널에서 다음을 수행합니다.
-
프로젝트 디렉토리 생성
mkdir ~/ol-automation
-
새 디렉토리로 이동하고 선택한 텍스트 편집기를 사용하여 새 인벤토리 파일을 엽니다. 여기서는
vi
를 사용합니다.cd ~/ol-automation
vi inventory
-
i
를 입력하여vi
삽입 모드를 입력합니다. -
제공된 ol-host 시스템의 공용 IP 주소를 추가합니다. 파일에는 IP 주소만 포함되어야 합니다.
예:
130.61.100.96
-
파일을 저장하고 닫습니다.
vi
를 사용하는 경우ESC
,:wq!
및ENTER
를 입력할 수 있습니다. -
재고 파일을 검증합니다.
ansible-inventory -i inventory --list
출력에는 재고 정보가 표시됩니다.
출력 예:
{ "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] }, "ungrouped": { "hosts": [ "130.61.100.96" ] } }
참조
all
는 인벤토리 파일의 모든 호스트를 참조하고,ungrouped
섹션은 나열된 그룹에 속하지 않는 모든 호스트에 사용됩니다. -
인벤토리를 편집하고 호스트를
development
라는 그룹에 배치합니다.vi inventory
-
i
를 입력하여vi
삽입 모드를 입력합니다. -
아래 예와 같이 IP 주소를 사용하여 괄호 안에 그룹 이름을 추가합니다.
예:
[development] 130.61.100.96
-
파일을 저장하고 닫습니다.
vi
를 사용하는 경우ESC
,:wq!
및ENTER
를 입력할 수 있습니다. -
검증 단계를 다시 실행하여 출력에 추가된 그룹을 확인합니다.
ansible-inventory -i inventory --list
출력에는 그룹과 함께 업데이트된 정보가 표시됩니다.
출력 예:
{ "_meta": { "hostvars": {} }, "all": { "children": [ "development", "ungrouped" ] }, "development": { "hosts": [ "130.61.100.96" ] } }
임시 명령 실행
Oracle Linux Automation Engine에는 플레이북을 작성할 필요가 없는 여러 개의 일회성 모듈이 있습니다. 이 중 가장 기본적인 모듈은 인벤토리에 제공된 세부 정보를 기반으로 SSH 연결을 설정하려고 시도하는 ping
모듈입니다.
Oracle Linux Automation Engine Control 노드의 터미널에서 다음을 수행합니다.
-
ping
모듈을 실행합니다.ansible all -i inventory -m ping
all
옵션은-i
옵션으로 지정된 인벤토리 파일에 나열된 모든 호스트에 대해 명령을 실행하도록 지시합니다. 이 명령은 개별 호스트 이름 또는 그룹도 허용합니다.-m
옵션은 실행할 모듈을 지정합니다. -
프롬프트에
yes
를 입력하여 ECDSA 키 지문을 적용합니다.사용자 환경에 따라 다음 출력과 함께
ping
가 실패할 수 있습니다.출력 예:
130.61.100.96 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '130.61.100.96' (ECDSA) to the list of known hosts.\r\noracle@130.61.100.96: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true }
이 오류는 관리하려는 호스트에 로컬 사용자 계정
oracle
가 존재하지 않기 때문에 발생합니다.ansible_user
변수를 사용하여 적합한 원격 사용자를 인벤토리에 추가하여 이 문제를 해결합니다. 인벤토리 파일에 있을 때 호스트 이름 참조를 제공하고 IP 주소를 변수ansible_host
에 할당합니다. -
원격 유저를 inventory 파일에 추가합니다.
vi inventory
-
i
를 입력하여vi
삽입 모드를 입력합니다. -
예제에 나오는 것처럼 두 개의 변수를 추가합니다.
예:
[development] ol-host ansible_host=130.61.100.96 ansible_user=opc
무료 실습 환경에서는
opc
라는 사용자가 포함된 원격 관리를 테스트하기 위해 미리 구성된 시스템을 제공합니다.opc
는 OCI(Oracle Cloud Infrastructure)의 Oracle Linux 인스턴스에 생성된 기본 사용자입니다. 호스트 이름에 대해 샘플 이름ol-host
를 사용할 수 있습니다. -
파일을 저장하고 닫습니다.
vi
를 사용하는 경우ESC
,:wq!
및ENTER
를 입력하여 이 작업을 수행할 수 있습니다. -
all
가 아닌 호스트 이름을 사용하여ping
모듈을 다시 실행합니다.ansible ol-host -i inventory -m ping
명령은 표시된 것과 유사한 결과를 사용하여 성공적으로 실행됩니다.
출력 예:
ol-host | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
플레이북 작성하기
플레이북은 적절한 YAML 구문으로 작성된 일련의 지침으로, 단일 호스트 또는 호스트 그룹에 대해 실행됩니다. 이러한 파일의 기본 확장자는 .yml
또는 .yaml
입니다.
첫 번째 플레이북은 생성된 인벤토리 파일에서 all
호스트를 대상으로 합니다. 이 샘플 플레이북은 디버그 메시지를 인쇄하는 단일 작업으로 구성됩니다.
Oracle Linux Automation Engine Control 노드의 터미널에서 다음을 수행합니다.
-
새 플레이북 파일을 만듭니다.
vi hello.yml
-
i
를 입력하여vi
삽입 모드를 입력합니다. -
다음 텍스트를 플레이북 파일에 추가합니다.
예:
--- - hosts: all tasks: - name: Print message debug: msg: Hello from Oracle Linux
플레이북은 항상
---
로 시작해야 하며, 이어서 관리할 호스트를 지정하는hosts
행이 와야 합니다.all
값은 플레이북이 인벤토리에 나열된 모든 호스트에 대해 작동함을 나타냅니다. 또는 콜론이나 쉼표로 구분된 각 대상을 나열하여 특정 호스트 또는 그룹 목록에 대해서만 작업을 실행하도록 플레이북에 지시할 수 있습니다. 그런 다음 이 작업은 디버그 모듈을 사용하여 메시지를 인쇄합니다.name
행은 Oracle Linux Automation Engine이 플레이북을 실행할 때 터미널에 출력을 표시하도록 합니다. -
파일을 저장하고 닫습니다.
vi
를 사용하는 경우ESC
,:wq!
및ENTER
를 입력하여 이 작업을 수행할 수 있습니다. -
인벤토리에 대해 hello.yml 플레이북을 실행합니다.
ansible-playbook -i inventory hello.yml
인벤토리 파일에서
ansible_user
변수를 사용하는 대신-u username
옵션을 사용하여 명령행에서 원격 사용자 이름을 전달할 수 있습니다.ansible-playbook -i inventory hello.yml -u opc
모든 항목이 작동하면 명령이 성공적으로 완료되고 디버그 메시지가 출력됩니다.
출력 예:
PLAY [all] ********************************************************************* TASK [Gathering Facts] ********************************************************* [WARNING]: Platform linux on host ol-host is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen ce_appendices/interpreter_discovery.html for more information. ok: [ol-host] TASK [Print message] *********************************************************** ok: [ol-host] => { "msg": "Hello from Oracle Linux" } PLAY RECAP ********************************************************************* ol-host : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
인벤토리에서 단일 호스트
ol-host
만 정의하므로 플레이북은 한 번 실행됩니다. 플레이북에 나열된 작업을 실행하기 전에 Oracle Linux Automation Engine은 팩트라는 기본 작업 수집 정보를 실행합니다. 이 작업은 원격 호스트에 대한 정보를 가져옵니다. 이 정보는 나중에 플레이북이 조건부를 통해 작업 동작을 사용자 정의하는 데 사용할 수 있습니다. -
다음 임시 명령을 실행하여 호스트에 대한 facts의 전체 목록을 출력합니다.
ansible ol-host -i inventory -m setup
다음 단계
이 메시지와 facts 출력은 Oracle Linux Automation Engine을 사용하여 첫번째 플레이북을 성공적으로 실행했는지 확인합니다.
관련 링크
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Write a Playbook with Oracle Linux Automation Engine
F52972-04
Copyright ©2021, Oracle and/or its affiliates.