文章目录

  • 一、剧本(playbook)
    • 1.playbook介绍
    • 2.playbooks的组成
    • 3.案例:编写httpd的playbook
    • 4.定义,应用变量
    • 5.指定远程主机sudo切换用户
    • 6.when条件判断
    • 7.迭代
    • 8.Templates 模块

一、剧本(playbook)

1.playbook介绍

playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbook是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。

ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules)来完成不同的功能的。不管是执行单条命令还是play-book都是基于清单文件。

**playbook格式:**playbook由YMAL语言编写。YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

一个剧本里面可以有多个play,每个play只能有一个tasks,每个tasks可以有多个name。

2.playbooks的组成

**Tasks:**任务,即通过 task 调用 ansible 的模块将多个操作组织在一个playbook 中运行。

**Variables:**变量

**Templates:**模板

**Handlers:**处理器,当 changed 状态条件满足时,(notify)触发执行的操作。

**Roles:**角色

3.案例:编写httpd的playbook

(1)vim test1.yaml

---
- name: install apachehosts: webserversremote_user: roottasks:- name: test connectionping:- name: disable selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true- name: disable firewalldservice: name=firewalld state=stopped- name: install httpdyum: name=httpd- name: copy configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.confnotify: "restart httpd"- name: start httpdservice: name=httpd state=started enabled=yeshandlers:- name: restart httpdservice: name=httpd state=restarted

在服务端准备http.conf文件

(在/etc/httpd/http.conf 复制一份文件到opt目录下 )

并且修改其中 端口 和server name 端口

(2)运行playbook 剧本

ansible-playbook test1.yaml补充参数:
-k ( -ask-pass) :用来交互输入ssh密码
-K ( -ask-become-pass) :用来交互输入sudo密码
-u:指定用户ansible-playbook test1.yaml --syntax-check
检查yaml文件的语法是否正确
ansible-playbook test1.yaml --list-task
#检查tasks任务
ansible-playbook test1.yaml --list-hosts
#检查生效的主机
ansible-playbook test1.yaml --start-at-task='install httpd'
#指定从某个task开始运行

查看 客户端(192.168.100.142)端口8080是否开启

4.定义,应用变量

例:

- name: second play
hosts: dbservers
remote_user: root
vars: #定义变量
- groupname: mysql #格式为 key: value
- username: nginx
tasks:
- name: create group
group: name={{groupname}} system=yes gid=306 #使用 {{key}} 引用变量的值
- name: create user
user: name={{username}} uid=306 group={{groupname}}
- name: copy file
copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt #在setup模块中可以获取facts变量信息

实操:运用变量编写一个设置用户 基本组和gid 号 以及统计webserver组中的ip信息

(1)vim test2.yaml

- name: second playhosts: dbserversremote_user: rootvars:- groupname: ng- username: nbtasks:- name: create groupgroup: name={{groupname}} system=yes gid=1314- name: create user join in group nguser: name={{username}} uid=1314 group={{groupname}} shell=/sbin/nologin- name: copy file contentcopy: content="{{ansible_default_ipv4}}" dest=/opt/ipv4.txt

(2)到其中一个客户机上面查看

在命令行中去指定变量

ansible-playbook test2.yaml -e "username=ZQH"

去客户端查看

5.指定远程主机sudo切换用户

---
- hosts: dbservers
remote_user: zhangsan
become: yes #2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_user: root #指定sudo用户为root
执行playbook时:ansible-playbook test1.yml -K <密码>

6.when条件判断

在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。

when实例:

- name: play3hosts: allremote_user: roottasks:- name: create dirfile: path=/opt/play3 state=directorywhen: ansible_default_ipv4.address == "192.168.100.142"

切换到142主机上查看

你也可以指定主机名

when:inventory_hostname == "<主机名>"

7.迭代

Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。

- name: play1hosts: dbserversgather_facts: falsetasks:- name: create directoriesfile:path: "{{item}}"state: directorywith_items:- /tmp/test1- /tmp/test2- name: add usersuser: name={{item.name}} state=present groups={{item.groups}}with_items:- name: test1groups: wheel- name: test2groups: root

