ansible剧本中的幂等性

我正在使用Ansible playbook配置服务器。我的playbook在第一次执行时正常工作,但当我再次运行同一playbook时,它会在服务器上的配置文件中创建重复的行。 我正在使用lineinfle模块。下面的任务示例在我每次运行playbook时添加该行 - lineinfile: dest=/etc/pam_ldap.conf line="ssl off" 有没有办法避免这种情况,并保持幂等性。理论上lineinfle应该像您预期的那样工作。仅当文件中没有行时才添加行 该文件是一个

ansible剧本角色变量

对ansible来说相当陌生。 拥有以下角色,例如:我的角色-我无法覆盖剧本中的默认变量 以下文件: my-role/tasks/main.yml my-role/defaults/main.yml sample-playbook.yml 我的角色/任务/main.yml - name: "Add Test User" user: name={{ my_config_test_user }} comment="{{ my_config_test_user }}" group={{ my_c

Ansible无法识别组变量

我的主机文件包含如下组: [api_dev:vars] private_key_file=/opt/keys/api_dev.pem 但是当我尝试ping服务器时: ansible api_dev -m ping -vvvv 我发现私钥文件没有被使用 此外,我还尝试在/etc/ansible/group_vars中创建group_var文件,然后指定如下键: --- private_key_file: /opt/keys/api_dev.pem 还是没有运气 我正在查看以下信息: 我错过什

使用Ansible Postgres模块对视图进行授权

我有Postgres 9.4视图,我希望允许选择打开,我执行以下操作 - postgresql_privs: > database={{ services.oos.db }} state=present privs=SELECT,INSERT,UPDATE,DELETE type=view objs=ALL_IN_SCHEMA schema=my_schema roles=my_users sudo_user: postgres tags: [api, customer] 这将导致以下错

Ansible 我可以使用在保险库中加密的ssh密钥吗?

我们有一个ansible服务器设置,ansible代码存储在git repos中。ansible配置的所有服务器当前都使用来自控制服务器的SSH密钥进行访问。但是,我希望将密钥包含在ansible git repos中(在vault中加密)。我想这样做: 1) 如果我们的ansible服务器遭到破坏/出现无法恢复的硬盘故障/其他一些故障,我们就不必在再次运行ansible任务之前生成新的ssh密钥并将其复制到每个ansible服务器 2) 感觉它应该在repos中,因为它是访问服务器的设置/配置

如何使用ansible在特定主机上安装从属角色

我有以下角色/meta/main.yml脚本: --- dependencies: - role: common - role: nginx - role: postgres - role: my_db 我需要在特定主机上安装my_db角色,比如说1.2.3.4。如果您只想安装一个卷,您应该创建一个仅将该角色应用于主机的剧本 - hosts: - 1.2.3.4 roles: - my_db 解决办法是: --- dependencies: -hosts:

Ansible 人工RESTAPI

我是新来的 我正在用Ansible写一本剧本来更新CentOs 7上的人工制品。在我的脚本中,我希望编写一些方法来获得在我的机器上运行Artifactory的版本 有人有办法得到这个吗 我认为这可以通过人工RESTAPI来实现,但如果RESTAPI可以实现的话,我不确定如何实现这一点 如果需要进一步的细节,请随时给我回信 Artifactory REST API方法返回Artifactory版本: GET /api/system/version { "version" : "4.15.0"

Ansible Anisable主机别名不工作

我试图将我的主机列表文件从IP地址重命名为别名,但由于某些原因,当我运行我的playbooks时,我得到了以下错误 致命:[测试]:失败!=>{“changed”:false,“failed”:true,“msg”:“无法打开shell。请参阅:”,“rc”:255} 以下是主机文件中别名的示例 test ansible_ssh_host=192.168.1.1 我使用的是ansible 2.3.0版 下面是调试的输出。在调试中,我将主机命名为BWS_DRUN_1921 14580 15035

ansible lineinfile:如果整个文件中没有行,则在特定位置添加行

我正在尝试创建一个剧本,如果文件中完全没有一行,它会在特定的位置向文件中添加一行,但是如果该行存在于任何地方,它就根本不会被添加 例如,如果我要添加的行是“bar”,并且我要在“foo”之后添加的行,我可能有3个文件: file1 foo bar baz 文件2 foo baz file3 foo baz bar 在file2中,将在“foo”之后添加“bar”。但是,file1和file3中已经存在“bar”,因此不应添加它,即使在file3中,它不是紧跟在“foo”之后 我试过这个:

将变量括在双引号Ansible中(gcdns_record TXT record_data)

当我这样设置我的记录\u数据时: 记录数据:{{some var}} 我得到这个错误消息TXT记录数据必须用双引号括起来,得到:CQ5fc59u-izwcu8\u PlI2HlvfUT73bH2VnMU\u jW3B5hY 正常,因为文档中说TXT记录的单个字符串记录数据必须用双引号括起来,请参见 所以我试过这个 记录数据:{{some var}}} 任务执行得很好,没有错误,但我没有成功。我得到了这样的结果,因为记录数据是某个变量的实际值 所以我的问题是,我怎样才能把变量值用双引号括起来 或者

