zoukankan      html  css  js  c++  java
  • ansible playbook

    总的来说, Playbook 语法具有如下一些特性:
    1. 需要以“一” ( 3 个减号)开始,且需顶行首写;
    2. 次行开始正常写 Playbook的内容,建议写明该 Playbook 的功能;
    3. 使用#号注释代码;
    4. 缩进必须是统一的,不能将空格和 Tab 混用;
    5. 缩进的级别必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的;
    6. YAML 文件内容和 Linux 系统大小写判断方式保持一致,是区别大小写的,k/v 的值均需大小写敏感;
    7. k/v的值可同行写也可换行写。同行使用“ : ”分隔,换行写需要以“一”分隔;
    8. 一个完整的代码块功能需最少元素,需包括 name : task;
    9. 一个name只能包括一个 task;

    ---
    - hosts: host_name
    vars:
      foo: foox
    blu: blux
    vars_files:
    - xxx.yml tasks:
    - name: task01 command: ls -trl / - name: task02 copy: src: /app/xx.log dest: /app
    - name: 安装apache
    yum: name={{item}} state=present
    with_items:
    - httpd
    - httpd-devel
    - name: 复制配置文件
    copy:
    src: {{item.src}}
    dest: {{item.dest}}
    with_items:
    - {src: /app/xx.log, dest: /app}
    - {src: /app2/xx2.log, dest: /app2}
    notify:
    - name: restart httpd
    - name: 如果有多个触发,格式如下
    - handlers:
    - name: restart httpd
    service: name=httpd state=restart ...

    # --limit,playbook限定执行的主机范围
    ansible-playbook pb.yml --limit cs_servers

    # --list-hosts,列出执行playbook时,哪些主机会受影响
    ansible-playbook pb.yml --list-hosts

    # --remote-user,指定执行时的用户,如果-hosts字段没有定义用户,那将会使用Inventory文件中定义的用户,如果Inventory文件中没有定义,那么会使用当前ssh连接的用户。
    ansible-playbook pb.yml --remote-user=admin

    # --ask-sudo-pass,传递sudo密码到远程主机
    # --sudo-user
    # --sudo --sudo,强制所有play都使用sudo用户,同时使用--sudo-user选项指定sudo可以执行哪个用户的权限,如果不指定,则默认使用root运行

    # --inventory,指定inventory文件
    ansible-playbook pb.yml --inventory=/etc/ansible/hosts

    # --verbose(-v),显示详细输出,-vvvv显示更精确的输出
    # --extra-vars="k1=v1,k2=v2",定义playbook使用时的变量。 也可以引入文件,--extra-vars="@xxx.yml" 
    # --forks=Num (-f Num),指定并发数量
    # --connection=Type (-c Type),指定连接远程主机的方式,默认ssh。不建议修改
    # --check, 检测模式,所有任务在每台主机上进行检测,但不真正执行

    1. handlers只有在所在的任务被执行时,才会被执行;

    2. handlers只会在play的末尾运行一次,如果想要在playbook的中间运行,需要使用meta模块来实现,例如: - meta: flush_handlers

    3. 

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

    环境变量:
    1. 使用lineinfile模块,来修改远程主机的环境变量
    - name: 修改远程主机上的用户指定的环境变量
    lineinfile: dest=~/.bash_profile regexp=^ENV_VAR= line=ENV_VAR=value

    2. 在后续任务中使用此前定义过的变量,可以使用register来将环境变量保存到自定义的变量中
    - name: 获取刚指定的环境变量,并保存到自定义变量foo中
    shell: source ~/.bash_profile && echo $ENV_VAR
    register: foo
    - name: 打印环境变量
    debug: msg={{foo.stdout}}

    高级变量:

    vars:
    foo:
    - list1
    - list2
    - list3
    访问方式: foo[0] foo[1] foo|first(jinja2格式,不推荐)

    vars:
    eth0: {active: true, ipv4: {address: "127.0.0.1", network: "127.0.0.2"}}
    访问方式:
    一: echo.active.ipv4.address
    二: echo["active"]["ipv4"]["address"]

    内置变量(待完善)

    hostvars

    groups  包含所有hosts文件里主机组的一个列表

    group_names  包含当前主机所在的所有主机组名的一个列表

    inventory_hostname 通过hosts文件定义主机的主机名

    inventory_hostname_short  变量inventory_hostname的第一部分

    play_hosts  执行档期那任务的所有主机

     

     

     

     

  • 相关阅读:
    Days like that:
    获取网站访问来源URL
    论坛里面的一个帖子
    Days like that:
    简单项目布署
    论坛里面的一个帖子
    获取网站访问来源URL
    piwik开放源代码的Web统计软件
    p标签里面不能嵌套div
    IO操作 第二篇 学习(转载)
  • 原文地址:https://www.cnblogs.com/wangsl1204/p/13654123.html
Copyright © 2011-2022 走看看