运行脚本到客户机上查看

ansible-playbook demo2.yaml

8.Templates 模块

Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

(1)首先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
Listen {{http_port}}            #42行,修改
ServerName {{http_servername}}  #95行,修改
DocumentRoot "{{http_rootdir}}" #119行,修改

(2).修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

 [webservers]192.168.100.142 http_port=192.168.100.142:80 http_servername=www.aa.com:80 http_rootdir=/etc/httpd/htdocs192.168.100.140 http_port=192.168.100.140:80 http_servername=www.bb.com:80 http_rootdir=/etc/httpd/htdocs[dbservers]192.168.100.142 http_port=192.168.100.142:80 http_servername=www.aa.com:80 http_rootdir=/etc/httpd/htdocs

(3).编写 playbook

vim /opt/httpd.conf.j2

---
- hosts: allremote_user: rootvars:- pkg: httpd- svc: httpdtasks:- name: install httpd packageyum: name={{pkg}} state=latest- name: install configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: create root dirfile: path=/etc/httpd/htdocs state=directory- name: start httpd serverservice: name={{svc}} enabled=yes state=startedhandlers:- name: restart httpdservice: name={{pkg}} state=restarted

(4).运行脚本,到客户机查看配置文件是否被引用变量

vim /etc/httpd/conf/httpd.conf

9.tags 模块

可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用–tags选项能实现仅运行指定的tasks。
playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

实例:

---
- hosts: webserversremote_user: roottasks:- name: touch file1file: name=/opt/file1 state=touchtags:- only- name: touch file2file: name=/opt/file2 state=touch- name: touch file3file: name=/opt/file3 state=touch

指定only标签运行

ansible-playbook webhosts.yaml --tags="only"

如果说要始终运行 加入always

 ansible-playbook webhosts.yaml --tags="two"

10.Roles模块
Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

//roles 内各目录含义解释

●files
用来存放由 copy 模块或 script 模块调用的文件。

●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

例:部署简化LAMP(f除开files目录和templates目录不需要创建main.yml文件,其余都要各个目录下都要创建)

(1)在 roles 目录中分别创建以各角色名称命名的目录

如mysql nginx 、。。。。

(2)在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建

(3)在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名

(4)编写apache模块

vim apache/tasks/main.yml

- name: install apacheyum: name={{pkg}} state=latest
- name: start apacheservice: name={{svc}} enabled=yes state=started

vim apache/vars/main.yml

pkg: httpd
svc: httpd

(5)编写mysql模块

vim mysql/tasks/main.yml

- name: install mysqlyum: name={{pkg}} state=latest
- name: start mysqlservice: name={{svc}} enabled=yes state=started

vim mysql/vars/main.yml

pkg:
- mariadb
- mariadb-server
svc: mariadb

(6)编写php模块

vim php/tasks/main.yml

- name: install php php-fpmyum: name={{pkg}} state=latest
- name: start php-fpmservice: name={{svc}} enabled=true state=started

vim php/vars/main.yml

pkg:
- php
- php-fpm
svc: php-fpm

(7)编写roles

- hosts: dbserversremote_user: rootroles:- apache- mysql- php

(8)运行脚本

ansible-playbook demo3.yaml

这里出了一个小报错,在启动fpm的时候出现报错

切换到142查看报错

查看报错日志

journalctl -xe

