Ansible playbook编写之坑-----with_items

2024-05-04 08:48

本文主要是介绍Ansible playbook编写之坑-----with_items,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:本文基于CentOS 7.2系统编写,Ansible版本为ansible-2.4.2.0-2.el7.noarch

这篇文章应该是一篇格式纠正的文章,因为今天因为playbook的格式搞了大半天。

今天在使用copy模块时,需要拷贝多个文件,于是就理所当然的用with_items了。不用不知道,用了之后差点被搞崩,playbook采用的是YAML语法格式,缩进在层次控制上非常重要,一不小心就是各种报错。

偏偏我就是这么时运不齐,参看了两本书都是错误的,不得不吐槽现在的书的质量怎么这么差。

第一本是《Ansible权威指南》,截取片段代码如下(取自4.2章节):
这里写图片描述

第二本是看《Ansible自动化运维技术与最佳实践》,截取代码片段如下(取自4.3章节):
这里写图片描述

无一例外,按照这上面的两种方式编写结果都是错误的,不只是书的排版问题还是软件版本问题,反正我是被坑得略惨。

最终还是得求救官方文档,终得解脱。

2.4版本的官方文档为:https://docs.ansible.com/ansible/2.4/playbooks_loops.html
with_items正确的缩进格式如下:
这里写图片描述

根据官方文档给的格式,在将使用模块换为copy,就是下面的样子,


---
  - hosts: CentOS-7-4
    gather_facts: falsetasks:- name: copy files
        copy:src: "{{ item.src }}"dest: "{{ item.dest }}"with_items:- { src: "/home/ansible/copy.yml", dest: "/home/copy.yml" }

也就是with_items要和模块名左对齐,在同一个层级。

如果单个文件的拷贝,copy也可以用下面的方式,

---- hosts: CentOS-7-4gather_facts: falsetasks:- name: copy filescopy: src=/home/ansible/copy.yml dest=/home/copy.yml 

此外,如果with_items使用的数据不是k/v型,只是多个变量,则可以使用下面的方式,


---
  - hosts: CentOS-7-4
    gather_facts: falsetasks:- name: install or uninstall rpms
        yum: name="{{ item }}" state=absentwith_items:- dos2unix
          - squid

在编辑完playbook后,可以先检查一下格式是否正确,再进行真正的执行。ansible提供了一下命令用于检测playbook语法,

ansible-playbook test.yml --syntax-check

参考资料:
1、https://docs.ansible.com/ansible/2.4/playbooks_loops.html

这篇关于Ansible playbook编写之坑-----with_items的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958802

相关文章

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替

用Python编写倒计时程序:详细教程

目录 引言 环境准备 基本概念 代码实现 步骤一:导入必要的库 步骤二:获取用户输入 步骤三:实现倒计时逻辑 步骤四:整合代码 运行程序 高级功能 扩展功能示例:支持分钟和小时输入 扩展功能示例:图形用户界面 (GUI) 总结 引言 倒计时程序是一个非常常见的小工具,广泛用于各种应用场景中,例如考试时间提醒、烹饪计时器、会议倒计时等。Python 作为一种

ansible资料

ansible系列教程-强烈推荐看完ansible官方编写的例子ansible_uiJenkins配置ansiblegalaxy官方文档中文教程1中文教程2playbook进阶YAML语法fabric编写的自动化部署

【Spring boot】编写代码及测试用例入门之 Hello Spring boot _踩坑记

先贴下目录: 这是我从 start.spring.io 里下载的依赖Web的模板 // DemoApplication.javapackage com.abloume.springboot.blog.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autocon

使用Ansible进行多云环境的自动化部署与管理

使用Ansible进行多云环境的自动化部署与管理 引言 随着云计算技术的飞速发展,多云环境已经成为现代企业IT架构的主流选择。多云环境不仅提供了更高的灵活性和可用性,还能有效降低供应商锁定的风险。然而,多云环境的管理和部署复杂性也随之增加,传统的手动操作已经无法满足需求。Ansible作为一种简单而强大的自动化工具,可以帮助企业在多云环境中实现自动化部署和管理,显著提高效率并减少人为错误。

windows下使用vscode编写运行以及调试C/C++

vscode支持类似于vs的断点调试c/c++,也可以直接编译&运行c/c++ 先是编译运行 c/c++的方法                              微软官方起初设定的科学做法(这也是现在的科学做法)是通过在vscode集成控制台写命令行的方式来实现编译运行程序的,但也可以通过code runner插件来简化步骤,实现一键编译执行 但无论是什么方法,因为vscod