• ansible的安装与介绍、host-pattern格式、ansible的command模块、ansible的shell模块、ansible的script模块、ansible的copy模块


    一、ansible的安装与介绍

      ansible需要安装在管控机上

      首先安装wget(如果机器上有可以忽略)

      下载安装wget

    yum install -y wget

      将epel源下载安装到本地

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

      安装ansible

    yum install -y ansible

      

      ansible的命令格式

    Usage: ansible <host-pattern> [options]
    
    -a MODULE_ARGS,                #参数模块
    -C, --check                            #白跑
    -f FORKS,    --forks=FORKS    #指定并发,默认是5个
    --list-hosts                            #列出主机
    -m MODULE_NAME                #模块名称    
    --syntax-check                      #检查语法
    -k                                        #密码

      测试下主控机和被控机是否可以连接通

    ansible 192.168.226.101 -m ping #单独机器的ping

      其中ping走的是ICMP协议

      查看ansible生成的文件

    rpm -ql ansible | more 
    
    查看ansible生成的文件

    /etc/ansible
    /etc/ansible/ansible.cfg #配置文件
    /etc/ansible/hosts
    /etc/ansible/roles #空文件夹

    其余的文件后面都是带有bin的都是一些二进制文件可以不看

      我们ping一个主机可以用ip地址的方法,多个呢不能用逗号把主机ip写进去吧(当然如果主机少的话可以这么干),接下来我们就需要用到上面的/etc/ansible/hosts中的hosts文件了,我们把被控机的IP写入进这个文件中

    编辑
    vi /etc/ansible/hosts
    
    写入主机的ip地址
    在# Ex 1: Ungrouped hosts, specify before any group headers.下面

    然后我们想ping所有的被控主机的时候就直接使用
    ansible all -m ping
    然后得到下图的结果

    但是如果有很多台,只想要ping其中的几台呢?
    那就要需要分组了

     

    比如说我想看ping下web组的机器可以用

    ansible web -m ping

    这样写的方便管理

    我们如果要用管控机连接被管控机呢,需要

    一、ssh root@IP地址
    二、输入密码

    是不是十分繁琐,如果机器少还行

    其实ssh的连接方式有两种上面的连接方式是第一种

    第二种就是密钥

      密钥的生成方式:(公钥和私钥)

    ssh-keygen(一直回车就可以)

      使用公钥

    ssh-copy-id    用户名@IP地址

    当出现以下信息就代表成功了

    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'root@你要连接的IP地址'"
    and check to make sure that only the key(s) you wanted were added.

    直接用  ssh root@IP地址  连接主机

    我们上面说到  ansible all -m ping 是全部机器

    但是我如果想看两个组之间有么有相同的机器怎么办,要知道数学上有交集、并集和差集的当然这里也有

    多个组的并集
    ansible web,db -m ping
    或者
    ansible 'web:db' -m ping
    
    多个组的交集
    ansible 'web:&db' -m ping
    
    多个组的差集
    ansible 'web:!db' -m ping
    
    其中括起组名的必须是单引号 '' 

    二、ansible-doc  命令格式

    ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    -j #以json的方式返回数据
    -l, --list #列出所有的模块
    -s, --snippet #以片段式显示模块信息

    三、ansible的command命令

    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会执行

    在db组的机器上新建一个用户
    ansible db -m command -a "useradd 用户名"
    因为要设置密码很繁琐所以直接用
    ansible db -m shell -a "echo '密码' | passwd --stdin 用户名"

    四、ansible的shell命令

    shell命令支持特殊字符

    <、>、|、&、$、

    ansible web -m shell -a "echo '1234' |passwd --stdin alex"
    ansible web -m shell -a "chdir=/tmp pwd" shabang
    ansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本
    ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限
    ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件

    五、ansible的script命令

    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" #判断被控机上的文件

    六、ansible的copy命令

    backup #创建一个备份文件,以时间戳结尾
    content #直接往文件里面写内容
    dest #目标地址
    group #属组
    mode# 文件的权限 W 2 R 4 X 1
    owner #属主
    src #源文件,直接写目录,则复制整个目录,如果目录后面以/结尾,则复制的目录下的所有文件
    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" #直接往文件里面写内容,覆盖写,慎用
  • 相关阅读:
    开启nginx缓存
    xsl输出html代码 非闭合
    记一次网络波动导致druid连接池无法创建新连接的BUG
    mysql时间操作
    JVM知识点精华汇总
    java 基础 ---HashMap、HashTable
    java面试--小谈如何面试
    Spring框架
    JAVA+微信支付APP开发+支付宝支付APP开发
    消息队列
  • 原文地址:https://www.cnblogs.com/guchenxu/p/10816941.html
Copyright © 2020-2023  润新知