배치 가능한 아키텍처에 대한 스크립트 작성

유효성 검증, 배치 및 배치 취소 전후에 배치 가능한 아키텍처에 대해 실행되는 스크립트가 있을 수 있습니다. 스크립트는 배치 가능한 아키텍처의 특정 버전으로 구성되며 프로젝트를 통해 실행하고 유효성을 검증해야 합니다. 프로젝트에 대한 자세한 정보는 프로젝트 작성 을 참조하십시오.

배치 가능한 아키텍처에 스크립트를 사용하는 데는 다음과 같은 몇 가지 이점과 유스 케이스가 있습니다.

  • 예를 들어, tag 매개변수가 항상 올바른 비용 센터 ID인지 확인하려는 경우 사용자 정의 유효성 검증을 수행합니다. 사전 유효성 검증 스크립트는 비용 센터 ID가 올바른지 확인하기 위해 서비스를 호출할 수 있습니다.
  • 배치 추적 및 자원 추가 (예: 배치된 자원을 추적하기 위해 서비스를 호출할 수 있는 배치 후 스크립트를 제공하여 자원 명세 시스템에 추가).
  • 데이터 마이그레이션을 완료 중입니다. 사전 배치 스크립트는 데이터를 백업할 수 있습니다. 그런 다음 배치 가능한 아키텍처가 이전 데이터 저장소를 삭제하고 새 데이터 저장소를 작성한 후 배치 후 스크립트가 이를 새 데이터 저장소로 복원할 수 있습니다.
  • 소프트웨어 설치 또는 구성
  • 수동 백업, 복원 또는 키 순환과 같은 두 번째 유지보수 태스크를 완료합니다.

사전 및 사후 스크립트 추가

스크립트는 오퍼링에 대해 선택사항이지만 사용되는 경우 scripts 디렉토리의 소스 저장소에 있어야 합니다. 스크립트 파일 자체는 다음 이름 지정 규칙 <action>-<stage>-ansible-playbook.yaml 을 준수해야 합니다. action 에 대한 옵션에는 deploy, validateundeploy 가 포함됩니다. stage 에 대한 옵션에는 prepost 가 포함됩니다.

플레이북 형식의 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 != ""