13.3. テンプレートのインポートおよびエクスポート
Satellite Web UI、Hammer CLI、または Satellite API を使用して、テンプレートをインポートおよびエクスポートできます。Satellite API 呼び出しは、ロールベースのアクセス管理システムを使用して、任意のユーザーでタスクの実行が可能になります。Git などのバージョン管理システム、またはローカルディレクトリーとテンプレートを同期できます。
13.3.1. テンプレートのインポート
任意のリポジトリーからテンプレートをインポートできます。/tmp/dir、git://example.com、https://example.com、ssh://example.com などの異なるプロトコルを使ってリポジトリーにポイントさせることもできます。
前提条件
各テンプレートに、テンプレートが属するロケーションおよび組織が含まれている必要がある。これは、すべてのタイプのテンプレートタイプに適用されます。テンプレートをインポートする前に、以下のセクションをテンプレートに追加します。
<%# kind: provision name: My_Provisioning_Template oses: - My_first_OS - My_second_OS locations: - My_first_Location - My_second_Location organizations: - My_first_Organization - My_second_Organization %>
手順
- Satellite Web UI で、ホスト > テンプレートの同期 に移動します。
- インポート をクリックします。
- 各フィールドには、管理 > 設定 > TemplateSync で設定された値が入力されます。インポートするテンプレートに従って値を変更します。各フィールドの詳細は、「TemplateSync プラグインの設定」 を参照してください。
- Submit をクリックします。
Satellite Web UI はインポートのステータスを表示します。ステータスは永続的ではありません。ステータスページを離れると、ページに戻ることはできません。
CLI 手順
リポジトリーからテンプレートをインポートするには、以下のコマンドを実行します。
$ hammer import-templates \ --branch "My_Branch" \ --filter '.*Template Name$' \ --organization "My_Organization" \ --prefix "[Custom Index] " \ --repo "https://git.example.com/path/to/repository"
テンプレートのインデックス化と管理には、
--prefixを使ってテンプレートにカテゴリーを設定することができます。大型リポジトリーから特定のテンプレートを選択するには、--filterを使ってインポートするテンプレートのタイトルを定義します。たとえば、--filter '.*Ansible Default$'とすると、各種 Ansible Default テンプレートをインポートします。
13.3.2. テンプレートのエクスポート
テンプレートは、Git リポジトリーなどのバージョン管理サーバーにエクスポートできます。
手順
- Satellite Web UI で、ホスト > テンプレートの同期 に移動します。
- エクスポート をクリックします。
- 各フィールドには、管理 > 設定 > TemplateSync で設定された値が入力されます。エクスポートするテンプレートに従って値を変更します。各フィールドの詳細は、「TemplateSync プラグインの設定」 を参照してください。
- Submit をクリックします。
Satellite Web UI はエクスポートのステータスを表示します。ステータスは永続的ではありません。ステータスページを離れると、ページに戻ることはできません。
CLI 手順
Git リポジトリーのローカルコピーのクローンを作成します。
$ git clone https://github.com/theforeman/community-templates /custom/templates以下のコマンドで、ローカルディレクトリーの所有者を
foremanユーザーに変更し、SELinux コンテキストを変更します。# chown -R foreman:foreman /custom/templates # chcon -R -t httpd_sys_rw_content_t /custom/templates
テンプレートをローカルリポジトリーにエクスポートするには、以下のコマンドを実行します。
hammer export-templates --organization 'Default Organization' --repo /custom/templatesテンプレートをエクスポートする際に、バックエンドサービスが systemd プライベートの一時ディレクトリーで実行されるため、
/tmpや/var/tmpなどの一時ディレクトリーは回避してください。
13.3.3. Satellite API を使用したテンプレートの同期
前提条件
各テンプレートに、テンプレートが属するロケーションおよび組織が含まれている必要がある。これは、すべてのタイプのテンプレートタイプに適用されます。テンプレートをインポートする前に、以下のセクションをテンプレートに追加します。
<%# kind: provision name: My_Provisioning_Template oses: - My_first_OS - My_second_OS locations: - My_first_Location - My_second_Location organizations: - My_first_Organization - My_second_Organization %>
手順
- SSH 認証を使用するバージョン管理システムを設定します (gitosis、gitolite、git デーモンなど)。
TemplateSync タブで TemplateSync プラグイン設定を設定します。
- Branch 設定を変更して、Git サーバーへのターゲットブランチに一致します。
-
Git リポジトリーに一致するように、Repo 設定を変更します。たとえば、
git@git.example.com/templates.gitに置いたリポジトリーに対して、設定をssh://git@git.example.com/templates.gitに設定します。
Git SSH ホストキーを
foremanユーザーとして受け取ります。# sudo -u foreman ssh git.example.comSSH 接続が成功していないため、出力に
Permission denied, please try again.メッセージが表示されることが想定されます。SSH 鍵ペアがない場合は作成します。パスフレーズは指定しないでください。
# sudo -u foreman ssh-keygen
-
Satellite の公開鍵を使用してバージョン管理サーバーを設定します。公開鍵は、
/usr/share/foreman/.ssh/id_rsa.pubにあります。 Satellite Server から、TemplateSync メニューに指定したバージョン管理リポジトリーにテンプレートをエクスポートします。
$ curl -H "Accept:application/json" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/export \ -X POST {"message":"Success"}
コンテンツを変更したら、テンプレートを Satellite Server にインポートします。
$ curl -H "Accept:application/json" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/import \ -X POST {“message”:”Success”}
Satellite が提供するテンプレートがロックされ、デフォルトではインポートできない点にご留意ください。この動作を上書きするには、TemplateSync メニューの
Force import設定をyesに変更するか、forceパラメーター-d '{ "force": "true" }'を import コマンドに追加します。
13.3.4. Satellite API を使用したローカルディレクトリーとテンプレートの同期
ローカルディレクトリーで、バージョン管理リポジトリーを設定した場合は、テンプレートをローカルディレクトリーと同期すると便利です。これにより、テンプレートを編集し、ディレクトリーで編集履歴を追跡できます。テンプレートの編集後に変更を Satellite Server に同期することも可能です。
前提条件
各テンプレートに、テンプレートが属するロケーションおよび組織が含まれている必要がある。これは、すべてのタイプのテンプレートタイプに適用されます。テンプレートをインポートする前に、以下のセクションをテンプレートに追加します。
<%# kind: provision name: My_Provisioning_Template oses: - My_first_OS - My_second_OS locations: - My_first_Location - My_second_Location organizations: - My_first_Organization - My_second_Organization %>
手順
テンプレートを保存するディレクトリーを作成し、適切なパーミッションおよび SELinux コンテキストを適用します。
# mkdir -p /usr/share/templates_dir/ # chown foreman /usr/share/templates_dir/ # chcon -t httpd_sys_rw_content_t /usr/share/templates_dir/ -R
-
TemplateSync タブで Repo 設定を変更し、エクスポートディレクトリー
/usr/share/templates_dir/に一致させます。 Satellite Server からローカルディレクトリーにテンプレートをエクスポートします。
$ curl -H "Accept:application/json" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/export \ -X POST \ {"message":"Success"}
コンテンツを変更したら、テンプレートを Satellite Server にインポートします。
$ curl -H "Accept:application/json" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/import \ -X POST {“message”:”Success”}
Satellite が提供するテンプレートがロックされ、デフォルトではインポートできない点にご留意ください。この動作を上書きするには、TemplateSync メニューの
Force import設定をyesに変更するか、forceパラメーター-d '{ "force": "true" }'を import コマンドに追加します。
-d パラメーターを使用して、リクエストでデフォルトの API 設定を上書きします。以下の例では、git.example.com/templates リポジトリーにテンプレートをエクスポートします。
$ curl -H "Accept:application/json" \
-H "Content-Type:application/json" \
-u login:password \
-k https://satellite.example.com/api/v2/templates/export \
-X POST \
-d "{\"repo\":\"git.example.com/templates\"}"