Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

OpenStack Integration Test Suite ガイド

Red Hat OpenStack Platform 13

OpenStack Integration Test Suite の概要

概要

本ガイドでは、Red Hat OpenStack Platform 環境で OpenStack Integration Test Suite をインストール、設定、および管理する方法について説明します。

前書き

本ガイドでは、Red Hat OpenStack Platform 環境で OpenStack Integration Test Suite をインストール、設定、および管理する方法について説明します。

第1章 はじめに

OpenStack は多くの異なるプロジェクトで構成されるため、OpenStack クラスター内のプロジェクトの相互運用性をテストすることが重要です。OpenStack Integration Test Suite (tempest) は、Red Hat OpenStack Platform デプロイメントの統合テストを自動化します。テストを実行すると、クラスターが想定どおりに動作していることになり、特にアップグレード後に、潜在的な問題を早期に警告することもできます。

Integration Test Suite には、OpenStack API 検証とシナリオテストのテスト、および自己検証のユニットテストが含まれています。Integration Test Suite は、OpenStack パブリック API を使用し、テストランナーとして tempest を使用してブラックボックステストを実行します。

第2章 OpenStack Integration Test Suite のテスト

OpenStack Integration Test Suite には多くのアプリケーションがあります。これは、OpenStack コアプロジェクトへのコミットのゲートとして動作し、クラウドデプロイメントの負荷を生成するためにストレステストを行い、CLI テストを実行してコマンドラインの応答形式を確認できます。ただし、関連する機能は シナリオテストおよび API テスト です。これらのテストは、OpenStack クラウドデプロイメントに対して実行されます。以下のセクションでは、これらの各テストの実装方法を説明します。

2.1. シナリオテスト

シナリオテストは、サービス間の統合ポイントをテストする一般的なエンドユーザーアクションワークフローをシミュレートします。テストフレームワークは、設定を実施し、サービス間の統合をテストしてから、自動的に削除されます。テストに関連するサービスでテストにタグを付け、テストが使用するクライアントライブラリーを明確にします。

シナリオは、以下のようなユースケースに基づいています。

  • Image サービスへのイメージのアップロード
  • イメージからのインスタンスのデプロイ
  • インスタンスへのボリュームの接続
  • インスタンスのスナップショットの作成
  • インスタンスからのボリュームの切断

2.2. API テスト

API テストは、OpenStack API を検証します。テストは、OpenStack API の OpenStack Integration Test Suite 実装を使用します。有効な JSON と無効な JSON の両方を使用すると、エラーの応答が有効であることを確認できます。テストを個別に実行し、以前のテスト状態に依存する必要はありません。

第3章 OpenStack Integration Test Suite のインストール

本項には、Director または手動インストールのいずれかを使用した OpenStack Integration Test Suite のインストールに関する情報が含まれています。

3.1. director の使用

stack ユーザーのホームディレクトリーにある undercloud.conf ファイルを編集します。enable_tempest パラメーターが true に設定されていることを確認します。

enable_tempest = true

アンダークラウドがすでにインストールされている場合には、undercloud.conf ファイルを編集してから openstack undercloud install コマンドを実行して、アンダークラウドに追加の設定を追加することができます。

$ openstack undercloud upgrade

これで、「OpenStack Integration Test Suite パッケージのインストール」 に記載されている tempest パッケージおよびプラグインをインストールする準備が整いました。

3.2. 手動インストールの準備

OpenStack Integration Test Suite を実行するには、最初に必要なパッケージをインストールし、さまざまな OpenStack サービスやその他のテスト動作スイッチの場所を Integration Test Suite に通知する構成ファイルを作成する必要があります。

OpenStack Integration Test Suite をインストールするには、以下のネットワークが Red Hat OpenStack Platform 環境内で利用可能である必要があります。

  • Floating IP を提供できる外部ネットワーク
  • プライベートネットワーク

これらのネットワークはルーター経由で接続されている必要があります。

プライベートネットワークを作成します。ネットワークデプロイメントに従って、以下のオプションを指定します。

