Ansible自动化运维管理工具的概述与部署

文章目录

  • Ansible自动化运维管理工具的概述与部署
    • 一、Ansible简介
      • 1、Ansible概述
      • 2、ansible环境安装部署
      • 3、ansible命令行模块
      • 4、inventory主机清单
    • 二、playbook 剧本概述
      • 1、playbook介绍
      • 2、playbook格式
      • 3、playbooks本身由以下各部分组成
      • 4、yaml基本语法规则
      • 3、指定远程主机sudo切换用户
    • 三、示例
    • 四、编写httpd的playbook

一、Ansible简介

项目总体思路

程序员会把编写好的程序代码通过 SVN git(github bitlab)上传到代码版本管理系统中
运维人员可以通过 SVN git 下载指定版本的代码,对代码封装打包构建成镜像,docker容器进行运行
jenkins 通过一整套流水线自动进行持续的集成和构建,镜像放入到私有仓库中
50台主机部署这个容器
【compose docker容器单机编排】 【多机编排 swarm+machine】 【 k8s kubernetes】
ansible 应用级多机编排工具
初始化服务器,初始化脚本,通过ansible传到各个服务器,执行初始化脚本,完成初始化
server —> 50 主机同时或分批 进行自动化操作
docker run 镜像 运行容器

1、Ansible概述

Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。
Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible 只需在固定的一台Ansible控制节点上去完成所有主机的操作。
Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块,比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。
Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。
使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行systemctlstopxx命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的。
Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

2、ansible环境安装部署

管理端  192.168.80.10   ansible
被管理端    192.168.80.11
被管理端    192.168.80.12
//管理端安装ansible
yum install -y epel-release   //先安装epel源
yum install -y ansible//ansible目录结构
/etc/ansible/
----ansible.cfg    #ansible的配置文件,一般 无需修改
----hosts          #ansible的主机清单,用于存储需要管理的远程主机的相关信息
----roles/         #公共角色目录//配置主机清单
cd /etc/ansible
vim hosts
[webservers]       #配置组名
192.168.80.11      #组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)[dbservers]
192.168.80.12//配置密钥对验证
ssh-keygen -t rsa     #一路回车,使用免密登录
sshpass -p 'abc1234' ssh-copy-id root@192.168.80.11
sshpass -p 'abc1234' ssh-copy-id root@192.168.80.12
#sshpass -p是一种免交互方式#测试免交互
ssh root @192.168.80.12

3、ansible命令行模块

命令格式: ansible <组名> -m <模块> -a <参数列表>
ansible-doc -l      #列出所有已安装的模块,按q退出

1.command 模块

//在远程主机执行命令,不支持管道,重定向等shell的特性。ansible-doc -s command   #-s  列出指定模块的描述信息和操作动作ansible 192.168.80.11 -m command -a 'date'   #指定ip执行date
ansible webservers -m command -a 'date '     #指定组执行date
ansible dbservers -m command -a 'date '
ansible all -m command -a 'date '            #all代表所有hosts 主机
ansible all -a 'ls /'                        #如省略-m 模块,则默认运行command 模块//常用的参数:
chdir: 在远程主机上运行命令前提前进入目录
creates: 在命令运行时创建一-个文件,如果文件存在,则不会创建任务
removes:在命令运行时移除- - 个文件,如果文件不存在,则不会执行移除任务
executeble:指明运行命令的shell程序ansible all -m command -a "chdir=/home ls ./"

2.shell模块

//在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一一个子shel1运行命令(支持管道符号等功能)
ansible-doc -s shellansible dbservers -m shell -a 'ifconfig ens33 | awk "/inet/{print $2}"'

3.cron模块

//在远程主机定义任务计划。其中有两种状态(state) : present表示添加 (可以省略) ,absent表示移除。
ansible-doc -s cron    #按q退出//常用的参数:
minute/hour/day/month/weekday:分/时/日/月/周
job: 任务计划要执行的命令
name: 任务计划的名称ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -1'
ansible webservers -m cron -a 'name="test crontab" state=absent'
#移除计划任务,假如该计划任务没有取名字,name=None即可eg:
##10号到20号,每两个小时执行一次hello
ansible webservers -m cron -a 'hour="*/2" day="10-20" job="/bin/echo hello" name="cron hello"'
ansible webservers -a 'crontab -l'#移除相关效果
ansible webservers -m cron -a 'name="cron helli" state=absent'

