Ansible详解(二)

一、YAML语法简介

YAML介绍:

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、

Python、Perl以及电子邮件格式RFC2822等。

Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者

YAML特性:

  • YAML的可读性好

  • YAML和脚本语言的交互性好

  • YAML使用实现语言的数据类型

  • YAML有一个一致的信息模型

  • YAML易于实现

  • YAML可以基于流来处理

  • YAML表达能力强,扩展性好

更多的内容及规范参见YAML的官方网站:http://www.yaml.org

YAML语法格式:

  1. 在单一档案中,可用连续三个连字号(——)区分多个档案。另外,还有选择性的连续三个点号,( … )用来表示档案结尾

  2. 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能

  3. 使用#号注释代码

  4. 缩进必须是统一的,不能空格和tab混用

  5. 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的

  6. YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感

  7. k/v的值可同行写也可换行写。同行使用:分隔

  8. v可是个字符串,也可是另一个列表

  9. 一个完整的代码块功能需最少元素需包括 name: task

  10. 一个name只能包括一个task

  11. YAML文件扩展名通常为yml或yaml 

YAML语法简介:

[列表]

List:列表,其所有元素均使用“-”打头

示例:

# A list of tasty fruits

– Apple

– Orange

– Strawberry

– Mango

[字典]

Dictionary:字典,通常由多个key与value构成

示例:

---
# An employee record

    name: Example Developer

    job: Developer

    skill: Elite

也可以将key:value放置于{}中进行表示,用,分隔多个key:value

示例:

---
# An employee record

    { name: Example Developer, job: Developer, skill: Elite }

二、Ansible中的剧本Playbook用法

Playbook核心元素:

  • Hosts:执行的远程主机列表
  • Tasks:任务列表
  • remote_user:远程登录用户名,作用于host和task
  • Varniables:内置变量或自定义变量在playbook中调用
  • Templates:模板,可替换模板文件中的变量并实现一些简单逻辑的文件
  • Handlers:和notify结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • tags:标签,指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性。
    因此会自动跳过没有变化的部分。此时,如果确信其没有变化,就可以通过tags跳过此些代码片段
实例:
---
- hosts: websrvs               # 主机分组
  remote_user: root            # 远程访问登录的用户名

  tasks:        # 执行任务列表
    - name: install httpd   # 执行任务名
      yum: name=httpd       # 执行任务ansible命令
    - name: copy config file
      copy: src=/app/httpd.conf dest=/ect/httpd/conf/ backup=yes
      tags: start_httpd     # 任务执行指定标签

      notify: restart httpd # 触发特性条件,跳过以下命令,执行指定handlers任务

    - name: start httpd
      tags: start_httpd     # 任务标签名
      service: name=httpd state=started enabled=yes

  handlers:
    - name: restart httpd
      service: name=httpd state=restarted

三、Playbook中变量的使用

变量名:仅能由字母、数字和下划线组成,且只能以字母开头

变量来源

  1. ansible all -m setup 远程主机的所有变量都可直接调用

  2. 在/etc/ansible/hosts中定义

    普通变量:主机组中主机单独定义,优先级高于公共变量

    host分组变量:针对主机组中所有主机定义统一变量

  3. 通过命令行指定变量,优先级最高

    例如:ansible-playbook –e varname=value
    
  4. 在playbook中定义

    vars:
    
      – var1: value1
    
      – var2: value2
  5. 在role中定义

    变量定义:key=value

    示例:http_port=80

变量调用方式

通过{
  { variable_name }} 调用变量,且变量名前后必须有空格,

有时用”{
  { variable_name }}”才生效

变量调用优先级

命令行-e > playbook定义 > hosts普通变量 > host分组变量

实例
1:命令行变量赋值

    vim var2.yml

        —--
        – hosts: websrvs
          remote_user: root

          tasks:
            – name: install package
              yum: name={
  { pkname }}

            – name: start service
              service: name={
  { pkname }} state=started enabled=yes

    ansible-playbook -e ‘pkname=vsftpd’ var2.yml     

2:playbook中赋值变量

vim var1.yml
    ---
    – hosts: websrvs
      remote_user: root
      vars:
        – pkname1: httpd
        – pkname2: vsftpd

      tasks:
        – name: install package
          yum: name={
  { pkname1 }}
        – name: install package
          yum: name={
  { pkname2 }}

ansible-playbook var1.yml

3:hosts文件中定义普通变量

vim /etc/ansible/hosts

    192.168.30.11 httpd_port=81

    192.168
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值