$ openstack network create <network_name> --share
$ openstack subnet create <subnet_name> --subnet-range <address/prefix> \
  --network <network_name>
$ openstack router create <router_name>
$ openstack router add subnet <router_name> <subnet_name>

パブリックネットワークを作成します。ネットワークデプロイメントに従って、以下のオプションを指定します。

$ openstack network create <network_name> --external \
  --provider-network-type flat
$ openstack subnet create <subnet_name> --subnet-range <address/prefix> \
  --gateway <default_gateway> --no-dhcp --network <network_name>
$ openstack router set <router_name> --external-gateway <public_network_name>

これで、OpenStack Integration Test Suite を tempest の仮想マシン内にインストールおよび設定することができます。詳細は、「OpenStack Integration Test Suite パッケージのインストール」 を参照してください。

3.3. OpenStack Integration Test Suite パッケージのインストール

  1. OpenStack Integration Test Suite に関連するパッケージをインストールします。

    $ sudo yum -y install openstack-tempest

    このコマンドでは、tempest プラグインはインストールされません。OpenStack のインストールに応じて、プラグインを手動でインストールする必要があります。

  2. 環境内の各コンポーネントに適切な tempest プラグインをインストールします。たとえば、keystone、horizon、neutron、cinder、および telemetry プラグインをインストールするには、以下のコマンドを実行します。

    $ sudo yum install python-keystone-tests-tempest python-horizon-tests-tempest python-neutron-tests-tempest python-cinder-tests-tempest python-telemetry-tests-tempest

    各 OpenStack コンポーネントの tempest プラグインの一覧については、「tempest プラグインパッケージの一覧」 を参照してください。

注記

openstack-tempest-all パッケージもインストールできます。このパッケージには、tempest プラグインがすべて含まれます。

3.3.1. tempest プラグインパッケージの一覧

以下のコマンドを実行して、tempest テストパッケージの一覧を取得します。

$ sudo yum search $(openstack service list -c Name -f value) 2>/dev/null | grep test | awk '{print $1}'
コンポーネントパッケージ名

barbican

python-barbican-tests-tempest

cinder

python-cinder-tests-tempest

designate

python-designate-tests-tempest

ec2-api

python-ec2api-tests-tempest

heat

python-heat-tests-tempest

horizon

python-horizon-tests-tempest

ironic

python-ironic-tests-tempest

keystone

python-keystone-tests-tempest

kuryr

python-kuryr-tests-tempest

manila

python-manila-tests-tempest

mistral

python-mistral-tests-tempest

networking-bgvpn

python-networking-bgpvpn-tests-tempest

networking-l2gw

python-networking-l2gw-tests-tempest

neutron

python-neutron-tests-tempest

nova-join

python-novajoin-tests-tempest

octavia

python-octavia-tests-tempest

patrole

python-patrole-tests-tempest

sahara

python-sahara-tests-tempest

telemetry

python-telemetry-tests-tempest

tripleo-common

python-tripleo-common-tests-tempest

zaqar

python-zaqar-tests-tempest

tempest テストパッケージは Python バージョンに固有のものです。たとえば、システムが Python 2 を使用している場合は、Tempest テストパッケージをインストールする際に python- を python2- に置き換える必要があります。

注記

python-telemetry-tests-tempest パッケージには、aodh、panko、gnocchi、および ceilometer テストのプラグインが含まれています。python-ironic-tests-tempest パッケージには、ironic および ironic-inspector のプラグインが含まれます。

第4章 OpenStack Integration Test Suite の設定