4.user 模块

//用户管理的模块
ansible-doc -s user//常用的参数:
name:用户名,必选参数
state-present | absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yes|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时, 是否删除用户的家目录ansible dbservers -m user -a 'name="test01"'               #创建用户test01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="test01" state=absent'  #删除用户test01

5.group模块

//用户组管理的模块
ansible-doc -s groupansible dbservers -m group -a 'name=mysql gid=306 system=yes'  #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql' #将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'

6.copy模块

//用于复制指定主机文件到远程主机的
ansible-doc -s copy//常用的参数:
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是日录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt' #将helloworld写入/opt/he1lo.txt文件中
ansible dbservers -a 'cat /opt/hello.txt'

7.file模块

//设置文件属性
ansible-doc -s fileansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'   #修改文件的属主属组权限等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'   #设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"   #创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"  #删除一个文件

8.hostname模块

//用于管理远程主机上的主机名
ansible dbservers -m hostname -a "name=mysq101"

9.ping模块

//检测远程主机的连通性
ansible all -m ping

10.yum模块

//在远程主机.上安装与卸载软件包
ansible-doc -s yumansible webservers -m yum -a 'name=httpd'                #安装服务
ansible webservers -m yum -a 'name=httpd state=absent'   #卸载服务

11.service/systemd 模块

//用于管理远程主机上的管理服务的运行状态
ansible-doc -s service//常用的参数:
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动ansible webservers -a ' systemctl status httpd'     #查看web服务器httpd运行状态
ansible webservers -m service -a 'enabled=true name=httpd state=started'   #启动httpd服务

12.script 模块

//实现远程批量运行本地的shell脚本
ansible-doc -S scriptvim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/ script.txtchmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

13.setup 模块

//facts 组件是用来收集被管理节点信息的,使用setup 模块可以获取这些信息
ansible-doc -s setupansible webservers- -m setup      #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息

4、inventory主机清单

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

//如果是名称类似的主机,可以使用列表的方式标识各个主机。
vim /etc/ansible/hosts
[webservers]
192.168.80.11:2222    #冒号后定义远程连接端口,默认是ssh的22端口
192.168.80.1[2:5][dbservers]
db-[a:f].example.org    #支持匹配a~f

inventory 中的变量
Inventory变量名 含义
ansible_host ansible连接节点时的IP地址
ansible_port 连接对方的端口号,ssh连接时默认为22
ansible_user 连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户
ansible_password 连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_ private_key_file 指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args 提供给ssh、sftp、 scp命令的额外参数
ansible become 允许进行权限提升
ansible become_ method 指定提升权限的方式,例如可使用sudo/ su/runas等方式
ansible become_user 提升为哪个用户的权限,默认提升为root
ansible_become_password 提升为指定用户权限时的密码
1、主机变量

[webservers]
192.168.80.11 ansible_port=22 ansible_user=root ansible_password=abc1234

2、组变量

[webservers:vars]     #表示为webservers 组内所有主机定义变量
ansible_user=root
ansible_password=abc1234[all:vars]       #表示为所有组内的所有主机定义变量
ansible_port=22

3、组嵌套

[nginx]
192.168.80.20
192.168.80.21
192.168.80.22[apache]
192.168.80.3[0:3][webservers: children]     #表示为webservers 主机组中包含了nginx 组合apache 组内的所有主机
nginx
apache

二、playbook 剧本概述

1、playbook介绍

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

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

2、playbook格式

playbook由YMAL语言编写。YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。
一个剧本里面可以有多个play,每个play只能有一个tasks,每个tasks可以有多个name。
通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。

3、playbooks本身由以下各部分组成

