Red Hat Training

A Red Hat training course is available for Red Hat Satellite

第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

hammer content-view list を実行して、--component-ids オプションの ID を検索します。

コンテンツビューに追加可能なコンテンツビューは、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 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 コンテンツビューに追加する方法を示します。

  1. 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
  2. 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
  3. idname または 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

コンテンツビューの <cv_ID> を検索して、hammer content-view list コマンドの出力に公開します。公開されたコンテンツビューはライブラリー環境で利用できます。コンテンツビューのステータスを確認するには、以下のコマンドを実行します。

$ 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 ライフサイクル環境全体でのコンテンツビューのプロモート

以下のバッシュスクリプトは、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>,...

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

上記のコマンドで必要な情報を特定するには、以下の手順を実行します。

  1. 以下を実行して、ホストが登録されているコンテンツビューとライフサイクル環境を特定します。

    $ hammer content-host info --name auth01.example.com --organization $ORG
  2. 次にコンテンツビューの現在のバージョンを特定します (コンテンツビューの名前は RHEL7_Infra という前提です)。

    $ hammer content-view info --name "RHEL7_Infra" --organization $ORG
  3. ライブラリー にあるアプリケーションエラータの一覧に適用するエラータ ID を特定します。

    $ hammer erratum list --content-view "RHEL7_Infra" --organization $ORG
    $ hammer host errata list --host auth01.example.com