zoukankan      html  css  js  c++  java
  • ansible高级使用知识点

    ansible功能重用和高级特性

    Handlers

    ·Handlers只有在其所在的任务被执行时,才会被运行;如果一个任务中定义了notify调用Handlers,但是由于条件判断等原因,该任务未被执行,那么Handlers同样不会被执行。

    ·Handlers只会在Play的末尾运行一次;如果想在一个Playbook的中间运行Handlers,则需要使用meta模块来实现,例如:-meta:flush_handlers。

    ·如果一个Play在运行到调用Handlers的语句之前失败了,那么这个Handlers将不会被执行。我们可以使用mega模块的--force-handlers选项来强制执行Handlers,即使是Handlers所在的Play中途运行失败也能执行。

    handlers:

    • name: restart apache
      service: name=apache2 state=restarted
      notify: restart memcached
    • name: restart memcached
      service: name=memcached state=restarted

    Facts

    在运行任何一个Playbook之前,Ansible默认会先抓取Playbook中所指定的所有主机的系统信息,这些信息我们称之为Facts。

    ansible munin -m setup

    设置gather_facts:no来暂时让Ansible在执行Playbook任务之前跳过收集远程主机Facts信息这一步,这样可以为任务节省几秒钟的时间

    交互式提示

    ---

    • hosts: all
      vars_prompt:
      • name: share_user
        prompt: "What is your network username?"
      • name: share_pass
        prompt: "What is your network password?"
        private: yes

    Block

    ---

    • hosts: web
      tasks:

      Install and configure Apache on RedHat/CentOS hosts.

      • block:
        • yum: name=httpd state=present
        • template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
        • service: name=httpd state=started enabled=yes
          when: ansible_os_family == 'RedHat'
          sudo: yes

      Install and configure Apache on Debian/Ubuntu hosts.

      • block:
        • apt: name=apache2 state=present
        • template: src=httpd.conf.j2 dest=/etc/apache2/apache2.conf
        • service: name=apache2 state=started enabled=yes
          when: ansible_os_family == 'Debian'
          sudo: yes

    块功能非常适合于多个任务共用同一套任务参数的情况

    control node

    控制端版本

    ansible-core 2.11 and Ansible 4.0.0

    make Python 3.8 a soft dependency

    ansible-core 2.12 and Ansible 5.0.0

    will require Python 3.8 or newer

    Starting with ansible-core 2.11, the project will only be packaged for Python 3.8 and newer.

    版本

    • 从2.10版本开始
      community package called ansible
      minimalist language and runtime called ansible-core (called ansible-base in version 2.10)

    Includes

    - include: ./static_git_pull.yml

    Includes引用方式的好处不言而喻:简洁,干净,解耦,复用度高,易于维护

    - include: ./static_git_pull.yml

    when
    动态引用

    Roles

    相对Includes功能,Roles更适合于大项目Playbook的编排架构

    Roles不仅支持Tasks的集合,同时包括vars_files、tasks、handlers、meta、templates

    Roles主要依赖于目录的命名和摆放,默认tasks/main.yml是所有任务的入口

    每个目录下均由main.yml定义该功能的任务集

    引用role的方式


    • hosts: all
      roles:
      • role_name

    ·roles/x/tasks/main.yml:主函数,包括在其中的所有任务将被执行。

    ·roles/x/handlers/main.yml:所有包括其中的handlers将被执行。
    ·roles/x/vars/main.yml:所有包括在其中的变量将在roles中生效。
    ·roles/x/meta/main.yml:roles所有依赖将被正常登入。
    ·roles/x/{files,templates,tasks}/(dir depends on task):所有文件、模板都可存放在这里,放在这里最大的好处是不用指定绝对路径。

    Jinja2

    • 变量的提取使用{{variable}},{%statement execution%}括起来的内容为Jinja2命令执行语句
    • {% for item in all_items %}
      {{ item }}
      {% endfor %}
    • bind-address=0.0.0.0:{{ PORT | default(3306) }}

    Galaxy

    • collections
    • Galaxy provides pre-packaged units of work such as roles, and new in Galaxy 3.2, collections You can find roles for provisioning infrastructure, deploying applications, and all of the tasks you do everyday. The collection format provides a comprehensive package of automation that may include multiple playbooks, roles, modules, and plugins.

    XMind: ZEN - Trial Version

  • 相关阅读:
    【原創】字符首字母大寫格式化函數
    [ZT]如何使SQLServer的日志文件不会增大
    乘除法運算時的異常
    【ZT】delegate 与 多线程
    String.IsNullOrEmpty 方法
    专家指“IP地址告急”系炒作 人均IP可达百万
    如何將程序的Access数据库嵌入到资源中发布
    [ZT]JavaScript+div实现模态对话框[修正版]
    android button背景随心搭配
    图片上传,包括从相册选取与拍照上传
  • 原文地址:https://www.cnblogs.com/2018/p/14620525.html
Copyright © 2011-2022 走看看