Ansible是一个模型驱动的配置管理,多节点部署/编排和远程任务执行系统。默认情况下使用SSH,因此您管理的节点上不会安装任何特殊软件。 Ansible可以用任何语言扩展。
我有以下任务 - 名称:“PATCH| 1.5.2 | 确保设置引导加载程序密码” ansible.builtin.expect: 命令:grub2-setpassword 回应: 输入密码:“{{
Ansible playbook 需要很长时间才能执行 Oracle DB 查询
我正在编写一个剧本,将从 Oracle 数据库中选择所有用户。我采用了本文中所示的方法。 这是整个剧本 --- - 名称:收集所有用户详细信息并保存到...
当我使用此命令和额外变量执行 ansible playbook 时 ansible-playbookcontroller_config/windows_domain_names.yml -e“target_win_host=testserver.testdomain.com” 只完成一项任务
当我使用此命令和额外变量执行 ansible playbook 时 ansible-playbookcontroller_config/windows_domain_names.yml -e“target_win_host=testserver.testdomain.com” 只完成一项任务
我最近刚刚开始使用 Ansible。我正在尝试在使用 terraform 连接的 azure VM 上安装 4 个磁盘。每个磁盘都传递了一个 LUN 号,我正在获取设备名称(...
我正在按以下方式运行 ansible 剧本: 创建了一个 docker 镜像 来自 php:8.1.28-apache-bookworm 运行 apt install -y python3 \ && ln -s /usr/bin/python3 /usr/bin/python 开始...
在虚拟机管理程序上运行时,我们如何限制“虚拟机”上的 ansible?
我是 Ansible 的新手,我正在尝试弄清楚如何使用 --limit 参数,但对于特定的虚拟机而不是虚拟机管理程序/主机本身。 我解释一下自己:我在
我有以下 Ansible 剧本: - 主持人: 成为:真实 变量: 目标目录: 角色: - {角色:'',标签:''} 所谓的 con... 我有以下 Ansible 剧本: - hosts: <host> become: true vars: dest_dir: <dir> roles: - {role: '<role>', tags: '<tag>'} 被调用的<role>由单个任务文件组成: - name: Copy and check file. block: - name: Copy ansible.builtin.copy: src: <source file> dest: "{{dest_dir}}" mode: 0666 owner: root group: root backup: true register: copy_result - name: Print result ansible.builtin.debug: var: copy_result - name: Validate ansible.builtin.shell: <script> 1 when: copy_result is changed rescue: - name: Revert ansible.builtin.copy: remote_src: true src: "{{copy_result.backup_file}}" dest: "{{dest_dir}}" when: copy_result.backup_file is defined 被调用的 <script> 是一个虚拟的,只是以与提供的参数匹配的退出代码退出: exit $1 (此代码基于 Ansible 常见问题解答 https://docs.ansible.com/ansible/devel/reference_appendices/faq.html#the-validate-option-is-not-enough-for-my-needs -我做什么。) 如果我在目标文件已经存在但与源文件内容不同时运行此命令,Ansible 会正确地将源文件复制到目标,并且我希望“验证”节会导致“救援”块,然后被调用,这应该“回滚”文件副本。 然而,“救援”块没有被调用;相反,剧本会从“验证”节中中止,并显示以下消息: TASK [<task> : Validate] ****************************************************** fatal: [<host>]: FAILED! => {"changed": true, "cmd": "<script> 1", "delta": "0:00:00.010525", "end": "2024-09-17 10:49:23.559180", "msg": "non-zero return code", "rc": 1, "start": "2024-09-17 10:49:23.548655", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} 然后进入调试器。 我确实想知道“rescue”块的“when”参数是否有问题,但将其注释掉会导致相同的行为。 任何人都可以找出我在这里做错了什么吗? 首先,请注意 ansible.builtin.copy 模块有一个 validate 选项。使用它,您可以像这样重写您的剧本: - hosts: localhost gather_facts: false vars: dest_dir: /tmp tasks: - name: Copy ansible.builtin.copy: src: testfile dest: "{{dest_dir}}/testfile" mode: 0666 owner: root group: root backup: true validate: sh -c 'exit 1' %s 您可以用更少的代码有效地获得相同的行为。 关于您的问题,我无法重现您显示的错误。您没有在问题中提供,因此我制作了以下最小的、可重现的示例: - hosts: localhost gather_facts: false vars: dest_dir: /tmp tasks: - block: - name: Copy ansible.builtin.copy: src: testfile dest: "{{dest_dir}}" mode: 0666 owner: root group: root backup: true register: copy_result - name: Print result ansible.builtin.debug: var: copy_result - name: Validate ansible.builtin.shell: "exit 1" when: copy_result is changed rescue: - name: Revert ansible.builtin.copy: remote_src: true src: "{{copy_result.backup_file}}" dest: "{{dest_dir}}" when: copy_result.backup_file is defined 运行此命令会产生(我使用 unixy stdout 回调来减少输出): - localhost on hosts: localhost - Copy... localhost done Print result... localhost ok: { "changed": false, "copy_result": { "backup_file": "/tmp/testfile.893626.2024-09-17@07:11:55~", "changed": true, "checksum": "22596363b3de40b06f981fb85d82312e8c0ed511", "dest": "/tmp/testfile", "diff": [], "failed": false, "gid": 0, "group": "root", "md5sum": "6f5902ac237024bdd0c176cb93063dc4", "mode": "0666", "owner": "root", "secontext": "unconfined_u:object_r:user_tmp_t:s0", "size": 12, "src": "/home/lars/.ansible/tmp/ansible-tmp-1726571514.9080791-893587-119392786896945/.source", "state": "file", "uid": 0 } } Validate... localhost failed | msg: non-zero return code Revert... localhost ok - Play recap - localhost : ok=3 changed=1 unreachable=0 failed=0 rescued=1 ignored=0 我们可以清楚地看到“Revert”任务正在运行。但是,请注意“恢复”任务不会执行您想要的操作。在上面的例子中,我们的目标文件是/tmp/testfile,这意味着备份文件的名称类似于/tmp/testfile.893626.2024-09-17@07:11:55~。这使得“恢复”任务相当于: - name: Revert ansible.builtin.copy: remote_src: true src: "/tmp/testfile.893626.2024-09-17@07:11:55~" dest: "/tmp" when: copy_result.backup_file is defined 这是一个禁止操作;您正在将备份文件复制到其自身上。如果要替换目标文件,则需要在 dest 参数中提供明确的文件名,而不是目录;这将使剧本看起来像这样: - hosts: localhost gather_facts: false vars: dest_dir: /tmp tasks: - block: - name: Copy ansible.builtin.copy: src: testfile dest: "{{dest_dir}}/testfile" mode: 0666 owner: root group: root backup: true register: copy_result - name: Print result ansible.builtin.debug: var: copy_result - name: Validate ansible.builtin.shell: "exit 1" when: copy_result is changed rescue: - name: Revert ansible.builtin.copy: remote_src: true src: "{{copy_result.backup_file}}" dest: "{{dest_dir}}/testfile" when: copy_result.backup_file is defined 当“验证”任务失败时,运行成功恢复文件。
我有一本经常使用的剧本,其中有一个简单的第一个任务:嗯,突然间,自从我升级了 MacOSX 后,yum 模块就停止工作了 例子: -名称:安装git 变成:是 嗯: ...
我正在努力使用 Ansible lineinfile 模块。根据文档,它应该替换输入文件中的第一个匹配项。但当我尝试各种选项时,在我的输入中我总是得到最后的结果...
我想强制将特定文件中的文本块从“global”替换为“/global”。 例如: 从: 一些数据... 一些数据... 一些数据... 127.0.0.1 我想强制将特定文件中的文本块从“global”替换为“/global”。 例如: 来自: SOME DATA... SOME DATA... SOME DATA... <global> <white_list>127.0.0.1</white_list> <white_list>::1</white_list> <white_list>^localhost.localdomain$</white_list> </global> SOME DATA... SOME DATA... SOME DATA... 致: SOME DATA... SOME DATA... SOME DATA... <global> <white_list>127.0.0.1</white_list> <white_list>::1</white_list> <white_list>^localhost.localdomain$</white_list> <white_list>{{ white_root_vpn }}</white_list> <white_list>{{ white_static1 }}</white_list> </global> SOME DATA... SOME DATA... SOME DATA... 你知道如何做到这一点吗? 看看 blockinfile 模块。 此模块将插入/更新/删除由可自定义标记线包围的多行文本块。 你会这样使用它: - ansible.builtin.blockinfile: path: /path/to/file marker: "{mark}" marker_begin: "<global>" marker_end: "</global>" block: |- <white_list>127.0.0.1</white_list> <white_list>::1</white_list> <white_list>^localhost.localdomain$</white_list> <white_list>{{ white_root_vpn }}</white_list> <white_list>{{ white_static1 }}</white_list> state: present
我的目录结构是这样的 $ 树 ├── Vagrantfile ├── 文件 │ ├── cmake │ ├── pip-requirements.txt │ └── 简介 └── 任务 └── main.yml main.yml 的内容 --- - 嗯...
Python 的 Ansible:解码 JSON 时出错:需要用双引号括起来的属性名称:第 1 行第 2 列(字符 1)
在我的 Ansible 配置中,我有以下内容: 新属性: 租户ID:“4234iugob8y8l3-8809yo3x” new_attribute2: "值2" 以及我的任务中的以下内容: “{{新属性...
我正在按以下方式运行 ansible 剧本: 创建了一个 docker 镜像 来自 php:8.1.28-apache-bookworm 运行 apt install -y python3 \ && ln -s /usr/bin/python3 /usr/bin/python 开始...
如何计算列表中每个项目重复了多少次? 好的:[] => { “列表”: [ “5.8.3”, “5.8.4”, “5.8.4&...
Ansible 挂载缺失 - 卸载 /var 时出错:umount:/var:设备正忙
我正在尝试使用 Ansible 从 /etc/fstab 中删除 /var,而不尝试卸载分区,我将使用重新启动来使更改生效: - 名称:删除默认 /var 挂载 安装:
剧本: - 命令:日期 寄存器:日期输出 - 命令:主机名 注册:主机名_输出 - 文件行: 行:“{{inventory_hostname}} {{ item.cmd }} ===================== {{ 项目。
Ansible:需要帮助在没有 /n 的情况下一一打印消息..我已经给出了代码和当前输出 n 描述
需要输出的帮助: 输出的下面一行需要逐行打印,而不需要 ..plz help..代码和实际输出粘贴在这篇文章中 "msg": "19:19:11.445 UTC 星期四 ...
如何编写一个从模板创建文件的 ansible 任务,以便模板源文件中的 Jinja2 变量仅在第一次由 ansible 配置该文件时更新?
我试图将一个事实从host1传递到host2,但是当ansible到达hosts2时,它返回“未定义的变量”: - 名称:一些剧本 收集事实:假 主机:主机1 任务: -