zoukankan      html  css  js  c++  java
  • ansible-playbook使用详解

    一、YAML简介
    二、Ansible组件
    三、主机清单Invetory
    四、PlayBook介绍
        
    一、YAML简介
    http://www.yaml.org
    YAML:可以使用简单清单,散列表,标题等数据结构。
    YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔。下面是一个示例。
        yet another markup language //仍是一种标记语言
    name: John kona //key为name,value为John,kona
    age: 41
    gender: Male
    spouse: //kv可以嵌套,kev:value(key:value)
        name: Jane Smith  
        age: 37
        gender: Female //k/v可以嵌套
    children:
        -   name: Jimmy Smith //-:列表,后面的都是列表元素    
            age: 17        //name和age,gender都是children的键key
            gender: Male
        -   name: Jenny Smith
            age 13
            gender: Female
        
    YAML文件扩展名通常为.yaml,如example.yaml。

    1)list
    列表的所有元素均使用“-”打头,例如:
    # A list of tasty fruits
    - Apple
    - Orange
    - Strawberry
    - Mango

    2)dictionary
    字典通过key与value进行标识 //多个key-value联合起来就叫做字典
    例如:
    ---
    # An employee record
    name: Example Developer
    job: Developer
    skill: Elite

    也可以将key:value放置于{}中进行表示,例如:
    ---
    # An employee record
    {name: Example Developer, job: Developer, skill: Elite}

    二、Ansible组件
    Inventory
    Modules
    Ad Hoc Commands
    Playbooks组件:
        Tasks任务
        Variables变量,ansible有自带的变量,也可以自定义
        Templates模板,包含了模板语法的文本文件;
        Handlers处理器,特定条件下才会被触发的任务    
        Roles角色

    三、主机清单Invetory
    1.主机与组:/etc/ansible/hosts
    Inventory
    ansible的默认的inventory file为/etc/ansible/hosts。
    inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

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

    [webservers]
    www1.wolf.com:2222
    www2.wolf.com

    [dbservers]
    db1.wolf.com
    db2.wolf.com
    db3.wolf.com

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

    [webservers]
    www[01:50].example.com

    [databases]
    db-[a:f].example.com

    2.主机变量
    可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用。例如:
    [webservers]
    www1.wolf.com http_port=80 maxRequestsPerChild=808
    www2.wolf.com http_port=8080 maxRequestsPerChild=909

    3.组变量
    组变量是指赋予给指定组内所有主机上的在playbook中可用的变量。例如:
    [webservers]
    www1.wolf.com
    www2.wolf.com

    [webservers:vars]
    ntp_server=ntp.wolf.com
    nfs_server=nfs.wolf.com

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

    [apache]
    httpd1.test.com
    httpd2.test.com

    [nginx]
    ngx1.test.com
    ngx2.test.com

    [webservers]
    apache
    nginx

    四、PlayBook介绍

    核心元素:

    Tasks:任务,由模块定义的操作的列表;
    Variables:变量
    Templates:模板,即使用了模板语法的文本文件;
    Handlers:由特定条件触发的Tasks;
    Roles:角色;
    playbook的基础组件:

    Hosts:运行指定任务的目标主机;
    remote_user:在远程主机以哪个用户身份执行;
    sudo_user:非管理员需要拥有sudo权限;
    tasks:任务列表

    模块,模块参数:

    格式:

    (1) action: module arguments
    (2) module: arguments
    核心元素:

    Tasks:任务,由模块定义的操作的列表;
    Variables:变量
    Templates:模板,即使用了模板语法的文本文件;
    Handlers:由特定条件触发的Tasks;
    Roles:角色;

    playbook的基础组件:

    Hosts:运行指定任务的目标主机;
    remote_user:在远程主机以哪个用户身份执行;
    sudo_user:非管理员需要拥有sudo权限;
    tasks:任务列表

    模块,模块参数:
    格式:

    (1) action: module arguments
    (2) module: arguments
    示例:

    运行playbook,使用ansible-playbook命令
    (1) 检测语法
    ansible-playbook –syntax-check a.yaml
    (2) 测试运行
    ansible-playbook -C a.yaml
    –list-hosts
    –list-tasks
    –list-tags
    (3) 运行
    ansible-playbook a.yaml
    -t TAGS, –tags=TAGS
    –skip-tags=SKIP_TAGS
    –start-at-task=START_AT

    到这里第一个playbook已经运行完毕!!!!

  • 相关阅读:
    Protocol Buffers教程
    Paxos、ZAB、RAFT协议
    kafka自定义序列化器
    Java cas原理
    常见的排序算法
    Java反射
    etcd单机集群
    通过tomcat shutdown port关闭tomcat
    Java ConcurrentHashMap初始化
    LaTeX技巧892: Ubuntu 安装新版本TeXLive并更新
  • 原文地址:https://www.cnblogs.com/king-LL/p/9957053.html
Copyright © 2011-2022 走看看