Ansible 将角色标记与_项一起应用于include指令时被忽略

因此,我遇到了一个奇怪的问题,ansible无法在角色中执行一些标记的include任务 经过一番挖掘后,似乎只要包含项与项关联,运行指定任务的能力就会中断 例如,我的简单角色包含: role/tasks/main.yml --- - include: test.yml tags: - my_role_test role/tasks/test.yml --- - debug: msg: "It works" 当我使用--tags=my_role_test运行我的剧本时,

Ansible异步任务收集结果:找不到作业

我试着发射,忘记一些任务,然后收集结果。这是我的剧本: --- - hosts: node2 gather_facts: yes tasks: - name: 'Some long script no 1 on node2' shell: "time sleep $[ ( $RANDOM % 20 ) + 20 ]s" async: 40 poll: 0 register: script1 - name: 'Ano

仅打印失败的任务-Ansible

我创建了一个Ansible playbook,它只检查与特定端口上的目标主机的连接。 这是我的剧本 - name: ACL check to target machines. hosts: all gather_facts: False vars: target_hosts: - server1 18089 - server1 8089 - server1 18000 tasks: - name: execute the

Ansible 访问自定义模块中预定义的可扩展模块

有人可以发布一个关于如何在自定义模块中使用预定义ansible模块示例-“git模块”的示例吗 我试图将以下任务转换为单个自定义模块- - name : clone repo on remote hosts git : repo : {{ git_repo_src }} dest : {{ git_repo_dest }} - name : fetch template from single remote host run_once : true fet

ansible打印语句中的If-else

我想要一些关于具有多个条件的打印语句语法的帮助。当前,“{{inventory\u hostname}}”的引号会导致错误,如果我删除引号,playbook会运行,但会列出文本inventory\u hostname,而不是变量。我想知道如何打印变量,以及if-else语句中的语法是否良好 - debug: msg: "{{ 'LTE status on '{{inventory_hostname}}' is good to go!' if output.stdout | join('

Ansible 从“tasks/alternate.yml”而不是“tasks/main.yml”启动角色

我有一个大型剧本,它使用多个角色来设置新服务器。我想重复使用剧本,但在退役阶段,而不是调用role\u name/tasks/main.yml并有很多when:语句,我想告诉Ansible调用该角色,但从role\u name/tasks/decommission.yml开始 作为第一个测试,我将main.yml文件设置为: - name: "Provisioning new server" block: - name: "Include the provisioning st

文件中的Ansible循环项

我有一个filea_file.txt,如下所示: 22 23 8080 --- - hosts: host1 tasks: - name: Remote hostname shell: hostname register: hostname - name: Read items from a_file.txt shell: cat a_file.txt register: item_output - name: R

从AWS机密管理器查找机密| Ansible

使用地形代码,我在AWS机密管理器中创建了其他类型的机密。 我需要在Ansible代码中使用这些AWS机密。我在下面找到了这个链接,但我无法继续 我有以下可翻译代码:- database.yml - name: Airflow | DB | Create MySQL DB mysql_db: login_user: "{{ mysql_user }}" # login_password: "{{ mysql_root_password }}" login_passwo

Ansible:仅从git repo克隆一个文件

