• ansible的模块的使用(二)


    ansible的命令格式和ansible的doc命令格式

    ansible的命令格式以及后面携带的参数

      -a MODULE_ARGS, #模块参数
      -C, --check # 干跑,白跑
      -f FORKS, --forks=FORKS #指定并发,默认5个
      --list-hosts #列出主机
      -m MODULE_NAME# 模块名称
      --syntax-check #检查语法
      -k #密码


    ansible的doc命令格式 ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin] -j #以json的方式返回数据 ansible-doc -j -l, --list #列出所有的模块 ansible-doc -l -s, --snippet #以片段式显示模块信息 ansible-doc -s ping #查看ping模块的部分信息 #直接查看完整信息 ansible-doc ping #查看ping模块的所有信息 ansible-doc -l|wc -l 查看ansible一共有多少模块

     

    ansible后面加模块使用,需要携带参数-m

    1.ping模块

        判断网络通讯是否正常

    ansible的底层是是是协议,所以才用ansible的ping模块的时候需要加上密码
    
    
    ping模块的第一种使用:使用ssh的密码
        ansible 192.168.8.139 -m -ping -k
    
    ping模块的第二种使用,先生成ssh的密钥对,然后使用ssh密钥对
       ssh-keygen   #生成ssh的密钥对
        ssh-copy-id root@192.168.8.139    #将139的公钥copy给ssh
        copy完成后就可以直接通过ansible的平模块来判断网络通信,不需要加-k来输密码
    
    ping模块对多台主机的通信判断
        1. ansible ip1,ip2,ip3..... -m ping   
        2.ansible all -m ping   #ping所有的主机
        3.按分组来ping
                ansible 组名 -m ping  比如ansible web -m ping
                ansible 组名1,组名2..... -m ping  比如ansible web,db -m ping 
    &表示交集,!表示差集,,表示并集
        ansible web,db -m ping #多个组的并集
        ansible 'web:&db' -m ping #多个组的交集
        ansible 'web:!db' -m ping #多个组的差集,在前面但是不在后面  
    

     2.command模块

      是一个执行linux的命令模块  

    command模块
      command -a 后面跟的参数是放在“”里面的linux命令
      命令中有"<"', `">"', `"|"', `";"' and `"&"时,不能使用command 参数: - chdir 改变目录在执行命令 - creates 如果存在就不执行 - removes 如果存在就执行 示例: ansible web -m command -a "pwd" #获取当前的工作目录 ansible web -m command -a "ls" #查看当前工作目录下的文件 ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令 ansible web -m command -a "creates=/tmp pwd" #因为tmp目录存在,pwd不会执行 ansible web -m command -a "creates=/tmp2 pwd" #因为tmp2不存在,pwd执行 ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行 ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行 echo "密码" |passwd --stdin 用户名 #设置用户的密码

    3.shell模块

    shell模块和command模块差不多,都是用来执行linux命令的,所使用的的参数都是一样的,
    不一样的是command对命令中有"<"', `">"', `"|"', `";"' and `"&"时,不能使用command
    shell也可以用来执行shell脚本,shell脚本的后缀以sh结尾,比如a.sh就是一个shell脚本
    参数:
    - chdir   改变目录在执行命令
    - creates  如果存在就不执行
    - removes  如果存在就执行
    示例:
    ansible web -m shell -a "pwd"   #获取当前的工作目录
    ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令

    4.script模块

      执行本地文件的一个模块

    script模块:用来执行管控机的文件的一个模块
    
    参数:ansible-doc -s script
    
        - chdir   改变目录在执行命令
        - creates  如果被控机文件存在就不执行
        - removes  如果被控机文件存在就执行
        存在不存在判断的是被管控机上的文件,
    示例:
        ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件
        ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过
        ansible db -m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件
    

    5. copy模块

       用来将本地的文件copy到远程机器上面

    copy模块:
    
    参数:
        backup #创建一个备份文件,以时间戳结尾
        content # 直接往文件里面写内容
        group #文件的属组
        mode# 文件的权限  (读R4)(写W2)(执行x1)
        owner #文件的属主
        src #源地址()管控机的文件地址
        dest #copy的目标地址(必填)(被管控机的放文件的地址)
    
    示例:
    ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #复制本地文件到远程主机,并修改文件名,多次执行不会改变,因为checksum值是一样的
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #复制本地文件,并备份
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=libai mode=755"# 复制本地文件到远程主机,并指定属组和权限
    ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=libai mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更
    ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=libai mode=755" #复制本地目录下的所有文件,
    ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用
    

    6. file模块

      对文件或者文件夹的操作

    file模块
      对文件或者文件夹的操作
    file的参数
        group # file的属组
        mode #file的权限
        owner #file的属主
        path #路径(必填)
    	    state =link   #软连接
    	    state =hard  #硬连接
        state #状态
    	    directory #目录  state=directory 创建目录
    	    file  无操作  state=file  时无操作
    	    touch 空文件  state=touch时在path路径下创建空文件
    	    absent 删除  #state=absent时   删除path路径的文件或者文件夹
    	    link 软连接 创建软连接,需要由src属性来做软连接的路由
    	    hard 硬链接   创建硬连接,需要由src属性来做软连接的路由
    ansible web -m file -a "path=/libai state=directory owner=libai " #创建目录,并制定属主
    ansible web -m file -a "path=/tmp/libai .txt state=touch mode=777" #创建文件,并指定权限
    ansible web -m file -a "path=/tmp/cron src=/var/log/cron state=link" #创建软链接,链接的是自己的文件
    ansible web -m file -a "path=/tmp/cron state=absent" # 删除软连接
    ansible web -m file -a "path=/alex5 state=absent" #删除文件夹
    

    7.fetch模块

       拉取远程主机的文件到管控机上面

    fetch模块
    
    参数
        dest 目标地址(必填)     管控机的地址
        src  源地址(必填)  被管控机的地址
    
    示例:
    ansible web -m fetch -a "src=/var/log/cron dest=/tmp" #拉取远程主机的文件,并以主机ip地址或者主机名为目录,并且保留了原来的目录结构
    

    8.pip模块和yum模块

      pip模块是对python第三方软件的操作,域名模块是对linux的安装包的操作

    查询ansible的yum模块的使用与参数
    ansible-doc -s yum
    
    查询ansible的pip模块的使用与参数
    ansible-doc -s pip
    
    yum模块
      对linux安装包的操作 参数: disablerepo #禁用某个源 enablerepo #启用某个源 name #包名 state #状态 install remove 示例: ansible web -m yum -a "name=python2-pip" #安装软件包 ansible web -m yum -a "name=python2-pip,redis" #安装多个包 ansible web -m yum -a "name='@Development Tools'" #安装包组 ansible web -m yum -a "name=nginx state=absent" #卸载 pip模块
      对python第三方包的操作 pip模块的参数 chdir #切换目录 name #包名 requirements #导出的文件 virtualenv #虚拟环境 state #状态 install remove

    9.service模块

      操作服务的一个模块

    service模块的参数:
        enabled #设置开机启动
        name #(必填)服务的名称
        state #状态 
            started  #开启
            stopped  #关闭
            restarted  #重启
            reloaded #平滑重启,只重启配置文件
        user #启动服务的用户
    示例:
        ansible web -m service -a "name=redis state=started" #启动
        ansible web -m service -a "name=redis state=stopped" #关闭
        ansible web -m service -a "name=redis enabled=yes" #设置开机自启动
    
    centos6和centos的一些操作
    
    centos7启动
    systemctl start redis
     
    centos6启动
    service redis start
     
    centos7开机自启动
    systemctl enable redis
     
    centos6开机自启动
    chkconfig redis on 
    
    
    ps -ef|grep redis #查进程
    
    进程查出来后,对应的数字介绍
        0 关机  1单用户 3命令行 5图形界面 6重启
    
    ss -tunlp   #查端口
    ss的参数介绍
        -t tcp
        -u udp
        -n 以端口形式显示
        -l 显示所有已经启动的端口
        -p 显示pid  

    10.cron模块

      做计划任务的一个模块

    cron模块:
        做计划任务的模块,添加时名字必须不同,不加名称为None
    参数:
        day 天
        disabled 禁用crontab,相当于一个注释
        hour 小时
        job 任务
        minute 分钟
        month 月
        name 名字,描述信息
        user 用户
        weekday 周
    添加时名字必须不同,不加名称为None
    
    示例:

        *   *   *   *   *   job
        分      时     日       月     周       任务

        ansible web -m cron -a "minute=12 name=touchfile job='touch /tmp/xiaoqiang.txt'"# 创建  每天的第12分钟创建一个txt文件
        ansible web -m cron -a "name=touchfile state=absent" #删除
        ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/xiaoqiang.txt'disabled=yes" #注释
        ansible web -m cron -a "name=None state=absent" #删除名称为空的计划任务
    

    11.user模块

    user模块:
      对用户的操作
    参数:
        group 属组
        groups 附加组
        home 设置家目录
        name 用户名
        remove 删除用户并删除用户的家目录
        shell 用户登录后的shell
        system 系统用户
        uid 用户的id
    示例:
        ansible web -m user -a "name=libai shell=/sbin/nologin home=/opt/alex10 uid=3000 groups=root" #创建用户,并指定用户的shell,家目录,uid,以及附加组
        ansible web -m user -a "name=libai shell=/sbin/nologin home=/opt/alex11"
        ansible web -m user -a "name=libai system=yes" #创建系统用户
        ansible web -m user -a "name=libai state=absent" #删除用户,但不删除家目录
        ansible web -m user -a "name=libai state=absent remove=yes" # 删除用户并删除用户的家目录
    

    12.group模块

      对用户组的一些操作

    group模块
        对用户组的一些操作
    参数:
        gid 组id
        system 系统组
        name 名称
        state
    示例:
        ansible web -m group -a "name=libai system=yes gid=5000" 创建系统组
        ansible web -m group -a "name=libai" 创建普通的组
        ansible web -m group -a "name=libai state=absent" #删除组
    

    13.setup模块

      用来收集远程主机的一些信息的模块

    setup模块
    
    参数 :
    
        filter  #过滤
            ansible web -m setup -a "filter =ansible_all_ipv4_addresses  " #只看远程ipv4 的信息
        
    ansible web -m setup | more:可以查看的远程主机信息:
    
    ansible_all_ipv4_addresses #所有的ipv4地址
    ansible_all_ipv6_addresses #所有的ipv6地址
    ansible_architecture #系统的架构
    ansible_date_time #系统时间
    ansible_default_ipv4 #默认的ipv4地址
    	address ip地址
    	alias 网卡名称
    	broadcast 广播地址
    	gateway 网关
    	netmask 子网掩码
    	network 网段
    ansible_default_ipv6 #默认的ipv6地址
    ansible_device_links #系统的磁盘信息
    ansible_distribution #系统名称
    ansible_distribution_file_variety #系统的基于公司
    ansible_distribution_major_version #系统的主版本
    ansible_distribution_version #系统的全部版本
    ansible_dns #系统的dns 默认udp 端口53
    ansible_domain #系统的域 ldap
    ipv4 #ipv4地址
    ansible_env #系统的环境
    ansible_fqdn #系统的完整主机名
    ansible_hostname #系统的简写主机名
    ansible_kernel #系统的内核版本
    ansible_machine #系统的架构
    ansible_memtotal_mb #系统的内存
    ansible_memory_mb #系统的内存使用情况
    ansible_mounts #系统的挂载信息
    ansible_os_family #系统家族
    ansible_pkg_mgr #系统的包管理工具
    ansible_processor #系统的cpu
    ansible_processor_cores #每颗cpu的核数
    ansible_processor_count #cpu的颗数
    ansible_processor_vcpus #cpu的个数=cpu的颗数*每颗cpu的核数
    ansible_python #系统python信息
    ansible_python_version #系统python的版本
    ansible_system #系统名字    
    

    14.tags

      用来给任务打标签用的

    tags
        用来给playbook任务打标签,tags打完标签后可以根据tags对应的name,进行tags对应的任务启动,而不会启动其他任务
    
    示例:
    - hosts: web
      tasks:
      - name: install
        yum: name=redis
      - name: copyfile
        copy: dest=/etc/redis.conf src=/etc/redis.conf
        tags: copy
      - name: start
        service: name=redis state=started
    启动:
        ansible-playbook -t copy p7.yml  #只启动name:start的任务

    15.handlers

    handlers
      notify:handlers的name名字 notify用来触发handlers

      可以把handlers理解成另一种tasks,handlers是另一种’任务列表’,handlers中的任务会被tasks中的任务进行”调用”,

      但是,被”调用”并不意味着一定会执行,只有当tasks中的任务”真正执行”以后(真正的进行实际操作,造成了实际的改变),

      handlers中被调用的任务才会执行,如果tasks中的任务并没有做出任何实际的操作,那么handlers中的任务即使被’调用’,也并不会执行。

    - hosts: web
      tasks:
      - name: install
        yum: name=redis
      - name: copyfile
        copy: dest=/etc/redis.conf src=/etc/redis.conf
        tags: copy
        notify: restart
      - name: start
        service: name=redis state=started
      handlers:
      - name: restart
        service: name=redis state=restarted
    启动
    ansible-playbook p7.yml  #启动任务后会有handlers操作,可以配合tags来操作

    16.template

      动态的进行数据copy

    在hosts文件中写入一个动态的信息,比如bind {{ansible_default_ipv4.address}}  动态监听ipv4 的ip地址
    
    在playbook中使用copy模块的时候,会被替换成bind {{ansible_default_ipv4.address}}  而不会有具体的ip这时就可以用template模块,template模块就可以动态的获取ip地址
    
    
    template模块和copy模块的用法一样,参数也一样
    参数:
        backup #创建一个备份文件,以时间戳结尾
        content # 直接往文件里面写内容
        group #文件的属组
        mode# 文件的权限  (读R4)(写W2)(执行x1)
        owner #文件的属主
        src #源地址()管控机的文件地址
        dest #copy的目标地址(必填)(被管控机的放文件的地址)
    示例:
    - hosts: web
      tasks:
      - name: install
        yum: name=redis
      - name: copyfile
        template: dest=/etc/redis.conf src=/etc/redis.conf
        tags: copy
        notify: restart
      - name: start
        service: name=redis state=started
      handlers:
      - name: restart
        service: name=redis state=restarted
    
    
    template的路径可以用绝对路径,也可以用相对路径
    

      

      

      

      

      

      

     

      

     

  • 相关阅读:
    创建类type (底层代码)
    getitem, setitem, delitem (把类实例化成字典的类型)
    类的三种方法(静态方法,类方法,属性方法)
    class(类的使用说明)
    Java泛型
    Java时间操作常用api
    JVM加载class文件的原理机制
    int和Integer区别
    final
    Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
  • 原文地址:https://www.cnblogs.com/l1222514/p/16306624.html
Copyright © 2020-2023  润新知