4.1. ワークスペースの作成

  1. ターゲットデプロイメントの認証情報を読み込みます。

    • ターゲットがアンダークラウドにある場合は、source コマンドでアンダークラウドの認証情報を読み込みます。

      # source stackrc
    • ターゲットがオーバークラウドにある場合、source コマンドでオーバークラウドの認証情報を読み込みます。

      # source overcloudrc
  2. Initialize tempest:

    # tempest init mytempest
    # cd mytempest

    このコマンドは、mytempest という名前の一時ワークスペースを作成します

    以下のコマンドを実行して、既存のワークスペースの一覧を表示します。

    # tempest workspace list
  3. etc/tempest.conf ファイルを生成します。

    # discover-tempest-config --deployer-input ~/tempest-deployer-input.conf \
    --debug --create --network-id <UUID>

    UUID は、外部ネットワークの UUID に置き換えます。discover-tempest-config コマンドに含めることのできるオプションの詳細については、find- tempest-config --help を実行します。たとえば 、--image オプションを使用して、使用するイメージを定義します。--image オプションでイメージを割り当てる場合には、割り当てられたイメージに適したフレーバーを作成しなければならない場合があります。discover-tempest-config、m1.nano、および m1.micro が作成したデフォルトのフレーバーは、イメージ用に小さすぎる可能性があります。フレーバーを作成したら、フレーバー ID を flavor _ref および flavor_ref_ alttempest.conf に追加する必要があります。

    discover-tempest-config は以前の config_tempest.py と呼ばれ、同じパラメーターを取ります。これは、openstack -tempest の依存関係としてインストールされる python-tempest conf によって提供されます。

注記

アンダークラウドの etc/tempest.conf ファイルを生成するには、tempest-deployer-input.conf ファイルのリージョン名がアンダークラウドのデプロイメントの名前と同じであることを確認します。これらの名前が一致しない場合は、アンダークラウドのリージョン名と一致するように tempest-deployer-input.conf ファイルのリージョン名を更新します。

アンダークラウドのリージョン名を検証するには、以下のコマンドを実行します。

$ source stackrc
$ openstack region list

オーバークラウドのリージョン名を検証するには、以下のコマンドを実行します。

$ source overcloudrc
$ openstack region list

4.2. Tempest の手動設定

discover-tempest-config コマンドは、tempest.conf ファイルを自動的に生成します。ただし、tempest.conf ファイルがご自分の環境の設定に対応していることを確認する必要があります。

4.2.1. Tempest 拡張機能一覧の手動設定

default tempest.conf ファイルには、各コンポーネントの拡張機能一覧が含まれます。tempest.conf ファイルの各コンポーネントの api_extensions 属性を検査し、エクステンションの一覧がデプロイメントに対応していることを確認します。

デプロイメントで利用可能な拡張機能が tempest.conf ファイルの api_extensions 属性の extensions の一覧と一致しない場合、コンポーネントは tempest テストに失敗します。この失敗を防ぐには、デプロイメントで利用可能な拡張機能を特定し、それらを api_extensions パラメーターに含める必要があります。デプロイメント内の Network、Compute、Volume、または Identity 拡張機能の一覧を取得するには、以下のコマンドを実行します。

$ openstack extension list [--network] [--compute] [--volume] [--identity]

4.2.2. heat_plugin の手動設定

実際のデプロイメント設定に応じて、heat_plugin プラグインを手動で設定します。以下の例は、heat_plugin の minimum tempest.conf 設定を示しています。

[service_available]
heat_plugin = True

[heat_plugin]
username = demo
password = ***
project_name = demo
admin_username = admin
admin_password = ****
admin_project_name = admin
auth_url = http://10.0.0.110:5000//v3
auth_version = 3
user_domain_id = default
project_domain_id = default
user_domain_name = Default
project_domain_name = Default
region = regionOne
instance_type = m1.nano
minimal_instance_type = m1.micro
image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5
minimal_image_ref = 7faed41e-a56c-4971-bf48-24e4e23e69a5
注記

tempest.conf ファイルの [service_available] セクションで heat_pluginTrue に設定する必要があります。また、[ heat_plugin] セクションの username 属性のユーザーには role _member_ が必要です。たとえば、以下のコマンドを実行して _member_ ロールを demo ユーザーに追加します。

$ openstack role add --user demo --project demo '_member_'

4.3. Tempest 設定の検証

現在の tempest 設定を検証します。

# tempest verify-config -o <output>

output は、Tempest が更新された設定を書き込む出力ファイルです。これは、元の設定ファイルとは異なります。

4.4. ログ設定の変更

ログファイルのデフォルトの場所は、tempest ワークスペース内の ログディレクトリー です。

