zoukankan      html  css  js  c++  java
  • ansible playbook

    ansible playbook

    Playbook与ad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstack的state状态文件。ad-hoc无法持久使用,playbook可以持久使用。
    playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务

    -----playbook核心元素
    hosts    #执行的远程主机列表
    tasks    #任务集
    varniables    #内置变量或自定义变量在playbook中调用
    templates    #模板,即使用模板语法的文件,比如配置文件等
    handlers和notity 结合使用,由特定条件触发的操作,满足条件才执行,否则不执行
    tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码

    -----playbook语法
    playbook使用yaml语法格式,后缀可以是 yaml或yml
    1、在一个playbook文件中,可以连续三个连子号---区分多个play,还有连续三个点...用来表示play的结尾(也可省略)
    2、次行可写playbook的内容,一般会写描述playbook的功能信息
    3、使用#号注释代码
    4、缩进必须统一,不能空格和tab混用
    5、缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行实现的
    6、yaml文件内容和linux系统大小写判断方式保持一致,区分大小写,k/v的值均需大小写敏感
    7、k/v的值可同行写也可换行写,同行使用:分隔
    8、v可以是字符串,也可以是个列表
    9、一个完整的代码块功能需要最少元素包括: name:task

    -----一个简单示例
    cat playbook1.yml    #创建playbook文件
    ---     #固定格式
    - hosts: 192.168.10.186  #定义需要执行主机
      remote_user: root      #定义用户
      vars:                 #定义变量
            http_port: 8081  #变量

      tasks:        #定义一个任务的开始
            - name: create new file #定义任务的名称
              file: name=/root/test1/playtest.txt state=touch       #调用模块,具体做的事
            - name: create new user
              user: name=test02 system=yes shell=/sbin/nologin
            - name: install package
              yum: name=httpd
            - name: config httpd
              template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
              notify:                       #定义执行一个动作,让handlers来引用执行,与handlers配合使用
                    - restart apache        #要执行的动作,与handlers中name定义的内容一致
            - name: copy index.html
              copy: src=/var/www/html/index.html dest=/var/www/html/index.html
            - name: start httpd
              service: name=httpd state=started
            
      handlers:
            - name: restart apache
              service: name=httpd state=restarted

    echo "<h1>playbook test file</h1>" >/var/www/html/index.html    #页面文件准备
    cat /etc/httpd/conf/httpd.conf |grep ^Listen    #配置文件端口准备
    ansible-playbook playbook1.yml -C    #检查测试playbook是否ok
    ansible-playbook playbook1.yml        #执行playbook

    ansible 192.168.10.186 -m shell -a 'ls /root/test1/playtest.txt && id test02'
    #验证playbook执行结果
    #访问测试,浏览器或 curl 192.168.10.186

    -----playbook的运行方式
    格式: ansible-playbook <filename.yml> ... [options]
    ansible-playbook -h    #查看模块命令
    #ansible-playbook常用选项:
    --check  or -C    #只检测可能会发生的改变,但不真正执行操作
    --list-hosts      #列出运行任务的主机
    --list-tags       #列出playbook文件中定义所有的tags
    --list-tasks      #列出playbook文件中定义的所以任务集
    --limit           #主机列表 只针对主机列表中的某个主机或者某个组执行
    -f                #指定并发数,默认为5个
    -t                #指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags)
    -v                #显示过程  -vv  -vvv更详细

    -----playbook中元素属性
    1、最先定义的是要操作的主机和用户
    ---
    - hosts: 192.168.10.186    #定义需要执行的主机
      remote_user: root    #定义执行的用户

    #除上面外,还可在某个tasks中定义执行该任务的远程用户
      tasks:
        - name: run df -h
          remote_user: test
          shell: name=df -h
    还可定义使用sudo授权用户执行该任务
          sudo_user: test

    2、tasks任务列表
    每一个task必须有一个name,这样运行playbook时,输出任务执行信息里可以看出是哪个task,没有定义则会取action的值用来输出时标记特定task
    每个playbook中可以包含一个或多个tasks,每一个tasks完成具体一件事.hosts中定义的主机都会执行定义好的tasks




  • 相关阅读:
    mysql中Can't connect to MySQL server on 'localhost' (10061)
    Win7系统中提示:本地无法启动MySQL服务,报的错误:1067,进程意外终止的解决方法。
    Class.forName()用法详解
    ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
    Struts2的模板和主题theme及自定义theme的使用
    sql中 in 、not in 、exists、not exists 用法和差别
    JavaScript的replace方法与正则表达式结合应用讲解
    Caused by: java.lang.NoClassDefFoundError at com.jc.zm.ZmAlarmAction.analyDo(ZmAlarmAction.java:198)
    打开jsp页面时,显示空白页。
    chown命令详情
  • 原文地址:https://www.cnblogs.com/xiefugui/p/12175813.html
Copyright © 2011-2022 走看看