zoukankan      html  css  js  c++  java
  • ansible之Ad-Hoc

    一. Ad-Hoc

      1. ansible的一种模式Ad-Hoc

        ansible是一个能够在远程主机上批量执行命令或者脚本的一个工具

        Ad-Hoc是ansible的一种模式

      2. ansible的安装

        yum install -y ansible

      3. 命令格式

        ansible <host-pattern> [options]

      4. host-pattern主机组

        主机组的配置文件在/etc/ansible/hosts

        - 单个的的ip地址

        - 多个ip地址, 用逗号分割

        - 单个组

        - 多个组

          - 并集: web, db 或  "web: db"

          - 交集: "web: &db"

          - 差集: "web: !db"

        - 全部: all  

      5. options参数

    -m modulename    # 使用的模块名
    -a args                   # 模块的参数
    -f fork                    # 并发的线程数, 默认5个
    -C                          # 干跑    

      6. 管控主机, 连接被管控主机

        - 管控主机, 生成密钥

          ssh-keygen

        - 复制到被管控主机

          ssh-copy-id  username@ip

      7. ansible-doc 查看文档

        ansible-doc -s modulename    查看模块的参数

    二. 关于命令和脚本的模块

      1. command模块

        在远程主机上执行命令, 不支持  <>|&$;  一些特殊符号

    1. 参数
        chdir        切换目录
        creates    存在就不执行后面命令, 反之则执行
        removes    存在就执行后面命令, 反之则不执行
    2. 实例
        ansible web -m command -a "pwd"        # 执行pwd命令
        ansible web -m command -a "chdir=/tmp pwd"        # chdir参数是切换目录
        ansible web -m command -a "creates=/tmp pwd"    # creates=/tmp 有这个文件就是false,后面的不执行,没有就是true,后面执行
        ansible web -m command -a "removes=/tmp pwd"    # 有就是true,没有就是false
    command模块

      2. shell模块

        和comman模块一样, 但是可以识别特殊符号

    1. linux补充
        echo "password" | passwd --stdin username    # 一行命令直接修改密码
    2. 参数
        chdir            切换目录
        creates         和command模块一样
        removes       和command模块一样
    
    3. 实例
        ansible web -m shell -a "echo "password" | passwd --stdin username"        # 识别|符号
        
        ansible web -m shell -a "/tmp/a.sh"            # 执行a.sh脚本    要有可执行权限
        ansible web -m shell -a "bash /tmp/a.sh"    # 执行脚本, 不需要有可执行权限    
    
        
    shell模块

      3. script模块

        在远程主机上运行本地脚本

    1. 参数
        chdir        切换目录
        creates      和command模块一样
        removes    和commadn模块一样
    
    2. 实例
        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" #判断被控机上的文件
    script模块

    三. 关于文件的模块

      1. copy模块

        复制本地主机的文件到远程主机上

    1. 参数
        src            源地址, 一/结尾就是复制文件夹内所有文件
        dest          目标地址
        backup      yes的时候就备份
        mode        指定文件权限
        group        指定数组
        owner        指定属主
        content      覆盖写入
    
    2. 实例
        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=alex mode=755"# 复制本地文件到远程主机,并指定属组和权限
        ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更
        ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755" #复制本地目录下的所有文件,
        ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用
    copy模块

      2. file模块

        对远程主机文件的操作

    1. linux补充
        软连接  快捷方式  ln -s   源文件修改软连接修改  源文件删除软连接失效  可以跨分区 
        硬链接  硬盘的位置 ln     源文件修改硬链接修改  源文件删除硬链接不变 不可以跨分区
        复制    开辟新空间 cp     源文件修改cp的不变   源文件删除不变 可以跨分区
    
    2. 参数
        path          文件路径
        mode        指定权限
        group        指定属组
        owner        指定属主
        state          操作的类型  
            directory  目录
            touch       空文件
            absent     删除
            link         软连接
            hard        硬链接
        src              源文件, state=link或hard时用
    
    3. 实例
        ansible web -m file -a "path=/alex5 state=directory owner=alex" #创建目录,并制定属主
        ansible web -m file -a "path=/tmp/wusir.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" #删除文件夹
    file模块

      3. fetch模块

        在远程主机上拉取文件, 以主机名或ip创建目录并保存原有目录结构

    1. linux补充
        scp -rq 文件 地址    # 两台linux之间传输文件
        scp -r root@ip:/tmp/text /tmp
    
    2. 参数
        src        源地址, 远程主机上的文件, 不能是文件夹
        dest      目标地址, 拉取到本地主机的地址
    
    3. 实例
        # 拉取被控主机上的/var/log/cron文件到/tmp目录下
        ansible web -m fetch -a "src=/var/log/cron dest=/tmp"
    fetch模块

      4. template模块

      5. replace模块

    四. 关于下载和启停服务的模块

      1. yum模块

        在远程主机上进行yum安装

    1. linux的补充
        - yum跟rpm有什么关系,有什么区别
            rpm redhat package manager
            yum 基于rpm进行优化的软件管理包, 可以解决依赖关系
    
        - yum源怎么配置
    ###############################################
    [epel]    #名称
    name=Extra Packages for Enterprise Linux 7 - $basearch  #全名或者描述信息
    baseurl=http://mirrors.aliyun.com/epel/7/$basearch  # 源url地址
    failovermethod=priority
    enabled=1  #是否启用,1启用,0不启用
    gpgcheck=0  #是否检验key文件,0不校验 1校验
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    ################################################
    
        - yum怎么安装包组
            yum grouplist #查包组信息    
            yum groupinstall xxx
    
    2. 参数
        name            要下载的包名
        disablerepo    禁用某个源
        enablerepo    启用某个源
        state            进行的操作
            install        安装
            remove     卸载
    
    3. 实例
        # 给被控主机配置epel源
        ansible web -m copy -a "src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d"
        
        # 给被控主机安装redis
        ansible web -m yum -a "name=redis"
    
        #安装多个包
        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" 
    yum模块

      2. pip模块

        在远程主机上进行pip安装

    1. linux补充
        pip freeze > requirement.txt        将本地环境所有的包都导出
        pip install -r requirement.txt        安装所有的包
        pip uninstall flask                卸载包
        python setup.py build     
        python setup.py install
    
    2. 参数
        name             安装的包名
        requirement    安装文件中所有的包
        virtualenv        虚拟环境
    
    3. 实例
        # 给被控主机pip一个flask包
        ansible web -m pip -a "name=flask"
            
        # 给被控主机pip一个1.11.14的django包
        ansible web -m pip -a "name=django==1.11.14"
        
    pip模块

      3. service模块

        在远程主机上启停服务

    1. linux补充
        - centos 7
            systemctl start redis        开启服务
            systemctl enable redis     设置开机自启
        - centos 6
            service redis start        开启服务
            chkconfig redis on        设置开机自启
    
    2. 参数
        name        服务名
        state        进行的操作
            started        启动服务
            restarted     重启服务
            reloaded      平滑重启服务
            stopped        停止服务
        enable           设置开机自启
    
    3. 实例
        # 在被控主机上开启redis服务
        ansible web -m service -a "name=redis state=started"
        # 关闭被控主机上的redis服务
        ansible web -m service -a "name=redis state=stopped"
        # 在被控主机上开启redis服务并且开机自启
        ansible web -m service -a "name=redis state=started enabled=yes"
    service模块

    五. 关于定时任务的模块

      1. cron模块

        在远程主机上设置定时任务

    1. linux补充
        crontab -e    编辑定时任务
        crontab -l    查看定时任务
        crontab -r    删除定时任务
        * * * * * 绝对路径的命令
    
    2. 参数
        name        定时任务的名字, 默认为None, 不能重复
        job            任务
        minute         分
        hour             时
        day              日
        month          月
        weekday       周 
        state        进行的操作
            create    创建任务, 默认
            absent    删除任务
        disable        禁用任务, 就是把任务注释掉
        user            指定指定的用户
    
    3. 实例
        # 给被控主机设置一个定时任务:每分钟都创建/tmp/1文件夹
        ansible web -m cron -a "job='/usr/bin/mkdir /tmp/1'    name=makedirectory"
        # 清除上面的定时任务
        ansible web -m cron -a "name=makedirectory state=absent"
        # 注释定时任务
        ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/xiaoqiang.txt' disabled=yes"
        
    cron模块

    六. 关于用户和用户组的模块

      1. user模块

        对远程主机的用户的操作

    1. linux补充
        - 查看本机的用户
        vi /etc/passwd
        vi /etc/shadow
        id root        
    
        - 添加用户
        useradd
            -d    设置新用户的家目录
            -g    设置新用户的属组
            -G    设置新用户的附加组
            -u  设置新用户的id
            -s  设置新用户登陆后的shell
            -r  设置系统账户,没有家目录
            
        - 删除用户
        userdel 
            -r    删除用户,并且删除用户家目录
            
        - 用户分类
        超级管理员 root 0
        普通用户
            系统用户  启动一些服务或者进程,不能登录  1-999 centos7 1-499 centos6 从大到小
            登录用户  可以登录的用户 1000-65535 centos7 500-65535 centos6 从小到大
    2. 参数
        group     属组
        groups    附加属组
        home    家目录
        uid        用户id
        name    帐号
        shell    登陆后的shell
        system    系统用户
        remove    删除用户,并且删除用户家目录    state=absent配合这个参数使用
    
    3. 实例
        # 在远程主机上创建用户
        ansible web -m user -a "name=username    home=/tmp/username"
        # 删除上面的用户
        ansible web -m user -a "name=username remove-yes"
    user模块

      2. group模块

        对远程主机的用户组的操作

    1. linux补充
        - 创建分组
        groupadd
            -g    设置分组id
            -r    设置系统组
    
        - 组分类
        超级管理员组 root 0
        普通组
            系统组  1-999 centos7 1-499 centos6 从大到小 
            登录用户组 1000-65535 centos7 500-65535 centos6 从小到大
    
        - 查看组
        cat /etc/group
    
    2. 参数
        gid        分组id
        name    分组名称
        system    系统分组
    
    3. 实例
        # 在远程主机上创建分组
        ansible web -m group -a "name=hh "
        # 在远程主机上创建系统分组
        ansible web -m group -a "name=hh system=yes"
    group模块

    七. 关于系统信息的模块

      1. setup模块

        获取远程主机的信息

    1. 参数
        filter    过滤出想要的信息
    
    2. 实例
        # 查看本机的信息,并过滤出用户的组id
        ansible localhost -m setup -a "filter=ansible_user_gid"
    
    3. 主要信息
        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 #系统名字
    setup模块
  • 相关阅读:
    dubbo接口测试
    httpclient接口返回结果中文显示问号
    idea创建springboot项目报错Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.
    前端框架angular
    测试思考
    sonar的使用
    IDEA中getter方法报红
    dubbo相关
    IDEA无法从mapper方法直接点进xml文件的解决办法
    java笔记-spring boot系列
  • 原文地址:https://www.cnblogs.com/q767498226/p/11111678.html
Copyright © 2011-2022 走看看