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模块

 

posted @ 2019-06-30 23:00  雾霾1024  阅读(305)  评论(0编辑  收藏  举报