서비스를 다른 호스트로 이동

AnsibleBeginner
지금 연습하기

소개

Riverlight Weekend에는 작동하는 프로그램이 있고, 준비된 대체 소스가 이제 승인되었습니다. 웹사이트의 프로그램 연결만 새 구성원으로 옮기며 장소, 현재 방문자 경험과 원래 프로그램 소스를 보존합니다.

먼저 행사 페이지 연결을 완료하거나 인벤토리 그룹, hostvars, 템플릿, 읽기 전용 uri 검사와 핸들러에 익숙해야 합니다. 이 독립 랩은 앞서 배운 플레이북과 템플릿을 제공합니다. 서비스 설치나 소스 데이터 이전은 필요하지 않으며 시간은 저자의 추정치입니다.

이전 소스를 삭제하지 않고 프로그램 옮기기

이 단계에서는 준비된 대체 프로그램을 사용하도록 인벤토리 그룹을 변경하고, 장소 연결과 원래 소스를 유지합니다.

독립적인 환경입니다. Event Site는 이미 작동하는 Riverlight 프로그램을 제공하지만 승인된 대체 소스는 다른 세션을 담고 있습니다. Program을 열면 이전 프로그램의 Morning sketchbook과 Lunch by the river가 보입니다. Visit와 Visitor guide도 작동하며 구성원을 바꾸는 동안 계속 이용할 수 있어야 합니다.

Controller로 전환합니다. 시작 위치는 /home/labex/project입니다. 이전 랩의 검사 포함 connect.yml과 경로 템플릿이 제공되며 이 VM은 이전 파일에 의존하지 않습니다. 디렉터리를 잃었다면 cd /home/labex/project로 돌아옵니다. 승인된 선택과 현재 구성원을 읽습니다.

cat approved-services.txt
cat inventory.ini
ansible-inventory --graph

승인된 프로그램은 이제 web2에 있으며 판본은 2026-revised입니다. 인벤토리는 아직 이전 프로그램의 web1을 선택합니다. web2는 다른 포트에서 장소 서비스도 제공합니다. 그룹은 서비스 역할을 나타내므로 한 호스트가 두 그룹에 속할 수 있으며, 역할마다 다른 머신이 필요한 것은 아닙니다. 두 소스 컨테이너는 실습 VM의 커널을 공유하고 진입점은 컨트롤러에서 실행됩니다.

호스트 데이터와 두 소스의 식별 정보를 살펴봅니다. 앞서와 같이 curl --config는 준비된 URL과 오류 표시 옵션을 파일에서 읽습니다.

cat host_vars/web2.yml
cat requests/new-program.conf
curl --config requests/new-program.conf
curl --config requests/old-program.conf

새 소스와 이전 소스 모두 사용할 수 있지만 현재 웹사이트 진입점에는 새 판본만 연결되어야 합니다. 연결을 옮긴다고 이전 소스나 파일을 삭제할 수 있는 것은 아닙니다.

제공된 재사용 가능한 자동화를 읽습니다.

cat connect.yml
cat templates/routes.json.j2

groups['program'][0]은 프로그램 구성원을 선택하고 hostvars는 주소와 program_port를 제공합니다. 장소 표현식은 자신의 그룹과 venue_port를 독립적으로 사용합니다. HTTP 검사는 템플릿 앞에 있습니다. 경로가 변경되면 준비된 도우미에 알림이 가며 기존 진입점 프로세스가 설정을 다시 읽습니다.

아래 작은 인벤토리로 교체합니다. 첫 랩처럼 cat, 출력 리다이렉션과 따옴표로 보호한 here-document를 사용합니다. 종료 표시 EOF를 독립된 줄로 붙여 넣고, 빠뜨렸다면 Ctrl+C 후 전체 블록을 다시 실행합니다. 호스트 데이터와 승인된 판본은 바꾸지 않습니다.

cat > inventory.ini <<'EOF'
[gateway]
entry ansible_connection=local ansible_python_interpreter=/usr/bin/python3

