跳转到主要内容

Ansible与ploy集成的插件。

项目描述

概述

ploy_ansible插件提供Ansible与ploy的集成。它自动构建一个清单并提供了自定义连接插件。

安装

ploy_ansible最好使用easy_install、pip或在buildout中使用zc.recipe.egg进行安装。

命令

插件为ploy添加以下命令。

configure

配置实例。有三种方法指定如何配置实例。通过实例的roles选项应用给定的角色、通过playbook选项设置的playbook或通过在playbooks-directory中找到的实例的唯一名称的playbook。使用roles或playbook是互斥的。如果您指定了一个playbook,并且默认位置也存在一个playbook,您将收到一个警告。

inventory

列出所有已知的组和它们关联的主机,包括常规默认组,如all,以及隐式组,如特定master(即所有ez-instances)的实例。

ansible

运行Ansible命令。这基本上反映了Ansible的ansible脚本。

playbook

应用playbook。这基本上反映了Ansible的ansible-playbook脚本。

vault

管理文件加密。这基本上反映了Ansible的ansible-vault脚本,但通过ploy.conf处理加密密钥源。

vault-key

管理vault密钥。

选项

全局

playbooks-directory

Ansible部分的playbooks-directory选项允许您指定查找playbook、roles、host_vars等的目录。如果您指定了一个相对路径,则它始终相对于ploy.conf目录。如果您有如下结构

project
|-- deployment
| |-- roles
| |-- host_vars
|
|-- etc
  |-- ploy.conf

那么您应该在您的ploy.conf中放入以下内容

[ansible]
playbooks-directory = ../deployment

默认情况下,它设置为ploy.conf所在的目录的父目录,如下所示

project
|-- roles
|-- host_vars
|-- etc
  |-- ploy.conf

vault-password-source

使用keyring库,您可以将Ansible vault的加密密钥存储在您的密钥链中。

vault-password-source选项是您密钥链中使用的id。该id必须在所有必须使用该功能的人中是唯一的,因为它用作密钥链中的标识符。如果有疑问,请使用一个有意义的名称作为前缀,并通过运行python -c "import uuid; print(uuid.uuid4().hex)"来添加一个guid。

如果您想重新加密您的文件,您必须将旧id放入vault-password-old-source选项,并在vault-password-source中设置一个新的id。仅递增数字或附加一个新的guid是最好的。

示例

[ansible]
vault-password-old-source = my-domain-deployment-0da2c8296f744c90a236721486dbd258
vault-password-source = my-domain-deployment-042a98b666ec4e4e8e06de7d42688f3b

您可以使用vault-key命令管理您的密钥。为了与其他开发者轻松交换,您还可以通过使用vault-key exportvault-key import命令来导出和导入密钥。

每个实例

groups

空格分隔的Ansible组名列表,此实例应添加到默认组之外。

roles

由configure命令使用。这允许您通过应用空格分隔的角色来配置实例。这就像创建一个仅指定主机和角色名称列表的playbook。如果设置了sudo选项,它也会设置生成的playbook中的sudo。

playbook

允许您显式指定用于此实例的playbook。如果您需要sudo,那么您必须在那个playbook中自己添加它。

任何以ansible_开头的选项都将原样传递给Ansible。这可以用于设置如ansible_python_interpreter之类的设置。

任何以ansible-开头的选项将去掉ansible-前缀,然后传递给Ansible。这是设置Ansible变量以在playbook和roles中使用的主要方式。

所有其他选项都以前缀ploy_开头,并可供Ansible使用。

Ansible清单

所有在 ploy.conf 中的实例都可以通过它们的 唯一ID 被Ansible访问。

每个实例的变量从 group_varshost_varsploy.conf 中收集。

Ansible查找插件

ploy_crypted 查找插件可以在playbooks中使用,用于读取加密文件的内容。这是访问加密数据的一种方法,您不需要将数据移动到yml文件中。一个额外的优点是,文件只有在实际访问时才会被解密。如果您运行通过标签筛选的任务,而这些任务不访问加密数据,则根本不会解密。

API使用

在Python方面,每个ploy实例都获得了以下方法

apply_playbook(self, playbook, *args, **kwargs)

playbook 应用到实例。