このディレクトリーを変更するには 、[DEFAULT] セクションの下にある in tempest.conf を変更するには、log_dir を必要なディレクトリーに設定します。

[DEFAULT]
log_dir = <directory>

[DEFAULT] セクションの下に、独自のロギング設定ファイル in tempest.conf がある場合は、log_config_append をファイルに設定します。

[DEFAULT]
log_config_append = <file>

log_config_append 属性を設定する場合、Tempest は log_dir 属性を含むその他すべてのロギング設定を tempest.conf を無視します。

4.5. マイクロバージョンテストの設定

OpenStack Integration Test Suite は、API マイクロバージョンをテストする安定したインターフェースを提供します。このセクションは、これらのインターフェースを使用してマイクロバージョンテストを実装する方法を説明します。

まず、tempest.conf 設定ファイルでオプションを設定して、ターゲットマイクロバージョンを指定する必要があります。サポートされているマイクロバージョンが OpenStack クラウドで使用されているマイクロバージョンに対応するように、これらのオプションを設定します。単一の Integration Test Suite 操作で複数のマイクロバージョンテストを実行するターゲットマイクロバージョンの範囲を指定できます。

たとえば、Compute サービスの マイクロバージョンの範囲を、設定ファイルの [compute] セクションで制限するには、min _microversion パラメーターおよび max_microversion パラメーターに値 を割り当てます。

[compute]
min_microversion = 2.14
max_microversion = latest

第5章 Tempest の使用

本セクションのコマンドを入力して、さまざまなテスト操作を実行します。1 tempest run コマンドで複数のオプションを組み合わせることもできます。

5.1. 利用可能なテストの一覧表示

--list -tests または -l オプションのいずれかでtempest- run コマンドを実行し、利用可能な tempest テストの一覧を取得します。

# tempest run -l

5.2. smoke テストの実行

smoke テスト は、最も重要な機能のみを対象とした予備的なテストの種類です。これらのテストは包括的ではありませんが、smoke テストの実行で問題が特定できれば時間を節約できます。

# tempest run --smoke

5.3. ホワイトリストファイルを使用したテストへの合格

ホワイトリストファイルは、追加するテストを選択する正規表現が含まれるファイルです。正規表現は改行で区切られます。

ホワイトリストファイルを使用するには 、--whitelist-file または -w オプションのいずれかで tempest run コマンドを実行します。

# tempest run -w <whitelist_file>

5.4. ブラックリストファイルを使用したテストのスキップ

ブラックリストファイルは、除外するテストを選択する正規表現が含まれるファイルです。正規表現は改行で区切られます。

blacklist ファイルを使用するには 、--blacklist-file または -b オプションのいずれかで tempest run コマンドを実行します。

# tempest run -b <blacklist_file>

5.5. 並行または連続してテストの実行

テストを順次実行します。

# tempest run --serial

テストを並行して実行します。並列テストがデフォルトです。

# tempest run --parallel

--concurrency または -c オプションを使用して、並行してテストを実行する時に使用するワーカーの数を指定します。

# tempest run --concurrency <workers>

デフォルトでは、Integration Test Suite は利用可能な CPU ごとに 1 つのワーカーを使用します。

5.6. 特定のテストの実行

--regex 正規表現オプションを使用して特定のテストを実行します。正規表現は Python 正規表現である必要があります。

# tempest run --regex <regex>

たとえば、以下のコマンドを使用して、tempest.scenario という名前のテストをすべて実行します。

# tempest run --regex ^tempest.scenario

第6章 コンテナー化された Tempest の実行

本項では、アンダークラウド上のコンテナーからの tempest な実行について説明します。オーバークラウドまたはアンダークラウドに対して tempest を実行できます。コンテナー化された tempest には、コンテナー化されていない tempest と同じリソースが必要です。

この機能は、本リリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト目的のみでご利用いただく機能で、実稼働環境にデプロイすべきではありません。テクノロジープレビュー機能についての詳しい情報は、「対象範囲の詳細」を参照してください。

6.1. tempest コンテナーの準備

