배치 가능한 아키텍처에 대한 스크립트 작성
유효성 검증, 배치 및 배치 취소 전후에 배치 가능한 아키텍처에 대해 실행되는 스크립트가 있을 수 있습니다. 스크립트는 배치 가능한 아키텍처의 특정 버전으로 구성되며 프로젝트를 통해 실행하고 유효성을 검증해야 합니다. 프로젝트에 대한 자세한 정보는 프로젝트 작성 을 참조하십시오.
배치 가능한 아키텍처에 스크립트를 사용하는 데는 다음과 같은 몇 가지 이점과 유스 케이스가 있습니다.
- 예를 들어,
tag매개변수가 항상 올바른 비용 센터 ID인지 확인하려는 경우 사용자 정의 유효성 검증을 수행합니다. 사전 유효성 검증 스크립트는 비용 센터 ID가 올바른지 확인하기 위해 서비스를 호출할 수 있습니다. - 배치 추적 및 자원 추가 (예: 배치된 자원을 추적하기 위해 서비스를 호출할 수 있는 배치 후 스크립트를 제공하여 자원 명세 시스템에 추가).
- 데이터 마이그레이션을 완료 중입니다. 사전 배치 스크립트는 데이터를 백업할 수 있습니다. 그런 다음 배치 가능한 아키텍처가 이전 데이터 저장소를 삭제하고 새 데이터 저장소를 작성한 후 배치 후 스크립트가 이를 새 데이터 저장소로 복원할 수 있습니다.
- 소프트웨어 설치 또는 구성
- 수동 백업, 복원 또는 키 순환과 같은 두 번째 유지보수 태스크를 완료합니다.
사전 및 사후 스크립트 추가
스크립트는 오퍼링에 대해 선택사항이지만 사용되는 경우 scripts 디렉토리의 소스 저장소에 있어야 합니다. 스크립트 파일 자체는 다음 이름 지정 규칙 <action>-<stage>-ansible-playbook.yaml 을 준수해야 합니다. action 에 대한 옵션에는 deploy, validate 및 undeploy 가 포함됩니다. stage 에 대한 옵션에는 pre 및 post 가 포함됩니다.
플레이북 형식의 ansible 스크립트만 현재 지원됩니다.
또한 소스 저장소의 ibm_catalog.json Manifest 파일에서 스크립트를 참조해야 합니다. scripts 배열에서 배치 가능한 아키텍처의 변형별로 스크립트에 대한 필수 정보를 제공하십시오.
"scripts": [
{
"type": "ansible",
"short_description": "Short description of what your script is intended to do.",
"path": "Path to script location.",
"stage": "The stage. For example, pre.",
"action": "The action. For example, validate."
}
],
IBM Cloud에 온보딩하기 전에 소스 저장소의 카탈로그 Manifest 파일에 이 정보를 추가하거나 콘솔에서 온보딩 워크플로우 중에 스크립트를 수동으로 추가할 수 있습니다. 온보딩 중에 스크립트를 수동으로 추가하는 경우, Manifest 파일을 다운로드 하고 소스 저장소에 추가하여 향후 버전에 대한 정보를 동기화 상태로 유지하십시오.
모든 스크립트는 실패하지 않고 두 번 이상 실행할 수 있어야 합니다. 예를 들어, 사전 배치 또는 사후 배치 스크립트는 여러 번 실행되는 경우에도 올바르게 작동해야 합니다. 사후 배치 스크립트는 카탈로그 관리 데이터베이스에 자원을 추가할 수 있으며 두 번 이상 실행되는 경우 중복 자원을 추가하지 않아야 합니다.
사전 및 사후 스크립트 예제
다음은 배치 가능한 아키텍처의 유효성을 검증한 후 메시지를 표시하는 데 사용되는 사전 스크립트의 예제입니다. 사전 스크립트는 배치 권한을 부여하는 데 사용되는 신임 정보를 포함하여 배치 가능한 아키텍처의 모든 입력으로 전달됩니다.
- name: Validate pre playbook
hosts: localhost
vars:
ibmcloud_api_key: "{{ lookup(`ansible.builtin.env`, `ibmcloud_api_key`)}}"
cos_instance_name: "{{ lookup(`ansible.builtin.env`, `cos_instance_name`)}}"
workspace_id: "{{ lookup(`ansible.builtin.env`, `workspace_id`)}}"
tasks:
- name: Print message
ansible.builtin.debug:
msg: "The workspace id is {{ workspace_id }}"
when: workspace_id is defined and workspace_id != ""
- name: Print message
ansible.builtin.debug:
msg: "The cos instance name is {{ cos_instance_name }}"
when: cos_instance_name is defined
- name: Print result
ansible.builtin.debug:
msg: "Received api key"
when: ibmcloud_api_key is defined
다음은 사후 스크립트의 예제입니다. 사후 스크립트는 배치 가능한 아키텍처의 출력으로 전달됩니다.
- name: Deploy post playbook
hosts: localhost
vars:
ibmcloud_api_key: "{{ lookup(`ansible.builtin.env`, `ibmcloud_api_key`)}}"
git_repo_url: "{{ lookup(`ansible.builtin.env`, `git_repo_url`)}}"
tasks:
- name: Print result
ansible.builtin.debug:
msg: "Received api key"
when: ibmcloud_api_key is defined
- name: Print result
ansible.builtin.debug:
msg: "The result is: {{ git_repo_url }}"
when: git_repo_url is defined and git_repo_url != ""