第3章 コンテンツのライフサイクルの管理
このセクションは、hammer
を使用してコンテンツビューを作成し、ライフサイクルの環境全体でプロモートする方法を説明します。
3.1. ライフサイクル環境の作成
ライフサイクル環境は、コンテンツライフサイクルのステージを表します。本セクションでは、hammer
を使用してライフサイクル環境を表示、作成する方法を説明します。デフォルトでは、組織ごとにライブラリー環境が存在します。以下の構文を使用して、新しいライフサイクル環境を作成します。
$ hammer lifecycle-environment create \ --name env_name \ --description "env_description" \ --organization-label org_label \ --prior prior_env_name
例3.1 ライフサイクル環境の作成
以下の例では、ACME 組織のライブラリーをもとに新しい環境を作成する方法を示します (組織名がシェル変数に保存されていることが前提です)。
$ hammer lifecycle-environment create \ --name Development \ --description "Initial testing" \ --organization $ORG \ --prior Library
--prior
を使用して、Development をベースにして別のライフサイクル環境を作成することができます。
既存のライフサイクル環境を表示するには、以下のコマンドを実行します。
$ hammer lifecycle-environment list --organization-label org_label
上記のコマンドの出力は以下のようになります。
---|-------------|------------ ID | NAME | PRIOR ---|-------------|------------ 2 | Library | 5 | Development | Library 6 | Testing | Development ---|-------------|------------
ライフサイクル環境に関するコマンドの情報は、hammer lifecycle-environment --help
を参照してください。
3.2. コンテンツビューの作成
コンテンツビューとは、ライブラリーからのコンテンツのサブセットで、インテリジェントフィルターで作成されます。コンテンツビューは、さまざまな用途 (通常は開発、QA、実稼働環境) でコンテンツを利用できるように、ライフサイクル環境に公開してプロモートすることができます。
$ hammer content-view create \ --name cv_name \ --repository-ids repo_ID1,repo_ID2,repo_ID3 \ --description "cv_description" \ --organization-label org_label
--repository-ids
オプションは、選択したリポジトリーをコンテンツビューに追加して、hammer repository list
コマンドを使用して ID を検索します。このオプションを省略して空のコンテンツビューを作成し、後でサブコマンド update
または add-repository
を使用して変更することもできます。
例3.2 コンテンツビューの作成
以下の例は、ACME 組織の下にコンテンツビューを作成して、3 つのリポジトリーに割り当てます。
$ hammer content-view create \ --name cv-rhel7-server \ --repository-ids 1,2,3 \ --description "Initial CV for RHEL 7" \ --organization $ORG
例3.3 複合コンテンツビューの作成
複合コンテンツビューは、1 つまたは複数のコンテンツビューで構成されます。以下の例は、2 つの既存のコンテンツビューから複合コンテンツビューを作成する方法を示します。
$ hammer content-view create \ --name ccv-rhel7-server-scl \ --description "CCV for RHEL7 and Software Collections" \ --organization $ORG \ --composite --component-ids 2,6 \ --auto-publish yes
hammer content-view list
を実行して、--component-ids
オプションの ID を検索します。--auto-publish
オプションを yes
に設定すると、含まれるコンテンツビューが再発行される際に、自動で複合コンテンツビューが再発行されます。
コンテンツビューに追加可能なコンテンツビューは、RPM パッケージ、Puppet モジュール、Docker イメージの 3 つです。
3.2.1. リポジトリーのコンテンツビューへの追加
以下のコマンドを使用して既存のコンテンツビューにリポジトリーを追加します。
$ hammer content-view update \ --repository-ids repo_ID1,repo_ID2... \ --name cv_name \ --organization-label org_label
上記のコマンドは、複数のリポジトリーからなる空のコンテンツビューを生成するのに便利です。既存のリポジトリーは上書きされるため、コンテンツビューのリポジトリー数を増やすには以下を使用します。
$ hammer content-view add-repository \ --organization-label org_label \ --name cv_name \ --repository-id repo_ID
同様に remove-repository
サブコマンドを使用してコンテンツビューからリポジトリーを削除することができます。コンテンツビューのリポジトリーを検査するには hammer content-view info
を使用します。
例3.4 コンテンツビューのパッケージのフィルタリング (パッケージの除外)
フィルターを使用すると、リポジトリーからパッケージのサブセットを選択して (除外/包含して) カスタマイズしたコンテンツビューを作成できます。以下の例は、フィルターを作成して cv-rhel7-server コンテンツビューから emacs
パッケージを除外する方法を示します。
まず、組織内にコンテンツビューのフィルターを作成します。
$ hammer content-view filter create \ --type rpm \ --name exclude-emacs \ --description "Excluding emacs package" \ --inclusion false \ --organization $ORG \ --repository-ids 1,2,3 \ --content-view cv-rhel7-server
hammer repository list
を実行してリポジトリー ID を検索します。「emac」で始まる名前のパッケージを除外するルールを作成して、以下のようにフィルターに追加します。
$ hammer content-view filter rule create \ --name "emacs*" \ --organization $ORG \ --content-view cv-rhel7-server \ --content-view-filter exclude-emacs
上記を実行すると、cv-rhel7-server のコンテンツビューを使用したホストは macs へアクセスできなくなります。複数のルールをフィルターに追加することができます。フィルタリングパラメーターの完全な一覧については hammer content-view filter rule create --help
を参照してください。フィルターに存在するルールを確認するには、以下のコマンドを実行します。
$ hammer content-view filter rule list \ --content-view cv-rhel7-server \ --content-view-filter exclude-emacs \ --organization $ORG
例3.5 コンテンツビュー用のパッケージのフィルタリング (日付別のエラータの絞込)
以下の例では、cv-rhel7-server コンテンツビューから特定日以前に発表されたエラータを除外するフィルターを作成する方法を示します。エラータ管理の情報は「8章エラータの管理」を参照してください。以下のようにコンテンツビューのフィルターを作成します。
$ hammer content-view filter create \ --type erratum \ --name limit-errata-by-date \ --description "Excluding errata by date" \ --inclusion false \ --organization $ORG \ --repository-ids 1,2,3 \ --content-view cv-rhel7-server
以下のように「emac」で始まる名前のエラータを除外するルールを作成し、フィルターに追加します。
$ hammer content-view filter rule create \
--end-date YYYY-MM-DD \
--organization $ORG \
--content-view cv-rhel7-server \
--content-view-filter limit-errata-by-date \
--types enhancement,bugfix,security
3.2.2. コンテンツビューの Puppet モジュールへの追加
Puppet モジュールをコンテンツビューに追加するには、最初にこのモジュールをカスタムの製品内の Puppet リポジトリーにアップロードします。「カスタムリポジトリーの作成」のコマンドを使用して、リポジトリーに製品を作成し、そのリポジトリーに Puppet モジュールをアップロードします。
Puppet モジュールをコンテンツビューに追加するには、以下のコマンドを実行します。
$ hammer content-view puppet-module add \ --content-view cv_name \ --name module_name
例3.6 Puppet モジュールのコンテンツビューへの追加
以下の例では、外部ソースからの Puppet モジュールをcv-rhel7-server コンテンツビューに追加する方法を示します。
Puppet Forge から concat モジュール (複数のテキストの断片からファイルを構築) をダウンロードします。
$ wget -O /tmp/puppetlabs-concat-1.2.5.tar.gz https://forgeapi.puppetlabs.com /v3/files/puppetlabs-concat-1.2.3.tar.gz
ACME-puppet 製品配下に Puppet リポジトリーを作成して、このリポジトリーにモジュールをアップロードします (この例では、リポジトリー ID は 6 です)。
$ hammer product create \ --name "ACME-puppet" \ --organization $ORG
$ hammer repository create \ --organization $ORG \ --product ACME-puppet \ --name "ACME Puppet Repository" \ --content-type puppet \ --url "https://forge.puppetlabs.com/"
$ hammer repository upload-content \ --organization $ORG \ --product ACME-puppet \ --id 6 \ --path /tmp/puppetlabs-concat-1.2.5.tar.gz
パラメーター
id
、name
、author
を使用してコンテンツビューにモジュールを追加します。正確な値は、以下のコマンドで確認できます。$ hammer puppet-module list --organization $ORG ---|--------|------------|-------- ID | NAME | AUTHOR | VERSION ---|--------|------------|-------- 1 | concat | puppetlabs | 1.2.3 ---|--------|------------|--------
コンテンツビューにモジュールを追加するには、以下を実行します。
$ hammer content-view puppet-module add \ --name concat \ --content-view cv-rhel7-server \ --organization $ORG
モジュールが正常に追加されたかどうかを検証するには、以下のコマンドを実行します。
$ hammer content-view puppet-module list \ --content-view cv-rhel7-server \ --organization $ORG
3.2.3. Docker イメージのコンテンツビューへの追加
以下のように、Docker イメージを専用のリポジトリーに直接アップロードできます。
$ hammer repository upload-content --path image_archive --id repo_id
image_archive は、Docker イメージを含むアーカイブのパスに置き換えます。repo_id コマンドで Docker のコンテンツタイプのリポジトリーを確認し、そのリポジトリーをコンテンツビューに追加します。
3.3. コンテンツビューの公開
コンテンツビューを公開し、ホストから利用できるようにします。以下のコマンドを使用して選択したコンテンツビューを公開します。
$ hammer content-view publish \ --id cv_ID \ --organization-label org_label \ --async
hammer content-view list
コマンドを実行し、公開するコンテンツビューのcv_ID を確認します。公開したコンテンツビューはライブラリー環境で利用できます。コンテンツビューのステータスを確認するには、以下のコマンドを実行します。
$ hammer content-view info --id cv_ID
3.4. コンテンツビューのプロモート
プロモーションとは、別のライフサイクル環境にコンテンツビューを移動することです。これには以下のコマンドを実行します。
$ hammer content-view version promote \ --content-view cv_name \ --organization-label org_label \ --to-lifecycle-environment env_name
ここで、env_name は移行後のライフサイクル環境名を示します。
例3.7 ライフサイクル環境全体でのコンテンツビューのプロモート
以下の Bash スクリプトは、ACME 組織の全ライフサイクル環境のライブラリーから、選択したコンテンツビューをプロモートします。
ORG="ACME" CV_ID=1 for i in $(hammer --csv lifecycle-environment list --organization $ORG | grep -vi '^ID' | awk -F, {'print $1'} | sort -n) do hammer content-view version promote --organization $ORG --to-lifecycle-environment-id $i --id $CV_ID done
コンテンツビューが正しくプロモートされていることを確認するには、以下のコマンドを実行します。
$ hammer content-view version info --id 1
3.5. コンテンツビューの増分更新
増分更新では、ライフサイクル環境で新規コンテンツビューのバージョンをプロモートしなくても、公開されているコンテンツビューを変更できます。増分更新の結果、新規コンテンツビューのマイナーバージョンが作成されます。増分更新は、緊急時に素早く更新するのに有用です。エラータ、パッケージ、または Puppet モジュールの追加に増分更新を使用できます。
コンテンツビューに新規パッケージを追加する増分更新を作成するには、以下を実行します。
$ hammer content-view version incremental-update \ --content-view-version-id cv_ID \ --packages pkg_name1,pkg_name2 \ --lifecycle-environment-ids env_ID1, env_ID2,... \ --organization-id org_ID
hammer content view version list
の出力でコンテンツビューのバージョン ID を検索します。--packages
オプションでパッケージを指定する代わりに、--puppet-modules
で Puppet モジュールを、--errata-ids
でエラータを追加できます (例3.8「増分更新を使用してコンテンツビューにエラータを追加する手順」を参照します)。増分更新との連携についての情報は hammer content-view version incremental-update --help
を参照してください。
例3.8 増分更新を使用してコンテンツビューにエラータを追加する手順
以下の例では、コンテンツビューの増分更新を作成して、ホスト (auth01.example.com) にエラータを適用する方法を示します。
$ hammer content-view version incremental-update \ --content-view-version-id 4 \ --errata-ids 8c3801f6-12a7-4a62-83f4-addbb1f34ce6 \ --lifecycle-environments Infrastructure \ --organization $ORG
上記のコマンドで必要な情報を特定するには、以下の手順を実行します。
組織 ID と名前を検索するには、以下を実行します。
$ hammer organization list
以下を実行して、ホストが登録されているコンテンツビューとライフサイクル環境を特定します。
$ hammer host info --name auth01.example.com
次にコンテンツビューの現在のバージョンを特定します (ここでは、コンテンツビューの名前は RHEL7_Infra です)。
$ hammer content-view info --name "RHEL7_Infra" --organization $ORG
ライブラリー にあるアプリケーションエラータの一覧に適用するエラータ ID を確認します。
$ hammer erratum list --content-view-version-id 4 --organization $ORG $ hammer host errata list --host auth01.example.com