10.17. 同步模板存储库
在 Satellite 中,您可以同步 Satellite 服务器和版本控制系统或本地目录之间的作业模板、置备模板、报告模板和分区表模板的存储库。在本章中,Git 存储库用于演示目的。
本节详细介绍了以下工作流:
- 安装和配置 TemplateSync 插件
- 执行导出和导入任务
10.17.1. 启用 TemplateSync 插件
要在 Satellite 服务器上启用插件,请输入以下命令:
# satellite-installer --enable-foreman-plugin-templates
- 要验证插件是否已正确安装,请确保 Administer > Settings 包含 TemplateSync 菜单。
10.17.2. 配置 TemplateSync 插件
在 Satellite Web UI 中,导航到 Administer > Settings > TemplateSync 来配置插件。下表解释了属性行为。请注意,一些属性仅用于导入或导出任务。
参数 | API 参数名称 | 导入的含义 | 导出的含义 |
---|---|---|---|
关联 |
接受的值: | 根据元数据将模板与操作系统、机构和位置相关联。 | N/A |
分支 |
| 指定要从中读取的 Git 存储库中的默认分支。 | 指定要写入的 Git 存储库中的默认分支。 |
dirname |
| 指定要从中读取的存储库下的子目录。 | 指定要写入的存储库下的子目录。 |
Filter |
| 仅导入名称与这个正则表达式匹配的模板。 | 仅导出名称与这个正则表达式匹配的模板。 |
强制导入 |
| 导入的模板会覆盖具有相同名称的锁定模板。 | N/A |
锁定模板 |
| 当您导入具有相同名称的新模板时,不要覆盖现有模板,除非启用了 Force 导入。 | N/A |
元数据导出模式 |
接受的值: | N/A | 定义导出时如何处理元数据:
|
negate |
接受的值: | 导入忽略过滤器属性的模板。 | 导出忽略过滤器属性的模板。 |
prefix |
| 如果模板名称没有以前缀开头,请在模板的开头添加指定字符串。 | N/A |
仓库 |
| 定义要从中同步的存储库的路径。 | 定义要导出到的存储库的路径。 |
详细程度 |
接受的值: | 启用将详细消息写入此操作的日志。 | N/A |
10.17.3. 导入和导出模板
您可以使用 Satellite Web UI、hammer CLI 或 Satellite API 导入和导出模板。Satellite API 调用使用基于角色的访问控制系统,它允许以任何用户身份执行任务。您可以将模板与版本控制系统(如 Git)或本地目录同步。
10.17.3.1. 导入模板
您可以从您选择的存储库导入模板。您可以使用不同的协议指向您的存储库,如 /tmp/dir
、git://example.com
、https://example.com
和 ssh://example.com
。
先决条件
每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:
<%# kind: provision name: My Kickstart File oses: - RedHat 7 - RedHat 6 locations: - First Location - Second Location organizations: - Default Organization - Extra Organization %>
流程
- 在 Satellite Web UI 中,导航到 Hosts > Sync Templates。
- 点 Import。
- 每个字段都会填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导入的模板的值。有关每个字段的详情请参考 第 10.17.2 节 “配置 TemplateSync 插件”。
- 点 Submit。
Satellite Web UI 显示导入的状态。状态不是持久性的;如果您保留状态页面,则无法返回它。
CLI 过程
要从存储库导入模板,请输入以下命令:
$ hammer import-templates \ --prefix '[Custom Index] ' \ --filter '.*Template Name$' \ --repo https://github.com/examplerepo/exampledirectory \ --branch my_branch \ --organization 'Default Organization'
要更好地索引和管理模板,请使用
--prefix
为您的模板设置类别。要从大型存储库中选择某些模板,请使用--filter
来定义您要导入的模板的标题。例如,--filter 'DemoAnsible Default$'
导入各种 Ansible 默认模板。
10.17.3.2. 导出模板
您可以将模板导出到版本控制系统,如 Git 存储库。
流程
- 在 Satellite Web UI 中,导航到 Hosts > Sync Templates。
- 单击 Export。
- 每个字段都会填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导出的模板的值。有关每个字段的详情请参考 第 10.17.2 节 “配置 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
在导出模板时,请避免类似
/tmp
或/var/tmp
的临时目录,因为后端服务使用 systemd 私有临时目录运行。
10.17.3.3. 使用 Satellite API 同步模板
先决条件
每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:
<%# kind: provision name: My Kickstart File oses: - RedHat 7 - RedHat 6 locations: - First Location - Second Location organizations: - Default Organization - Extra Organization %>
流程
- 配置使用 SSH 授权的版本控制系统,如 gitosis、gitolite 或 git 守护进程。
在 TemplateSync 选项卡中配置 TemplateSync 插件设置。
- 更改 Branch 设置,使其与 Git 服务器上的目标分支匹配。
-
更改 Repo 设置以匹配 Git 存储库。例如,对于位于
git@git.example.com/templates.git
中的存储库,将设置设置为ssh://git@git.example.com/templates.git
。
以
foreman
用户身份接受 Git SSH 主机密钥:# sudo -u foreman ssh git.example.com
您可以看到
Permission denied,重试
输出中的消息(这是预期的),因为 SSH 连接还无法成功。如果还没有 SSH 密钥对,请创建一个 SSH 密钥对。不要指定密码短语。
# sudo -u foreman ssh-keygen
-
使用 Satellite 中的公钥配置您的版本控制服务器,该密钥位于
/usr/share/foreman/.ssh/id_rsa.pub
中。 将 Satellite Server 中的模板导出到 TemplateSync 菜单中指定的版本控制存储库:
$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/export \ -X POST {"message":"Success"}
在内容更改后,将模板导入到 Satellite 服务器:
$ curl -H "Accept:application/json,version=2" \ -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" }'
。
10.17.3.4. 使用 Satellite API 将模板与本地目录同步
如果您在本地目录中配置了版本控制存储库,请将模板与本地目录同步非常有用。这样,您可以编辑模板并跟踪目录中编辑的历史记录。您也可以在编辑模板后将更改同步到 Satellite 服务器。
先决条件
每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:
<%# kind: provision name: My Kickstart File oses: - RedHat 7 - RedHat 6 locations: - First Location - Second Location organizations: - Default Organization - Extra 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,version=2" \ -H "Content-Type:application/json" \ -u login:password \ -k https://_satellite.example.com/api/v2/templates/export \ -X POST \ {"message":"Success"}
在内容更改后,将模板导入到 Satellite 服务器:
$ curl -H "Accept:application/json,version=2" \ -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,version=2" \ -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\"}"
10.17.4. 高级 Git 配置
您可以使用命令行或编辑 .gitconfig
文件为 TemplateSync 插件执行额外的 Git 配置。
接受自签名 Git 证书
如果您在 Git 服务器上使用自签名证书身份验证,请使用 git config http.sslCAPath
命令验证证书。
例如,以下命令验证存储在 /cert/cert.pem
中的自签名证书:
# sudo -u foreman git config --global http.sslCAPath cert/cert.pem
有关高级选项的完整列表,请参阅 git-config
手册页。
10.17.5. 卸载插件
在删除 foreman_templates 插件后避免错误:
使用 Satellite 安装程序禁用插件:
# satellite-installer --no-enable-foreman-plugin-templates
清理插件的自定义数据。该命令不会影响您创建的任何模板。
# foreman-rake templates:cleanup
卸载插件:
# satellite-maintain packages remove foreman-plugin-templates