has_playbook

如果实例具有以下任一 roles 或 playbook选项,则返回 True

get_playbook(*args, **kwargs)

返回Ansible内部 PlayBook 类的实例。这可以是来自文件(从 playbook 选项或playbook kwarg),或从 roles 选项动态生成。

configure(*args, **kwargs)

使用与 configure 命令相同的语义配置实例。

get_ansible_variables

返回从清单中获取的Ansible变量。它不包括 fact,因为它没有连接到实例。这在Fabric脚本中特别有用。

get_vault_lib

返回一个可用的Ansible VaultLib类。使用 encryptdecrypt 方法对字符串进行加密/解密。

已知问题

在macOS上使用存储在keyring中的密钥时,Ansible可能会挂起,显示类似于以下的消息:` objc[81450]: +[__NSCFBoolean initialize] may have been in progress in another thread when fork() was called. objc[81450]: +[__NSCFBoolean initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug. ` 这是由尝试在fork进程中访问keyring中的秘密引起的。

为了解决这个问题,您可能需要为受影响的宿主(或仅为“all”group_vars)添加一个加密的host_vars yml,以便在Ansible中早期触发密钥加载。

变更日志

2.0.0 - 2022-08-17

  • 已移除对Python 3.6的支持。[fschulze]

  • 添加了对Python 3.10的支持,使用ansible-core。[fschulze]

  • 恢复ploy_crypted对旧版Ansible版本的支持。[fschulze]

2.0.0b8 - 2021-09-08

  • 永远不要在清单数据中存储Python对象,以修复ansible >= 2.8.x的问题。[fschulze]

2.0.0b7 - 2021-07-16

  • 修复Python 3.x上execnet连接的编码问题。[fschulze]

  • 修复使用keyring在较新macOS上与ansible 2.x一起使用时的挂起问题。[fschulze]

2.0.0b6 - 2020-05-13

  • 支持从Ansible 2.x的vault cat命令切换到 view 命令。[fschulze]

2.0.0b5 - 2019-06-09

  • 此版本支持到Ansible 2.7.x及以下。[fschulze]

  • 恢复对ansible 1.9.x的支持。[fschulze]

  • 支持Python >= 3.5与ansible >= 2.4.x。[fschulze]

  • 将 InventoryManager 中的主机查找改为懒加载,以防止在不相关的主机不可访问时出现错误。[fschulze]

2.0.0b4 - 2018-02-11

  • 修复了对 execnet_connection 的 become/sudo 支持。[fschulze]

  • 修复了剧本发现问题。[fschulze]

2.0.0b3 - 2018-02-10

  • 修复了 ploy_crypted 查找插件。[fschulze]

2.0.0b2 - 2018-02-07

  • 重新添加了 execnet_connection 作为插件。[fschulze]

2.0.0b1 - 2018-02-07

  • 支持 ansible >= 2.4.0 并放弃对旧版本的支持。[fschulze]

  • 支持 ploy 2.0.0。[fschulze]

1.4.1 - 2018-02-11

  • configure 命令失败时返回正确的退出码。[fschulze]

  • 修复了剧本发现问题。[fschulze]

1.4.0 - 2017-12-17

  • 除了 [master-name]-[instance-name].yml,还查找 [instance-name].yml。这允许在多个主服务器上使用相同的剧本。[fschulze]

1.3.2 - 2016-06-02

  • 如果没有定义额外的角色或库路径,则不添加空搜索路径。这可以防止搜索当前工作目录。[fschulze]

1.3.1 - 2015-09-03

  • 将 Ansible 的要求更新到 < 2.dev0。即将推出的 2.0.0 有太多内部更改,无法支持。[fschulze]

  • 在 Inventory 中只添加一次主机。[fschulze]

1.3.0 - 2015-04-10

  • 添加了对实例的 groups 选项的处理,以允许定义额外的 Ansible 组。[fschulze]

  • 按需获取主机变量,而不是在启动时获取。如果您有多个加密的 yml 文件的主机,这将大大加快大多数情况下的速度。[fschulze]

  • 针对 ansible 1.9 的更改的修复。[fschulze]

  • 添加 inventory 命令以列出所有已知组和它们关联的主机。[fschulze]

