设为首页 收藏本站
查看: 857|回复: 0

[经验分享] ansible的几个常用模块

[复制链接]

尚未签到

发表于 2018-7-29 08:01:21 | 显示全部楼层 |阅读模式
  Ansible是什么呢?ansible是最新出现的自动化运维工具,基于python开发,集合了众多的运维工具(puppet,cfengine,chef等)的优点,实现了批量管理系统配置,批量程序部署,反正啥都是批量实现就对了。
  ansible有如下优点:
  1.部署简单,需要在主控端安装ansible环境,被控端不需要任何操作。
  2.默认使用ssh协议对设备进行管理
  3.可扩展性强且支持API及自定义模块,可通过Python扩展
  4.通过Playbooks来指定强大的配置,状态管理;
  ..........等等等
  Playbooks也就是对模块命令的集合,把简单的模块学会了,那Playbooks就是组合一下就行了!
  ansible这个东西是怎么样执行命令DOA远程host主机呢?主要分为以下几个步骤:
  1.加载配置文件默认/etc/ansible/ansible.cfg
  2.查找对应的主机配置文件,找到要执行的主机  #/etc/ansible目录下有个host文件
  3.加载对应命令的模块,如ping
  4.通过ansible将模块或命令生成对应的临时py文件传到远程host主机上
  5.对应执行用户家目录的.ansible/tmp/的.py为后缀的文件
  6.给x执行权限
  7.执行并返回结果
  8.删除临时.py后缀文件,sleep 0退出   #大致过程就是这几步
  安装:安装的话直接yum -y install ansible即可(简单容易!)
  配置文件:/etc/ansible/ansible.cfg 主配置文件  /etc/ansible/hosts 用来管理组和主机 #远程执行的主机可以分组执行,也可以单台主机执行,这样容易分类管理。
  下面就来实际操作一下ansible这个程序但是要实现ansible需要把被控端的IP地址加入到hosts文件内:#像下面一样[web]这个东西自己随便定义好记容易理解就行也可以叫组名,执行ansible命令的时候可以调用这个组名,也就是说组下所有主机都会执行相应的操作。
DSC0000.jpg

  ansible有几个很常用的模块下面就一一道来:
  1.先来个最简单的ping 哈哈哈^_^
  突然插播一条消息!!!ansible要实现需要无密码登陆ssh钥匙打通,所以自行操作。需要ansible服务端能无密登录到任何需要控制的机器就OK!  好的  回归正题0.0
  继续说这个ping
[root@centos6 ansible]# ansible web -m ping  
172.17.200.76 | SUCCESS => {
  
    "changed": false,
  
    "ping": "pong"
  
}
  
[root@centos6 ansible]#      #这里显示从200.76这台主机返回执行结果,显示正常通信ping-pong乒乓球一样的读音0.0在
  
[root@centos6 ansible]# ansible 172.17.200.2 -m ping
  
[WARNING]: No hosts matched, nothing to do    #不输入组名输入一个不存在的主机显示报错
  

  
[root@centos6 ansible]#
  2.command模块:  #这个就舒服了,可以执行命令,下面是command的一些参数
  hdir # 在执行命令之前,先切换到该目录
  creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
  executable # 切换shell来执行命令,需要使用命令的绝对路径
  free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
  removes # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
#加上面参数执行command,也可以不加直接执行  
[root@centos6 ansible]# ansible web -m command -a " cat 1.sh "
  
172.17.200.76 | SUCCESS | rc=0 >>
  
#!/bin/bash             #这里产看了200.76家目录下的文件内容
  
date > /app/date.log
  

  
[root@centos6 ansible]# ansible web -m command -a " creates="1.sh" cat 1.sh "
  
172.17.200.76 | SUCCESS | rc=0 >>
  
skipped, since 1.sh exists  #而在这里加上了creates参数,即使有这个文件也不会查看。
  

  
[root@centos6 ansible]#
  

  
[root@centos6 ansible]# ansible web -m command -a " cat 1.sh "
  
172.17.200.76 | SUCCESS | rc=0 >>
  
#!/bin/bash
  
date > /app/date.log          #这里可以查看家目录下的文件内容
  

  
[root@centos6 ansible]# ansible web -m command -a " cat 1.sh |grep date "
  
