13.3. 导入和导出模板
您可以使用 Satellite Web UI、Hammer CLI 或 Satellite API 来导入和导出模板。卫星 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 中,导航到 Hosts > Sync Templates。
- 点 Import。
- 每个字段填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导入的模板的值。有关每个字段的更多信息,请参阅 第 13.2 节 “配置 TemplateSync 插件”。
- 点 Submit。
卫星 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 templates。
13.3.2. 导出模板
您可以将模板导出到版本控制系统,如 Git 存储库。
流程
- 在 Satellite Web UI 中,导航到 Hosts > Sync Templates。
- 单击 Export。
- 每个字段填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导出的模板的值。有关每个字段的更多信息,请参阅 第 13.2 节 “配置 TemplateSync 插件”。
- 点 Submit。
卫星 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导出模板时,避免使用
/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 %>
流程
- 配置使用 SSH 授权的版本控制系统,如 gitosis、gitolite 或 git 守护进程。
在 TemplateSync 选项卡中配置 TemplateSync 插件设置。
- 更改 Branch 设置,使其与 Git 服务器上的目标分支匹配。
-
将 Repo 设置更改为与 Git 存储库匹配。例如,对于位于
git@git.example.com/templates.git的存储库,请将设置设置为ssh://git@git.example.com/templates.git。
接受 Git SSH 主机密钥,以
foreman用户身份:# sudo -u foreman ssh git.example.com您可以看到
Permission denied,请再次在输出中尝试。消息是正确的,因为 SSH 连接还无法成功。如果还没有 SSH 密钥对,请创建一个。不要指定密码短语。
# sudo -u foreman ssh-keygen
-
使用 Satellite 中的公钥配置您的版本控制服务器,它位于
/usr/share/foreman/.ssh/id_rsa.pub。 将模板从 Satellite 服务器导出到 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"}
在内容更改后,将模板导入到卫星服务器:
$ 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 服务器。
先决条件
每个模板都必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:
<%# 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 服务器导出到本地目录:
$ 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"}
在内容更改后,将模板导入到卫星服务器:
$ 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\"}"