ansible主动化运维工具学习笔记

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

目录
    ansible环境摆设
    控制端预备
    被控制端预备
    ansible批量管理主机的方式紧张有两种
    设置预备:
    ssh密码认证方式管理呆板
    密码登录,必要各主机密码相同
    设置免密登录
     ssh密钥方式批量管理主机
    ansible实现批量化主机管理的模式
    ansible-doc命令
    command模块
     shell模块
      script模块
      copy模块
     yum_repository模块
    yum模块
      systemd模块
      group模块
    user模块
    date命令:
    File模块
    cron模块
    debug模块
    template模块
    lineinfile模块
    PlayBook
    YMAL
    Play
    ansible变量
    全局变量
    脚本变量
    资产变量
    Facts变量
    注册变量
    变量优先级
    任务控制
    条件
    循环
    tags属性
    handlers属性:
    JinJa2模板
    介绍:Jinja2是基于Python书写的模板引擎。
    定名:1.jinja2 文件以 .j2 为后缀,也可以不写后缀,
    定界符:
    判断控制:
    循环控制(不可利用break,countinue):
    Role
    循环方法创建main.yml
    role执行:
    Galaxy平台
    实战:
    优化ansible执行速度
    1.ssh长连接:
    2.开启pipelining:
    3.Facts缓存到redis:
    自由执行计谋
    异步执行
    插件
    回调插件
    主输出插件
    启用其他内置的回调插件
    回调范例
    日记回调插件
    开发回调插件
   
   
    ansible基于python编写,紧张由python的两个ssh处置惩罚模块,paramiko以及pyYAML模块。
    ansible环境摆设

    控制端预备

    可利用yum安装方式
     yum -y  install epel-release       # 安装扩展源
     yum install -y ansible libselinux-python         #安装ansible及其所需的体系模块
    被控制端预备

     yum -y  install epel-release       # 安装扩展源
     yum install -y libselinux-python          #安装ansible所需的体系模块
    ansible批量管理主机的方式紧张有两种

    传统的输入ssh密码验证,密钥管理
    设置预备:

    设置好ansible的设置文件,添加被管理呆板的ip地点,大概主机名
    1.备份现有的设置文件
      cp  /etc/ansible/hosts{,.ori}     # 将hosts文件复制到hosts.ori文件中
    2.添加ansible必要管理的呆板地点
      vim  /etc/ansible/hosts
      # 添加内容
    [主机列表模块]
    被控制主机的IP
      注意:多台网络号相同的主机可以利用X.X.X.[S:E]格式
    ssh密码认证方式管理呆板

    密码登录,必要各主机密码相同

    ansible是直接利用linux本地的ssh服务,以及一些远程利用,一般情况下客户端的ssh服务默认开启,无须额外管理
    1, 查看ssh是否开启(一般默认开启)
      systemctl status sshd
    2, 在控制端主机上,告诉其他被管理的呆板,你要执行什么命令,以及那些用户去执行
      ansible   主机列表模块    -m  功能   -a  "命令" -k  -u  用户
    注意:①,主机列表模块不加[]
      ②,当利用all时,全部主机列表模块被选中
      ③,当利用多模块时用‘’括起来,模块之间:
    并集   :
    交集   :&
    差集   :!
      ④,如果不想利用默认的库存文件位置(通常是/etc/ansible/hosts),可以在/etc/ansible/ansible.cfg中修改,
    在利用ansible时可以通过-i指定自定义的库存文件路径(资产)
    常用参数
      # -m  指定功能模块,默认就是command,command模块它用于在远程主机上执行命令,除了command模块,另有ping等模块。
      #  -a  告诉模块必要执行的参数
      # -k  询问密码验证
      # -u 指定运行的用户
      # -i指定自定义的库存文件路径
    3,如上利用,一般默认情况下会有错误提示,必要执行手动ssh对主机进行连接,及可利用ansible命令利用了
    # 远程连接比方
      ssh   root@192.168.47.132
    # 可查看
      cat  ~/.ssh/know_hosts
    4,此时可以再次执行ansible命令
    设置免密登录

    当主机密码不同时,可以利用免密登录
            在/etc/ansible/hosts文件中,定义好密码即可,即可实现快速的认证和远程管理主机
     1, 修改hosts文件·
    [主机列表模块]
    被控制主机的ip  ansible_user=用户名   ansible_ssh_pass=密码
    参数
    # absible_host             主机地点
    # ansible_port             端口,默认是22
    # ansible_user             认证的用户
    # ansible_ssh_pass      用户认证的密码
    2,此时可以不必要输入密码,既可以主动ssh验证通过了
             ansible   主机列表模块   -m  功能   -a  “命令”
     ssh密钥方式批量管理主机

    这种方式比设置host文件的密码参数更安全
    1.在控制机上创建ssh密钥对
        ssh-keygen  -f   ~/.ssh/id_rsa   -P "" >/dev/null  2>&1
    参数
    # f    :用于指定生成的密钥对文件的文件名
    # P   :用于指定密钥对的密码(口令)。这里设置为空字符串(""),意味着生成的密钥对在利用时不必要输入密码就能被访问和利用
    # &1:表示将标准错误输出重定向到和标准输出相同的地方(也就是/dev/null)
    2.此时到“cd  ~/.ssh/”下检查公私钥文件:id_rsa    id_ras.pub
    3.编写公钥分发脚本
      #!/bin/bash
      rm -rf   ~/.ssh/id_ras*
      ssh-keygen   -f   ~/.ssh/id_rsa   -P "" >/dev/null  2>&1
      SSH_Pass=密码
      Key_Path=~/.ssh/id_rsa.pub
      for   ip  in  132 133                   # 这里的132,133是我的管理主机的末了主机号
      do
    # 非交互式分发公钥命令必要用sshpass指定SSH密码,通过-o   StrictHostKeyChecking=no跳过SSH连接确认信息
               sshpass    -p$SSH_Pass    ssh-copy-id   -i    $Key_Path    "-o   StrictHostKeyChecking=no"        192.168.47.$ip
      done
    4.运行脚本,利用ansible工具
    ansible实现批量化主机管理的模式

    紧张有两种:
    利用ansible的纯命令行实现的批量管理,ad-hoc模式——好比简单的shell命令管理
    利用ansible的playbook脚本来实现批量管理,playbook脚本模式——好比复杂的shell脚本
    Ad-hoc模式
    ansible的ad-hoc模式是ansible的命令行情势,处置惩罚一些临时的,简单的任务,可以直接利用ansible的命令行来利用
    playbook模式
    ansible地playbook莫事是针对比力具体,且比力大的任务,必要写好脚本来实现,好比一键摆设rsync备份服务器,lnmp环境。
    ansible-doc命令

    列出全部的ansible-hoc支持的模块
      ansible-doc    -l  
    查看某个模块的具体的用法参数
      ansible-doc   -s   command
    command模块

    作用:在远程节点上执行一个命令
     ansible-doc   -s    command    # 查看该模块支持的参数
    常用参数:
    chdir:在执行命令之前,通过cd进入该参数指定的目录
   

    creates:在创建一个文件之前,判断该文件是否存在,如果存在了则跳过前面的东西,如果不存在则执行前面的动作
   

    free_form:该参数可以输入任何的体系命令,实现远程执行和管理
    removes:定义了一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过动作
    warn:是否提供告警信息
    注意:
    command模块是ansible的默认基本模块,可以省略不写,利用command模块,不得出现shell变量$name,也不得出现特殊符号>< | ; &这些符号command模块都不熟悉,如果必要利用特殊符号,可以利用shell模块。
     shell模块

    作用:在远程呆板上执行复杂的命令
    ansible-doc   -s    shell   # 查看该模块支持的参数
   

    注意:语句之间用;进行分割
      script模块

    功能:将控制端的脚本远程传输到被控制主机上运行
    对比shell模块。script模块功能更强大
    ansible-doc   -s    script   # 查看该模块支持的参数
   

    注意:直接传送脚本名即可
      copy模块

    功能:紧张用于管理节点和被管理节点之间的文件拷贝
    常用参数:
     src 指定拷贝文件的源地点
     dest  指定拷贝文件的目的地点
   

     backup 拷贝文件前,若被控制主机源文件发生变化,则对目标文件进行备份
   

     woner 指定新拷贝文件的全部者
     group 指定新拷贝文件的全部组
     mode 指定新拷贝文件的权限
   

       
     yum_repository模块

    功能:添加yum库
    常用参数:
     name 仓库名称,就是仓库文件中的第一行的中括号中名称,必须的参数
     description 自定义仓库描述信息,必须的参数
     baseurl  yum存储库‘repodata’目录所在目录的url,必须的参数,它可以是多个url的列表
     file 仓库文件保存到被控制主机的文件名,不包罗.repo。默认是name的值
     state  preset确认添加仓库文件,absent确认删除仓库文件
     gpgcheck 是否检查gpg  yes|no ,没有默认值,利用/etc/yum.conf进行设置
    yum模块

    等同于Linux上的yum命令,对远程服务器上的rpm包进行管理。
    常用参数:
     name  要安装的软件包名,多个软件包以逗号隔开
     state 对当前指定的软件安装,移除利用(present  installed  latest absent removed)
             支持的参数
     present 确认已经安装,但不升级
   

     installed  确认已经安装
     latest   确保安装,且升级为最新
     absent 和removed  确认已移除
    安装软件包组
     ansible  列表主机模块  -m  yum   -a   ”name='@Development  tools'   state=present“
     注意:@Development tools是要安装的软件包组的名称。在基于 RPM 的 Linux 体系中,软件包可以分组,Development tools是一个包罗了许多开发相关工具(如编译器、调试工具等)的软件包组。
      systemd模块

    功能:管理远程主机上的systemd服务,就是由systend所管理的服务
    常用参数:
     daemon_reload  重新载入systemd,扫描新的/变动的单元
     enabled  是否开机自启动yes|no
     name 必选项,服务名称,好比httpd  vsftpd
     state 对当前服务执行启动,停止,重启,重新加载等利用(started,stopped,restarted,reloaded)
      group模块

    功能:对被控制主机进行组的管理
    常用参数:
     name  组名称,必选项
     system  是否为体系组,yes|no,默认为no
     state  删除大概创建,present/absent,默认是present
    user模块

    功能:用于管理被管理结点上的用户
    常用参数:
    name:必选项,指定用户名
    password:设置用户密码,担当的是一个加密的值,会直接存到shadow,默认不设置密码
    update_password:更新密码
    home:指定用户家目录
    shell:设置用户的shell
    comment:用户的描述信息
    create_home:在创建用户时,是否创建其家目录,默认创建,不创建设置为no
    group:设置用户的主组
    groups:将用户参加到其他组,逗号分开,默认会把用户从原组删除
    append:与groups共同利用,yes时,不会将用户从原组删除
    system:设置为yes时,将会创建一个体系账号
    expires:设置用户的过期时间,值为时间戳,会转为天数后放在shadow的末了第8个字段里
    generate_ssh_key:设置为yes将会为用户生成密钥。不会覆盖原来密钥
    ssh_key_type:指定用户的密钥范例,默认为rsa,具体的范例取决于被管理结点
    state:删除或添加用户,yes为添加,absent为删除,默认为yes
    remove:当与state=absent一起利用,删除一个用户及关联目录,可选值为yes/no
    date命令:

    // 计算 3 小时之后是几点几分
    # date +%T -d  '3 hours'
    //任意日期的前 N天,后 N 天的具体日期
    # date +%F -d"20190910 1 day"
    # date +%F -d"20190910 -1 day
    //计算两个日期相差天数,好比计算生日距离现在另有多少天
    # d1=$(date +%s -d 20180728)
    #d2=$(date +%s -d 20180726)
    #echo s(((d1-d2)/86400))
   
    File模块

    功能:用于远程主机上的文件利用
    常用参数:
    owner:定义文件/目录的属主
    group:定义文件/目录的属组
    mode:定义文件/目录的权限
    path:必选项,定义文件/目录的路径
    recurse:递归的设置文件的属性,只对目录有用
    src:链接(软/硬)文件的源文件路径,只应用于state=link的情况
    dest:链接文件的路径,只应用于state=link的情况
    state:
    directory:如果目录不存在,创建目录
    file:文件不存在,则不会被创建,存在则返回文件的信息,常用于检查文件是否存在。
    link:创建软连接
    hard:创建硬连接
    touch:文件不存在,则会创建一个新的文件,文件或目录存在,则更新其末了修改时间
    absent:删除目录,文件大概取消链接文件
    cron模块

    功能:管理远程节点的cron服务,等同于Linux中的筹划任务
    注意:利用Ansible创建的筹划任务,是不可利用本地的crontab -e去编辑,否则Ansible无法再次利用次筹划任务
    常用参数:
    name:指定一个cron job名字,便于删除
    minute:指定分钟,可以设置(0-59,*,*/2等),默认是*。表示每分钟。
    hour:每小时。可设置(0-23,*,*/2等),默认是*,表示天天。
    month:指定月份,可设置(1-12,*,*/2等),默认是*,每周
    weekday:指定月份,可设置(0-6 for Sunday-Saturday,*等),默认*,每星期
    job:指定要执行的内容,通常可以写脚本或内容。
    state:指定job状态,新增present/删除absent,默认present。
    验证cron:
    crontab -l
    debug模块

    功能:debug模块紧张用于调试时利用,通常的作用是将一个变量的值给打印出来
    常用参数:
    var:直接打印一个指定的变量值,变量不消加双引号。
    msg:打印一段可以格式化的字符串
    template模块

    功能:增强版copy,可以进行文档内变量的替换
    常用参数:
    src:指定ansible控制端的文件路径
    dest:指定ansible被控端的文件路径
    owner:指定文件属主
    group:指定文件属组
    mode:指定文件的权限
    backup:创建一个包罗时间戳信息的备份文件,yes/no
    lineinfile模块

    功能:在被管理节点上,用正则匹配对目标文件的一行内容修改删除等利用
    常用参数:
    path:目标文件路径,必须项。
    state:可选值absent删除|present替换(默认值)
    regexp:在文件的每一行查找的正则表达式,对于state=present,仅找到的末了一行被替换
    line:要在文件中插入/替换的行,必要state=present
    create:文件不存在时,是否要创建文件并添加内容,yes/no。
    # ansible all -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled" state=present'
    PlayBook

    YMAL

    PlayBook遵循YAML的语法格式。
    yaml特点
    Yaml 文件以 # 为注释符
    Yaml 文件以  .yml 大概 .yaml末端
    Yaml 文件以 --- 开始,以 …结束,开始和结束标志都是可选的
    yaml基本语法
    区分大小写
    利用缩进表示层级关系
    缩进时,利用tab键大概空格键一定要到达统一
    相同层级的元素必须左侧对齐即可
    yaml支持的数据布局有三种
    字符串  YAML中的字符串可以不利用引号,语句为表述完可进行折行
    列表    格式 ‘以短横线开头+空格+具体的值’,一个短横线是一个列表元素
    字典    格式:‘key+冒号(+空格+值(value),即key:value’
    yaml语法测试
     python3 -c 'import yaml,sys;print(yaml.safe_load(sys.stdin))' < yml文件
   

    Play

    定义Play
    每个Play都是以短横杠开始的
    每个Play都是一个YAML字典格式
    常用属性
    name: 每个play的名字
    hosts: 每个play涉及的被管理服务器,同ad-hoc中的资产选择器
    tasks: 每个play中具体要完成的任务,以列表的情势表达
    become:如果必要提权,则加上become相关属性
    becom_user: 若提权的话,提权到哪个用户上
    remote_user: 在远程服务器上执行具体利用的用户。若不指定,则默认利用当前执行ansible  Playbook的用户
    一个完整的playbook
   

    对Playbook进行语法校验
    下面校验的方法,只能校验PlayBook是否精确,而不能校验YAML文件是否语法精确
    ansible-playbook  playbook文件名    --syntax-check
    可以安装yamllint进行校验YAML语法
    pip3  install yamllint
    yamlint  文件名
    运行PlayBook
    ansible-playbook   playbook文件名
    单步跟从调试PlayBook
    //执行task中的任务,必要手动确认是否往下执行
     ansible-playbook   playbook文件名    --step
    测试运行PlayBook
    会在本机上模仿执行全部过程
     ansible-playbook  playbook文件名   -C
    ansible变量

    在ansible中,利用双花括号 {{ }} 来引用变量
    全局变量

    通过命令行参数,利用-e参数在执行ansible命令时传递全局变量
    脚本变量

    通过play属性vars/vars_files定义
    在play利用{{变量名}}引用变量,当为字典中的vlaue值时必要加上双引号(与字典进行区分)。
    资产变量

    主机变量和主机组变量
    主机变量优先级高于主机组变量
    Facts变量

    它的声明和赋值完全由ansible中的setup模块资助我们完成,网络了有关被管理服务器的利用体系版本,服务器IP地点,主机名,磁盘的利用情况,
    cpu个数,内存大小等有关被管理服务器的私有信息。
    语法:ansible 主机列表  -m  setup
    可以通过Facts模块中的filter参数去过滤我们想要的信息。
    比方过滤内存信息
   

    在PlayBook运行的时间都会发现在PlayBook执行前都会有一个Gathering Facts的过程,这个过程就是网络被管理服务器的Facts信息过程。
    比方获取地点
   

   
    注意:获取Facts信息时,必要先获取最外层一般以ansible开头,内部值引用若为列表则".下标",字典则“.key”
   
    若在整个PlayBook的执行过程中,完全未利用过Facts变量,此时可以将其关闭以加速PlayBook的执行速度。
     # 关闭facts变量网络功能
      gather_facts: no
    注册变量

    将此次task任务的结果作为条件,去判断是否去执行其他task任务;
    注册变量在PlayBook中通过register关键字去实现。
   

    变量优先级

    全局变量>脚本变量>资产变量
    任务控制

    条件

    用when实现条件判断
    when支持如下运算符:
    ==,!=,>/<,>=/<=,is defined,is not defined,true,flase,and,or
    循环

    在PlayBook中利用with_items/loop去实现循环控制,且循环时的中心变量(shell循环中的$i变量)只能是关键字item(每次循环的值由item担当),不能随意自定义。
   

    tags属性

    办理的题目:对某些具体的任务执行,而不消执行整个PlayBook脚本,降低变动风险和范围
   

    利用:
    在playbook具体任务下一定要指定tags属性,这样在执行的过程中只执行task任务上打上tags标志的任务
    执行语法:ansible-playbook     脚本名   -t  tags标志名
    handlers属性:

    办理题目:与notify共同利用,当某任务发生改变,通过notify通知去触发handlers(与tasks平级)下的任务。
    JinJa2模板

    介绍:Jinja2是基于Python书写的模板引擎。

   

    定名:1.jinja2 文件以 .j2 为后缀,也可以不写后缀,

    定界符:

    注释: {# 注释内容 #}
    变量引用: {{ var }}
    逻辑表达: {% %}
    判断控制:

    {%if%}
    {%else if%}
    {%end if%}
    循环控制(不可利用break,countinue):

    {%for ….in…%}
    {%end for%}
    Role

    role就是一个目录,将一个PlayBook拆分成不同子目录,目录名就是role名,role下会有子目录,每个子目录包罗一个‘main.yml’文件,
    循环方法创建main.yml

     for  d  in `ls` ; do ; touch ${d}/main.yml ; done
    这个文件应该包罗以下名称对应的内容:
    tasks -包罗角色要执行的任务的紧张列表
    handlers-包罗处置惩罚程序,此角色甚至该角色之外的任何地方都可以利用这些处置惩罚程序。
    defaults-角色的默认变量。
    vars-角色的其他变量,
    files -包罗可以通过此角色摆设的文件
    templates -包罗可以通过此角色摆设的模板。
    meta -为此角色定义一些元数据
    角色必须至少包罗这些目录之一,但是最好排除任何未利用的目录
    role执行:

    role 本身不能被直接执行,必要借助playBook进行间接的调用。
   

  • name: a playbook used role
            hosts: all
            roles :
               - 角色名
    Galaxy平台

    功能:获取必要的role。https://galaxy.ansible.com/
    常用指令
    //在galaxy 上搜索共享的ROLE
    # ansible-galaxy search  名称
    //安装 galaxy 上共享的 ROLE
    # ansible-galaxy install  名称
    //列举已经通过 ansible-galaxy 工具安装的ROLE#
     ansible-galaxy list 
    //创建一个ROLE 的空目录架构,这样我们在开发一个ROLE的时间,就不必要手动创建目录了。
    # ansible-galaxy init   --offline
    实战:

    优化ansible执行速度

    1.ssh长连接:

    进/etc/ansible/ansible.cfg修改ControlPersist时间,利用ss -natp | grep -E 'ESTAB.*ssh'查看连接情况
    2.开启pipelining:

    进/etc/ansible/ansible.cfg修改pipelining = True,执行脚本时-vvv发现无put利用
    3.Facts缓存到redis:

    安装redis,安装 Redis Python 客户端pip install redis
    进/etc/ansible/ansible.cfg
    修改网络范例gathering = smart(缓存后不再网络),
    设置缓存后端为 fact_caching = redis,
    修改fact_caching_connection= 服务器ip:6379:0(参考注释修改),
    fact_caching_timeout=缓存过期时间
    进/etc/redis.conf中bind=0.0.0.0(答应全部 IP 访问),重启redis
    自由执行计谋

    答应 Ansible 同时在全部目标主机上独立执行任务(并行)。每台主机完成一个任务后,会立刻开始执行下一个任务,而不必等候其他主机完成当前任务。
    实用场景:实用于任务之间相互独立,且希望尽快完成全部主机上任务的场景,比方批量安装软件包。运行时,加-f 选项用于控制并行执行的进程数目
    设置:进入ansible.cfg修改strategy = free
    异步执行

     当执行耗时较长的任务时,无需等候任务完成,ansible可以继续处置惩罚其他事件。
    参数:
    async:用于指定任务的最大执行时间(以秒为单位)。如果任务在这个时间内没有完成,ansible 会将其标志为失败。
    poll:用于指定 ansible 检查任务状态的间隔时间(以秒为单位)。如果设置为 0,表示不主动检查任务状态,而是让任务在配景异步运行,之后可以通过 async_status 模块手动检查任务状态
   

   
    插件

    回调插件

    查看回调插件:ansible-doc -t callback -l
    查看json回调插件:ansible-doc -t callback  json
    主输出插件

    同时只能有一个回调插件作为主输出插件,如果想替换,在 ansible.cfg 中设置 stdout 插件(标准输出)。
    stdout_callback = json       #以JSON的格式输出结果,也可其他
    或利用自定义的回调 stdout_callback = mycallback
    默认情况下仅对playbook见效,若让ad-hoc方式见效在ansible.cfg种修改bin_ansible_callbacks = True
    启用其他内置的回调插件

    大部门情况下,无论是内置的回调插件还是自定义的回调插件,都必要在ansible.cfg 中添加到白名单中,才能启用。
    callback_whitelist=timer,mail,profile roles,custom callback
    timer :计算整个 playbook 的运行时间
    mail: 实现发送邮件的功能
    profile_roles :统计任务执行时间
    custom callback是自定义的插件
    注意:profiles_roles总时间凌驾timer总时间可能是由于并行机制的影响,profile_roles中时间是任务的时间累加,而实际执行会并行。
    回调范例

    不同的回调范例对于 playbook 的输出有不一样的结果
    stdout 标准输出范例,用在回调的主管理者
    aggregate聚合范例,把此范例插件处置惩罚的结果和stdout 范例插件归并一起输出到标准输出。好比:timer,profile_tasks 等。
    notification 通知范例,不参与标准输出,也不影响标准输出插件的正常输出,只是会把执行 playbook的返回值写的指定的前言中。
    好比:log_plays,mail。假如自定义把执行playbook 的结果输出到数据库中就可以利用此范例。
    日记回调插件

    内置的回观察看log_plays会将playbook的返回信息到默认路径/var/log/ansible/hosts目录中。
    以下方法可通过ansible-doc -t callback  log_plays进行查看
    方法1:利用体系变量指定日记路径 export  ANSIBLE_LOG_FOLDER=日记存储路径,并参加白名单
    方法2:在ansible.cfg中进行设置,并参加白名单
    [callback_log_plays]
    log_folder = 日记存储路径
    查看文档:
   

    开发回调插件

    规则
    1,利用兼容的python版本进行编写
    2,碰到题目,主动抛出异常
    3,返回以unicode编码的字符串,紧张是兼容JinJa2
    4,符合ansible的设置和文档标准,可以通过ansible.cfg进行设置
    开发mysql_plays插件
    数据库预备:
    create database if not exists ansible default charset utf8mb4 collate utf8mb4_general_ci;
    create user 'ansible'@'%' identified with mysql_native_password by 'Aa!123456';
    grant all on ansible.* to 'ansible'@'%';
    mysql> create table if not exists playsresult(
        -> id int auto_increment primary key,
        -> user varchar(16) not null,
        -> host varchar(32) not null,
        -> category varchar(11) not null,
        -> result text,
        -> create_time datetime not null default current_timestamp
        -> );
    log_plays文档改写:
    1.获取文档:按上述日记回调插件查看文档方法获取文档
    2.进行改写,改option选项,通过异常判断pymsql还是MySQL库,定义mysql连接函数,定义execute_sql函数
    3.改写完成保存到/root/.ansible/plugins/callback/目录下
    ansible.cfg设置:
    将插件写入白名单,并将ini写入
    验证:
    ansible-doc -t callback mysql_plays
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表