Git 仓库

把表单、变量文件、配置和 playbook 保存在 git 中


面向把表单、配置和 playbook 保存在 git 中的管理员:仓库可以包含什么,以及哪个来源优先。


仓库的用途

仓库是 AnsibleForms 克隆并保持更新的 git 远程仓库,每个仓库都有一些开关,用于说明它包含什么:

开关 AnsibleForms 从中读取的内容 仓库中的文件夹
用于配置? 包含类别、角色和常量的 config.yaml 根目录
用于表单? 表单文件(设计器也会把它们保存回该仓库)及其变量文件 forms 或根目录;变量文件在 vars 中
用于 playbook? 作业运行的 Ansible playbook playbooks 或根目录
用于工作流? 工作流文件,设计器也会把它们保存回该仓库 任意文件夹
用于清单? 一个以仓库命名的清单,表单通过 inventory: 引用它 根目录: inventory.yaml 、 group_vars 、 host_vars

没有子文件夹时,使用仓库根目录。一个仓库可以包含所有内容;如果拆分成多个仓库,只有用于 表单、用于工作流和用于清单可以在多个仓库上开启:其他开关只取第一个仓库, 并记录一条警告。

每个仓库都会被克隆到 REPO_PATH 下以其名称命名的子文件夹中。

一个仓库包含所有内容

单个仓库可以包含表单、变量文件、配置和 playbook,只需开启相应的开关,每类内容使用一个子文件夹。

forms-repo/
├── config.yaml        # categories, roles and constants
├── forms/             # form files (*.yaml)
├── playbooks/         # Ansible playbooks and roles
└── vars/              # vars files used by forms

每种用途一个仓库

使用独立的仓库可以让各个团队负责自己的部分,每个仓库开启一个开关,文件直接放在根目录中。

仓库 开关 根目录中的内容
af-config 用于配置? config.yaml
af-forms-network 、 af-forms-storage 用于表单? 各团队的表单文件,合并到一个列表中
af-playbooks 用于 playbook? playbook 和角色

只有表单可以来自多个仓库;配置和 playbook 各自只能来自一个仓库。变量文件来自第一个包含 vars 文件夹的表单仓库中的该文件夹。


仓库如何与本地文件夹结合

仓库内容会替代对应的本地文件夹;下表总结了每类文件从哪里读取。

内容 读取来源,以第一个匹配的为准
配置 1. 数据库,当配置保存在数据库中时( ENABLE_CONFIG_IN_DATABASE )
2. 用于配置仓库中的 config.yaml
3. 没有仓库用于配置时,用于表单仓库中的 config.yaml
4. CONFIG_PATH
表单 所有用于表单的仓库加上 FORMS_STAGING_PATH ;只有在没有这类仓库时才使用 FORMS_FOLDER_PATH
Playbook 用于 playbook 的仓库,否则为 ANSIBLE_PATH
变量文件 第一个包含 vars 文件夹的用于表单仓库中的该文件夹,否则为 VARS_FILES_PATH
工作流 所有用于工作流的仓库加上 WORKFLOWS_PATH ,一起使用

来自多个仓库的表单会合并到一个列表中。当其中两个仓库包含同名表单时,保留先加载的那个, 并记录警告 skipping duplicate form <name> ,因此请保持表单名称在各仓库之间唯一。


故障排除

大多数问题会显示在拉取列以及显示上次拉取的输出(或显示上次推送的输出)中,其中包含 git 自己的 错误消息。

  • 仓库克隆或拉取失败:认证、已知 主机和本地更改。
  • 表单仓库尚未克隆:在首次克隆之前,设计器 无法保存。
  • 卡在 running 的仓库会被重置为 failed :重启后,在下一次启动时;运行其 git 操作的节点 停止响应 2 分钟后,一分钟内;以及无论如何在 2 小时后。请再次运行拉取。

本节内容

每个主题都有单独的页面:

页面 涵盖内容
添加仓库 仓库页面、仓库的每个字段,以及在配置种子中声明仓库
认证 使用令牌的 HTTPS、使用生成密钥的 SSH,以及自定义 git 命令
拉取更改 定时、手动和 API 拉取,以及本地更改
设计器与推送 在设计器中编辑表单,并将其推送到仓库