①ansible-playbook的循环:

  重复执行某任务;对迭代项的引用,固定变量名为“item”,而后要在task中使用with_items给定要迭代的元素列表,列表方法:字符串/字典(类似json)  

- hosts: all
remote_user: root
tasks:
- name: add some groups
group: name={{ item }} state=present
with_items:
- demo1
- demo2
- demo3
- name: add some users
user: name={{ item.name }} group={{ item.group }} state=present //模块中调用的相关参数赋值时前后均无空格
with_items:
- { name: 'user1',group: 'demo1'}
- { name: 'user2',group: 'demo2'}
- { name: 'user3',group: 'demo3'} ////此处key后面的:与value之间要有一个空格,否则为语法错误

②ansible-playbook的条件判断:

  相当于编程语言中的if语句,不过在ansible中要使用when语句,且要定义在tasks中

- hosts: all
remote_user: root
tasks:
- name: Install httpd conf file to httpd2.2
template: src=file/httpd.conf.c6.j2 dest=/etc/httpd/conf/httpd.conf
when: ansible_distribution_major_version == "6"
- name: Install httpd conf file to httpd2.4
template: src=file/httpd.conf.c7.j2 dest=/etc/httpd/conf/httpd.conf
when: ansible_distribution_major_version == "7"
- name: Start httpd
service: name=httpd state=started enabled=true

③ansible-playbook限定执行范围:

  当playbook指定的一批主机中有个别主机需进行变更时,不用修改playbook本身,可通过一些命令选项直接进行限定ansible-playbook的命令执行范围。

  --limit选项:  

ansible-playbook test1.yaml --limit node2
//此时,ansbile-playbook中的hosts即便定义了all,也不会在node2这个组上执行playbook

  或者直接在playbook的yaml文件中显式定义hosts要执行的主机,如:

    指定单台主机:www.a.com

    指定多台主机:www.a.com,www,b.com

    指定一组主机:dbserver

  也可以在执行playbook前先查看受影响的主机有哪些:

[root@node1 work]# ansible-playbook test2.yaml --list-hosts

playbook: test2.yaml

  play #1 (all): all    TAGS: []
pattern: [u'all']
hosts (2):
node3
node2

④ansible加密模块Vault

  在执行某些任务时,难免会触及到一些密码或敏感数据,此时需要对相关任务进行加密,ansible自带的Vault可满足大部分需求。

  使用ansible-vault命令给文件加密:

[root@node1 work]# ansible-vault encrypt test5.yaml   //加密命令
New Vault password:
Confirm New Vault password:
Encryption successful

  此时查看test5.yaml的内容则显示:

[root@node1 work]# cat test5.yaml
$ANSIBLE_VAULT;1.1;AES256
32366237663533633838613431653433653061396630346633396232393265376138626630646633
6635646462346665613963303061323164623265303331610a633537393239633832383334386338
39393932633163303136353934343061363330313663633535626138613537633465326232383663
3036336337333163390a623733323635653536316335323663363736303733303362353839356164
38643665363131316631646166396634616131343835366261356130343061356438363530636364
61353764383636386438636662373665613031623366396364306262396536656362336161313630
33323437623435646133643831656433653061316439323931326134386263653665633037393037
62303865383165336362

  且直接使用ansible-playbook执行此文件会报错,需要先解密。这里列出ansible-vault命令的几个常用的选项:

ansible-vault命令的其他几个常用选项:
edit:用于编辑ansible-vault加密过的文件
rekey:重新修改已被加密文件的密码
create:创建一个新文件,并直接对其进行加密
view:查看经过加密的文件
decrypt:解密文件

    也可以在当前登录用户的家目录下的.ansible目录中创建一个文件用于存储密码,修改这些文件的权限为600,在运行时,使用如下命令进行:

ansible-playbook test5.yaml --vault-password-file /root/.ansible/vault_pass.txt 

    // --vault-password-file PATH/TO/PASSWD_FILE 

 ⑤简单基于roles来一键部署LAMP环境

  首先看一下php的角色目录结构:

[root@node1 roles]# tree php/
php/
├── default
├── files
│   └── php-fpm.conf
├── handlers
│   └── main.yaml
├── meta
├── tasks
│   └── main.yaml
├── templates
│   └── www.conf.j2
└── vars 7 directories, 4 files

  如果使用yum安装的php-fpm的话,其配置文件被切分成了两部分默认的话,如果基于默认配置的话,则无需修改php-fpm.conf,直接修改www.conf即可。

  tasks/main.yaml的内容如下:

- name: install php
yum: name=php,php-fpm state=present
- name: create php-fpm group
group: name=www state=present
- name: create php-fpm user
user: name=www group=www state=present
- name: install conf file1
copy: src=php-fpm.conf dest=/etc/php-fpm.conf
- name: install conf file
template: src=www.conf.j2 dest=/etc/php-fpm.d/www.conf
notify: restart php-fpm
tags: init conf file
- name: start php-fpm
service: name=php-fpm state=started

  handlers/main.yaml的内容如下:

- name: restart php-fpm
service: name=php-fpm state=restarted

  templates/www.conf.j2的内容如下:

listen = {{ ansible_eno16777736.ipv4.address }}:9000

