博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ansible之Playbook详解
阅读量:5244 次
发布时间:2019-06-14

本文共 4811 字,大约阅读时间需要 16 分钟。

1.Playbook详解

  playbook是一个非常简单的配置管理和多主机部署系统,可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式.

核心元素

Hosts:主机

Tasks:任务,由模板定义的操作列表

Variables:变量

Templates:模板,即使用模板语法的文件

Handlers:处理器,当某条件满足时,触发执行的操作

Roles:角色

cat test.yaml- hosts: all  remote_user: root  tasks:  - name: install redis    yum: name=redis state=latest  - name: copy config file    copy: src=/root/playbook/redis.conf dest=/etc/redis.conf owner=redis    notify: restart redis    tags: ChangeConfigFile  - name: start redis    service: name=redis state=started  handlers:  - name: restart redis    service: name=redis state=restarted# 检查yaml文件的语法是否正确ansible-playbook test.yaml --syntax-check# 检查tasks任务ansible-playbook test.yaml --list-task# 检查生效的主机ansible-playbook test.yaml --list-hosts# 干跑一遍ansible-playbook -C test.yaml# 指定从某个task开始运行ansible-playbook test.yaml --start-at-task='Copy Nginx.conf'ansible-playbook test.yaml -t ChangeConfigFile

Handlers:如果触发了指定条件,则notify就会通知handlers执行对应操作.

2.引入变量

# 引用变量,收集主机facts变量ansible-doc -s setupansible 10.0.0.51 -m setup直接引用Ansible变量- hosts: all  remote_user: root  tasks:  - name: copy file    copy: content={
{ ansible_env }} dest=/opt/ansibel_env.txt自定义变量- hosts: all remote_user: root tasks: - name: install package {
{ pkgname }} yum: name={
{ pkgname }} state=latestansible-playbook -e pkgname=memcache -C forth.yaml引用主机变量,在组的主机后面添加变量[webservers]10.0.0.51 ansibel_ssh_port=9122 ansibel_ssh_user=lixiang ansibel_ssh_pass=lixiang10.0.0.52第二种方式[webservers:vars]http_port=8080三种调用方式示例- hosts: webservers remote_user: root vars: - pbvar: playbook Var test tasks: - name: command line var copy: content={
{ cmdvar }} dest=/tmp/cmd.var - name: playbook var copy: content={
{ pbvar }} dest=/tmp/pb.var - name: host iventory var copy: content={
{ http_port }} dest=/tmp/host.var# cmdvar传值,中间有空格,会不识别ansible-playbook -e cmdvar="command line var" vars.yaml

3.Templates介绍

# redis.conf.j2这个文件是从一个redis文件拷贝而来,修改了bind这一行head /root/playbook/redis.conf.j2bind {
{ ansibel_eth0.ipv4.address4}}cat templete.yaml- hosts: webservers remote_user: root tasks: - name: templete config file templete: src=/root/playbook/redis.conf.j2 dest=/tmp/redis.conf

4.条件判断

条件测试-when语句:tasks:- name: install conf file to centos7  templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf  when: ansible_distribution_major_version == "7"- name: install conf file to centos6  templete: src=/path/nginx.conf.c6.j2 dest=/etc/nginx/conf.d/nginx.conf  when: ansible_distribution_major_version == "6"多条件判断tasks:- name: install conf file to centos7  templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf  when:  - ansible_distribution == "CentOS"  - ansible_distribution_major_version == "7"组合条件判断tasks:- name: install conf file to centos7  templete: src=/path/nginx.conf.c7.j2 dest=/etc/nginx/conf.d/nginx.conf  when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7" ) or        (ansible_distribution == "RedHat" and ansible_distribution_major_version == "7" )迭代:有需要循环执行任务时,可以使用迭代机制cat iter.yaml- hosts: webservers  remote_user: root  tasks:  - name: install {
{ item }} package yum: name={
{ item }} state=latest with_item: - nginx - tomcat - mariadb-server - redis

5.角色(roles)

每个角色,以特定的层级目录结构进行组织.

mysql/

  files/:存放由copy或script等模块调用的文件;

  templetes/:templete模块查找所需要模板文件的目录;

  tasks/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;

  handlers/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;

  vars/:至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含;

  meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系,其它的文件需要在此文件中通过include进行包含;

  default/:设定默认变量时使用此目录中的main.yaml文件.

# 配置文件中指定了roles路径roles_path=/etc/ansible/rolesmkdir -pv /etc/ansible/roles/nginx/{files,templetes,tasks,vars,handlers,meta,default}cat /etc/ansible/roles/nginx/tasks/main.yml- name: install nginx  yum: name=nginx state=latest  when: ansible_os_family == "RedHat"- name: install conf  templete: src=vhost1.conf.j2 dest=/etc/nginx/conf.d/vhost1.conf  tags: conf  notify: restart nginx- name: create site home-directory  file: path={
{ ngxhomedir }} state=directory- name: create index page copy: src=index.html dest={
{ ngxhomedir }}/- name: start nginx service: name=nginx state=started# 定义变量时,不用加横线cat /etc/ansible/roles/nginx/vars/main.ymlngxhomedir: /ngxdata/vhost1cat /etc/ansible/roles/nginx/files/index.yml

Vhost1

cat /etc/ansible/roles/nginx/handlers/main.yml- name: restart nginx service: name=nginx state=restartedcat nginx.yml- hosts: webservers remote_user: root roles: - nginxcat /etc/ansible/roles/nginx/templetes/vhost1.conf.j2server{ listen 8080; server_name {
{ ansibel_fqdn}}; location / { root "/ngxdata/vhost1"; }}

 

参考博客:https://blog.51cto.com/13630803/2154192

 

转载于:https://www.cnblogs.com/fawaikuangtu123/p/10889728.html

你可能感兴趣的文章
SpringMVC 拦截器HandlerInterceptor(一)
查看>>
mvc知识应用
查看>>
数据结构之排序三:插入排序
查看>>
Class.forName(),classloader.loadclass用法详解
查看>>
vue route 跳转
查看>>
Source Insight常用快捷键及注释快捷键设置
查看>>
基于tiny4412的Linux内核移植(支持device tree)(一)
查看>>
Device Tree Usage
查看>>
Python基础【day02】:字符编码(一)
查看>>
sample
查看>>
React 深入学习:ReactCreateRef
查看>>
Python: NumPy, Pandas学习资料
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
POJ 1220 高精度/进制转换
查看>>
cocos2d-x中CCLabelAtlas的小图片拼接
查看>>
【学习笔记】深入理解js原型和闭包系列学习笔记——精华
查看>>
深入理解js——prototype原型
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Ubuntu 安装之python开发
查看>>
恶心的struts标签,等我毕业设计弄完了,瞧我怎么收拾你。
查看>>