Tasks 任务,即通过task 调用ansible 的模板将多个操作组织在一 个playbook 中运行
Variables 变量
Templates 模板
Handlers 处理器,当changed状态 条件满足时,(notify) 触发执行的操作
Roles 角色

4、yaml基本语法规则

1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用tab键、只允许使用空格
4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

hosts 定义节点,可以是组
remote_user 是你以什么用户身份进行登陆
tasks 是你的任务
become:yes 表示切换用户
become_user: mysql 表示切换到mysql用户,配合上一条使用

name: 为下面执行的操作起名
5、yaml支持的数据结构
1、对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)

2、数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)

3、纯量:单个的、不可再分的值

示例:

vim test1.yaml
---     #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play     #定义一个play的名称,可省略gather_facts: false    #设置不进行facts信息收集,这可以加快执行速度,可省略hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔remote_user: root    #指定被管理主机上执行任务的用户tasks:     #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: test connection    #自定义任务名称ping:     #使用 module: [options] 格式来定义一个任务- name: disable selinuxcommand: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务- name: disable firewalldservice: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式- name: install httpdyum: name=httpd state=latest- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作- name: start httpd serviceservice: enabled=true name=httpd state=startedhandlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块- name: restart httpd    #notify和handlers中任务的名称必须一致service: name=httpd state=restarted##Ansible在执行完某个任务之后并不会立即去执行对应的handler而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

1、运行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开始运行
ansible-playbook test1.yaml -e "username-nginx"  #在命令行里定义变量

2、定义、引用变量

- name: second playhosts: dbserversremote_ user: rootvars:                #定义变量- groupname:mysql   #格式为key: value- username: nginxtasks:- name: create mysql groupgroup: name={{groupname}} system=yes gid=306     #使用{{key}} 引用变量的值- name: create nginx useruser: name={{username}} uid=306 group={{groupname}}- name: copy info filecopy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt    #在setup模块中可以获取facts变量信息ansible-playbook test1.yaml -e "username=nginx"   #在命令行里定义变量

3、指定远程主机sudo切换用户

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

4、when条件判断

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

//when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务
vim test2.yaml
---
- hosts: allremote user: roottasks:- name: shutdown hostcommand: /sbin/shutdown -r nowwhen: ansible_default_ipv4.address == "192.168.80.12"   #when指令中的变量名不需要手动加上{{}}或when: inventory_hostname == "<主机名>"ansible-playbook test2.yaml

5、迭代
Ansible提供了很多种循环结构,一般 都命名为with_items, 作用等同于loop循环。
vim test3.yaml

- name: play1hosts: dbserversgather_facts:falsetasks:- name: create directoriesfile:path: ”{{item}}"state: directorywith items:      #等同于loop:- /tmp/test1- /tmp/test2- name: add usersuser: name={{item.name}} state=present groups={{item.groups}}with items :- name: test1groups: wheel- name: test2groups: root或     with items:- {name:'test1',groups: 'wheel'}- {name:'test2',groups: 'root'}ansible-playbook test3.yaml

6、Templates 模块
Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。
(1)先准备一个以.j2 为后缀的template 模板文件,设置引用的变量

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2 vim /opt/httpd.conf.j2
Listen {{http_ port}}         #42行,修改
ServerName {{server_name}}    #95行,修改
DocumentRoot "{{root_dir}}"   #119行,修改

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

vim /etc/ansible/hosts
[webservers]
192.168.80.11 http_port=192.168.80.11:80 server_name=www.accp.com:80 root_dir=/etc/httpd/htdocs[dbservers]
192.168.80.12 http_port=192.168.80.12:80 server_name=www.benet.com:80 root_dir=/etc/httpd/htdocs

(3)编写playbook

vim apache.yaml
---- hosts: allremote_uaer: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{package}} state=latest- name: install configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf   #使用template模板notify:- restart httpd- name: create root dirfile: path=/etc/httpd/htdocs state=directory- name: start httpd serverservice: name={{ service}} enabled=true state=startedhandlers:- name: restart httpdservice: name={{service}} state=restartedansible-playbook apache.yaml

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

