建立可部署架構的腳本
您可以在驗證、部署及取消部署之前或之後,針對可部署架構執行腳本。 腳本會配置成可部署架構的特定版本,且必須透過專案來執行及驗證。 如需專案的相關資訊,請參閱 建立專案。
將腳本用於可部署架構有幾個好處和使用案例:
- 執行自訂驗證,例如,如果您想要確保
tag參數一律是有效的成本中心 ID。 預先驗證腳本可能會呼叫服務,以檢查成本中心 ID 是否有效。 - 追蹤部署並新增資源,例如,透過提供部署後腳本來新增至庫存系統,該腳本可以呼叫服務來追蹤已部署的資源。
- 正在完成資料移轉。 部署前腳本可以備份資料。 然後,在可部署架構刪除舊資料儲存庫並建立新的資料儲存庫之後,部署後腳本可以將它還原至新的資料儲存庫。
- 安裝或配置軟體
- 完成第二天維護作業,例如手動備份、還原或金鑰輪替。
新增前置及後置腳本
對於產品來說,腳本是可選的,但如果使用它們,則必須位於來源儲存庫名稱為 scripts 的目錄中。 腳本檔案本身必須符合以下命名慣例 <action>-<stage>-ansible-playbook.yaml。 action 的選項包括 deploy、validate 和 undeploy。 stage 的選項包括 pre 和 post。
目前僅支援劇本格式的 ansible 腳本。
您也必須在來源儲存庫的 ibm_catalog.json 資訊清單檔中參照腳本。 根據 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之前,您可以將此資訊新增至來源儲存庫中的目錄資訊清單檔,也可以在主控台上架工作流程期間手動新增腳本。 如果您在上線期間手動新增腳本,請 下載您的資訊清單檔,並將它新增至來源儲存庫,以保持未來版本的資訊同步。
所有腳本都必須能夠執行多次,且不會失敗。 例如,前置部署或後置部署腳本必須正確運作,即使執行數次也一樣。 部署後腳本可能會將資源新增至目錄管理資料庫,如果執行多次,則必須確保不要新增重複資源。
前置及後置腳本範例
以下是在驗證可部署架構之後,用來顯示訊息的前置腳本範例。 前置腳本會傳遞至可部署架構中的所有輸入,包括用來授權部署的認證。
- 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 != ""