zoukankan      html  css  js  c++  java
  • ansible-playbook快速入门填坑

    参考另外一篇文章

    http://blog.51cto.com/weiweidefeng/1895261

     when条件 参考http://blog.51cto.com/breezey/1757593

    安装目录:

        程序:
            ansible
            ansible-playbook 
            ansible-doc
        配置文件:
            /etc/ansible/ansible.cfg
        主机清单:
            /etc/ansible/hosts 
        插件目录:
            /usr/share/ansible_plugins/

    ansible playbook

       roles/{mysql,nginx,..}/ 目录结构

    defaults   默认寻找路径
    tasks      此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
    files      存储由copy或script等模块调用的文件
    templates  存储由template模块调用的模板文本;
    handlers   notify调用部分,此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
    vars       roles内变量存放路径,此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
    meta 此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
    ansible.cfg 覆盖/etc/ansible/ansible.cfg的相同配置,如下配置在nginx目录下,作用是:添加一个ansible查找role的路径,这样ansible-playbook运行时可以识别到路径

    
    
    运行playbook,使用ansible-playbook命令
    
        (1) 检测语法
            ansible-playbook  --syntax-check  /path/to/playbook.yaml
        (2) 测试运行
            ansible-playbook -C /path/to/playbook.yaml
                --list-hosts
                -list-tasks
                --list-tags
        (3) 运行
            ansible-playbook  /path/to/playbook.yaml
                -t TAGS, --tags=TAGS
                --skip-tags=SKIP_TAGS
                --start-at-task=START_AT
    1.任务:tasks   main.yml  主要执行的操作
    ---
    -name install nginx
    yum: name=nginx state=present #yum安装软件
    -name start service nginx
    service: name=nginx state=restarted #service重启
    2.变量:Variables
      第一种、自定义变量
        ---
        - hosts: all
     vars:
            key: aaa
            kkk: bbb
         tasks:
          - name display vars
           debug: msg='{{key}}--->{{kkk}}'  
      第二种 自定义变量 通过文件
    #vars.yml
        ---
        - hosts: all
         vars_files:
          - var.file  
         tasks:
          - name display vars
           debug: msg='{{key}}--->{{kkk}}'  
         #var.yml
    ---
         key: 111
         kkk: 222
    第三种 第一个task结果的值传递给第二个task register    
        ---
        - hosts: all
         tasks:
          - name register vars
            shell: hostname
           register: info #shell里的hostname值传给info
          - name display vars
           debug: msg='{{info.stdout}}' #info是个字典,取key为stdout的值
    第四种 循环执行任务 with_items
        4.1 一层for循环
        ---
        - hosts: all
         tasks:
          - name debug
           debug: msg='{{item.key}},,,{{item.valu}}'
           with_items:
            - {key: "aa",value: "bb"}
            - {key: "cc",value: "dd"}
        4.2 嵌套循环 for for..
         ...
           debug: msg='{{item[0]}} , {{item[1]}}'
           with_nested:
            - ["a","b"]
            - ["A","B","C"]
    3.模板:Templates    nginx.conf.j2 (*.j2结尾)
    文本文件,内部嵌套有模板语言脚本(使用Jinja2模板语言编写)
    4.角色:roles    main.yml
    
    以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等目录;

    5.执行入口yml
    ---
    - hosts: all
     gather_facts: no
    roles:
    - nginx #这里填写目录,比如nginx目录 mysql目录等

    inventory 静态文件

    #host-------------这一行不在如下文件内
    ---
    - hosts all
      remote_user: root #远程ssh主机认证用户
      gather_facts no #执行ansible时,不收集远端主机信息,执行速度会加快
      vars:
        nginx_ports:80
      vars_files:
        - "b.yml" #音乐var文件,当前路径

      ansible -i  (hosts文件或hosts目录) 

    inventory 动态文件

      动态inventory的意思是所有的变量可以从外部获取,也就是说我们可以从CMDB以及zabbix系统拉取所有的主机信息然后使用ansible进行管理。

    cat  inverti.py
    #!/usr/bin/env python
    # coding=utf-8
    import json
    host1ip = ['192.168.1.15']
    host2ip = ['192.168.1.110']
    group = 'test11'
    group2 = 'test22'
    hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}}
    print json.dumps(hostdata,indent=4)

      执行命令

    [root@vagrant-centos65 opt]# ansible -i inverti.py all  -a 'uptime' -k
    SSH password: 
    192.168.1.15 | SUCCESS | rc=0 >>
     07:25:27 up  3:56,  3 users,  load average: 0.00, 0.00, 0.00
    192.168.1.110 | SUCCESS | rc=0 >>
     07:25:27 up 7 min,  3 users,  load average: 0.00, 0.02, 0.00
  • 相关阅读:
    struts2基础---->自定义拦截器
    struts2基础---->第一个Struts2程序
    Vue基础---->vue-router的使用(一)
    java框架---->zxing框架的使用
    java基础---->java输入输出流
    java基础----->TCP和UDP套接字编程
    JS基础---->js中ajax的使用
    tomcat源码---->request的请求参数分析
    Android Http请求方法汇总
    Android如何通过shareduserid获取系统权限
  • 原文地址:https://www.cnblogs.com/kevincaptain/p/9993732.html
Copyright © 2011-2022 走看看