ansible之Ad-Hoc

一. Ad-Hoc

  1. ansible的一种模式Ad-Hoc

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

    Ad-Hoc是ansible的一种模式linux

  2. ansible的安装

    yum install -y ansiblenginx

  3. 命令格式

    ansible <host-pattern> [options]web

  4. host-pattern主机组

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

    - 单个的的ip地址shell

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

    - 单个组flask

    - 多个组centos

      - 并集: 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模块
相关文章
相关标签/搜索