Ansible(剧本,角色编写)相关推荐

  1. ansible剧本功能编写

    实验环境:centos7.6,2G内存,50G硬盘大小,虚拟机服务端ip:172.16.1.61 客户端ip:172.16.1.7,172.16.1.41,172.16.1.31 剧本的编写方法 作用 ...

  2. ansible剧本编写_4个开放源代码工具,用于编写下一个剧本

    ansible剧本编写 当我在Great Wide Open (发生于3月16日至17日)上整理幻灯片的闪电演讲时, <那不是很奇怪:创意的开源工具> ,我记得在2015年下半年,我们的工 ...

  3. Ansible剧本编写

    目录 ansible剧本组成部分 ansible剧本编写规范 ansible剧本主机规划 ansible剧本主机清单 ansible剧本编写实践 ad-hoc部署rsync服务 playbook部署r ...

  4. 05 ansible剧本编写

    1.ansible基础知识部分补充 数据移动模块 1.1 ansible软件特点 01.可以实现批量管理 02.可以实现批量部署 03.ad-hoc(批量执行命令)---针对临时性的操作 ansibl ...

  5. ansible剧本如何写_我学过的3课:写Ansible剧本

    ansible剧本如何写 自2013年以来,我就一直使用Ansible,并且至今仍保留着一些原始剧本. 它们随着Ansible从1.4版发展到当前版本(在撰写本文时为2.9版). 一路走来,随着Ans ...

  6. ansible剧本批量安装nginx

    前置条件:                 (1)秘钥远程登录服务器实现免密登录                 (2)管理服务器安装ansible                 (3)Ansibl ...

  7. Ansible剧本管理(实例演释!!!)

    inventory主机清单 ansible默认的主机清单是/etc/ansible/hosts文件,主机清单可以手动设置,也可以通过Dynamic Inventory动态生成,一般主机名使用FQDN ...

  8. Ansible剧本的使用及演示(三)

    Ansible剧本的使用及简单演示(三) 一.playbooks编写说明 1)Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组 ...

  9. ansible剧本规范目录结构

    目录结构 在"/etc/ansible/roles"目录下创建相应的角色目录.比如和rsync服务相关的操作,就可以创建一个rsync的目录,然后在rsync目录下创建{vars, ...

  10. Ansible剧本介绍及使用演示(week5_day2)--技术流ken

    Ansible剧本编写说明 一. 缩进 yaml 的缩进要求比较严格.一定不能使用tab键 注意:编写yaml文件,就忘掉shell的tab吧. 二. 冒号 每个冒号后面一定要有一个空格 注意:1. ...

最新文章

  1. TCP全连接和半连接的问题探讨
  2. 腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验
  3. 网络营销外包期间如何提升网络营销外包外链优化效果?
  4. python 显示html_如何使用python在本地显示带有html表单的网...
  5. 非技术(一)——从最近的股票市场看到的
  6. 1.设计模式中监听模式(观察者模式)(Python实现)
  7. python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
  8. 为什么这个SQL Server DBA学习PowerShell--SQL任务
  9. 一文读懂NoSQL的模式 | 时光机
  10. Thread多线程一起执行睡眠,同时分开执行,实例
  11. AJAX编写用户注册实例及技术小结
  12. Scala笔记整理(二):Scala数据结构—数组、map与tuple
  13. zzulioj 1819: 加加加!(油) (打表)
  14. 华为php工程师待遇,【博士Offer求比较】211vs华为vs半导体设备商 - 找工作啦(Job)版 - 北大未名BBS...
  15. 铅酸电池废水处理技术沉淀+树脂吸附
  16. 函数参数里*argvs和**kwargs的区别
  17. SpringBoot微信小程序授权登录
  18. MATLAB 数学应用 微分方程 时滞微分方程 dde23
  19. 通讯录的实现(C语言)
  20. 病急乱投医的周杰和小气的汪峰

热门文章

  1. Python随笔:彻底卸载Python和清除Python缓存数据
  2. 用python进行金融市场文本数据的情感计算
  3. BBC micro:bit 学习资源汇总(最近更新2019年1月6日....)
  4. django多个html模板,django二、模板详解(templates)——页面视图
  5. Python scikit-learn特征提取讲解
  6. JS 二进制计算,如何得到一个负数的二进制表示
  7. HDU 3353 Not So Flat After All(数论)
  8. 教师计算机技术培训计划,教师计算机培训计划.doc
  9. 北京中考英语听说计算机考试时间,2019年北京中考英语听说考时间确定
  10. kodi linux版本,如何在 Ubuntu 14.04 和 Linux Mint 17 中安装 Kodi14(XBMC)