• ansible七种武器和json


                                                               ansible七种武器和json

    • 第一种武器

    ansible 命令,用于执行临时性的工作,也是我们之前主要学习的功能,必须掌握

    • 第二种武器

    ansible-doc Ansible模块文档说明,针对每个模块都有详细的用法说明及应用案例介绍,功能和Linux系统man命令类似,必须掌握ansible七种武器

    • 第三种武器

    ansible-console Ansible 为用户提供的一款交互式工具,用户可以在 ansible-console 虚拟出来的终端上像 Shell 一样使用 Ansible 内置的各种命令,这为习惯于使用 Shell 交互方式的用户提供了良好的使用体验。

    • 第四种武器

    ansible-galaxy github 上下载管理 Roles 的一款工具,python pip 类似。ansible七种武器

    • 第五种武器

    ansible-playbook 是日常应用中使用频率最高的命令,其工作机制是:通过读取预先编写好的 playbook 文件实现批量管理。要实现的功能与命令 ansible 一样,可以理解为按一定条件组成的 ansible 任务集,必须掌握

    • 第六种武器

    ansible-vault 主要用于配置文件加密,如编写的Playbook 配置文件中包含敏感信息,不希望其他人随意查看, ansible-vault 可加密/解密这个配置文件ansible七种武器

    • 第七种武器

    ansible-pull

    Ansible 有两种工作模式 pull/push ,默认使用 push模式工作,pull 模式和通常使用的 push 模式工作机理刚好相反

    – 适用场景:有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;

    – 通常在配置大批量机器的场景下会使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求。

    json简介

     json 是什么?

    json JavaScript 对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。

    JSON中的分隔符限于单引号 ' 、小括号 ()、中括号[ ]、大括号 { } 、冒号 : 和逗号 ,

    json 特性

    JSON 是纯文本

    JSON 具有"自我描述性"(人类可读)

    JSON 具有层级结构(值中存在值)

    JSON 可通过 JavaScript 进行解析json简介

    json 语法规则

    – 数据在名称/值对中

    – 数据由逗号分隔

    – 大括号保存对象

    – 中括号保存数组

    json 数据的书写格式是:名称/值对。

    – 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:"漂亮姐" : "庞丽静"

    json 语法规则之数组

    { "讲师":

    ["牛犇", "丁丁", "静静","李欣"]

    }

    • 复合复杂类型

    { "讲师":

    [ {"牛犇":"小逗逼", "负责阶段":"1"},

    {"丁丁":"老逗逼", "负责阶段":"2"},

    {"静静":"漂亮姐", "负责阶段":"3"},

    {"李欣":"老司机", "负责阶段":"4"}

    ]

    }

    yaml简介

    yaml 是什么     -- //不可table

    – 是一个可读性高,用来表达数据序列的格式。

    YAML:YAML Ain't Markup Language

    YAML参考了其他多种语言,包括:C语言、PythonPerl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans2001年首次发表了这种语言[1],另外Ingy döt NetOren Ben-Kiki也是这语言的共同设计者[2]。目前已经有数种编程语言或脚本

    语言支持(或者说解析)这种语言。

    yaml 基础语法

    YAML的结构通过空格来展示

    – 数组使用"- "来表示

    – 键值对使用": "来表示

    YAML使用一个固定的缩进风格表示数据层级结构关系

    – 一般每个缩进级别由两个以上空格组成

    # 表示注释

    • 注意:***************************************

    – 不要使用tab,缩进是初学者容易出错的地方之一

    – 同一层级缩进必须对齐

    YAML的键值表示方法

    – 采用冒号分隔

    : 后面必须有一个空格

    YAML键值对例子

    "庞丽静": "漂亮姐"

    – 或

    "庞丽静":

    "漂亮姐"

    – 复杂YAML的键值对嵌套

    "讲师":

    "庞丽静": "漂亮姐"

    – 或

    "讲师":

    "庞丽静":

    "漂亮姐"

    – 数组

    ["牛犇", "丁丁", "静静", "李欣"]

    YAML 数组表示方法

    – 使用一个短横杠加一个空格

    YAML 数组例子

        - "牛犇"

        - "丁丁"

        - "静静"

        - "李欣"

    – 哈希数组复合表达式

    "讲师":

         - "牛犇"

         - "丁丁"

         - "静静"

         - "李欣"yaml简介

    – 高级复合表达式

    "讲师":

    -

        "牛犇": "小逗比"

        "阶段": 1

    -

         "丁丁": "老逗比"

         "阶段": 2

    -

         "静静": "漂亮姐"

         "阶段": 3

    -

         "李欣": "老司机"

         "阶段": 4

    yaml高级语法

    | > 表示对应的值为多行字符, > | 的区别是会把 转换为空格

    ! 可以设置类型,!! 可以强制类型转换

    – 为了维持文件的简洁,并避免数据输入的错误,YAML提供了结点参考(*)和散列合并(<<)参考到其他结点标签的锚点标记(&)。参考会将树状结构加入锚点标记的内容,并可以在所有数据结构中运作,合并只有散列表可以使用,可以将键值自锚点标记复制到指定的散列表中

    jinja2模版简介

    jinja2 是什么

    Jinja2是基于python的模板引擎,包含 变量 和 表达式两部分,这两者在模板求值的时候会被替换为值。模板中还有标签,控制模板的逻辑。

    • 为什么要学习 jinja2 模版

    – 要使用 ansible 就要深入学习 playbook 配置及模板。playbook 的模板使用 python jinja2 模块来处理的jinja2模版简介

    jinja2 模版基本语法

    – 模板的表达式都是包含在分隔符 "{{ }}" 内的;

    – 控制语句都是包含在分隔符 "{% %}" 内的;

    – 另外,模板也支持注释,都是包含在分隔符 "{# #}",支持块注释。

    – 调用变量

    {{varname}}

    – 计算

    {{2+3}}

    – 判断

    {{1 in [1,2,3]}}

    jinja2 模版控制语句

    {% if name == '小逗逼' %}

    讲故事,吹牛B

    {% elif name == '老逗逼' %}

    黑丝(82年的)

    {% elif name == '漂亮姐' %}

    约会

    {% else %}

    沉迷学习,无法自拔

    {% endif %}

    jinja2 模版控制语句

    {% if name == ... ... %}

    ... ...

    {% elif name == '漂亮姐' %}

    {% for method in [约会, 逛街, 吃饭, 看电影, 去宾馆] %}

    {{do method}}

    {% endfor %}

    ... ...

    {% endif %}

    jinja2 过滤器

    – 变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。

    – 例如:

    – 把一个列表用逗号连接起来: {{ list|join(', ') }}

    – 过滤器这里不一一列举,需要的可以查询在线文档

    http://docs.jinkan.org/docs/jinja2/templates.html

    #builtin-filters

    playbook是什么

    playbook 是什么?

    playbook ansible 用于配置,部署,和管理托管主机剧本。通过 playbook 的详细描述,执行其中的一系列 tasks,可以让远端主机达到预期的状态。

    – 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,Ansible 中由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情playbook是什么

    • 为什么要使用playbook

    – 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的 ad-hoc 命令是不适合的,这时最好使用playbook,就像执行 shell 命令与写 shell 脚本一样,也可以理解为批处理任务

    – 使用 playbook 你可以方便的重用编写的代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码在使用 Ansible 的过程中,你也会发现,你所处理的大部分操作都是编写 playbookplaybook语法基础

    playbook 语法格式

    playbookYAML 语言编写,遵循 YAML 标准

    – 在同一行中,#之后的内容表示注释

    – 同一个列表中的元素应该保持相同的缩进

    playbook 由一个或多个 play 组成

    play hosts,variables,roles,tasks 等对象的表示方法都是键值中间以 ": " 分隔表示

    YAML 还有一个小的怪癖. 所有的 YAML 文件开始行都应该是 ---. 这是 YAML 格式的一部分, 表明一个文件的开始

    playbook语法基础

    playbook 构成

    Target: 定义将要执行 playbook 的远程主机组

    Variable: 定义 playbook 运行时需要使用的变量

    Tasks: 定义将要在远程主机上执行的任务列表

    Handler: 定义 task 执行完成以后需要调用的任务playbook语法基础

    Playbook执行结果

    • 使用 ansible-playbook 运行playbook文件,得到输出内容为 JSON 格式。并且由不同颜色组成,便于识别。

    一般而言

    • 绿色代表执行成功

    ***代表系统代表系统状态发生改变

    • 红色代表执行失败playbook语法基础

    • 第一个playbook

    ---

    - hosts: all

    remote_user: root

    tasks:

    - ping:

    # 第一行,表示开始

    ansible-playbook myping.yml -f 5

    -f 并发进程数量,默认是 5

    hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符

    remote_user 就是账户名

    playbook语法基础续 ... ...

    tasks

    – 每一个 play 包含了一个 task 列表(任务列表).

    – 一个 task 在其所对应的所有主机上(通过 hostpattern 匹配的所有主机)执行完毕之后,下一个 task才会执行.

    – 有一点需要明白的是(很重要),在一个 play 之中,所有 hosts 会获取相同的任务指令,这是 play 的一个目的所在,也就是将一组选出的 hosts 映射到 task,执行相同的操作playbook语法基础

    playbook 执行命令

    – 给所有主机添加用户 plj,设置默认密码 123456

    – 要求第一次登录修改密码

    ---

    - hosts: all

      remote_user: root

      tasks:

        - name: create user plj

          user: group=wheel uid=1000 name=plj

        - shell: echo 123456 | passwd --stdin plj

        - shell: chage -d 0 plj

     [root@localhost 07.03]# ansible-playbook uesr2.yml

    案例2

    ---

    - hosts: web1

      remote_user: root

      vars:

        uname: li4

      tasks:

        - shell: userdel -r zhang3

          ignore_errors: True

        - user:

            name: "{{uname}}"

            password: "{{ '123456' | password_hash('sha512') }}"

            groups: users

    [root@localhost ansible]# ansible-playbook uesr1.yml

    案例3

    ---

    - hosts: web

      remote_user: root

      tasks:

        - name: install the latest version of Apache

          yum:

            name: httpd

            state: installed

        - lineinfile:

            path: /etc/httpd/conf/httpd.conf

            regexp: '^Listen '

            line: 'Listen 8080'

        - lineinfile:

            path: /etc/httpd/conf/httpd.conf

            regexp: '#ServerName '

            line: 'ServerName localhost'

        - shell: echo "hello world" >index.html

          args:

            chdir: /var/www/html

          notify:

            - restart httpd

      handlers:

        - name: restart httpd

          service: name=httpd state=restarted

    [root@localhost 07.03]# ansible-playbook httpd.yml              

  • 相关阅读:
    走近Qt
    C: 数组形参
    C++: 单例模式和缺陷
    c++: 获取delete[]中的数组大小
    像素格式
    BMP图像格式
    Sublime Text 格式化JSON-pretty json
    Sublime Text3配置SublimeREPL快捷键的方法(Python)
    Sublime Text3安装SublimeREPL插件以及快捷键设置
    Sublime Text3 注册码激活码(持续更新中2018-11-20)
  • 原文地址:https://www.cnblogs.com/qingbai/p/11957524.html
Copyright © 2020-2023  润新知