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

[经验分享] ansible自动化运维工具

[复制链接]

尚未签到

发表于 2018-7-30 12:06:51 | 显示全部楼层 |阅读模式
  ansible自动化运维工具
  简介
  ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。
  1.ansible的安装直接用yum安装,配置好epel源即可。
  2.ansible安装目录在/etc/ansible下。
  服务器环境
  192.168.32.200:作为ansible管理节点
  192.168.32.202:被管理节点
  ansible.cfg配置文件
  hostfile=/etc/ansible/hosts #指定默认hosts配置的位置
  host_key_checking = False   #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤
  ask_pass=True               # 每次执行ansible命令是否询问ssh密码
  ask_sudo_pass=True          # 每次执行ansible命令时是否询问sudo密码
  3.首先在ansible管理节点上修改hosts文件
  cd /etc/ansible/
  vim hosts // 在最后一行加入以下内容
  [test]
  192.168.32.202
  4.ssh-keygen -P '' 生成公钥
  ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.202 //将公钥文件传输到各节点上
  5.示例 Ansible有一个非常有用的模块是 command,相信很多人都需要它!Command模块就是“远程执行命令”
  相比Ansible的内置模块而言,Command模块无法通过返回值来判断命令是否执行成功。
  但Ansible添加了creates 和 removes 的属性,以此检查命令是否成功执行或者是否应该被执行。
  如果你定义了 creates 属性,当文件已存在时,它不会再执行。相反如果定义了 removes 属性,
  则只有文件存在的情况下命令才会被执行
  ansible webhosts -m command -a 'rm -rf /tmp/test removes=/tmp/test'
  192.168.32.202 | success | rc=0 >>
  如果“受控节点”上 /tmp/testfile 并不存在,Ansible则提示跳过,输出如下: MachineName | skipped
  否则,如果文件存在,则返回成功:
  ansible test -m command -a 'date' //command和shell模块可以在被控端执行命令
  192.168.32.202 | success | rc=0 >>
  Sat Jan 10 16:13:44 EST 2015
  ansible webhosts -m shell -a 'date'
  Enter passphrase for key '/root/.ssh/id_rsa': 输入公钥密码
  192.168.32.202 | success | rc=0 >>
  Sat Jan 10 16:17:40 EST 2015
  安装软件和启动服务。yum,service模块
  ansible test -m yum -a 'name=vsftpd state=present' // yum模块远程安装软件
  ansible test -m service -a ‘name=vsftpd state=started enabled=yes’
  支持管道的命令:raw模块,类似于shell模块
  ansible test -m raw -a 'ifconfig | grep eth0'
  查看系统信息
  ansible test -u root -m setup
  字段名 参考值 含义
  ansible_architecture    x86_64  受控节点系统框架
  ansible_distribution    CentOS  受控节点的操作系统发行版
  ansible_distribution_version    6.3 受控节点发行版本的版本号
  ansible_domain  kisops.org  受控节点的主域名
  ansible_fqdn    site01.kisops.org   受控节点的完整机器名
  ansible_interfaces  [“lo”,”eth0”]   列出受控节点所有的网卡
  ansible_kernel  2.6.32-431.5.1.el6.x86_64   受控节点的内核版本号
  ansible_memtotal_mb 30099   受控节点总内存大小(兆)
  ansible_processor_count 24  受控节点的CPU核心
  ansible_virualization_role  guest   受控节点的身份:host为宿主机,guest为虚拟机
  ansible_virtualization_type kvm 受控节点的虚拟化类型
  Ansible还有一个基础模块叫file,顾名思义是与文件相关的。
  它可以用于查看文件的属性、修改文件属性、查询文件是否被修改等等
  ansible test -u root -m file -a 'path=/etc/fstab'
  192.168.32.202 | success >> {
  "changed": false,
  "gid": 0,
  "group": "root",
  "mode": "0644",
  "owner": "root",
  "path": "/etc/fstab",
  "size": 779,
  "state": "file",
  "uid": 0
  }
  在/tmp目录以nobody用户的身份创建一个test的文件夹
  ansible test -u root -m file -a 'path=/tmp/test state=directory mode=755 owner=nobody'
  192.168.32.202 | success >> {
  "changed": true,
  "gid": 0,
  "group": "root",
  "mode": "0755",
  "owner": "nobody",
  "path": "/tmp/test",
  "size": 4096,
  "state": "directory",
  "uid": 99
  }
  如果目录不存在或属性和预设的不一致,Changed的值就为True。
  如果相同(比如重复执行指令),Changed的值将变为False。
  copy模块。Copy模块的作用就是从“控制节点”上拷贝文件到“受控节点”上。
  ansible test -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'
  192.168.32.202 | success >> {
  "changed": true,
  "checksum": "0eafb3ce197c848fca254e3a1356934a96f310bf",
  "dest": "/tmp/fstab",
  "gid": 0,
  "group": "root",
  "md5sum": "99f84827ef399f896305ca09ce1c668a",
  "mode": "0644",
  "owner": "root",
  "size": 805,
  "src": "/root/.ansible/tmp/ansible-tmp-1420871736.8-93337290722652/source",
  "state": "file",
  "uid": 0
  }
  查看当前登录的用户
  ansible -i hosts all -a 'whoami'
  Enter passphrase for key '/root/.ssh/id_rsa':
  192.168.32.202 | success | rc=0 >>
  root
  这是一条ad-hoc命令——临时执行命令,ad-hoc是ansible里的一个概念, 在上面命令中就是 -a ,
  默认ansible执行时会从该配置中加载hosts配置,因此可以通过修改.ansible.cfg来指定默认的hosts文件地址:
  # .ansible.cfg
  [defaults]
  hostfile=/etc/ansible/hosts
  查看ansible的模块
  ansible-doc -l
  ansible-doc file查看制定模块的帮忙信息,以file模块为例
  ansible命令参数介绍
  -m:要执行的模块,默认为command
  -a:模块的参数
  -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
  -k:提示输入ssh登录密码。当使用密码验证的时候用
  -s:sudo运行
  -U:sudo到那个用户,默认为root
  -K:提示输入sudo密码,当不是NOPASSWD模式时使用
  -C:只是测试一下会改变什么内容,不会真正去执行
  -c:连接类型(default=smart)
  -f:fork多少个进程并发处理,默认为5个
  -i:指定hosts文件路径,默认default=/etc/ansible/hosts
  -I 指定pattern,对<host_pattern>已匹配的主机中再过滤一次
  --list-hosts:只打印有哪些主机会执行这个playbook文件,不是实际执行
  -M:要执行的模块路径,默认为/usr/share/ansible
  -o:压缩输出,摘要输出
  --private-key 私钥路径
  -T: ssh连接超时时间,默认10秒
  -t:日志输出到该目录,日志文件名以主机名命名
  -v:verbost
  playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好做什么。
  一个简单的playbook是这样的,把当前用户名输出到whoami.rst文件中:
  # playbook.yml
  ---
  - hosts: webhosts  # hosts中指定
  remote_user: root  # 如果和当前用户一样,则无需指定
  tasks:
  - name: whoami
  shell: 'whoami > whoami.rst'
  hosts后面根据webhosts是从hosts中读取的,tasks是是关键词,指明了要执行哪些任务;
  下面的name是任务的名称,shell是前面提到的module(模块),单引号中是命令。
  使用playbook批量安装软件
  vim ftp.yml
  ---
  - hosts: webhosts  # hosts中指定
  tasks:
  - name: yum -y install ftp
  shell: yum -y install ftp
  ansible-playbook ftp.yml
  PLAY [webhosts] ***************************************************************
  GATHERING FACTS ***************************************************************
  Enter passphrase for key '/root/.ssh/id_rsa':
  ok: [192.168.32.202]
  TASK: [yum -y install ftp] ****************************************************
  changed: [192.168.32.202]
  PLAY RECAP ********************************************************************
  192.168.32.202             : ok=2    changed=1    unreachable=0    failed=0
  ansible实时批量执行脚本
  ansible all -m script -a “/root/123.sh”
  解决在运行ansible的时候会挑出一些warnning
  vim /etc/ansible/ansible.cfg
  system_warnings = False
  如果客户端的ssh端口不是22的话,需要修改hosts
  [server]
  172.16.21.102:16861
  172.16.21.103:16861
  ansible_ssh_port=16861
  ansible 使用yml文件时如何取消回执信息:
  在yml文件里添加gather_facts: no

运维网声明 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-543564-1-1.html 上篇帖子: ansible批量分发文件含自动备份原文件 下篇帖子: ansible 一些简单的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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