zoukankan      html  css  js  c++  java
  • ansible playbook

    一、 yaml语法简介

    在单一档案中,可用连续三个连字符号(---)区分多个档案

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

    使用#注释

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

    缩进的级别必须是一致的,同样的缩进达标同样的级别,

    yaml我呢见区分大小写

    多个k/v可同行写也可换行写,同行使用逗号分隔

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

    一个完成的代码块功能需最少元素包括name和task

    一个name只能包括一个task

    yaml文件扩展名通常为yml或yaml

    List: 列表,其所有严肃均使用”-“ 大头

    Dictionary: 字典,通常由多个key与value构成,也可以放置于{}中

    二、Playbook核心元素

    hosts 执行的远程主机列表

    tasks 人物集

    varniables 内置变量或自定义变量在playbook中调用

    template 模板,可替换模板文件中变量并实现一些简单逻辑文件

    handlers和notity结合使用,由特定条件触发的操作,满足条件方才执行

    tags 标签,指定某条任务执行,用于选择运行行ploybook中的部分代码

    三、playbook基础组件

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

    - hosts: webserver
    remote_user: rooot
    tasks:
    - name: test connection
    ping
    sudo: yes
    sudo_user:wang

    运行playboook

    ansible-playbook filename.yaml [options]

    常见选项

    --check -C 只检测可能会发生的改变,但不真正执行操作

    --list-hosts 列出运行任务的主机

    --list-tags  列出tag

    --list-tasks 列出task

    --limit 主机列表 只正对主机列表中的主机执行

    -v -vv -vvv 显示过程

    编写安装httpd的playbook例子

    ---
    - hosts: server
    remote_user: root

    tasks:
    - name: install
    yum: name=httpd
    - name: config
    copy: src=/data/playbook/httpd.conf dest=/etc/httpd/conf/
    - name: service
    service: name=httpd state=started enabled=yes

    二进制安装mariadb

    ---
    - hosts: appserver
    remote_user: root

    tasks:
    - name: user
    user: name=mysql system=yes home=/data/mysql create_home=no shell=/sbin/nologin
    - name: unarchive
       unarchive src=压缩包 dest=/usr/local owner=mysql group=root
    - name: mysql link
    file: src=解压后文件夹 dest=路径 state=link
    - name: create director
    file: /data/mysql state=director
    - name owner group
    file: path=/data/mysql owner=mysql group=mysql
    - name: mysql database
    shell: chdir=路径/scripts scripts/mysql_install_db --datadir=/data/mysql --user=mysql
    - name: path
    file: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
    - name: config
       copy: 拷贝文件
    - name: service
    - name: start service
    (自己补充去...)

    handlers和notify 结合使用触发条件

    handlers

    是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作

    notify此action可用于在每个play的最后被触发,避免多次有改变发生时每次都执行指定的操作,在notify中列出的操作都成为handler

    ---
    - hosts: server
    remote_user: root

    tasks:
    - name: install
    yum: name=httpd
    - name: config
    copy: src=/data/playbook/httpd.conf dest=/etc/httpd/conf/
    notify: restart httpd
    - name: service
    service: name=httpd state=started enabled=yes
    handler:
    - name: restart httpd
    service: name=httpd state=restarted

     playbook中tags的使用

    给某一个动作加一个标签,后面可以挑着执行

    - hosts: server
    remote_user: root

    tasks:
    - name: install
    yum: name=httpd
    - name: config
    copy: src=/data/playbook/httpd.conf dest=/etc/httpd/conf/
       tags: copy
    notify: restart httpd
    - name: service
    service: name=httpd state=started enabled=yes

    执行: ansible-playbook -t copy httpd.yaml

    playbook中变量使用

    调用变量: 两个花括号

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

    变量来源:

       1. ansible setup facts 远程主机的所有变量都可以直接调用  

        setup模块: 显示主机上的各种信息

        ansible all -m setup -a 'filter=ansible_fqdn'

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

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

                 公共组变量:针对主机组中所有主机定义统一变量

        [webserver]

        ip

        [webserver:vars]

        ntp_server=ntp.cn.com

        ngs_server=nfs.cn.com

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

        ansible-playbook -e varname=value

       4. 在playbook中定义

        vars

          - var1: value1

          - var2: value2

       5. 在独立的变量yaml文件中定义  

        hostname: testnode
        suf: log

        调用:在文件里面写上文件  vars_fies: vars.yml

       6.在role中定义

    模板template

    文本文件,嵌套有脚本(使用模板变成语言编写)

    Jinjia2语言, 使用字面量,有下面形式

      字符串:使用单引号或双引号

      数字: 整数,浮点数

      列表:[item1, item2,...]

      元组: (item1, item2,...)

      字典: {key1: value1, key2: value2}

      布尔型: true/false

      算术运算:+, -, *, /, //, %, **

      比较运算:==, !=, >, >=, <, <=

      逻辑运算: and, or, not

      流表达式: for, if, when

    template功能: 根据模块文件动态生成对应的配置文件

      template文件必须存放于templates目录下,且命名为.j2结尾

      yaml/yml文件需和templates目录平级,结果如下

      ./

        temnginx.yml

        templates

          nginx.conf.j2

      应用在yml的tasks下

        template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

        ps: 主要按照格式来写,src直接写文件名即可

    when 类似if

    条件测试:如果需要根据变量、facts或此前任务的执行结果来作为或task执行与否的前提时要用到条件测试,通过when语句实现,在task中使用,jinjia2语法格式

    when语句

      在task后添加when子句即可使用条件测试;when语句支持jinjia2

      

    迭代: with_items

    迭代:当有需要重复性执行的让你无时,可以使用迭代机制

      对迭代项的引用,固定变量名为 item

      要在task中使用with_items给要迭代的元素列表

      列表格式:

        字符串

        字典

      示例

      - name: add serveral users

        user: name={{item}} state=present group=wheel

        with_items:

          - testuser1

        - testuser2

     playbook中template for if

    roles

    ansible 1.2版本引入的新特性,用于层次化,结构化的组织playbook,roles能够根据层次型结构自动装载变量文件、task及handlers等,要使用roles只需要在playbook中使用include指令即可。roles就是将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中

    复杂场景: 建议使用roles, 代码服务度高

      变更指定主机或主机组

      如命名不规范维护和传承成本大

      某些功能需要多个playbook, 通过include即可

    角色: 角色集合

      usercof.yml

      roles/

        mysql/

          tasks

            main.yml

            create_dir.yml

            static_dir.yml

          files

            main.yml

          vars

            main.yml

        httpd/

    roles各目录作用

    以nginx为例

    mkdir roles/nginx/{tasks,files} -pv

    cd roles/nginx/

    vim tasks/user.yml

    - name: create user
    user: name=nginx shell=/sbin/nologin system=yes create_home=no

    vim install.yml

    - name: install
    yum: name=nginx

    cp /usr/local/nginx/conf/nginx.conf.default /data/ploybook/roles/nginx/files/

    vim sysconfig.yml

    - name: config
    copy: src=nginx.conf dest=/etc/nginx/

    vim service.yml

    - name: service
    service: name=nginx state=started enabled=yes

    vim main.yml

    - include: user.yml
    - include: install.yml
    - include: config.yml
    - include: service.yml

    vim nginx_role.yml

    - hosts: appservers
      roles:
        - role: nginx

    引用

    ansible-playbook nginx_role.yml

    目录结构

  • 相关阅读:
    FCKEditor配置
    在线文档编辑器原理
    DVD格式(vob)文件转换avi,转换后可嵌入HTML中播放
    Javascript小技巧
    sql server 查询当前记录的前一条和后一条记录
    [翻译]开发一个自己的HTML在线编辑器(二)
    在线编辑器(4)TAB键缩进功能
    IIS不能浏览ASP页面
    C#枚举类型的使用《转》
    C#中泛型使用《转》
  • 原文地址:https://www.cnblogs.com/guniang/p/13376220.html
Copyright © 2011-2022 走看看