デプロイ可能なアーキテクチャー用のスクリプトの作成

検証、デプロイ、およびアンデプロイの前または後に、デプロイ可能なアーキテクチャーに対してスクリプトを実行することができます。 スクリプトは、デプロイ可能なアーキテクチャーの特定のバージョンに対して構成され、プロジェクトを通じて実行および検証する必要があります。 プロジェクトについて詳しくは、 プロジェクトの作成 を参照してください。

デプロイ可能なアーキテクチャーでスクリプトを使用することには、いくつかの利点とユース・ケースがあります。

  • 例えば、 tag パラメーターが常に有効なコスト・センター ID であることを確認する場合などに、カスタム検証を実行します。 事前検証スクリプトは、コスト・センター ID が有効であったかどうかを確認するためにサービスを呼び出す場合があります。
  • デプロイメントの追跡とリソースの追加 (例えば、デプロイされたリソースを追跡するためにサービスを呼び出すことができるデプロイメント後のスクリプトを提供することによるインベントリー・システムへの追加)。
  • データ・マイグレーションを完了しています。 デプロイメント前のスクリプトは、データをバックアップできます。 その後、デプロイ可能アーキテクチャーが古いデータ・ストアを削除して新しいデータ・ストアを作成すると、デプロイ後のスクリプトはそのデータ・ストアを新しいデータ・ストアにリストアすることができます。
  • ソフトウェアのインストールまたは構成
  • 手動によるバックアップ、リストア、または鍵のローテーションなどの、2 日目の保守タスクを実行する。

事前スクリプトと事後スクリプトの追加

スクリプトはオファリングではオプションですが、使用する場合は、 scripts という名前のディレクトリー内のソース・リポジトリーに配置する必要があります。 スクリプト・ファイル自体は、命名規則 <action>-<stage>-ansible-playbook.yaml に準拠している必要があります。 action のオプションには、 deployvalidate、および 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 != ""