Ansible是一个模型驱动的配置管理,多节点部署/编排和远程任务执行系统。默认情况下使用SSH,因此您管理的节点上不会安装任何特殊软件。 Ansible可以用任何语言扩展。
通过官方指南中的 docker-compose 安装了 awx。 以这种方式安装 awx cli: pip install“https://github.com/ansible/awx/archive/11.1.0.tar.gz#egg=awxkit&subdirectory=awxkit” 检查它的
我认为我对ansible中的rescue如何工作有一个很好的理解,看起来与其他语言中的try/catch/finaly非常相似,但是我没有从文档中得到一个具体的细节。
Ansible Molecule 测试无法通过始终创建/删除锁定文件的 bash 命令
我有一个 Ansible 角色来安装/激活 Trendmicro。在该任务中,有一个操作通过调用 bash 命令来完成该激活—— -名称:执行/opt/imal/bin/dsupdstat.sh ansible.内置。
目前正在开发用于 postgresql 安装的 ansible playbook。 尝试将多个值插入到shared_preload_libraries。想法是能够有条件地插入它们和不同的角色......
Ansible 从循环中拉出块设备 UUID,并用于挂载模块上的变量
我正在尝试动态拉取我尝试安装的磁盘的 UUID。迄今为止的角色: --- - name: 获取应用盘的UUID shell: blkid {{ UUID_loop }} -s UUID -o 值 环形: - /dev/sdh1 ...
我希望将应用程序配置从一台主机迁移到另一台主机。在任一主机上运行的任务有很大不同,它们保证自己的角色。理想情况下,我正在寻找的目标主机是
我们可以通过修改ansible.cfg中的roles_path来改变角色的路径。 但该文档似乎没有提及任何有关更改 group_vars 和 host_vars 路径的内容。 我怎样才能改变这些
我正在尝试使用ansible安装jenkins master,到目前为止一切似乎都工作得很好。但现在我在插件安装方面遇到了困难。 我从 ansib 找到了 jenkins_plugin 指令...
如何在没有指定主机的情况下运行 Ansible playbook?
我正在编写一个剧本,它可以启动 X 个 EC2 AWS 实例,然后在它们上安装一些软件(apt 包和 pip 模块)。当我运行我的剧本时,它会执行 shell 命令...
我正在开发一个用于 ios 闪存文件备份的 Ansible 剧本,它显示了 cisco 路由器的“flash:”,并尝试从多行字符串中选取所有文件名到列表中。后来...
我有以下任务 - 名称:“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 模块。根据文档,它应该替换输入文件中的第一个匹配项。但当我尝试各种选项时,在我的输入中我总是得到最后的结果...