Ansible Playbook

ansible playbook 的学习

ansible playbook

 playbooks 是ansible 的配置 部署 编排语言,他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令
 
是以YAML 格式的来操作的,所以遵循如下格式

规则一 缩进
  yaml 使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成,一定不能使用tab 键 
  
规则二 冒号
   每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模板可以不需要空格)
   
规则三 短横线
    想要表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一个列表的一部分

配置

  有以下核心组件
  tasks: 任务,由模块定义的操作的列表
  variables: 变量
  templates: 模板,即使用了模板语法的文本文件
  handlers:  由特定条件出发的tasks 
  roles:  角色

  基础组件
  Hosts: 运行指定任务的目标主机
  remote_user: 在远程主机以哪个用户身份运行
     sudo_user: 非管理员用户由哪一些组成
  tasks:  任务列表
     由模块与木块参数组成
  ansible-playbook --syntax-check  /path/to/playbook.yaml   使用--syntan-check 做语法检测
  
 测试运行
 -C  --list-host 影响的主机   --list-tasks  列出任务列表     --list-tags 列出所有标签

运行ansible-playbook 

例子:
---
- hosts: all 
  remote_user: root 
  tasks:
  - name: install  nginx package 
    yum:  name=nginx
    ignore_errors:  yes  
  - name: start nginx service 
    service: name=nginx   state=started 
忽略错误ignore_errors:  yes

playbook的语法具有如下特性
1. 需要以"---"(3个减号)开始,且需顶行首写
2. 次行开始正常些ploybook的内容
3. 使用#号注释代码
4. 缩进必须是统一的,不能将空格和tab混用
5. 缩进的级别必须一致,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的
6. YAML文件内容和linux系统大小写判断方式保持一致,是区别大小写的,k/v 值均需大小写敏感
7. k/v 值可同行写也可换行写.同行使用“:” 分割,换行写需要以“-” 分割,
8. 一个完整的代码块功能需要最少元素,需包括name:task
9. 一个name只能包括一个task 

变量

ansible-playbook -e pkgname=httpd  op.yaml
---
- hosts: all 
  remote_user: root 
  tasks: 
    -name: install {{pkgname}}
      yum: name={{ pkgname }}
     tags: install {{pkgname}}
    -name: start {{pkgname}}
     service: name={{ pkgname }}  state=started  enabled=true 

也可以指定变量
  - hosts: all 
   remote_user: root
   vars: 
     -  pkgname: nginx  
   tasks: 
    -name: install {{pkgname}}
      yum: name={{ pkgname }}
     tags: install {{pkgname}}
    -name: start {{pkgname}}
     service: name={{ pkgname }}  state=started  enabled=true 

ansible-playbook 其他选项技巧

  --inventory=PATH(-i PATH): 指定inventory 文件,默认文件在/etc/ansible/hosts
  --verbose(-v): 显示详细输出
  --forks=num(-f num): 指定并发执行的任务数,默认为5 
  --check (-c) playbook 检测,

实战

 shell 脚本与playbook的转换
 - hosts: all
   tasks:
     - name: "安装apche"
      command: yum install httpd
     - name: 复制配置文件
      command: cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
 
 ansible-playbook ansible-nginx.yaml --list-host    
 --list-host 

playbook 拓展

comments powered by Disqus