vim webhosts.yaml
---- hosts: webserversremote_user: roottasks:- name: Copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- only       #可自定义- name: touch filefile: path=/opt/testhost state=touch .tags:- always     #表示始终要运行的代码ansible-playbook webhosts.yaml --tags="only"vim dbhosts.yaml
---- hosts: dbserversremote_user: roottasks:- name: Copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags :- only- name: touch filefile: path=/opt/testhost state=touchtags:- alwaysansible-playbook dbhosts.yaml
//分别去两台被管理主机上去查看文件创建情况

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

cd /etc/ansible/
tree roles/
roles/
|—— web/
|   |—— files/
|   |—— templates/
|   |—— tasks/
|   |—— handlers/
|   |—— vars/
|   |—— defaults/
|   |__ meta/
|___db/|—— files/|—— templates/|—— tasks/|—— handlers/|—— vars/|—— defaults/|__ meta/

(2)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 文件,用于定义此角色的特殊设定及其依赖关系。
(3)在一个playbook 中使用roles 的步骤
(1)创建以roles 命名的目录

mkdir /etc/ansible/roles/ -p    #yum装完默认就有

(2)创建全局变量目录(可选)

mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all    #文件名自己定义,引用的时候注意

(3)在roles 目录中分别创建以各角色名称命令的目录,如httpd、mysql

mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql

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

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}

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

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

(6)修改site.yml 文件,针对不同主机去调用不同的角色

vim /etc/ansible/site.yml
---- hosts: webserversremote_ user: rootroles:- httpd
- hosts: dbserversremote user: rootroles :- mysql

(7)运行ansible-playbook

cd /etc/ansible
ansible-playbook site.yml

三、示例

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults, meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults, meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults, meta} -ptouch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/ php/{defaults,vars,tasks,meta,handlers}/main.yml

1、编写httpd模块
写一个简单的tasks/main.yml

vim /etc/ansible/roles/httpd/tasks/main.yml- name: install apacheyum: name={{pkg}} state=latest
- name: start apacheservice: enabled=true name={{svc}} state=started//定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.ym1
svc: httpd

2、编写mysql模块

vim /etc/ansible/roles/mysql/tasks/main.yml- name: install mysqlyum: name={{pkg}} state=fatest
- name: start mysqlservice: enabled=true name={{svc}} state=startedvim /etc/ansible/roles/mysql/vars/main.yml
pkg:- mariadb- mariadb-serverSVC: mariadb

3、编写php模块-

vim /etc/ansible/roles/php/tasks/main.yml- name: install phpyum: name={{pkg}} state=latest
- name: start php-fpmservice: enabled=true name={ {svc} } state=startedvim /etc/ansible/roles/php/vars/main.yml
pkg:- php- php- fpmSVC: php-fpm

4、编写roles示例

vim /etc/ansible/site.yml---- hosts: webserversremote_user: rootroles :- httpd- mysql- phpcd /etc/ansible
ansible-playbook site.yml

四、编写httpd的playbook

(1) Ansible 管理端编写好playbook剧本

vim test1.yaml
---
-name: first playgather_facts: falsehosts: webserversremote_user: roottasks:- name: test connectionping:- name: disable selinuxcommand: '/sbin/ setenforce0' ignore_errors :True- name: disable firewalldservice: name=firewalld state=stopped- name: install httpdyum : name=httpd state=latest- name : install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.confnotify : "restart httpd"- name : start httpd serviceservice: enabled=true name=httpd state=startedhandlers :- name : restart httpdservice: name=httpd state=restarted

(2)在webservers端(client1)准备httpd模板配置文件

vim /etc/httpd/conf/httpd.conf
#修改ServerName的地址和端口
ServerName www.clj.com:80

(3)在webservers端(client1)将准备好的httpd模板配置文件发送到Ansible管理端

scp httpd.conf root@192.168.80.40:/opt

(4)确认被控制端的httpd服务是否安装,firewalld处于开启状态,本机的httpd模板文件准备完成并且路径和剧本配置一致