//仅做测试演示的话,只修改此项即可。

  再来看下httpd的角色目录结构:

[root@node1 httpd]# tree
.
├── default
├── files
│   └── index.php //php测试页
├── handlers
│   └── main.yaml
├── meta
├── tasks
│   └── main.yaml
├── templates
│   ├── httpd.conf.j2 //httpd的主配置文件
│   └── php.conf.j2 //此处是基于虚拟主机的php配置
└── vars
└── main.yaml 7 directories, 6 files

  tasks/main.yaml的内容如下:

- name: install htppd
yum: name=httpd state=present
- name: install conf file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf src=php.conf.j2 dest=/etc/httpd/conf.d/php.conf.j2
notify: restart httpd
tags: change conf file
- name: init index.php
copy: src=index.php dest=/var/www/html/index.php
- name: start httpd
service: name=httpd state=started enabled=true

  templates/php.conf.j2的内容如下(基于httpd2.4的配置):

DirectoryIndex index.php
<VirtualHost *:80>
ServerName www.phptest.com
DocumentRoot "/var/www/html"
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://localhost:9000/var/www/html/$1
<Directory "/var/www/html">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

  mysql的角色目录结构大同小异,可自行基于rpm包安装或者其他安装方式定义角色文件即可。

  写好角色后,再定义一个任务,跑一下即可,此处任务文件为/etc/ansible/work/role_lamp.yaml,内容如下:

- hosts: two
remote_user: root
roles:
- httpd
- php
- mysql

  跑完后,如无报错,且测试页能访问即可。本例只是简单的陈述了下大体的角色架构,里面还有很多需要细细雕琢之处,还需各位多多阅读官方文档或其他相关ansible的书籍,深入学习。

  

  

Ansible-playbook简单应用的几个实例的更多相关文章

  1. ansible playbook基本操作

    一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...

  2. ansible playbook详解

    ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...

  3. Ansible6:Playbook简单使用【转】

    ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playbook开创了很多特性,它可以允许你传输某个命令 ...

  4. ansible playbook实践(二)-基础相关命令

    ansible相关的命令: ansible  用来执行ansible管理命令 ansible-doc 用来获取模块的帮助文档 ansible-playbook 当有众多任务时,可编写成playbook ...

  5. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  6. Ansible6:Playbook简单使用

    目录 一个简单的示例 通过Playbook安装apache示例 playbook的构成 Hosts和Users 任务列表和action handlers tags 示例 ansbile-playboo ...

  7. Ansible playbook基础组件介绍

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  8. ansible入门四(Ansible playbook基础组件介绍)

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  9. ansible - playbook(剧组)

    目录 ansible - playbook(剧组) 常用命令 五种传参方式 常用元素详解 tags handlers template when 循环 嵌套循环 ansible - playbook( ...

  10. Ansible - playbook - 概要

    概述 简单描述 ansible playbook 1. playbook 概述 ansible 的 "脚本" 场景 ansible 单条命令, 执行一个操作 问题 如果执行多个操作 ...

随机推荐

  1. Oracle sql判断一个字段是否全数字 或含有中文

    update (select length(t.name), t.* -- name,length(name) from g_enterprise_info t where nvl2(translat ...

  2. [转]mysql主从同步

    Mysql镜像机制配置过程主服务器:   192.168.0.25从服务器:   192.168.0.26MYSQL版本:mysql-5.0.22.tar.gz安装日期:2010年5月14日  一.镜 ...

  3. TVS(瞬态抑制二极管)、Schottky(肖特基二极管)、Zener (齐纳二极管,也称稳压二极管)主要特点及区别和使用

    1. 简单介绍 TVS TVS(Transient Voltage Suppressor)二极管,又称为瞬态抑制二极管,是普遍使用的一种新型高效电路保护器件,它具有极快的响应时间(亚纳秒级)和相当高的 ...

  4. 【集合框架】JDK1.8源码分析之HashMap

    一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...

  5. java could not open `C|D|E|F:\jre\lib\amd64\jvm.cfg' 解决方案与原因

    因为安装了 jdk 后发现有多个 jre 一个是安装目录下的. 还有一个是安装后的自动安装的注意路径都不一样. 由于本人有强迫症所有不能容忍有两个 jre 目录的存在,所以果断删除了 D 盘下的.谨慎 ...

  6. nutch2.2.1+mysql抓取数据

    基本环境:linux centos6.5 nutch2.2.1 源码包, mysql 5.5 ,elasticsearch1.1.1, jdk1.7 1.下载地址http://mirror.bjtu. ...

  7. JQuery validate验证规则

    //定义中文消息 var cnmsg = { required: “必选字段”, remote: “请修正该字段”, email: “请输入正确格式的电子邮件”, url: “请输入合法的网址”, d ...

  8. jdbc_mysql----interset

  9. FlyMcu下载时的问题

    引用:http://www.openedv.com/forum.php?mod=viewthread&tid=69398&page=1#pid396135 和楼下李智鹏用普中科技的ST ...

  10. iOS组件化开发-CocoaPods简介

    CocoaPods简介 任何一门开发语言到达一定阶段就会出现第三方的类库管理工具,比如Java的Maven.WEB的Webpack等.在iOS中类库的管理工具-CocoaPods. 利用CocoaPo ...