ansible学习playbook入门

Posted Linux微堂笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible学习playbook入门相关的知识,希望对你有一定的参考价值。

什么是playbook

  • playbook是以 YAML 文件作为载体

  • playbook可以描述多个任务的集合

  • playbook使目标主机按照既定顺序执行任务以达到期望状态

  • 通过ansible-playbook命令执行

什么是YAML语言

  • playbook是一种人性化的数据格式定义语言

  • playbook具有:结构感强、可读性好、通用的数据穿行化格式

语法要求:

  • 以 '---' 作为起始句

  • 大小写敏感

  • 使用缩进表示层级关系(一般用2个空格表示缩进)

  • 缩进是不允许使用tab键,只许使用空格

  • 缩进的空格数目不重要,相同层级的元素左侧对齐即可

示例图:


示例图讲解

  • 对象: 键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)

 
   
   
 
  1.  name: David

  2.  job: Developer

在python中的表示: {"name":"David","job":"Developer"}

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

 
   
   
 
  1.  - apple

  2.  - orange

在python中的表示: ["apple","orange"]

  • 纯量(scalars): 单个的、 不可再分的值

 
   
   
 
  1. tasks:

  2.    - name: Install

  3.      yum: yum...

  4.    - name: copy

  5.      copy: copy...

在python中的表示:

{"tasks":["name":"Install","yum":"yum...",{"name":"copy","copy":"copy..."}]}

play组成部分:

  • Target Section: 定义将要执行playbook的远程主机组及属性

  • Variable Section: 定义playbook运行时需要使用的变量

  • Task Section: 定义将要在远程主机上执行的任务列表


Target Section

  • hosts: 定义远程的主机组

  • remote_user: 执行该任务组的用户

  • sudo: 如果设置为yes,以sudo权限执行命令

  • gather_facts: 默认收集setup模块传递来的变量,可禁止


 
   
   
 
  1. - host: webservers

  2.  remote_user: root

  3.  sudo: yes

  4.  gather_facts: no

  5. ......

Variable Section

  • vars:  直接写入对象形式的变量名及其值

  • vars_files: 引入变量所在的文件


 
   
   
 
  1. ...

  2. ...

  3.  vars:

  4.    - http_port: 8080

  5.    - max_clients: 200

  6.  vars_files:

  7.    - /tmp/vars

  8. ...

  9. ...

Task Section

  • 由任务组成的列表,其中包含任务名,模块以及模块参数


 
   
   
 
  1.  tasks:

  2.    - name: aaa

  3.      module 1:

  4.        ...... # module 1 args

  5.    - name: bbb

  6.      module 2:

  7.        ...... # module 2 args

  8.    - name: ccc

  9.      module 3:

  10.        ...... # module 3 args

系统变量

  • setup模块(默认gather_facts = yes) 

自动变量

  • Inventory文件

  • Playbook文件

  • 变量文件

引用变量方式: {{ var }} 双大括号 示例


 
   
   
 
  1. ...

  2. ...

  3.  - name: edit index

  4.    shell: sed -i 's/ipaddr/{{ ansible_default_ipv4.address }}/;s/hostname/{{ ansible_hostname }}/' /var/www/html/index.html

  5. ...

  6. ...

运行Playbook方式

YAML语法有3中检查方式:

  • python命令

 
   
   
 
  1. python -c 'import yaml,sys; print yaml.load(sys.stdin)' < ./webservers.yaml


  • 网页方式

    http://www.yamllint.com/

  • ansible命令工具

 
   
   
 
  1. # 执行playbook

  2. ansible-playbook -i inventory webservers playbook.yml

  3. # 语法检查

  4. ansible-playbook -i inventory webservers playbook.yml --syntax-check

  5. # 输出匹配主机列表,不执行其它操作

  6. ansible-playbook -i inventory webservers playbook.yml --list-hosts

  7. # 列出所有可用的标记

  8. ansible-playbook -i inventory webservers playbook.yml --list-tags

  9. # 列出将要执行的所有任务

  10. ansible-playbook -i inventory webservers playbook.yml --list-tasks


以上是关于ansible学习playbook入门的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 学习总结—— Ansible playbook 入门详解

初窥Ansible playbook

初窥Ansible playbook

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

Ansible的playbook的基本使用与快速入门