zoukankan      html  css  js  c++  java
  • Ansible的基础元素和YAML介绍

    本节内容:

    • YAML
    • Ansible常用的数据类型
    • Ansible基础元素

    一、YAML

    1. YAML介绍

    YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。

    YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。其特性:

    • YAML的可读性好
    • YAML和脚本语言的交互性好
    • YAML使用实现语言的数据类型
    • YAML有一个一致的信息模型
    • YAML易于实现
    • YAML可以基于流来处理
    • YAML表达能力强,扩展性好

    更多的内容及规范参见http://www.yaml.org。

    2. YAML语法

    YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔。下面是一个示例。YAML是用键值对和缩进来表示的。

    name: John Smith
    age: 41
    gender: Male
    spouse:                         
           name: Jane Smith
           age: 37
           gender: Female
    children:                     
           - name: Jimmy Smith
             age: 17
             gender: Male
           - name: Jenny Smith
             age 13
             gender: Female

    YAML文件扩展名通常为.yaml,如example.yaml。

    二、Ansible常用的数据类型

    1. list

    列表中的所有元素都使用“-”打头,例如:A list of tasty fruits

    • Apple
    • Orange
    • Strawberry
    • Mango

    2. dictionary

    字典通过key与value进行标识,例如:
    ---
    An employee record:

    name: Example Developer
    job: Developer
    skill: Elite

    也可以将key:value放置于{}中进行表示,例如:

    ---
    An employ record:

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

    三、Ansible基础元素

    1. 变量

    (1)变量命名

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

    (2)facts

    facts是由正在通信的远程目标主机发回的信息,这些信息被保存在ansible变量中。要获取指定的远程主机所支持的所有facts,可使用如下命令进行:

    # ansible hostname -m setup

    (3)register

    把任务的输出定义为变量,然后用于其他任务,示例如下:

    tasks:
       - shell: /usr/bin/foo
         register: foo_result
         ignore_errors: True

    (4)通过命令行传递变量

    在运行playbook的时候也可以传递一些变量供playbook使用,示例如下:

    ansible-playbook test.yml --extra-vars "hosts=www user=magedu"

    就是说hosts和user这两个变量可以在test.yml文件中直接调用

    (5)通过roles传递变量

    当给一个主机应用角色的时候可以传递变量,然后在角色内使用这些变量,示例如下:

    - hosts: webservers
      roles: 
            - common
            - { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }

    注意:role、dir、port是变量名,冒号后面的是变量值。

    2. Inventory

    ansible的主要功能在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
    inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

    (1)inventory文件格式

    inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号标明。

    [webservers]
    www1.wisedu.com:8888
    www2.wisedu.com

    如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,例如:

    [webservers]
    www[01:50].example.com
    
    [databases]
    db-[a:f].example.com

     (2)主机变量

    可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用,例如:

    [webservers]
    www1.wisedu.com http_port=80 maxRequestsPerChild=808
    www2.wisedu.com http_port=8080 maxRequestsPerChild=909

    (3)组变量

    组变量是指赋予给指定组内所有主机上的在playbook中可用的变量。例如:

    [webservers]
    www1.wisedu.com
    www2.wisedu.com
    
    [webservers:vars]   # 表示向webservers这组主机定义变量如下,回头这两台主机上都可以调用变量ntp_server和nfs_server
    ntp_server=ntp.wisedu.com
    nfs_server=ntp.wisedu.com

    (4)组嵌套

    inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。不过,这些变量只能在ansible-playbook中使用,而ansible不支持。例如:

    [apache]
    httpd1.wisedu.com
    httpd2.wisedu.com
    
    [nginx]
    ngx1.wisedu.com
    ngx2.wisedu.com
    
    [webservers:children]     # 注意:children是固定格式
    apache
    nginx
    
    [webservers:vars]
    ntp_server=ntp.wisedu.com

    (5)inventory参数

    ansible基于ssh连接inventory中指定的远程主机时,还可以通过参数指定其交互方式,这些参数如下所示:

  • 相关阅读:
    BNUOJ 34978 汉诺塔 (概率dp)
    hdu1427 速算24点
    vim学习之以退为进——可反复移动和可反复改动的美妙结合
    C++设计模式实现--策略(Strategy)模式
    ios怎样在一个UIImageButton的里面加一些自己定义的箭头
    HTML5 Canvas 画图入门
    AT3728 Squirrel Migration
    HTTP请求的GET与POST方式的区别
    HTTP 的请求过程?
    servlet的生命周期
  • 原文地址:https://www.cnblogs.com/zhaojiankai/p/7609480.html
Copyright © 2011-2022 走看看