13.3. 导入和导出模板

您可以使用 Satellite Web UI、hammer CLI 或 Satellite API 导入和导出模板。Satellite API 调用使用基于角色的访问控制系统,它允许以任何用户身份执行任务。您可以将模板与版本控制系统(如 Git)或本地目录同步。

13.3.1. 导入模板

您可以从您选择的存储库导入模板。您可以使用不同的协议指向您的存储库,如 /tmp/dirgit://example.comhttps://example.comssh://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
    %>

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Sync Templates
  2. Import
  3. 每个字段都会填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导入的模板的值。有关每个字段的详情请参考 第 13.2 节 “配置 TemplateSync 插件”
  4. 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 'DemoAnsible Default$' 导入各种 Ansible 默认模板。

13.3.2. 导出模板

您可以将模板导出到版本控制系统,如 Git 存储库。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Sync Templates
  2. 单击 Export
  3. 每个字段都会填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导出的模板的值。有关每个字段的详情请参考 第 13.2 节 “配置 TemplateSync 插件”
  4. Submit

Satellite Web UI 显示导出的状态。状态不是持久性的;如果您保留状态页面,则无法返回它。

CLI 过程

  1. 克隆 Git 存储库的本地副本:

    $ git clone https://github.com/theforeman/community-templates /custom/templates
  2. 将本地目录的所有者改为 foreman 用户,并使用以下命令更改 SELinux 上下文:

    # chown -R foreman:foreman /custom/templates
    # chcon -R -t httpd_sys_rw_content_t /custom/templates
  3. 要将模板导出到您的本地存储库,请输入以下命令:

    hammer export-templates --organization 'Default Organization' --repo /custom/templates

    在导出模板时,请避免类似 /tmp/var/tmp 的临时目录,因为后端服务使用 systemd 私有临时目录运行。

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
    %>

流程

  1. 配置使用 SSH 授权的版本控制系统,如 gitosis、gitolite 或 git 守护进程。
  2. 在 TemplateSync 选项卡中配置 TemplateSync 插件设置。

    1. 更改 Branch 设置,使其与 Git 服务器上的目标分支匹配。
    2. 更改 Repo 设置以匹配 Git 存储库。例如,对于位于 git@git.example.com/templates.git 中的存储库,将设置设置为 ssh://git@git.example.com/templates.git
  3. foreman 用户身份接受 Git SSH 主机密钥:

    # sudo -u foreman ssh git.example.com

    您可以看到 Permission denied,重试 输出中的消息(这是预期的),因为 SSH 连接还无法成功。

  4. 如果还没有 SSH 密钥对,请创建一个 SSH 密钥对。不要指定密码短语。

    # sudo -u foreman ssh-keygen
  5. 使用 Satellite 中的公钥配置您的版本控制服务器,该密钥位于 /usr/share/foreman/.ssh/id_rsa.pub 中。
  6. 将 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"}
  7. 在内容更改后,将模板导入到 Satellite 服务器:

    $ 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,或者在 import 命令中添加 force 参数 -d '{ "force": "true" }'

13.3.4. 使用 Satellite API 将模板与本地目录同步

如果您在本地目录中配置了版本控制存储库,请将模板与本地目录同步非常有用。这样,您可以编辑模板并跟踪目录中编辑的历史记录。您也可以在编辑模板后将更改同步到 Satellite 服务器。

先决条件

  • 每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:

    <%#
    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
    %>

流程

  1. 创建存储模板的目录并应用适当的权限和 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
  2. 更改 TemplateSync 选项卡中的 Repo 设置,使其与导出目录 /usr/share/templates_dir/ 匹配。
  3. 将 Satellite 服务器的模板导出到本地目录:

    $ 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"}
  4. 在内容更改后,将模板导入到 Satellite 服务器:

    $ 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,或者在 import 命令中添加 force 参数 -d '{ "force": "true" }'

注意

您可以通过在请求中使用 -d 参数指定默认的 API 设置来覆盖默认的 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\"}"