tempest コンテナーをダウンロードし、設定するには、以下の手順を実行します。

  1. /home/stack ディレクトリーに移動します。

    $ cd /home/stack
  2. tempest コンテナーをダウンロードします。

    $ docker pull registry.redhat.io/rhosp13/openstack-tempest

    このコンテナーには、すべての tempest プラグインが含まれます。このコンテナーでグローバルに tempest テストを実行するには、プラグインのテストが含まれます。たとえば、tempest run --regex '(*.)' コマンドを実行すると、tempest はすべてのプラグインテストを実行します。デプロイメントにすべてのプラグインの設定が含まれていない場合には、これらの tempest テストに失敗します。tempest list-plugins コマンドを実行して、インストールされたプラグインをすべて表示します。テストを除外するには、ブラックリストファイルに除外するテストを含める必要があります。詳細は、5章Tempest の使用を参照してください。

  3. ホストマシンとコンテナー間でデータを交換するために使用するディレクトリーを作成します。

    $ mkdir container_tempest tempest_workspace
  4. 必要なファイルを container_tempest ディレクトリーにコピーします。このディレクトリーはコンテナーのファイルソースです。

    $ cp stackrc overcloudrc tempest-deployer-input.conf container_tempest
  5. 利用可能な docker イメージを一覧表示します。

    $ docker images
    REPOSITORY                                                  TAG        IMAGE ID            CREATED             SIZE
    registry.redhat.io/rhosp13-beta/openstack-tempest   latest     881f7ac24d8f        10 days ago         641 MB
  6. コマンドエントリーを容易にするエイリアスを作成します。ディレクトリーをマウントする際に、絶対パスを使用していることを確認します。

    $ alias docker-tempest="docker run -i \
        -v "$(pwd)"/container_tempest:/home/stack/container_tempest \
        -v "$(pwd)"/tempest_workspace:/home/stack/tempest_workspace \
        registry.redhat.io/rhosp13/openstack-tempest \
        /bin/bash"
  7. コンテナーで利用可能な tempest プラグインの一覧を取得するには、以下のコマンドを実行します。

    $ docker-tempest -c "rpm -qa | grep tempest"

6.2. コンテナー内でコンテナー化された Tempest の実行

  1. コンテナー内で実行できる tempest スクリプトを作成して tempest.conf ファイルを生成し、tempest テストを実行します。スクリプトは以下のアクションを実行します。

    • コマンドセット -e の終了ステータスを設定します。
    • オーバークラウドに対して tempest を実行する場合には、source コマンドで overcloudrc ファイルを読み込みます。アンダークラウドに対して tempest を実行する場合には、stackrc ファイルを読み込みます
    • Run tempest init to create a tempest workspace.共有ディレクトリーを使用して、ホストからもファイルにアクセスできるようにします。
    • ディレクトリーを tempest_workspace に変更
    • 後で簡単に使用できるように、TEMPESTCONF 環境変数をエクスポートします。
    • discover-tempest-config を実行して tempest.conf ファイルを生成します。discover-tempest-config コマンドに含めることのできるオプションの詳細については、find- tempest-config --help を実行します。
    • --outhome/stack/tempest_workspace/tempest.conf に設定して、tempest.conf ファイルがホストマシンからアクセスできるようにします。
    • --deployer-input を設定し、共有ディレクトリーの tempest-deployer-input.conf ファイルを参照します。
    • tempest テストを実行します。このサンプルスクリプトは、smoke test tempest run --smoke を実行します。

      $ cat <<'EOF'>> /home/stack/container_tempest/tempest_script.sh
      set -e
      source /home/stack/container_tempest/overcloudrc
      tempest init /home/stack/tempest_workspace
      pushd /home/stack/tempest_workspace
      
      export TEMPESTCONF="/usr/bin/discover-tempest-config"
      
      $TEMPESTCONF \
        --out /home/stack/tempest_workspace/etc/tempest.conf \
        --deployer-input /home/stack/container_tempest/tempest-deployer-input.conf \
        --debug \
        --create \
        object-storage.reseller_admin ResellerAdmin
      
      tempest run --smoke
      
      EOF

      tempest.conf ファイルがすでにあり、tempest テストのみを実行する必要がある場合は、スクリプトから TEMPESTCONF を省略し、tempest.conf ファイルを container_tempest ディレクトリーから tempest_ workspace/etc ディレクトリーにコピーするコマンドに置き換えます。

    $ cp /home/stack/container_tempest/tempest.conf /home/stack/tempest_workspace/etc/tempest.conf
  2. tempest_script.sh スクリプトで実行可能な権限を設定します。

    $ chmod +x container_tempest/tempest_script.sh
  3. 前のステップで作成したエイリアスを使用して、コンテナーから tempest スクリプトを実行します。

    $ docker-tempest -c 'set -e; /home/stack/container_tempest/tempest_script.sh'
  4. テスト結果に関する情報に対して .stestr ディレクトリーを検査します。
  5. tempest テストを再実行する場合は、最初に tempest ワークスペースを削除し、再作成する必要があります。

    $ sudo rm -rf /home/stack/tempest_workspace
    $ mkdir /home/stack/tempest_workspace

