ansible连载之playbook使用

ansible-playbook的使用

1. ansible playbook介绍:

简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务。
ansible Playbook使用YAML语法结构,所以配置阅读起来都比较简单。

2. ansible playbook组成结构:

  • target section: 定义将要执行playbook的远程主机组
  • variable section: 定义playbook运行时需要使用的变量
  • task section: 定义将要在远程主机上执行的任务列表
  • handler section: 定义task执行完成以后需要调用的任务

3. ansible playbook主要参数:

3.1. Target section常用参数:

  • hosts:定义远程主机组
  • remote_user:执行该任务的用户
  • sudo: 设置为yes的时候,执行任务的时候使用root权限
  • sudo_user 如果你设置用户为 admin ,那么你执行的时候会使用 admin 用户的权限
  • connection 通过什么方式连接到远程主机,默认是ssh
  • gather_facks 是否启用在远程主机执行setup模块,默认是会执行的,可用同setup模块获取远程主机的信息,在定义变量的时候使用

3.2 Variabler section常用参数:

  • vars: 定义格式 变量名:变量值
  • vars_files: 指定变量文件
  • vars_prompt: 用户交互模式自定义变量
  • setup: 模块取远程主机的值

3.3 Task section常用参数:

  • name:输出到屏幕的信息
  • action:定义执行的动作调用ansible的模块例如:yum name=http state=installed就是安装apache服务
  • copy:复制本地文件到远程主机
  • template:复制.j2格式的变量文件到远程主机,并且复制之后的文件替换变量的值
  • service :定义服务的状态

3.4 handler section常用参数:

可以理解为处理器,主要为 task section 进行调用,为任务列表操作完毕后的后续动作,当关注的资源发生变化时执行的操作

4. ansible playbook测试案例:

4.1 案例1: 安装httpd服务

vim httpd_v1.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: start httpd service
    service: name=httpd state=started
ansible-playbook --syntax-check httpd_v1.yaml #检查代码语法
ansible-playbook httpd_v1.yaml

案例1主要是安装apache httpd web服务器,通过yum模块安装,copy模块将配置文件拷贝到远程主机,并且启动服务

4.2 案例2: 配置文件更新后自动重启httpd服务:

vim httpd_v2.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    tags: config
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
ansible-playbook --syntax-check httpd_v2.yaml
ansible-playbook -t config httpd_v2.yaml

案例2使用了handlers模块,只要httpd.conf配置文件更新了,比如我们更改了httpd的暴露端口,默认是80端口,现在我更改成8080,那么就可以触发服务重启handlers. 同时针对复制配置文件专门打了tag,执行ansible-playbook -t config httpd_v2.yaml 可以实现只执行copy文件的这一个tasks;

4.3 案例3: 通过变量的方式修改配置文件的值:

vim httpd_v3.yaml
- hosts: websrvs
  remote_user: root
  vars:
    http_port: "8899"
    src_httpd_dir: /etc/httpd/conf
    dst_httpd_dir: "/etc/httpd/conf"
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    template: src="{{src_httpd_dir}}/httpd.conf.j2" dest="{{dst_httpd_dir}}/httpd.conf"
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
cp -r /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.j2 #定义httpd的模板配置文件
vim /etc/httpd/conf/httpd.conf.j2  #修改模板配置文件,主要修改监听的端口和主机名两个地方
Listen {{ansible_default_ipv4[‘address‘]}}:{{http_port}}
ServerName {{ansible_nodename}}:{{http_port}}

此处用到了template模块,可以拷贝含有变量的文件到目标机器,这里实际上用到的是python的jinja2语法。源机器的配置文件里面用到了自动以变量httpd_port,也用到了setup 中的 facts,facts的查看可以使用如下命令:

[[email protected] playbooks]# ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
10.83.32.130 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.130"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}
10.83.32.131 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.131"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

如果不使用filter过滤的话,会把所有的facts查询出来,这些都是系统默认的,ansible默认可以获取到的远程主机信息,包括cpu、内存、磁盘、网卡、ip等信息;
今天的博文就写到这里了,下期还会继续带大家一起探讨和学习ansible的使用。最近一个人生活,老婆和小孩都回老家了,所以有了更多的时间来看书、学习、运动,还有就是写博文了。感谢大家一直以来的持续关注,最近我准备再出一系列专门针对新手的linux运维专栏,主要从最简单的LNMP安装 LAMP安装 tomcat安装 MYSQL安装 linux基础命令等入手。