是否可以使用git ansible module从git中克隆一个文件?据我所知,ansible的git归档文件似乎只在本地克隆的repo中工作 目前我使用的是: - name: Bring file from git shell: git archive --remote=git://git.example.com/project.git HEAD:{{ test }} filename | tar -x -C folder1 -s /filename/filename_{{

Ansible 可解析条件查找

我有一个剧本,其中的任务如下所示。push_config和import_consul都未传递,因此默认情况下为false - name: checkout config-tibco repository git: repo: ssh://git@bitbucket.corp.contingo.com:7999/gwa/config-tibco.git dest: "/opt/awx/tmp/config-tibco/" when: "{

Ansible::[警告]:模块未设置更新密码的\u日志

我正在尝试使用terraform和ansible脚本创建rabbitmq节点,其他脚本正在成功执行,但我在运行此脚本时遇到一个警告,即在rabbitmq节点中添加用户 [警告]:模块没有为更新密码设置任何日志 failed: [rabbit-node1] (item=admin) => { "ansible_loop_var": "item", "changed": false, "cmd": "/usr/sbin/rabbitmqctl -q -n rabbi

从java运行ansible playbook

有没有一种方法可以从java执行ansible playbook。你能帮我参考一下吗?找不到任何好的教程。最简单的方法是使用ProcessBuilder运行命令: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class AnsibleServive { public static void main(String[] args) {

Ansible 当语句未给出预期结果时可执行

我有一个收集ec2_信息的剧本,我想根据when语句的条件检查结果向控制台显示用户信息。在我的剧本中,条件不起作用时的。我如何实现任务以确保正确的when语句结果 -hosts:localhost 收集事实:错误 任务: -名称:ec2实例信息 ec2_实例_信息: aws_访问密钥:“{{aws_访问密钥{u ID}” aws_secret_key:“{{aws_secret_ACCESS_key}” aws_地区:“{{aws_地区}}” 寄存器:结果 -名称:显示ec2信息 调试: 味精:

Ansible:如何从列表中连接词典的属性?

假设我有以下列表: hosts: - {"ip": "1.2.3.4", "hostname": "www.example.com"} - {"ip": "42.42.42.42", "hostname": "www.wikipedia.com"} 我希望获得如下字符串(将其放入模板): 这与我使用hosts | join(',

Ansible:命令行选项';d';[from-d]与其他选项结合使用时不理解

更新:尽管此Q被标记为打字错误(因此“对用户不太有用”),但问题实际上是需要使用正确的ansible模块shell,而不是命令模块 我希望有人能告诉我哪里出了问题,我猜这与命令行中的语法或转义或字符有关(尽管我尝试用cut替换awk(带卷发),但没有运气),这导致了以下错误: “stderr”:“\u001b[1;31mE:\u001b[0m命令行选项“F”[from-F,]与其他选项组合使用时无法理解。\u001b[0m” 基本上,在我创建的角色中,我想动态地存储一个列表,列出碰巧安装的gno

Ansible 作业模板AWX

我有一个这样的剧本,我试图在ansible awx中作为作业模板运行它,但得到了一个回溯(最近一次调用):\n File\“/root/.ansible/tmp/ansible-tmp-1609214869.41401-6813-56941014390086/rhv snapshots.py\”,第4行,在prettytable导入prettytable\nModuleNotFoundError中:没有名为“prettytable”的模块error,它使用ansible CLI工作,但在awx中

Ansible 如何检查包含列表中所有值的字符串?

我试图通过将cluster\u status命令输出作为一个变量,然后查看输出是否包含该组的所有主机,来验证rabbitmq集群状态。如果有主机丢失,请退出 如何检查一个字符串(命令\u输出)是否包含列表(组\u主机)中的所有值 我的代码: -名称:检查群集状态 命令:rabbitmqctl cluster_status 寄存器:群集状态 更改时间:false 输出: “stdout”:“节点的群集状态”rabbit@ip-127.0.0.1…\n[{节点,[{磁盘,['rabbit@ip-1

Ansible 用于初始连接的授权密钥模块

是ansible的授权密钥模块,可用于将主机的ssh密钥复制到新的远程用户?ansible完全通过ssh。因此,您也必须使用ssh来设置ssh。至少,您需要一个正在运行的ssh守护程序和一个可以使用密码访问主机的用户 然后,您可以使用-k(或-ask pass,请求SSH密码)、-k(或-ask sudo pass,请求sudo密码)和-u(或-user,作为此用户连接)访问主机 假设您有一个foo用户可以在远程计算机上使用ssh和sudo,并且您希望安装一些ssh公钥以root身份登录,您可以

Ansible-文件查找中的环境变量

我有一个ansible任务,可以将密钥从本地用户复制到远程计算机: authorized_key: user=deployer key="{{ lookup('file', '/home/my_user/.ssh/id_rsa.pub') }}" 我想使用用户变量,而不是我的用户。环境变量(即查找('env','DEPLOY\u KEY\u PATH')或实际上任何变量 是否可能?要获取当前用户密钥,您当然可以使用~别名。这将起作用: authorized_key: state=present

使用Ansible在VCenter server上创建文件夹 问题陈述: 给定文件夹名称,请检查它是否存在于VCenter Server上,如果不存在,请创建相同的文件夹名称 从此文件夹下的模板克隆VM

例如,我想克隆“管理员桌面”下的VM,如下图所示: 下面的脚本正在从指定模板克隆VM,并将VM放置到指定文件夹中。但在VCenter服务器上不存在该文件夹时失败: 需要帮助使此脚本灵活,以便当文件夹不存在时,它应创建所述文件夹,然后在此文件夹下克隆VM。您可以使用此Ansible模块在vsphere中创建文件夹: #!/usr/bin/python # -*- coding: utf-8 -*- DOCUMENTATION = ''' --- author: "Shashank Awasth

在旧系统上使用ansible更改密码

我需要为超过100个系统的用户更改密码。我想和ansible一起做这件事。这很容易。但是ansible上的用户模块需要哈希密码。我很担心,因为有一些较旧的主机可能不支持较新类型的散列。我希望能够以编程方式识别可用的密码哈希算法,并使用适当的密码哈希进行更改。或者有没有更好的方法来处理整个销售 我曾考虑过以下几点: echo username:password | chpasswd 并使用命令模块运行它。应该使用默认算法。这种方法有什么问题吗?在我看来,理想的方法是计算每台机器支持的哈希值,然后

在ansible中调用角色时如何使用Been?

在ansible中使用角色时,您如何成为用户 例如,如何使用ansible galaxy的geerlingguy.nodejs角色将nodejs安装为root用户?以下是我所拥有的相关部分: roles: - geerlingguy.nodejs become: yes 但这会产生错误!在YAML文件上加载YAML时出现语法错误。我终于找到了一个解决方案,回想起来,从 这也可以写成: roles: - { role: geerlingguy.nodejs, become:

如何从ansible playbook获取命令

有没有一种简单的方法可以让ansible脚本(playbook)恢复它的功能 我有 -名称:安装所需的软件包 yum:name={{item}}state=present 有以下项目: -nmp 变成:真的 我想得到: sudo yum install nmp 也就是说,我想知道ansible正在运行什么命令(操作系统级)。 基本上,我需要一个相反的过程:在这里总结上面评论的中心点 Ansible很少运行外部命令,它主要是用于控制主机的Python代码和Python库。因此,Ansible的

当使用变量插值时,Ansible

从我在网上找到的资料来看,Ansible在jinja模板方面不太支持varibale内置 不过,我相信Ansible的高级人员已经为我下面的问题找到了解决办法 我想在station时将变量“插入”到。 i、 e.when:Disabled in(智能链接状态.结果[项目[0]].标准输出) 这是我的剧本: - name: "Get Smart Link status" shell: "{{ssh_command}} show network {{network_name}}_

Ansible Vsts&;ansibe连续积分流

我正在从事一个使用ansible进行部署的项目,我想用VST创建持续集成流 我已经创建了一个shell脚本: apt-get install software-properties-common apt-add-repository ppa:ansible/ansible apt-get update apt-get install ansible if [ -z "$1" ]; then echo "usage: $0 [target [tag [playbook]]]" echo

使用jinja2(ansible)从列表生成对

我正在尝试从ansible中的主机列表生成一对主机 我有以下清单 [webs] test test2 test3 test4 test5 如何生成主机对,例如test和test2、test3和test4、test5和test(从第一个开始重复) 我尝试过像批处理、切片和带有_项的过滤器,但似乎不起作用 有没有一种简单的方法可以在ansible中生成这些对?您可以进一步优化它 tasks: - set_fact: total_hosts={{groups['webs'] | length

Ansible打印创建的主机

我写了一本Ansible剧本,创建了多个虚拟机。剧本分成两个文件。Main.yaml和vars.yaml。它正在创建虚拟机,而且似乎工作得很好。我没有收到任何错误,所以我假设它成功地将创建的主机添加到资源清册中。我想检查是否已将创建的主机添加到资源清册中。如何打印/列出清单的主机?我的目标是在稍后阶段在创建的VM上运行脚本。谢谢 **Main.yaml** #########CREATING VM######### --- - hosts: localhost vars: http_

Ansible 使用值列表更新用户dict

Ansible 2.7,服务器和目标运行ubuntu 在我的剧本中,我有一个用户目录: ok: [virtual_tournesol] => { "users": [ { "key": "toto", "value": [ "toto", "/home/toto/.ssh/id_rsa" ] }, { "key": "riri", "val

Ansible 在playbook中执行多个任务时,如何将每个输出存储在一个文件中?

如何在playbook中执行多个任务时将每个输出存储在一个文件中? 1.我想将每个输出存储在一个文件中 2.在剧本中也有不同的任务。 3.我希望以增量方式存储playbook执行的输出 将每个任务输出存储到变量,然后写入文件。 只是在下面给出一个想法,没有经过测试 - name: Task1 ... register: task_output1 - name: Task2 ... register: task_output2 - name: Write to file cop

Ansible 在playbook中转换为python格式的json字符串

我想在主机上启动多个返回json的python脚本,最后得到一个json摘要: {'server1': {script1_label: { stdout }, script2_label: { stdout } }, 'server2': {script1_label: { stdout }, script2_label: { stdout } }, } stdout是每个python脚本

在没有本地ssh守护程序的主机上执行Ansible本地\u操作

如果Ansible控制服务器没有运行SSH守护程序,如何在该控制服务器上运行本地命令 如果我运行以下剧本: - name: Test commands hosts: localhost connection: local gather_facts: false tasks: - name: Test local action local_action: command echo "hello world" 我得到以下错误: fatal:[localhost]

Ansible 负责人角色/剧本结构

我们正在考虑使用AWX/Tower自动运行playbook,以执行初始配置,并确保库存中每个主机上的状态持续不变。这将通过两种方式实现自动化(不同的触发器): 机器设置完成后(由Foreman或Cobbler)的初始回调,即对AWX进行API调用(回调),以针对主机运行剧本并将其配置为可用 每个主机定期(可能每晚)运行playbook以确保状态 主机目前根据其预期用途进行分组,例如,我们有“基本”服务器、web服务器、samba服务器、台式机和许多其他服务器 对于任何给定类型/组的主机,我们希望

使用ansible按顺序赋值

我想按顺序给变量赋值。第一次运行playbook时,我想将103分配给一个变量,下一次应该是104。我还需要确保指定的值不在列表中 变量: list1: - 100 - 101 - 102 val: 100 剧本: - name: Set fact set_fact: val: "{{ val | int + 1 }}" until: val not in list1 它尝试了三次,失败了,错误如下 失败-重试:设置xxx(剩

Ansible从剧本中应用标记(非命令行)

我运行playbooka.yaml,在a.yaml中,我想包含b.yaml中的一个或多个任务 首先,我尝试在a.yaml上添加以下内容: import_playbook: b.yaml --tags "tag1" - include_tasks: file: b.yaml apply: tags: tag1 - shell: echo $HOSTNAME register: hostname tags: tag1 - debug:

当条件超过循环时在ansible中搜索字符串

团队,我只想在sda设备上循环,不包括loop设备,所以我试图比较字符串的一部分,如果它存在于ansible_设备项变量的键中,并且卡在语法错误处 我只想在满足条件时在上打印消息。基本上,我只想在键中有子字符串loop时打印msg 我有下面的示例输出,我能够检索到它,但现在我想将它与一些字符串进行比较,但是失败了,如任务中标记的#fails values.yml loop_device: "loop" task.yaml debug: msg: "{{

上一页 1 2  3   4   5   6    7   8   9  ... 下一页 最后一页 共 192 页