• playbook


    https://www.ywcsb.vip/blog/135.html

    https://blog.csdn.net/qq_41960479/article/details/124983995

    YAML语法简介:

    在单一文件第一行,用连续三个连字号"-" 开始,还有选择性的连续三个点号( ... )用来表示文件的结尾
    次行开始正常写Playbook的内容,一般建议写明该Playbook的功能
    使用#号注释代码
    缩进必须是统一的,不能空格和tab混用
    缩进的空格数不重要,只要相同层级的元素左对齐即可,使用缩进表示层级关系。
    YAML文件内容是区别大小写的,key/value的值均需大小写敏感
    多个key/value可同行写也可换行写,同行使用,分隔
    key后面冒号要加一个空格 比如: key: value
    value可是个字符串,也可是另一个列表
    YAML文件扩展名通常为yml或yaml
    

    数据类型

    YAML 支持以下几种数据类型:

    对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    纯量(scalars):单个的、不可再分的值
    
     

    YAML 数组

    列表由多个元素组成,且所有元素前均使用“-”打头。并且 - 后有一个空格, 或者将所有 元素用 [ ] 括起来放在同一行

    - Apple
    - Orange
    - Strawberry
    - Mango
    
    [Apple,Orange,Strawberry,Mango]
    

    YAML 字典

    字典由多个key与value构成,key和value之间用 :分隔, 并且 : 后面有一个空格,所有k/v可以放在一 行,或者每个 k/v 分别放在不同行

    范例:

    #使用缩进的方式
    martin:
      name: Martin D'vloper
      job: Developer
      skill: Elite
    #key对应value,字典列表
    - martin:
        name: Martin D'vloper
        job: Developer
        skills:
          - python
          - perl
          - pascal
    - tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
          - lisp
          - fortran
          - erlang
    #流集合
    ---
    martin: {name: Martin D'vloper, job: Developer, skill: Elite}
    fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
    #几种形式指定布尔值(true/false)
    create_key: yes
    needs_agent: no
    knows_oop: True
    likes_emacs: TRUE
    uses_cvs: false
    
    #使用yaml表示一个家庭
    name: John Smith
    age: 41
    gender: Male
    spouse: { name: Jane Smith, age: 37, gender: Female } # 写在一行里
     name: Jane Smith   #也可以写成多行
     age: 37
     gender: Female
    children: [ {name: Jimmy Smith,age: 17, gender: Male}, {name: Jenny Smith, age: 
    13, gender: Female}, {name: hao Smith, age: 20, gender: Male } ]  #写在一行
     - name: Jimmy Smith    #写在多行,更为推荐的写法
       age: 17
       gender: Male
     - {name: Jenny Smith, age: 13, gender: Female}
     - {name: hao Smith, age: 20, gender: Male }
    

    三种常见的数据格式:

    XML:Extensible Markup Language, 可扩展标记语言,可用于数据交换和配置。

    JSON:JavaScript Object Notation,JavaScript对象标记法,主要用来数据交换或配置,不支持注释

    YAML:主要用来配置,大小写敏感,不支持tab。

     可以用工具互相转换:https://www.json2yaml.com

    官方文档

    https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html

    一个playbook中由多个组件组成,其中所用到的常见组件类型如下:

    Hosts 执行的远程主机列表
    Tasks 任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最 少元素需包括 name 和 task,一个name只能包括一个task
    Variables 内置变量或自定义变量在playbook中调用
    Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
    Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
    tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此 会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地 长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
    

    hosts组件

    Hosts:playbook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用 于指定要执行指定任务的主机,须事先定义在主机清单中

    one.example.com
    one.example.com:two.example.com
    192.168.1.50
    192.168.1.*
    Websrvs:dbsrvs     #或者,两个组的并集
    Websrvs:&dbsrvs   #与,两个组的交集
    webservers:!dbsrvs  #在websrvs组,但不在dbsrvs组
    

     案例:

    - hosts: websrvs:appsrvs
    

    remote_user组件

    remote_user: 可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可 用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户

    ---
    - hosts: websrvs
     remote_user: root #指定任务执行默认用户
      
     tasks:
       - name: test connection
         ping:
         remote_user: xiang
         sudo: yes #默认sudo为root
         sudo_user:Test    #sudo为Test
    

    task列表和action组件

    play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主 机上执行,即在所有主机上完成第一个task后,再开始第二个task task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着 多次执行是安全的,因为其结果均一致

    每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。 如果未提供name,则action的结果将用于输出

    task的两种格式

    action: module arguments  #示例: action: shell wall hello 
    module: arguments   #建议使用 #示例: shell: wall hello 
    

     注意:

    shell和command模块后面跟命令,而非key=value

    ---
    - hosts: websrvs
      remote_user: root
      gather_facts: no
      
      tasks:
       - name: install httpd
         yum: name=httpd 
       - name: start httpd
         service: name=httpd state=started enabled=yes
    




  • 相关阅读:
    phpexcel 导入超过26列、处理时间格式
    PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
    关于微信支付服务器证书更换的提醒
    PHP微信开发之模板消息回复
    js---用对象来放置变量和方法
    electron---更改安装图标
    css---【vw,vh】进行自适应布局单位
    vue---父子组件之间的通信【props,$refs、$emit】
    vue---props进行双向数据绑定报错
    ES6----拓展运算符 三个点【...】
  • 原文地址:https://www.cnblogs.com/linuxws/p/16344453.html
Copyright © 2020-2023  润新知