博文的更详细内容请关注我的个人微信公众号 “云时代IT运维”,本公众号旨在共享互联网运维新技术,新趋势; 包括IT运维行业的咨询,运维技术文档分享。重点关注devops、jenkins、zabbix监控、kubernetes、ELK、各种中间件的使用,比如redis、MQ等;shell和python等运维编程语言;本人从事IT运维相关的工作有十多年。2008年开始专职从事Linux/Unix系统运维工作;对运维相关技术有一定程度的理解。本公众号所有博文均是我的实际工作经验总结,基本都是原创博文。我很乐意将我积累的经验、心得、技术与大家分享交流!希望和大家在IT运维职业道路上一起成长和进步;

原文地址:https://blog.51cto.com/zgui2000/2424222

时间: 2024-10-10 07:58:52

ansible连载之playbook使用的相关文章

ansible中的playbook

ansible中的playbook,将常用的模块任务,写入到playbook中,ansible方便快捷的管理主机. playbook使用yaml语言来书写,简单说下yaml语言. 1.YAML简介 YAML是一个可读性高的用来表达资料序列的格式.优点 YAML的可读性好 YAML和脚本语言的交互性好 YAML使用实现语言的数据类型 YAML有一个一致的信息模型 YAML易于实现 YAML可以基于流来处理 YAML表达能力强扩展性好 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标

ansible核心模块playbook介绍

ansible的playbook采用yaml语法,它简单地实现了json格式的事件描述.yaml之于json就像markdown之于html一样,极度简化了json的书写.在学习ansible playbook之前,很有必要把yaml的语法格式.引用方式做个梳理. 1.1 初步说明 以一个简单的playbook为例,说明yaml的基本语法. --- - hosts: 192.168.100.59,192.168.100.65 remote_user: root pre_tasks: - name

运维工具Ansible浅谈playbook讲解以及YAML语法和JSON语法的互化

引言:运维发展到今天已经远远不是传统的运维做一些重复性的枯燥工作,面对海量爆发的访问量,传统的运维已经很吃力,比如让你装三五台机器的系统,这个so easy,那要是安装几百上千台呢,还easy吗.我要安装nginx服务,并提供好相应的端口转发机制以及location资源访问机制,但是有多发十几台这样的机制,并且每台机器转发机制都不相同,这个对我们来说是一个不小的挑战,因此运维进入了自动化时代,自动化运维就显得重要了.因此本文就是围绕自动化运维工具Ansible来展开的. 一,为什么要使用Ansi

ansible入门与playbook实战

一.简要 1.关于AnsibleAnsilbe是一个部署一群远程主机的工具;Ansilbe通过SSH协议实现远程节点和管理节点之间的通信.理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到.Ansible是python开发的,故依赖一些python库和组件,如:paramiko,PyYaml和jinja三个关键组件; 2.ansible架构:右边绿色部分是被管理的主机(虚拟机,物理机,云主机等)从以上架构图中可以看出ansible是由主机清单(配置),play

ansible中的playbook详解

首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令:shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名. p

ansible连载之ad-hoc命令行的使用

1. ansible 批量操作和配置管理:   在本篇博文中,主要讲解如下几个知识点和实践经验,供大家参考:   1. ansible 简介:   2. ansible 常用模块的使用:   3. ansible playbook的使用: 1. ansible 简介: 1.1 Ansible简介:  ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排.它通过ssh协议来连接主机,去中心化,相对比puppet和saltsta

mage Ansible学习2 Playbook

一.上集回顾 1.运维: 手动 --> 标准化 --> 工具化 --> 自动化 --> 智能化 2.工具化 OS Install:PXE ,Cobbler:Virutalization & Cloud Commputing OS Config: ansible,fabric,puppet,saltstack,chef,cfengine,... Deployment: fabric,ansible,... Task Exec:fabric,ansible,func,... 3

ansible编译httpd playbook示例

以下是playbook的内容.它的处理流程是: 1.先在本地下载apr,apr-util,httpd共3个.tar.gz文件. 2.解压这3个文件. 3.安装pcre和pcre-devel依赖包. 4.编译安装apr 5.编译安装apr-util 6.编译安装httpd --- - hosts: all tasks: - name: download apr,apr-util,httpd get_url: url="{{item}}" dest=/root/pkg/ with_item

Ansible playbook API 开发 调用测试

Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible的二次开发. 随笔的内容分为三个部分 playbook编辑执行 python 调用API执行playbook java调用python程序进行playbook的执行 实验的环境是centos6,ansible版本是1.9.4,python版本是2.6.6,jdk版本是1.7U79 一.playboo