[program]
web2

[venue]
web2
EOF
ansible-inventory --graph

두 서비스 그룹에 모두 web2가 있어야 합니다. 로컬 entry는 [gateway]에 남습니다. 그룹 이름이 틀리거나 구성원이 추가되었다면 이 파일에서 수정한 뒤 진행합니다. 템플릿에 주소를 고정해 보상하지 마세요.

문법을 검사하고 제안된 경로를 미리 봅니다.

ansible-playbook connect.yml --syntax-check
ansible-playbook connect.yml --check --diff

읽기 전용 HTTP 요청은 미리 보기에서도 실행되며 승인된 프로그램과 장소를 식별해야 합니다. 프로그램 경로만 달라져야 하고 장소 주소와 포트는 같습니다. 미리 보기는 게이트웨이가 설정을 다시 읽도록 하지 않습니다. 변경을 적용합니다.

ansible-playbook connect.yml

템플릿 변경과 **RUNNING HANDLER [Reload entry]**가 예상됩니다. Event Site의 Program을 열어 Paper and ink, Acoustic afternoon, Shared supper가 이전 일정을 대체했는지 확인합니다. Download the schedule을 누르고 Visit와 Visitor guide로 이동합니다. 장소와 도착 안내는 계속 같아야 합니다.

진입점에는 이제 대체 프로그램이 표시되어야 합니다. 세 세션과 다운로드 링크 아래의 2026-revised 판본을 보세요.

기존 진입점으로 연결된 대체 프로그램

Controller로 돌아가 현재 다운로드를 VM에 저장합니다. -o가 출력 파일 이름을 정합니다.

curl -fsS http://127.0.0.1:8081/program/schedule.csv -o schedule.csv
cat schedule.csv

CSV에는 이전 두 세션이 아닌 현재 세 세션이 있어야 합니다. 이전 소스가 여전히 직접 응답하는지 확인합니다.

curl --config requests/old-program.conf

계속 program, riverlight, 2026-original로 식별되어야 합니다. 진입점 설정에서 빠졌을 뿐 중지되지 않았습니다. 아직 선택되어 있다고 가장하지 않으면서 데이터와 독립적인 참고 소스를 보존합니다.

마지막으로 플레이북을 반복합니다.

ansible-playbook connect.yml

changed=0, failed=0이고 핸들러가 없어야 합니다. 소스가 일시적으로 사용할 수 없다면 사전 검사가 템플릿 앞에서 멈춰야 합니다. 연결 실패는 이전 노드를 제거하라는 지시가 아닙니다. 선택한 구성원이나 데이터 참조를 바로잡은 뒤 다시 시도합니다. 첫 랩의 sha256sum 비교로 진입점 파일이 바뀌지 않았는지 확인할 수 있습니다.

인벤토리 구성원, 재사용 가능한 connect.yml과 templates/routes.json.j2, 해당 플레이북을 통한 경로 파일만 관리합니다. 제공된 호스트 변수, 승인된 사이트와 판본, 소스 내용, 비공개 주최자 메모, 모든 소스 서비스와 게이트웨이 구현을 보존하세요. 확인 요청과 템플릿은 다른 구성원 이름, 주소와 포트에서도 재사용할 수 있어야 합니다. 다시 읽기는 /opt/labex/service-links/reload.py와 이 프로젝트의 진입점 디렉터리를 사용합니다. 배운 직접 uri, assert, template 작업과 범위가 제한된 다시 읽기 command 핸들러를 사용하세요. 실패를 숨기거나 check mode에서 쓰기를 실행하지 마세요.

요약

새 주소를 고정하는 대신 서비스 구성원을 바꾸고, 경로를 미리 본 뒤 적용하여 실제 사이트와 CSV로 새 프로그램을 확인했습니다. 이전 소스는 독립적으로 계속 사용할 수 있고 장소와 방문자 안내는 그대로 유지되었습니다.