172.17.200.76 | FAILED | rc=1 >>
  
#!/bin/bash
  
date > /app/date.logcat: |grep: No such file or directory
  
cat: date: No such file or directory
  
                                     #到这里,哇这是什么鬼。返回结果一团糟
  
[root@centos6 ansible]#
  这个命令看似很厉害,但是不支持什么管道符啊and符啊什么的,反正就是不实用
  3.shell模块:  #这个就更舒服了,command可以执行命令但是有缺点,这个无视任何特殊符号(不是真的无视,功能还是可以实现的0.0)
[root@centos6 ansible]# ansible web -m shell -a "cat /etc/shadow"  
172.17.200.76 | SUCCESS | rc=0 >>
  
root:$6$7mmVwpix7l72ki5v$WnFDr//REwT.UNbYcJ0QJJV0kpUDMAiHSPk2x4IJkixOwLuFWQd0UpHL3aJZQC9K1en8F54DPcreTiMa2ltpV.::0:99999:7:::
  
bin:*:17110:0:99999:7:::
  
daemon:*:17110:0:99999:7:::
  
adm:*:17110:0:99999:7:::
  
lp:*:17110:0:99999:7:::
  
....................  #中间省略
  
ntp:!!:17500::::::
  
nginx:!!:17501::::::
  

  
[root@centos6 ansible]#   #就连shadow文件都可以看,无敌是多么的寂寞0.0(其实因为ssh无密登录,都可以登录root了啥不能干,哈哈哈)
  # 所以shell模块是真的舒服,这样岂不是可以执行任何操作!!批量!!执行!!多少台机器都无所谓,加个IP的事儿。
  4.copy:#上面可以执行命令了,但是从控制端的脚本啊,文件啊什么的想要拷贝到远程N台主机上,那也是累的一批啊。(可是我们有ansible)
  src: 本地源文件路径
  dest:远程文件存放路径
  backup:拷贝文件时若目的文件存在,且内容不相同则先备份目的文件,然后进行拷贝(系统自动生成备份的文件名,贴心!)
  directory_mode:递归权限设置
  force:为yes强制覆盖(内容不同时,相同覆盖也没意义),为no时只有文件不存在才会拷贝。
  content:直接修改文件内容
  others;可以使用file模块的选项在此处可以使用
[root@centos6 ansible]# ansible web -m copy -a "src=/etc/ansible/66 dest=~/66"  #实现66拷贝到远程主机家目录下  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "checksum": "91a747bdfe4541bc3d2e8162e0f7fb53e9e8cfe3",
  
    "dest": "/root/66",
  
    "gid": 0,
  
    "group": "root",
  
    "md5sum": "73b4c20e598d6b495de7515ad4ea2fdc",
  
    "mode": "0644",
  
    "owner": "root",
  
    "secontext": "system_u:object_r:admin_home_t:s0",
  
    "size": 3,
  
    "src": "/root/.ansible/tmp/ansible-tmp-1512816608.79-204967594766212/source",
  
    "state": "file",
  
    "uid": 0
  
}
  
[root@centos6 ansible]#
  上面也有用其他选项的用法,举一反三即可。用法都差不多   #backup自认为比较实用
  5.file:#设置文件属性
  force:强制创建软链接,两种情况源不存在和目标软连接存在这两种都是有点小问题的。为yes强制创建。
  group/owner:设置所属人所属组
  recurse:递归设置文件的属性,只对目录有效 src:被链接的源文件路径,只应用于state=link的情况
  dest:被链接到的路径,只应用于state=link的情况
  state:
  directory:如果目录不存在,就创建目录
  file:即使文件不存在,也不会被创建
  link:创建软链接
  hard:创建硬链接
  touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
  absent:删除目录、文件或者取消链接文件
[root@centos6 ansible]# ansible web -m file -a "path=~/66 owner='mlon'"  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "gid": 0,
  
    "group": "root",
  
    "mode": "0644",
  
    "owner": "mlon",
  
    "path": "/root/66",
  
    "secontext": "system_u:object_r:admin_home_t:s0",
  
    "size": 7,
  
    "state": "file",
  
    "uid": 1000
  
}
  
