Ansible是一个模型驱动的配置管理,多节点部署/编排和远程任务执行系统。默认情况下使用SSH,因此您管理的节点上不会安装任何特殊软件。 Ansible可以用任何语言扩展。
使用 ansible playbook、Linux 客户端和主机节点安装自制程序时遇到问题
故事 我正在尝试通过我的剧本将自制程序安装到 Linux ubuntu 主机节点上,但无法弄清楚。我尝试了几种变体,但每一种都失败了。 尝试 尝试一 为了完整性
使用 Ansible 创建空文件的最简单方法是什么?我知道我可以将一个空文件保存到文件目录中,然后将其复制到远程主机,但我发现这有些不令人满意。
使用 Ansible,我需要从多个文件中提取内容。对于一个文件,我使用 slurp 并注册了一个变量。 - 名称:从 .conf 文件中提取名称服务器 啜饮: 源代码:/opt/test/roles/
带有 usera 的 Ansible playbook 需要使用任务服务来用 userb 重新启动 myservice
在我的 Ansible 脚本中使用我的用户执行,我需要使用非 root 用户 activemq 重新启动服务 activemq。 - 名称:充电服务或 ACTIVEMQ 配置发生变化。 服务: 呐...
Kubespray 和 Ansible,如何分离配置(即清单和其他配置文件)
首先,我是一个完全的 ansible playbook 菜鸟。我正忙着试图了解我工作场所的集群。我尝试遵循自述文件的快速入门指南,同时也遵循我的公司 kubespray f...
Ansible (2.9) playbook 使用哪个 YAML 版本?
为什么选择 YAML 1.2 根据 Ansible 文档文章 YAML 语法: 允许的转义列表可以在 YAML 规范中的“转义序列”(YAML 1.1) 或“转义字符”(YAML 1.2...
我正在使用https://docs.ansible.com/ansible/3/collections/ansible/netcommon/telnet_module.html 这是我的剧本: --- - 主机:本地主机 连接:本地 收集事实:否 变量:
如何使用 XML 模块在 Ansible 中删除 XML 文件中的某些节点?
我尝试从 activemq.xml 配置文件中删除一些节点。在此文件中,我想删除除 tcp 之外的所有连接。 我尝试从 activemq.xml 配置文件中删除一些节点。在这个文件中,我想删除除 tcp 之外的所有连接。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> ... <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> ... <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> ... </broker> </beans> 我使用 Ansible community.general.xml 模块 - name: Désactiver les autres protocoles de publication de message xml: path: /mypath/activemq-modif.xml xpath: "/ns:beans/broker:broker/broker:transportConnectors/broker:transportConnector[@name!='openwire']/*" state: absent namespaces: ns: http://www.springframework.org/schema/beans broker: http://activemq.apache.org/schema/core 当我运行剧本时,没有错误,但文件没有改变。 如果我按照模块文档示例中的说明删除 /*,则会出现错误 fatal: [localhost]: FAILED! => {"changed": false, "msg": "Couldn't delete xpath target: /ns:beans/broker:broker/broker:transportConnectors/broker:transportConnector[@name!='openwire'] (module 'lxml.etree' has no attribute '_ElementStringResult')"} 如何删除(或评论)除 transportConnector 之外的所有 openwire 节点? ansible-playbook [core 2.15.13] config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.9/site-packages/ansible ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections executable location = /usr/local/bin/ansible-playbook python version = 3.9.18 (main, Oct 4 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3) jinja version = 3.1.4 libyaml = True Package Version ------------------- -------- ansible 8.7.0 lxml 5.3.0 好的,我已经检查了模块代码xml.py。在第 435 行,一条评论提到了 lxml 5.1.1 删除了etree._ElementStringResult,所以我们不能再简单地假设它在那里 如果我将lxml降级到5.1.0,脚本就可以并且文档按照我的意愿进行更改! 似乎 Ansible xml 模块 在 5.1.0 版本之后无法再正确使用 lxml。所以我为此在 Github 上打开了一个问题。 谢谢。 这是基于 XSLT 的解决方案,它利用所谓的“身份转换”模式。 输入XML <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">... <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans> XSLT <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns2="http://activemq.apache.org/schema/core"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <!--Identity transform--> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="ns2:transportConnector[not(starts-with(@uri,'tcp:'))]"/> </xsl:stylesheet> 输出XML <beans xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <broker xmlns="http://activemq.apache.org/schema/core" dataDirectory="${activemq.data}" brokerName="localhost"> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans> 基于 如何在 Ansible 中过滤 XML 属性? 和 如何用 Ansible 替换 XML 元素的文本?,一个带有 activemq.xml 的最小示例 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans> 和剧本xml.yml--- - hosts: localhost become: false gather_facts: false vars: XML: "{{ lookup('file', 'activemq.xml') }}" tasks: - name: Convert XML to YML set_fact: YML: "{{ XML | ansible.utils.from_xml }}" - name: Show content debug: msg: "{{ YML }}" # Drop all transportConnector except the first in list - name: Update path ansible.utils.update_fact: updates: - path: "YML.beans.broker.transportConnectors.transportConnector" value: "{{ YML.beans.broker.transportConnectors.transportConnector[0] }}" register: updated - name: Show updated content debug: msg: "{{ updated.YML | ansible.utils.to_xml }}" - name: Write out XML file copy: dest: updated.activemq.xml content: "{{ updated.YML | ansible.utils.to_xml }}" 将生成一个 updated.activemq.xml 文件<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <transportConnectors> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"></transportConnector> </transportConnectors> </broker> </beans> 这是因为xml模块需要 在执行此模块的主机上。 lxml >= 2.3.0 并且依赖于它,而 from_xml 过滤器 则不依赖于它。 如果您喜欢从列表中选择一个特定的项目值,例如按名称 - name: Show 'openwire' from transportConnectors debug: msg: "{{ YML.beans.broker.transportConnectors.transportConnector | selectattr('@name', '==', 'openwire') }}" 更新可以通过完成 # Drop all transportConnector except with name 'openwire' - name: Update path ansible.utils.update_fact: updates: - path: "YML.beans.broker.transportConnectors.transportConnector" value: "{{ YML.beans.broker.transportConnectors.transportConnector | selectattr('@name', '==', 'openwire') }}" register: updated
在 ansible 的 python 脚本上使用 runuser
我有一个 python 脚本对 SAP HANA 数据库进行特定检查。当我从操作系统执行脚本时,一切正常。但是当我从 Ansible 执行它时,脚本在尝试时会挂起......
我尝试从 activemq.xml 配置文件中删除一些节点。在此文件中,我想删除除 tcp 之外的所有连接 我尝试从 activemq.xml 配置文件中删除一些节点。在这个文件中,我想删除除 tcp 之外的所有连接 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> ... <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> ... <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> ... </broker> </beans> 我使用ansible xml社区通用模块 - name: Désactiver les autres protocoles de publication de message xml: path: /mypath/activemq-modif.xml xpath: "/ns:beans/broker:broker/broker:transportConnectors/broker:transportConnector[@name!='openwire']/*" state: absent namespaces: ns: http://www.springframework.org/schema/beans broker: http://activemq.apache.org/schema/core 当我运行剧本时,没有错误,但文件没有改变。 如果我按照模块文档示例中的说明删除“/*”,则会出现错误 fatal: [localhost]: FAILED! => {"changed": false, "msg": "Couldn't delete xpath target: /ns:beans/broker:broker/broker:transportConnectors/broker:transportConnector[@name!='openwire'] (module 'lxml.etree' has no attribute '_ElementStringResult')"} 如何删除(或注释)除“openwire”之外的所有 TransportConnector 节点? ansible-playbook [core 2.15.13] config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.9/site-packages/ansible ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections executable location = /usr/local/bin/ansible-playbook python version = 3.9.18 (main, Oct 4 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3) jinja version = 3.1.4 libyaml = True Package Version ------------------- -------- ansible 8.7.0 lxml 5.3.0 这是基于 XSLT 的解决方案,它利用所谓的“身份转换”模式。 输入XML <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">... <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans> XSLT <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns2="http://activemq.apache.org/schema/core"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <!--Identity transform--> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="ns2:transportConnector[not(starts-with(@uri,'tcp:'))]"/> </xsl:stylesheet> 输出XML <beans xmlns="http://www.springframework.org/schema/beans" default-lazy-init="default" default-merge="default" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-autowire="default"> <broker xmlns="http://activemq.apache.org/schema/core" dataDirectory="${activemq.data}" brokerName="localhost"> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans>
`lineinfile` 和 `blockinfile` 总是重复行
我正在尝试使用 ansible 在 Proxmox 服务器上的 LXC 容器的配置文件中添加两行。 我使用了 blockinfile 和 lineinfile 来实现这一点,并且它有效,但随后
场景一: 使用 ansible ssh 进入 csr1000v 路由器。 Jenkins 返回 ssh 连接失败。 场景2: 部署容器 csr1000v 后,我手动 ssh 进入其中并保存指纹...
ansible 正则表达式用于搜索并附加 ip 作为容器镜像的注册表主机
我们正在尝试通过将 IP 地址 (10.20.30.40/) 动态附加到图像 URL 来更新 Kubernetes YAML 清单中的 image: 字段,某些情况除外。具体来说,我们有三个
我尝试为 redis/sentinel 编写一个 ansible 角色,但陷入了困境: 由于哨兵写入创建配置重写,因此配置总是会更改,而触发总是会更改 出路可能是...
我正在编写一个角色,用户可以向其传递列表。在该角色中,我想有条件地将项目添加到此列表中,然后再在我的角色中处理它。角色变量称为 my_list。是
如何为远程 Windows 主机设置 Ansible python 解释器?
Ansible 无法在我的远程 Windows 主机上找到 python 解释器。为了尽量避免这个问题,我想动态地告诉 Ansible 远程主机上的解释器在哪里。 这是代码...
Ansible 在expect/command 块中引用了heredoc,在expect 命令中找不到分隔符/多行命令
我正在尝试生成一个脚本,通过 ssh 将其复制到 ansible 期望/响应块中到远程主机。我想避免编写中间文件。 我有两个问题: Ansible 似乎可以...
使用 Consul KV store 获取库存详细信息,可以吗?
是否可以在运行时使用Consul的KV信息来填充库存? 我想在运行 ansible-playbooks 来填充库存时从 Consul 提取 KV 信息...
我有点处于谷歌的尽头。我看不出为什么我会收到“条件检查‘XYZ.results[item] is success’失败。错误是:‘失败’测试需要字典”....