Ansible值playbook

简介

playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础。
playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式。
playbook是通过YAML格式来进行描述定义的,可实现多台主机应用的部署,对不同分组的主机执行特定指令步骤。

playbook通过示例展示其用法

定制一个简单的Nginx软件包管理,内容包括安装、配置模板、状态管理等。

配置文件:nginx.yml

---
- hosts: webservers #hosts参数作用:定义操作的对象,本例操作对象为webservers组

vars: #vars参数作用:定义变量(配置模板时会用到),作用域只限于webservers组
  worker_processes: 4
  num_cpus: 4
  max_open_file: 65506
  root: /data

remote_user: root #指定远程操作的用户名,默认是root,支持sudo运行,通过添加sudo:yes即可

tasks: #定义任务列表(自上而下顺序执行)
  - name: ensure nginx is at the latest version #每个事务都可以定义一个name标签,好处是增强可读性,便于观察结果输出时了解运行的位置
    yum: pkg=nginx state=latest #yum安装最新版本的nginx
  - name: write the nginx config file
    template: src=/home/test/ansible/nginx/nginx2.conf dest=/etc/nginx/nginx.conf #根据模板配置nginx配置文件,src为主控端模板路径,dest为被控端nginx配置文件路径
    notify:
      - restart nginx
  - name: ensure nginx is running
    service: name=nginx state=started #启动nginx

handlers: #通知处理程序(必须要有notify触发才会执行),根据notify选择handlers中对应的name标签,从而进行相应操作。如notify中是restart nginx,则handlers中的name标签内容也是restart nginx,才能执行
  - name: restart nginx
    service: name=nginx state=restarted

模板:nginx2.conf

