安装集合
注意
如果您按照本段所述手动安装集合,则在升级 ansible 包或 ansible-core 时,不会自动升级该集合。
在容器中安装集合
您可以在称为执行环境的容器中安装集合及其依赖项。有关详细信息,请参阅 执行环境入门指南。
使用 ansible-galaxy 安装集合
默认情况下,ansible-galaxy collection install 使用 https://galaxy.ansible.com 作为 Galaxy 服务器(如 ansible.cfg 文件中 GALAXY_SERVER 中所列)。您不需要任何其他配置。默认情况下,Ansible 将集合安装在 ~/.ansible/collections 下的 ansible_collections 目录中。
如果您使用的是任何其他 Galaxy 服务器(例如 Red Hat Automation Hub),请参阅 配置 ansible-galaxy 客户端。
要安装在 Galaxy 中托管的集合:
ansible-galaxy collection install my_namespace.my_collection
要将集合升级到 Galaxy 服务器上最新的可用版本,您可以使用 --upgrade 选项
ansible-galaxy collection install my_namespace.my_collection --upgrade
您也可以直接使用您构建的 tarball 包
ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections
您可以从本地源目录构建和安装集合。 ansible-galaxy 实用程序使用目录中的 MANIFEST.json 或 galaxy.yml 元数据来构建集合。
ansible-galaxy collection install /path/to/collection -p ./collections
您也可以在命名空间目录中安装多个集合。
ns/
├── collection1/
│ ├── MANIFEST.json
│ └── plugins/
└── collection2/
├── galaxy.yml
└── plugins/
ansible-galaxy collection install /path/to/ns -p ./collections
注意
除非父目录已经在名为 ansible_collections 的文件夹中,否则 install 命令会自动将路径 ansible_collections 附加到使用 -p 选项指定的路径。
使用 -p 选项指定安装路径时,请使用 COLLECTIONS_PATHS 中配置的值之一,因为 Ansible 本身将在此处查找集合。如果您未指定路径,ansible-galaxy collection install 将集合安装到 COLLECTIONS_PATHS 中定义的第一个路径,默认情况下为 ~/.ansible/collections
使用签名验证安装集合
如果集合已由 分发服务器 签名,则服务器将提供 ASCII 编码的独立签名,以验证 MANIFEST.json 的真实性,然后再使用它来验证集合的内容。并非所有分发服务器都提供此选项。有关支持集合签名的服务器列表,请参阅 分发集合。
要对已签名的集合使用签名验证:
配置 GnuPG 密钥环 用于
ansible-galaxy,或者在安装已签名的集合时使用--keyring选项提供密钥环的路径。将公钥从分发服务器导入到该密钥环。
gpg --import --no-default-keyring --keyring ~/.ansible/pubring.kbx my-public-key.asc
安装集合时验证签名。
ansible-galaxy collection install my_namespace.my_collection --keyring ~/.ansible/pubring.kbx
如果您已 配置 GnuPG 密钥环,则无需使用
--keyring选项。或者,在安装后随时验证签名,以证明集合未被篡改。有关详细信息,请参阅 验证已签名的集合。
您还可以包含除分发服务器提供的签名之外的其他签名。使用 --signature 选项使用这些附加签名来验证集合的 MANIFEST.json。补充签名应作为 URI 提供。
ansible-galaxy collection install my_namespace.my_collection --signature https://examplehost.com/detached_signature.asc --keyring ~/.ansible/pubring.kbx
GnuPG 验证仅对从分发服务器安装的集合进行。用户提供的签名不用于验证从 Git 仓库、源目录或 URL/tar.gz 文件路径安装的集合。
您还可以将附加签名包含在集合的 requirements.yml 文件的 signatures 密钥下。
# requirements.yml
collections:
- name: ns.coll
version: 1.0.0
signatures:
- https://examplehost.com/detached_signature.asc
- file:///path/to/local/detached_signature.asc
有关如何使用此文件安装集合的详细信息,请参阅 集合 requirements 文件。
默认情况下,如果至少 1 个签名成功验证了集合,则验证被认为成功。所需签名的数量可以使用 --required-valid-signature-count 或 GALAXY_REQUIRED_VALID_SIGNATURE_COUNT 进行配置。可以通过将选项设置为 all 来要求所有签名。如果未找到有效签名,则要使签名验证失败,请在值前加上 +,例如 +all 或 +1。
export ANSIBLE_GALAXY_GPG_KEYRING=~/.ansible/pubring.kbx
export ANSIBLE_GALAXY_REQUIRED_VALID_SIGNATURE_COUNT=2
ansible-galaxy collection install my_namespace.my_collection --signature https://examplehost.com/detached_signature.asc --signature file:///path/to/local/detached_signature.asc
可以使用 --ignore-signature-status-code 或 GALAXY_REQUIRED_VALID_SIGNATURE_COUNT 忽略某些 GnuPG 错误。GALAXY_REQUIRED_VALID_SIGNATURE_COUNT 应为列表,并且可以多次提供 --ignore-signature-status-code 以忽略多个其他错误状态代码。
此示例要求分发服务器提供的任何签名来验证集合,除非它们由于 NO_PUBKEY 而失败
export ANSIBLE_GALAXY_GPG_KEYRING=~/.ansible/pubring.kbx
export ANSIBLE_GALAXY_REQUIRED_VALID_SIGNATURE_COUNT=all
ansible-galaxy collection install my_namespace.my_collection --ignore-signature-status-code NO_PUBKEY
如果上述示例的验证失败,则只会显示除 NO_PUBKEY 之外的错误。
如果验证不成功,则不会安装集合。可以使用 --disable-gpg-verify 或通过配置 GALAXY_DISABLE_GPG_VERIFY 来禁用 GnuPG 签名验证。
安装旧版本的集合
您一次只能安装一个版本的集合。默认情况下,ansible-galaxy 安装最新的可用版本。如果要安装特定版本,可以添加版本范围标识符。例如,要安装集合的 1.0.0-beta.1 版本:
ansible-galaxy collection install my_namespace.my_collection:==1.0.0-beta.1
您可以指定多个用 , 分隔的范围标识符。使用单引号,以便 shell 传递整个命令,包括 >、! 和其他运算符。例如,要安装大于或等于 1.0.0 且小于 2.0.0 的最新版本:
ansible-galaxy collection install 'my_namespace.my_collection:>=1.0.0,<2.0.0'
Ansible 将始终安装满足您指定的范围标识符的最新版本。您可以使用以下范围标识符:
*:最新版本。这是默认值。!=:不等于指定的版本。==:与指定的版本完全相同。>=:大于或等于指定的版本。>:大于指定的版本。<=:小于或等于指定的版本。<:小于指定的版本。
注意
默认情况下,ansible-galaxy 会忽略预发行版本。要安装预发行版本,必须使用 == 范围标识符显式要求。
使用 requirements 文件安装多个集合
您可以设置一个 requirements.yml 文件,以便使用一条命令安装多个集合。此文件是一个 YAML 文件,格式如下:
---
collections:
# With just the collection name
- my_namespace.my_collection
# With the collection name, version, and source options
- name: my_namespace.my_other_collection
version: ">=1.2.0" # Version range identifiers (default: ``*``)
source: ... # The Galaxy URL to pull the collection from (default: ``--api-server`` from cmdline)
您可以为每个集合条目指定以下键:
name
version
signatures
source
type
version 键使用与安装旧版本的集合中记录的相同的范围标识符格式。
signatures 键接受一个签名源列表,这些源用于补充在集合安装期间和 ansible-galaxy collection verify 过程中在 Galaxy 服务器上找到的签名源。签名源应为包含分离签名的 URI。--keyring CLI 选项必须在指定签名时提供。
签名仅用于验证 Galaxy 服务器上的集合。用户提供的签名不用于验证从 git 仓库、源目录或 tar.gz 文件的 URL/路径安装的集合。
collections:
- name: namespace.name
version: 1.0.0
type: galaxy
signatures:
- https://examplehost.com/detached_signature.asc
- file:///path/to/local/detached_signature.asc
type 键可以设置为 file、galaxy、git、url、dir 或 subdirs。如果省略 type,则 name 键用于隐式确定集合的来源。
使用 type: git 安装集合时,version 键可以引用分支或git commit-ish 对象(提交或标签)。例如:
collections:
- name: https://github.com/organization/repo_name.git
type: git
version: devel
您还可以将角色添加到 requirements.yml 文件中,位于 roles 键下。其值遵循旧版 Ansible 版本中使用的 requirements 文件的相同格式。
---
roles:
# Install a role from Ansible Galaxy.
- name: geerlingguy.java
version: "1.9.6" # note that ranges are not supported for roles
collections:
# Install a collection from Ansible Galaxy.
- name: geerlingguy.php_roles
version: ">=0.9.3"
source: https://galaxy.ansible.com
要同时使用一条命令安装角色和集合,请运行以下命令:
$ ansible-galaxy install -r requirements.yml
运行 ansible-galaxy collection install -r 或 ansible-galaxy role install -r 将只分别安装集合或角色。
注意
当指定自定义集合或角色安装路径时,从同一个 requirements 文件安装角色和集合将不起作用。在这种情况下,集合将被跳过,并且命令将像 ansible-galaxy role install 一样处理每个角色。
下载集合以供离线使用
要下载 Galaxy 中的集合 tarball 以供离线使用:
导航到集合页面。
点击下载 tarball。
您可能还需要手动下载任何依赖的集合。
在剧本旁边安装集合
您可以将集合在本地安装到项目中的剧本旁边,而不是安装到系统或 AWX 上的全局位置。
在剧本旁边使用本地安装的集合有一些好处,例如:
确保项目的所有用户都使用相同的集合版本。
使用自包含项目可以轻松地在不同的环境之间移动。更高的可移植性还可以减少设置新环境时的开销。在云环境中部署 Ansible 剧本时,这是一个优势。
本地管理集合可以让您将它们与剧本一起版本化。
本地安装集合可以将它们与具有多个项目的环境中的全局安装隔离开来。
以下是如何在 collections/ansible_collections/ 目录结构下将集合保存在当前剧本旁边的示例。
./
├── play.yml
├── collections/
│ └── ansible_collections/
│ └── my_namespace/
│ └── my_collection/<collection structure lives here>
有关集合目录结构的详细信息,请参阅集合结构。
从源文件安装集合
Ansible 还可以通过多种方式从源目录安装:
collections:
# directory containing the collection
- name: ./my_namespace/my_collection/
type: dir
# directory containing a namespace, with collections as subdirectories
- name: ./my_namespace/
type: subdirs
Ansible 还可以通过直接指定输出文件来安装使用 ansible-galaxy collection build 收集或从 Galaxy 下载以供离线使用的集合。
collections:
- name: /tmp/my_namespace-my_collection-1.0.0.tar.gz
type: file
注意
相对路径是根据当前工作目录(您从中调用 ansible-galaxy install -r 的位置)计算的。它们不是相对于 requirements.yml 文件计算的。
从 Git 仓库安装集合
您可以从 Git 仓库安装集合,而不是从 Galaxy 或 Automation Hub 安装。作为开发人员,从 Git 仓库安装可以让您在创建 tarball 并发布集合之前查看您的集合。作为用户,从 Git 仓库安装可以让您使用 Galaxy 或 Automation Hub 中尚不存在的集合或版本。此功能旨在作为前面所述的内容开发人员的最小快捷方式,并且 Git 仓库可能不支持 ansible-galaxy CLI 的全部功能。在复杂情况下,更灵活的选择可能是将 git clone 仓库到集合安装目录的正确文件结构中。
仓库必须包含 galaxy.yml 或 MANIFEST.json 文件。此文件提供元数据,例如集合的版本号和命名空间。
在命令行中从 Git 仓库安装集合
要在命令行中从 Git 仓库安装集合,请使用仓库的 URI,而不是集合名称或 tar.gz 文件的路径。使用前缀 git+,除非您使用具有用户 git 的 SSH 身份验证(例如,git@github.com:ansible-collections/ansible.windows.git)。您可以使用逗号分隔的git commit-ish语法指定分支、提交或标签。
例如:
# Install a collection in a repository using the latest commit on the branch 'devel'
ansible-galaxy collection install git+https://github.com/organization/repo_name.git,devel
# Install a collection from a private GitHub repository
ansible-galaxy collection install [email protected]:organization/repo_name.git
# Install a collection from a local git repository
ansible-galaxy collection install git+file:///home/user/path/to/repo_name.git
警告
将凭据嵌入到 Git URI 中是不安全的。使用安全的身份验证选项,以防止您的凭据在日志或其他地方泄露。
使用SSH身份验证
使用netrc身份验证
在您的 Git 配置中使用http.extraHeader
在您的 Git 配置中使用url.<base>.pushInsteadOf
指定 Git 仓库中的集合位置
从 Git 仓库安装集合时,Ansible 使用集合 galaxy.yml 或 MANIFEST.json 元数据文件来构建集合。默认情况下,Ansible 会搜索两条路径以查找集合 galaxy.yml 或 MANIFEST.json 元数据文件:
仓库的顶层。
仓库路径中的每个目录(一层深)。
如果在仓库的顶层存在 galaxy.yml 或 MANIFEST.json 文件,则 Ansible 使用该文件中的集合元数据来安装单个集合。
├── galaxy.yml
├── plugins/
│ ├── lookup/
│ ├── modules/
│ └── module_utils/
└─── README.md
如果在仓库路径中的一个或多个目录(一层深)中存在 galaxy.yml 或 MANIFEST.json 文件,则 Ansible 会将每个具有元数据文件的目录作为集合安装。例如,Ansible 默认情况下会从此仓库结构安装集合 1 和集合 2:
├── collection1
│ ├── docs/
│ ├── galaxy.yml
│ └── plugins/
│ ├── inventory/
│ └── modules/
└── collection2
├── docs/
├── galaxy.yml
├── plugins/
| ├── filter/
| └── modules/
└── roles/
如果您有不同的仓库结构,或者只想安装一部分集合,您可以将一个片段添加到 URI 的末尾(在可选的逗号分隔版本之前),以指示元数据文件或文件的位置。路径应为目录,而不是元数据文件本身。例如,要仅从具有两个集合的示例仓库安装集合 2:
ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/collection2/
在某些仓库中,主目录对应于命名空间。
namespace/
├── collectionA/
| ├── docs/
| ├── galaxy.yml
| ├── plugins/
| │ ├── README.md
| │ └── modules/
| ├── README.md
| └── roles/
└── collectionB/
├── docs/
├── galaxy.yml
├── plugins/
│ ├── connection/
│ └── modules/
├── README.md
└── roles/
您可以安装此仓库中的所有集合,或从特定提交安装一个集合。
# Install all collections in the namespace
ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/namespace/
# Install an individual collection using a specific commit
ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/namespace/collectionA/,7b60ddc245bc416b72d8ea6ed7b799885110f5e5
配置 ansible-galaxy 客户端
默认情况下,ansible-galaxy 使用 https://galaxy.ansible.com 作为 Galaxy 服务器(如 ansible.cfg 文件中 GALAXY_SERVER 所列)。
您可以使用以下任一选项来配置 ansible-galaxy collection 以使用其他服务器(例如自定义 Galaxy 服务器)。
在 GALAXY_SERVER_LIST 配置选项(位于 配置文件 中)中设置服务器列表。
使用
--server命令行参数限制到单个服务器。
要在 ansible.cfg 中配置 Galaxy 服务器列表:
在
[galaxy]部分下添加server_list选项,其中包含一个或多个服务器名称。为每个服务器名称创建一个新部分。
为每个服务器名称设置
url选项。可选:为每个服务器名称设置 API 令牌。访问 https://galaxy.ansible.com/me/preferences 并单击 显示 API 密钥。
注意
每个服务器名称的 url 选项必须以正斜杠 / 结尾。如果您未在 Galaxy 服务器列表中设置 API 令牌,请使用 --api-key 参数将令牌传递给 ansible-galaxy collection publish 命令。
以下示例显示如何配置多个服务器:
[galaxy]
server_list = my_org_hub, release_galaxy, test_galaxy, my_galaxy_ng
[galaxy_server.my_org_hub]
url=https://automation.my_org/
username=my_user
password=my_pass
[galaxy_server.release_galaxy]
url=https://galaxy.ansible.com/
token=my_token
[galaxy_server.test_galaxy]
url=https://galaxy-dev.ansible.com/
token=my_test_token
[galaxy_server.my_galaxy_ng]
url=http://my_galaxy_ng:8000/api/automation-hub/
auth_url=http://my_keycloak:8080/auth/realms/myco/protocol/openid-connect/token
client_id=galaxy-ng
token=my_keycloak_access_token
注意
您可以使用 --server 命令行参数在 server_list 中选择一个明确的 Galaxy 服务器,此参数的值应与服务器名称匹配。要使用服务器列表中不存在的服务器,请将值设置为访问该服务器的 URL(服务器列表中的所有服务器都将被忽略)。此外,您不能对任何预定义的服务器使用 --api-key 参数。只有在您未定义服务器列表或在 --server 参数中指定 URL 时,才能使用 api_key 参数。
Galaxy 服务器列表配置选项
GALAXY_SERVER_LIST 选项是一个按优先级排序的服务器标识符列表。搜索集合时,安装过程将按此顺序搜索,例如,首先搜索 automation_hub,然后搜索 my_org_hub、release_galaxy,最后搜索 test_galaxy,直到找到集合为止。然后,实际的 Galaxy 实例在 [galaxy_server.{{ id }}] 部分下定义,其中 {{ id }} 是列表中定义的服务器标识符。此部分可以定义以下键:
url:要连接到的 Galaxy 实例的 URL。必需。token:用于针对 Galaxy 实例进行身份验证的 API 令牌密钥。与username互斥。username:用于针对 Galaxy 实例进行基本身份验证的用户名。与token互斥。password:与username结合使用,用于基本身份验证的密码。auth_url:如果使用 SSO 身份验证(例如 galaxyNG),则为 Keycloak 服务器“token_endpoint”的 URL。与username互斥。需要token。validate_certs:是否验证 Galaxy 服务器的 TLS 证书。默认为 True,除非提供--ignore-certs选项或将GALAXY_IGNORE_CERTS配置为 True。client_id:用于身份验证的 Keycloak 令牌的 client_id。需要auth_url和token。默认的client_id是 cloud-services,用于与 Red Hat SSO 协同工作。timeout:等待 Galaxy 服务器响应的最大秒数。
除了在 ansible.cfg 文件中定义这些服务器选项外,您还可以将其定义为环境变量。环境变量的格式为 ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }},其中 {{ id }} 是服务器标识符的大写形式,{{ key }} 是要定义的键。例如,您可以通过设置 ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token 来为 release_galaxy 定义 token。
对于仅使用一个 Galaxy 服务器的操作(例如,publish、info 或 install 命令),ansible-galaxy collection 命令使用 server_list 中的第一个条目,除非您使用 --server 参数传入明确的服务器。
注意
ansible-galaxy 可以搜索其他已配置的 Galaxy 实例上的依赖项,以支持集合可以依赖于另一个 Galaxy 实例中的集合的用例。
删除集合
如果您不再需要某个集合,只需从您的文件系统中删除安装目录即可。路径可能因操作系统而异。
rm -rf ~/.ansible/collections/ansible_collections/community/general
rm -rf ./venv/lib/python3.9/site-packages/ansible_collections/community/general