6.3. コンテナーの外部でコンテナー化された Tempest の実行

コンテナーは tempest.conf ファイルを生成または取得して、テストを実行します。これらの操作は、コンテナー外部から実行できます。

  1. オーバークラウドに対して tempest を実行する場合には、source コマンドで overcloudrc ファイルを読み込みます。アンダークラウドに対して tempest を実行する場合には、stackrc ファイルを読み込みます

    # source /home/stack/container_tempest/overcloudrc
  2. Run tempest init to create a tempest workspace.共有ディレクトリーを使用して、ホストからもファイルにアクセスできるようにします。

    # tempest init /home/stack/tempest_workspace
  3. tempest.conf ファイルを生成します。

    # discover-tempest-config \
    --out /home/stack/tempest_workspace/tempest.conf \
    --deployer-input /home/stack/container_tempest/tempest-deployer-input-conf \
    --debug \
    --create \
    object-storage.reseller_admin ResellerAdmin

    discover-tempest-config コマンドに含めることのできるオプションの詳細については、find- tempest-config --help を実行します。

  4. tempest テストを実行します。たとえば、以下のコマンドを実行して、直前の手順で作成したエイリアスを使用して tempest smoke テストを実行します。

    # docker-tempest -c "tempest run --smoke"
  5. テスト結果に関する情報に対して .stestr ディレクトリーを検査します。
  6. tempest テストを再実行する場合は、最初に tempest ワークスペースを削除し、再作成する必要があります。

    $ sudo rm -rf /home/stack/tempest_workspace
    $ mkdir /home/stack/tempest_workspace

第7章 tempest リソースのクリーニング

実行中は 削除する必要のあるテストプロセスでファイル、ユーザー、およびプロジェクトが作成されます。自己クリーニングが可能なのは、設計原理の 1 つです

7.1. クリーンアップの実行

最初に、保存された状態を初期化する必要があります。これにより、saved_state.json ファイルが作成されます。これにより、クリーンアップは保持する必要のあるオブジェクトを削除できなくなります。通常、一時的な実行前に --init-saved-state でクリーンアップを実行します。この場合は、saved_state.json を編集し、クリーンアップを削除するオブジェクトを削除する必要があります。

# tempest cleanup --init-saved-state

クリーンアップを実行します。

# tempest cleanup

tempest cleanup コマンドは一時的なリソースを削除しますが、プロジェクトや一時管理者アカウントは削除されません。

7.2. ドライランの実行

実際のクリーンアップを実行する前にドライランを実行することが推奨されます。ドライランでは、クリーンアップによって削除されるファイルが一覧表示されますが、ファイルは削除されません。ファイルは dry_run.json ファイルに一覧表示されます。dry_run.json ファイルをチェックして、クリーンアップで環境に必要なファイルが削除されないようにします。

# tempest cleanup --dry-run

7.3. Tempest オブジェクトの削除

次のコマンドを実行して、プロジェクトを含むすべての tempest リソースを削除しますが、tempest 管理者アカウントは削除しません。

# tempest cleanup --delete-tempest-conf-objects