[root@centos6 ansible]#
  #这里把远处的66文件所属人修改为mlon了其他参数使用类推即可,也是很实用的0.0
  6.fetch:#从远程把文件拉到本地,我感觉用处没多大但还是要说说万一用到了呢。
[root@centos6 u01]# ansible web -m fetch -a "src=/app/123.txt dest=./"  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "checksum": "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0",
  
    "dest": "/u01/172.17.200.76/app/123.txt",
  
    "md5sum": "ba1f2511fc30423bdbb183fe33f3dd0f",
  
    "remote_checksum": "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0",
  
    "remote_md5sum": null
  
}
  
[root@centos6 u01]# ls
  
172.17.200.76  app
  
[root@centos6 u01]#
  #拷贝到本机会在指定目录下创建一个对应IP的目录文件存放在目录里面。
  7.yum  #能远程安装软件是不是一件很舒服的事情!
  这里state的状态可以是启动present  卸载:absent  安装最新版:latest
[root@centos6 u01]# ansible web -m yum -a "name=nginx state=present"   #present为启动服务  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "msg": "Repository 'base' is missing name in configuration, using id\n",
  

  
    #中间内容不重要有点多,省略掉。。。。
  
[root@centos6 u01]#
  这里可以使用service模块的用法
  arguments #命令行提供额外的参数
  enabled #设置开机启动。
  name= #服务名称
  runlevel #开机启动的级别,一般不用指定。
  sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。

  state #started启动服务, stopped停止服务, restarted重启服务,>[root@centos6 u01]# ansible web -m service -a "name=nginx state=restarted"  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "name": "nginx",
  
    "state": "started",
  
    "status": {
  

  
    #依旧中间省略。
  

  
[root@centos6 u01]#
  #现在可以安装也可以启动或者停止服务了,掌控大局的感觉!
  8.user/group 用户和组的管理
  先看user有哪些参数;
  comment:用户描述信息
  createhome;是否创建家目录
  group/groups:组和附加组
  home:指定家目录
  move_home:上面home指定家目录时可以移动家目录
  name;指定用户名
  password:指定密码(这个选项有点问题,有明白的可以评论回复我感谢大神。指定密码到shadow文件不经过加密,难道需要MD5加密之后在指定吗?没试过,在这赐教一波)
  shell:指定shell类型
  state:不指定为创建,指定absent为删除
  system:指定为系统用户,已存在不能指定。
  uid:指定uid
  现在看看group的参数:
  gid:指定gid
  name:管理组的名称
  state:状态默认创建,指定为absent未删除  #state=absent
  system:指定为系统组
  #注意user和group分别是两个模块
[root@centos6 u01]# ansible web -m user -a "uid=1022 name=mlon1 "  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "comment": "",
  
    "createhome": true,
  
    "group": 1022,
  
    "home": "/home/mlon1",
  
    "name": "mlon1",
  
    "shell": "/bin/bash",
  
    "state": "present",
  
    "system": false,
  
    "uid": 1022
  
}
  
[root@centos6 u01]#
  #上面简单的创建了一个用户指定uid,需要使用组信息或创建组,要使用group模块
  9.script:一看就是脚本了  #没什么直接选择script模块执行就好
[root@centos6 u01]# ansible web -m script -a "/bin/bash /app/123.sh"   #指定bash和文件路径script模块  
172.17.200.76 | SUCCESS => {
  
    "changed": true,
  
    "rc": 0,
  
    "stderr": "Shared connection to 172.17.200.76 closed.\r\n",
  
    "stdout": "123  123.sh  date.log\r\n",
  
    "stdout_lines": [
  
        "123  123.sh  date.log"    #脚本执行结果  该目录下有这些文件
  
    ]
  
}
  
[root@centos6 u01]#
  有这么多模块的使用,感觉已经能掌控大局了。其实Playbooks才是重头戏,虽然重头戏其实也就是这些命令的集合那就扔到下次再来讲解吧
  到此,大致使用的模块都差不多了。肯定还有许多功能没有说到,欢迎评论补充,灰常感谢!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542780-1-1.html 上篇帖子: Ansible介绍 下篇帖子: 系统化运维工具ansible-13162732
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表