1.2.4 - 2015-02-28

  • 如果使用 roles 选项,则传递 sudo 设置。[fschulze]

1.2.3 - 2015-02-28

  • 修复了 ansible > 1.6 的 sudo 支持。[fschulze]

  • 在使用未经验证的 ansible 版本时打印警告。[fschulze]

  • 如果未安装 ansible,则要求 >= 1.8,因为这不再违反 buildout 的沙盒。[fschulze]

1.2.2 - 2015-02-18

  • 针对 ansible 1.8 的更改的测试和修复。[fschulze]

1.2.1 - 2015-01-06

  • 将 Ansible 限制在 1.8 之前,因为 > 1.8 会破坏某些功能。[fschulze]

1.2.0 - 2014-10-27

  • 在 inventory 中始终设置 ansible_ssh_user。[fschulze]

  • 在调用原始 Inventory.__init__ 方法后清除主机和模式缓存。[fschulze]

  • --extra-vars 选项添加到 configure 命令中。[witsch (Andreas Zeidler)]

  • 提供 ploy_crypted 查找插件以将加密文件加载到 Ansible 变量中。只有 ascii 和 utf8 编码的文件才能工作。[fschulze]

  • 在 get_ansible_variables 方法中展开 Ansible 变量。[fschulze]

  • 通过 keyring 库支持 Ansible 保险库,以安全地存储密钥,这样您就不必输入它或将其保存在不受保护的文件中。[fschulze]

1.1.0 - 2014-08-13

  • 针对 ansible 1.7 的更改的测试和修复。[fschulze]

  • 将可打印性参数添加到 configure 命令中。[fschulze]

1.0.0 - 2014-07-19

  • 添加了文档。[fschulze]

1.0b8 - 2014-07-15

  • 如果尚未导入,则将 ansible 添加为依赖项。[fschulze]

1.0b7 - 2014-07-08

  • 包装和测试修复。[fschulze]

1.0b6 - 2014-07-04

  • 使用唯一的实例 ID 来避免问题。[fschulze]

  • 将 mr.awsome 重命名为 ploy,将 mr.awsome.ansible 重命名为 ploy_ansible。[fschulze]

1.0b5 - 2014-06-16

  • 如果尚未设置,则将剧本中的用户设置为配置中的用户。[fschulze]

  • 将默认剧本目录从 aws.conf 目录更改为其父目录。[fschulze]

1.0b4 - 2014-06-11

  • 为实例添加了 playbookroles 配置选项。[fschulze]

  • 向实例添加了 has_playbookconfigure 方法。[fschulze]

  • 添加了 before/after_ansible_configure 钩子。[fschulze]

1.0b3 - 2014-06-09

  • 使用 execnet 进行连接。每个主机只有一个 ssh 连接,并且该连接被用于所有命令。[fschulze]

  • 确保 playbook 目录始终是绝对路径。[fschulze]

  • 防止使用持久的 ssh 连接,因为这很容易因为代理而连接到错误的 jail,这使 ansible 目前运行速度变慢。[fschulze]

  • 添加了对 su 和 vault (ansible 1.5) 以及 --force-handlers (ansible 1.6) 的支持。[fschulze]

  • 从安装要求中删除了 ansible。它不会在 buildout 中安装,因此需要在虚拟环境中或通过系统包安装。[fschulze]

1.0b2 - 2014-05-15

  • 添加了 configure 命令,它是 playbook 命令的简化版本,它对 yml 文件的路径位置有假设。[fschulze]

  • 如果请求了不在 playbook 主机列表中配置的主机的 playbook,则发出警告。[fschulze]

  • 允许 mr.awsome 插件添加 ansible 变量。[fschulze]

  • 尽早注入 ansible 路径,因为它们在其他情况下可能不适用。[fschulze]

  • 将 setuptools-git 从 setup.py 移动到 .travis.yml,它只用于发布和测试。[fschulze]

1.0b1 - 2014-03-24

  • 初始发布 [fschulze]

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

ploy_ansible-2.0.0.tar.gz (33.3 kB 查看哈希值)

上传时间

构建分布

ploy_ansible-2.0.0-py2.py3-none-any.whl (31.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持