Ansible从入门到精通【四】

简介: Ansible从入门到精通 立志成为ansible大佬

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步!

image.png

play-book的介绍

play-book是由一个或者多个play组成的列表。play的主要功能是将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓task无非是调用ansible的一个moudle。将多个play组织在一个playbook里,即可以让它们连同起来按照事先编排的机制同唱一台大戏。
playbook采用的是YAML语言编写,后缀可以使yml也可以yaml

play-book 的执行顺序

image.png

YAML的介绍

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XMLC语言、
Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另
外Ingy dot Net与Oren Ben-Kiki也是这语言的共同设计者YAML Ain't Markup Language,即
YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是 :
"Yet Another Markup Language"( 仍是一种标记语言 )
特性
YAML的可读性好
YAML和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML有一个一致的信息模型
YAML易于实现
YAML可以基于流来处理
YAML表达能力强,扩展性好

YAML官方网站:http://www.yaml.org
image.png

语法简介(YAML)

以以下剧本为例

---
 - hosts: all
  remote_user: root
  gather_facts: false
  become: yes

  tasks:
    - name: copy test
      copy:
        src: "{
   
   {item.src}}"
        dest: "{
   
   {item.dest}}"
        owner: root
        group: root
        mode: 0755
      with_items:
        - {
   
   src: "/root/ansible/hostname.sh",dest: "/tmp"}
...

语法介绍

  • 在单一档案中,可以用三个连字号(---)区分多个档案,另外还有选择性的联系三个点号(...)结尾
  • 次行开始正常写playbook的内容,一般建议写明该playbook的功能
  • 使用#做注释
  • 缩进必须是统一的,不能tab和空格混用
  • 缩进的级别也必须一致,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进和换行实现的
  • YAML文件内容和Linux系统大小写判断方式一致:即区分大小写,k/v的值均需大小写敏感
  • k/v的值也可同行也可换行,同行用:分隔
  • v可以是字符串,也可以是另一个列表
  • 一个完整的代码块功能最小需要包括name和task
  • 一个name只能包含一个task
  • YAML文件扩展名通常为yml或者yaml

    元素介绍

  • List:列表,其所有元素均使用“-”打头,如 - name: copy test - hosts: all
  • Dictionary:字典,通常由多个key与value组成,如: src: "{ {item.src}}" dest: "{ {item.dest}}"

注意,yaml的语法和其他高阶语言类似,可以简单的表达清单,散列表,标量等数据结构。其结构通过空格来展示,序列里的项用“-”代表,map里的键值用“:”分隔。

playbook的核心元素

元素 介绍
Hosts 执行任务的远程主机列表
Tasks 任务集
Varniables 内置变量或者自定义变量,在playbook中调用
Templates 模板,可替换模板文件中的变量并实现一些简单的逻辑
Handlers和notity 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
tags 标签,指定某条任务执行,由于选择运行playbook的部分代码。ansible具有幂等性,因此会跳过没有变化的部分,即使如此,有些代码未测试其确实没有发生变化的时间依然会非常的长。此时,如果确认没有发生变化,就可以用tags跳过。执行方法:ansible-playbook -t tagsname test.yml

Hosts

playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,必须先定义在主机清单中。
可能是如下形式:

test.example.com
test1.exxample.com:test2.example.com
192.168.1.1
192.168.*.*
test:test1 两个组并集
test:&test1 两个组交集
test:!test1 在test,但是不在test1
示例:- hosts: test:test1

remote_user

可用于host和task中,也可以通过指定其通过sudo的方式在远程主机上执行任务,可用于play全局或者某任务。此外,甚至也可以在sudo时使用sudo_user指定sudo时切换的用户。

- hosts: all
  remote_user: root
  sudo: yes  #默认sudo为root
  sudo_user: haha  #sudo为haha

tasks

任务列表,格式包含以下两种

action:module arguments
module:arguments  #建议使用

某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers。也可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用。

执行问题忽略

如果playbook中命令或者脚本的退出码不为0,可以使用如下方式替代

tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand||/bin/true

或者使用ignore_errors

tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True

playbook的常用选项

运行playbook的方式

ansible-playbook <filename.yml> ... [options]

常见选项

选项 含义
--check 只检测可能会发生的改变,但不真正执行操作
--list-hosts 列出运行任务的主机
--limit 主机列表,只针对主机列表中的主机执行
-v 显示过程,-vv,-vvv更详细
--check 只检测可能会发生的改变,但不真正执行操作
[root@master ansible]# ansible-playbook copy.yml --list-hosts

playbook: copy.yml

  play #1 (all): all    TAGS: []
    pattern: [u'all']
    hosts (1):
      192.168.1.1
[root@master ansible]# ansible-playbook copy.yml --list-tasks

playbook: copy.yml

  play #1 (all): all    TAGS: []
    tasks:
      copy test    TAGS: []

playbook中可以指定相对路径,相对路径的默认目录在/root/.ansible中

相关文章
|
2月前
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
3月前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible入门与实践
【8月更文挑战第27天】在这个数字化时代,高效的系统管理变得尤为重要。Ansible,作为一个简单而强大的自动化运维工具,正逐渐成为DevOps工程师的首选。本篇文章将带你了解Ansible的基本概念,通过实际操作演示其如何简化日常任务,以及它如何帮助你实现自动化部署和配置管理。无论你是初学者还是有经验的运维人员,这篇文章都将为你提供有价值的信息和启示。
|
11天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
22天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
2月前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
77 36
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
2月前
|
存储 运维 网络安全
自动化运维工具:Ansible入门与实践
【9月更文挑战第17天】本文将介绍Ansible的基本概念、安装和简单使用,以及如何编写一个简单的Ansible playbook。通过本文,您可以了解到Ansible的基本原理和使用方法,以及如何在实际工作中应用Ansible进行自动化运维。
|
2月前
|
运维 应用服务中间件 nginx
自动化运维的利器:Ansible入门与实践
【9月更文挑战第13天】在这个快速发展的IT时代,自动化运维已成为提升效率、减少失误的关键。本文将带你了解Ansible,一个强大的自动化工具,它简化了配置管理、应用部署和任务自动化。通过实际案例,我们将探索Ansible的基本概念、安装步骤、关键组件以及如何编写Playbook来自动化日常任务。无论你是新手还是有经验的运维专家,这篇文章都将为你提供宝贵的见解和技巧,让你在自动化运维的道路上更进一步。
|
2月前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。