分享

ansible简单使用

 印度阿三17 2019-05-05

ansible是什么?

  由python2.7开发的一个基于模块在远程主机上批量执行命令或者脚本的一个工具

安装

  下载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命令格式

  shell    

    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.xxx.xxx.xx -m ping,第一次使用报错主机名为空,需要进行配置

    ping走什么协议 ICMP

    rpm -ql ansible|more # 查看ansible生成的文件
    /etc/ansible
    /etc/ansible/ansible.cfg #配置文件
    /etc/ansible/hosts
    /etc/ansible/roles #空文件夹

    

    进入etc下找到cfg文件进行配置

    

     rmp -ql ansible | more,查看生成的文件并一屏显示,user/bin中的文件为2进制

    

    

     

    

 

     vi /etc/ansible/hosts,此时执行报错,因为ansible底层走的事ssh协议,所以需要执行密码

        

    当输入密码后,就可以连接成功

    

     ssh - keygen,执行后一直回车

    

    出现这样的界面后就可以进行拷贝连接,加上你的用户名跟端口ip拷贝成功后,就可以使用密钥进行连接了

    

    

      

  host-pattern的格式

    - 单个的ip地址
    - 多个的ip地址,用,分割
    - 单个组
    - 多个组
    - 并集
    - web,db
    - ‘web:db’
    - 交集 ‘web:&db’
    - 差集 ‘web:!db’
    - 全部 all表示

    此时就可以直接使用这样的方式进行连接 

    

    此时再使用ansible进行ping就不要使用密码,可以一台一台的机器是否在线,ansible 192.168.226.101 -m ping #单独机器的ping

    

    此方法还可多个ip同时使用,ansible 192.168.226.101,192.168.226.102 -m ping #多个机器的ping

    

    ansible all -m ping,all将全部的机器都探测是否在线,ansible all -m ping #全部机器

    

    按功能进行分组

    

     www[001:006].example.com  代表 www001-www006(包含),测试ansible是否包含结尾

    

    

    ansible web -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 -doc -l|wc -l ,查看所有的模块

     

   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执行,用来判断tmp是否 存在,并没有创建

    

  
    ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行

    

    ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行

    

    echo "1234" |passwd --stdin alex #设置用户的密码,无需二次确认密码直接设置密码的方式

    

    使用ansible命令设置账户密码

    

    ansible web -m shell -a "echo '1234' |passwd --stdin alex",密码设置成功

    

    ansible web -m shell -a "chdir=/tmp pwd" 

    

    shell脚本文件,文件结尾名为sh,/bin/bash代表解释器

    

    执行会出现权限不足的情况,此时要增加一个执行的权限

    

    增加执行的权限后再执行就没有问题了

    

    指定解释器的方式执行脚本文件

    

    执行shell脚本          ansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本     

    ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限,执行shell脚本的第二种方法,第二种的路径方法,要提前给文件加上执行的权限

    

    

    

    python2.7执行中文的方式          env系统当前环境     

     ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件

    

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

    

   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" #直接往文件里面写内容,覆盖写,慎用

    

 

 

 

来源:http://www./content-4-181751.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多