Ansible Galaxy 集合依赖 SSH 错误与私人 GitHub 回购
Ansible Galaxy collection dependency SSH error with private GitHub repo
作为 Ansible 集合的新手,我希望我在尝试使用私有 GitHub 存储库将一些旧的 Ansible 角色重构到集合中时错过了一些明显的东西。
我 GitHub 设置了 2 个链接帐户。我会打电话给个人主账号GITHUB_AC_P
。个人帐户链接到一个子组织帐户,我将调用 GITHUB_AC_O
。我可以在 GitHub 网络 UI 中的这些帐户之间切换,并使用 ~/.ssh/config
中的以下单个条目访问具有 git 客户端的两个帐户:
Host GITHUB_AC_P.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_REDACTED_GITHUB_A
我首先将 Ansible Galaxy 集合文件添加到帐户 GITHUB_AC_O
中名为 ansible.common
的新 GitHub 存储库。我计划在其他 Ansible Galaxy 集合中重复使用这个集合。它目前只有一个角色和以下 galaxy.yml
文件:
namespace: REDACTED_NS
name: common
version: 0.0.1
description: "Common Ansible collection"
readme: README.md
authors:
- REDACTED_AUTHOR
以下命令报告“安装成功”,我在 ~/.ansible/collections/ansible_collections/REDACTED_NS/common
中看到集合:
ansible-galaxy collection install git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git,main
然后我在名为 ansible.harden_host
的新 GitHub 存储库中创建了第二个 Ansible Galaxy 集合。这也在帐号GITHUB_AC_O
。这目前没有任何角色,并使用以下 galaxy.yml
文件来引用上述公共集合(REDACTED_NS 的值在两个 galaxy.yml 文件中相同):
namespace: REDACTED_NS
name: harden_host
version: 0.0.1
description: "Ansible collection to harden hosts"
readme: README.md
authors:
- REDACTED_AUTHOR
dependencies: {
REDACTED_NS.common: git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git,main
}
但是当我 运行 以下内容时:
ansible-galaxy collection install --verbose git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.harden_host.git,main
失败并显示消息:
Starting galaxy collection install process
Process install dependency map
ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>
为什么它试图点击 galaxy.ansible.com
而不是我的 GitHub 帐户?
当我添加 --ignore-certs
和 运行 时:
ansible-galaxy collection install --ignore-certs git@GUTHUB_AC_P.github.com:GITHUB_AC_O/ansible.harden_host.git,main
失败并显示不同的消息:
ERROR! Failed to find collection REDACTED_NS.common:git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git
我将此错误中的 URI(冒号右侧)粘贴到 ansible-galaxy collection install
命令中以验证 URI 中没有拼写错误。这很好用。
字符串 REDACTED_NS 不等于 GITHUB_AC_P 或 GITHUB_AC_O 的值。
如果有人能解释这里出了什么问题以及如何解决这个问题,我们将不胜感激。
已解决;答案似乎隐藏在 Ansible 的 Using collections 文档中的普通站点中,该文档说对基于 git 的依赖项使用以下形式:
dependencies: {'git@github.com:organization/repo_name.git': 'devel'}
我使用的表单是针对 Galaxy 服务器的,因此它达到了 galaxy.ansible.com
(除非我用例如 --server localhost
覆盖了默认值)。
因此以下表格有效(git 回购后跟 git 参考):
namespace: REDACTED_NS
name: harden_host
version: 0.0.1
description: "Ansible collection to harden hosts"
readme: README.md
authors:
- REDACTED_AUTHOR
dependencies: {
'git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git': 'main'
}
作为 Ansible 集合的新手,我希望我在尝试使用私有 GitHub 存储库将一些旧的 Ansible 角色重构到集合中时错过了一些明显的东西。
我 GitHub 设置了 2 个链接帐户。我会打电话给个人主账号GITHUB_AC_P
。个人帐户链接到一个子组织帐户,我将调用 GITHUB_AC_O
。我可以在 GitHub 网络 UI 中的这些帐户之间切换,并使用 ~/.ssh/config
中的以下单个条目访问具有 git 客户端的两个帐户:
Host GITHUB_AC_P.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_REDACTED_GITHUB_A
我首先将 Ansible Galaxy 集合文件添加到帐户 GITHUB_AC_O
中名为 ansible.common
的新 GitHub 存储库。我计划在其他 Ansible Galaxy 集合中重复使用这个集合。它目前只有一个角色和以下 galaxy.yml
文件:
namespace: REDACTED_NS
name: common
version: 0.0.1
description: "Common Ansible collection"
readme: README.md
authors:
- REDACTED_AUTHOR
以下命令报告“安装成功”,我在 ~/.ansible/collections/ansible_collections/REDACTED_NS/common
中看到集合:
ansible-galaxy collection install git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git,main
然后我在名为 ansible.harden_host
的新 GitHub 存储库中创建了第二个 Ansible Galaxy 集合。这也在帐号GITHUB_AC_O
。这目前没有任何角色,并使用以下 galaxy.yml
文件来引用上述公共集合(REDACTED_NS 的值在两个 galaxy.yml 文件中相同):
namespace: REDACTED_NS
name: harden_host
version: 0.0.1
description: "Ansible collection to harden hosts"
readme: README.md
authors:
- REDACTED_AUTHOR
dependencies: {
REDACTED_NS.common: git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git,main
}
但是当我 运行 以下内容时:
ansible-galaxy collection install --verbose git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.harden_host.git,main
失败并显示消息:
Starting galaxy collection install process
Process install dependency map
ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>
为什么它试图点击 galaxy.ansible.com
而不是我的 GitHub 帐户?
当我添加 --ignore-certs
和 运行 时:
ansible-galaxy collection install --ignore-certs git@GUTHUB_AC_P.github.com:GITHUB_AC_O/ansible.harden_host.git,main
失败并显示不同的消息:
ERROR! Failed to find collection REDACTED_NS.common:git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git
我将此错误中的 URI(冒号右侧)粘贴到 ansible-galaxy collection install
命令中以验证 URI 中没有拼写错误。这很好用。
字符串 REDACTED_NS 不等于 GITHUB_AC_P 或 GITHUB_AC_O 的值。
如果有人能解释这里出了什么问题以及如何解决这个问题,我们将不胜感激。
已解决;答案似乎隐藏在 Ansible 的 Using collections 文档中的普通站点中,该文档说对基于 git 的依赖项使用以下形式:
dependencies: {'git@github.com:organization/repo_name.git': 'devel'}
我使用的表单是针对 Galaxy 服务器的,因此它达到了 galaxy.ansible.com
(除非我用例如 --server localhost
覆盖了默认值)。
因此以下表格有效(git 回购后跟 git 参考):
namespace: REDACTED_NS
name: harden_host
version: 0.0.1
description: "Ansible collection to harden hosts"
readme: README.md
authors:
- REDACTED_AUTHOR
dependencies: {
'git@GITHUB_AC_P.github.com:GITHUB_AC_O/ansible.common.git': 'main'
}