• 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  执行档期那任务的所有主机

     

     

     

     

  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/wangsl1204/p/13654123.html
Copyright © 2020-2023  润新知