ansible dbservers -a 'systemctl status httpd'
ansible dbservers -a 'sustemctl status firewalld'

(5) 执行playbook剧本

ansible-playbook test1.yaml

(6) 检查被deservers控制端(client2)192.168.80.60的httpd服务和防火墙状态以及httpd配置文件

ansible dbservers -a 'systemctl status firewalld'
curl 192.168.80.60
ansible dbservers -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep ServerName'

Ansible概述与部署及playbook剧本编写相关推荐

  1. Ansible自动化运维工具之playbook剧本编写

    内容预知 目录 内容预知 1.playbook的相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 实例1:playbook编 ...

  2. playbook 剧本编写

    文章目录 一: playbooks 简述 1.1 什么是playbooks 1.2 playbooks的组成 1.3 playbooks剧本示例 1.3.1 先修改/etc/ansible/hosts ...

  3. Ansible自动化运维工具(二)playbook剧本

    目录 一.playbook 1.playbook简介 2.playbook使用场景 3.yaml基本语法规则 4.yaml支持的数据结构 二.Inventory中的变量 1.inventor变量参数 ...

  4. 05 ansible剧本编写

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

  5. Ansible剧本编写

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

  6. 【Ansible】Playbook剧本

    Playbook剧本 一.剧本三要素 剧本 playbook 1.场地 1.主机组hosts 2.演员 2.执行用户 3.故事情节 3.执行的任务(调用ansible模块) 二.剧本组成 playbo ...

  7. Ansible Playbook剧本

    编写Ansible Playbook剧本,使用Playbook完成自动化操作 熟悉Playbook语法格式 编写Playbook管理系统账户 编写Playbook管理逻辑卷 编写Playbook管理软 ...

  8. ansible———playbook剧本

    ansible--playbook剧本 文章目录 ansible--playbook剧本 一.主机清单 二.Yaml文件 三.playbook剧本 四.Handlers介绍 五.条件测试 一.主机清单 ...

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

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

最新文章

  1. 机器学习实战读书笔记(一)机器学习基础
  2. 2_Python实现基于人脸特征的美颜算法(20181224)
  3. 为什么选用 React 创建混合型移动应用?
  4. Android --- 屏幕方向screenOrientation属性详解
  5. Flask学习记录之Flask-SQLAlchemy
  6. android notification自动消失,Notification点击事件和点击消失
  7. 在CentOS 7上安装并配置Python 3.6环境
  8. Dubbo的远程回调
  9. 开发中,常用到的Eclipse快捷键
  10. POJ 3133 Manhattan Wiring(插头DP)
  11. r语言必学的十个包肖凯_家长专栏语言发育迟缓儿童的家庭训练小游戏
  12. tftpd64-SE使用
  13. ASP.NET 氚云平台集成Dome
  14. 论文笔记-Suppress and Balance: A Simple Gated Network for Salient Object Detection
  15. 定义一个Traingle类用来刻画“三角形”,要求:Trangle类具有类型为double的三个边以及周长、面积属性,具有一个boolean型的属性,该属性的值为true时代表三个边属性能构成一个三角
  16. 决策树C4.5算法 c语言实现,数据挖掘十大经典算法(1) C4.5_决策树算法
  17. Mac数据恢复首选easyrecovery
  18. 预备篇 I :范畴与函子
  19. android gravity 属性解析
  20. python,时间的四种格式

热门文章

  1. 重庆工商大学本科毕业论文答辩PPT模板
  2. 重要!考研入场的5个流程细节!
  3. 思腾合力「CH2D20-LA」高性价比 2U 双路通用服务器
  4. 好用的CAD看图软件功能详解分析
  5. LeetCode每日一题-N皇后 II
  6. word无法保存此文件,因为它已经在别处打开。(C:/…/STARTUP/Powerword.dot)
  7. 对过去进行时的一点理解
  8. Vim/Vi 编辑器,删除总结
  9. 《华林科纳-半导体工艺》光刻胶剥离清洗
  10. 记一次对在线挂机网站的渗透