user    nginx;
worker_processes    {{ worker_prcesses }};
{% if num_cpus == 2 %}
worker_cpu_affinity 01 10;
{% elif num_cpus == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif num_cpus >= 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 1000 0100 0010 0001;
{% endif %}
worker_flimit_notifile {{ max_open_file }};
... ...

执行playbook

格式:

ansible-playbook playbook.yml(playbook文件,可自定义名称) [参数]

例:

ansible-playbook /home/test/ansible/playbooks/nginx.yml -f 10 #启用10个并行进程数执行playbook(nginx.yml)

常用参数:

-u REMOTE_USER   #手工指定playbook的系统用户
--syntax-check   #检查playbook的语法
--list-hosts playbook   #匹配到的主机列表
-T TIMEOUT   #定义playbook执行超时时间
--step   #以单任务分步骤运行,方便做每一步确认工作
--help   #帮助信息

playbook角色与包含声明

包含

当playbook文件非常大时,想要复用某些功能是就会显得相当吃力,Ansible支持写playbook文件时拆分成多个文件,通过包含(include)的形式进行引用。
例:
功能(复用)文件:tasks/fool.yml

---
#possibly saved as tasks/foo.yml
- name: placeholder foo
  command: /bin/foo
- name: placeholder bar
  command: /bin/bar

使用的playbook文件:playbook.yml

tasks:
  - include: tasks/foo.yml #通过include来引用复用的功能

角色

角色:Ansible定制好的一种标准规范,以不同级别目录层次及文件对角色、变量、任务、处理程序等进行拆分,为后续功能扩展、可维护性打下基础。
例:
以上面的nginx.yml为例进行拆分,结构如下:

说明:

hosts  

#自定义主机,非必选项,默认将引用/etc/ansible/hosts的参数,要引用自定义hosts,需要通过-i file参数来实现,如:ansible-playbook -i hosts

[webservers]
192.168.1.111
192.168.1.112

group_vars

#定义组变量目录,目录中的文件名要与组名保持一致,组变量文件定义的变量作用域只在该组内,不能作用到其他组

【group_vars/all】 #代表所有主机

---
#Variables listed here are applicable to all host groups
ntpserver: ntp.sjtu.edu.cn

【group_vars/webservers】 #webservers组

---
worker_processes: 4
num_cpus: 4
max_open_file: 66535
root: /data

site.yml

#全局配置文件,下面内容引用了两个角色块,角色的应用范围及实现功能都不一样

---
- name: apply common configuration to all nodes
  hosts: all
  roles:
    - common #对应目录为:nginx/roles/common
- name: configure and deploy the webservers and application code
  hosts: webservers
  roles:
    - web #对应目录为:nginx/roles/web

roles

#角色目录,通常每个角色对应着一个特定的功能服务
【roles/common】
handlers/main.yml #处理程序文件

---
- name: restart ntp
  service: name=ntp state=restarted

tasks/main.yml #任务列表文件

---
- name: Install ntp
  yum: name=ntp state=present
- name: Configure ntp file
  template: src=ntp.conf.j2 dest=/etc/ntp.conf #引用模板无需写路径,默认在上级的templates目录中查找
  notify: restart ntp
- name: Start the ntp service
  service: name=ntp state=started enabled=true
- name: test to see if selinux is running
  command: getenforce
  register: sestatus
  changed_when: false

templates/ngp.conf.j2 #模板

driftfile    /var/lib/ntp/drift
restrict    127.0.0.1
restrict    -6 ::1
server    {{ ntpserver }} #此处ntpserver引用vars/main.yml中定义的ntpserver变量
includefile    /etc/ntp/rypto/pw
keys    /etc/ntp/keys

vars/main.yml #变量配置文件

---
#Variable listed here are applicable to all host groups
ntpserver: 210.72.145.44

【roles/web】
handlers/main.yml #处理程序文件

---
- name: restart nginx
  service: name=nginx state=restarted

tasks/main.yml #任务列表文件

---
- name: ensure nginx is at the latest version #每个事务都可以定义一个name标签,好处是增强可读性,便于观察结果输出时了解运行的位置
  yum: pkg=nginx state=latest #yum安装最新版本的nginx
- name: write the nginx config file
  template: src=/home/test/ansible/nginx/nginx2.conf dest=/etc/nginx/nginx.conf #根据模板配置nginx配置文件,src为主控端模板路径,dest为被控端nginx配置文件路径
  notify:
    - restart nginx
- name: ensure nginx is running
  service: name=nginx state=started #启动nginx

templates/nginx2.conf #模板

user    nginx;
worker_processes    {{ worker_prcesses }};
{% if num_cpus == 2 %}
worker_cpu_affinity 01 10;
{% elif num_cpus == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif num_cpus >= 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 1000 0100 0010 0001;
{% endif %}
worker_flimit_notifile {{ max_open_file }};
... ...

运行角色

ansible-playbook -i hosts site.yml -f 10 #启用10个并行进程数执行playbook。hosts文件通过-i指向自定义hosts,playbook配置文件为site.yml


参考资料:

根据刘天斯《Python自动化运维技术与最佳实践》整理

时间: 2024-11-07 06:06:09

Ansible值playbook的相关文章

ansible的playbook配置及template模板的使用

前言: 学习下ansible的playbooks的状态配置管理,说来puppet saltstack都有类似的叫法,只是ansible的叫法更犀利,我当时一看playbook还以为是花花公子的playboy.要使用ansible就要深入学习playbook配置及模板. 注:到底是playbook还是playbooks.... 先把官网的简单几个语法给说明下. #这个是你选择的主机 - hosts: webservers #这个是变量   vars:     http_port: 80     m

ansible的playbook介绍和实战

1.playbook 介绍: 简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务. Playbook使用YAML语法结构,所以配置阅读起来都比较简单. 2.playbook 的组成结构: target section 定义将要执行playbook的远程主机组 variable section 定义playbook运行时需要使用的变量 task section 定义将要在远程主机上执行的任务列表 handler section

Ansible 之 playbook使用

1  概述 Playbook组织格式是YAML格式,编排的是任务(task),用来记录重复执行的命令 YAML:YAML(/?j?m?l/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列的格式.YAML参考了其他多种语言,包括:C语言.Python.Perl,并从XML.电子邮件的数据格式(RFC 2822)中获得灵感.Clark Evans在2001年首次发表了这种语言,另外Ingy d?t Net与Oren Ben-Kiki也是这语言的共同设计者.目前已经有数种编程语言或脚本语言支

【Ansible之playbook剧本】 񪃬

目录 基本用法 传参使用 条件判断 when 标签 tags 模板 template 循环 with_item handlers 原文: http://blog.gqylpy.com/gqy/374 @(Ansible之playbook剧本) ymal: 列表:- 字典:key-value 文件后缀名:yml ansible-playbook 命令格式: -C:--check 干跑,不会执行 -f:FORKS 并发执行 --syntax-check:语法检查 --list-hosts:列出主机列

Ansible之playbook的使用总结

之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装部署一个httpd服务会需要多个模块(一个模块也可以称之为task)提供功能来完成.而playbook就是组织多个task的容器,它的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language).YAML语法能够简单的表示散列表,字典等数

ansible的playbook组件

playbook的核心元素: tasks: 任务 variables: 变量 templates: 模板 handlers: 处理器 roles: 角色 组织格式:YAML(被称为另外一种标记语言) 语法:(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) 例如: name:tom age:21 gender:Male spourse: name:lily gender:female children: —  name:susan age: 2 gender:female —

ansible用playbook实现定期监控各机器磁盘空间任务

目标:用ansible定期监控各机器的磁盘空间状况 和进程运行状况 1)配置playbook脚本,实现对磁盘空间 和 特定进程运行状态的每日检查: 2)通过邮件插件,把检测结果发到ops邮箱: 一.playbook的配置实现 monitor_ansible.yaml 1 --- 2 - name: diskspace_mornitor 3 hosts: local 4 user: root 5 gather_facts: no 6 vars: 7 path: /home/devops 8 9 t

Ansible之playbook的使用

playbook介绍 一. 为什么引入playbook 我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成.而playbook就是组织多个task的容器,他的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language).YAML语法能够简单的表示散列表,字典等数据结构.具体请参考YAML详细语法 YAML基本语法 列表:每一个列表成员前面都要有一个短横线和一个空格 frui

Ansible之Playbook详解、案例

playbook-剧本 介绍 playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础.Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式.值得注意的是playbook是通过YAML格式来进行描述定义的.? 核心元素 Tasks:任务,由模板定义的操作列表Variables:变量Templates:模板,