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

[经验分享] ansible playbook-13223089

[复制链接]

尚未签到

发表于 2018-7-29 10:45:32 | 显示全部楼层 |阅读模式
  参考资料:
  
  Ansible Playbook 介绍(https://blog.csdn.net/CityzenOldwang/article/details/72628895
  ansible playbook核心元素详解(https://blog.csdn.net/nextkara/article/details/72863264
  ansible playbook详解(http://www.mamicode.com/info-detail-1240734.html
  
  1、关于Ansible
  Ansible是一个部署工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。
  理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。
  安装前操作:
  [root@host-172-18-21-78 config]# ansible --help                                #查看帮助
  [root@host-172-18-21-78 config]# ansible --version                          # 检查ansible是否安装
  ansible 2.4.0
  config file = None
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible-2.4.0-py2.7.egg/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 20 2015, 02:00:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]
  ansible playbook实践
  一、安装:(使用yum或pip方式)
  Ansible是python开发的,故依赖一些python库和组件,如:paramiko,PyYaml和jinja三个关键组件;
  只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.
  安装ansible很简单,可通过git从githu上直接获取代码,也可以像redhat/CentOS上通过yum进行安装。
  方式一:
yum install epel-release -y yum install ansible -y  方式二:
yum install ansible jinja2 -y    pip install ansible jinja2   
  
  备注:1.只需在执行机器上安装即可,被执行机器无需安装
       2.jinja2为ansible所需要的模块
  
  使用 ansible --version 来查看是否安装完成
  
  ansible使用格式:
  [root@DB2 ansible]# ansible all -m shell -a "ifconfig|grep eno16777736"
  172.17.0.102 | SUCCESS | rc=0 >>
  eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  172.17.0.112 | SUCCESS | rc=0 >>
  eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  172.17.0.105 | SUCCESS | rc=0 >>
  eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  二、开始配置:
  1)需求:准备2-3台机器,使用ansible playbook  echo.yml发送任务到每台机器上运行脚本。
  1.1、创建ansible相关文件及文件夹:
  mkdir /data/ansible                           #创建任务目录
  mkdir /data/ansible/config               #ansible任务的hosts配置文件目录
  mkdir /data/ansible/logs                  #ansible任务的日志目录
  touch /data/ansible/ansible.cfg        #ansible任务的配置文件
  *****************************
  1.2、制作ansible主机相关:(被执行主机信息位置/etc/ansible/hosts可能不是/data/ansible/config/hosts)
  1)创建hosts文件并登记被执行主机的信息:
  #使用admin账号,[ ]内配置一个组名
  vim /data/ansible/config/hosts
###hosts文件内容开始###[hosts_group]192.168.1.16      ansible_ssh_port=22    ansible_ssh_user=admin    ansible_ssh_pass=xxx192.168.2.30      ansible_ssh_port=22    ansible_ssh_user=admin    ansible_ssh_pass=xxx192.168.1.18      ansible_ssh_port=22    ansible_ssh_user=admin    ansible_ssh_pass=xxx  
[hosts_group:vars]ansible_connection=paramiko  ###hosts文件内容结束###
  解释:[hosts_group]为组名
  *****************************
  
  1.3、编辑任务的配置文件:(ansible主配置文件ansible.cfg )
vim /data/tmpansible/ansible.cfg###ansible.cfg文件内容开始###[defaults]host_key_checking = False                                         # 默认用这个callback_plugins = /usr/share/ansible_plugins/callback_plugins    # 默认用这个ANSIBLE_SSH_ARGS=&quot;-o StrictHostKeyChecking=no&quot;                    # 默认用这个_forks=5                                                          # 默认用这个,并发任务数inventory = /data/tmpansible/config/hosts                   # 要修改为任务目录(参考上面创建的目录)log_path= /data/tmpansible/logs/app.log                     # 要修改为任务目录(参考上面创建的目录)timeout = 10###ansible.cfg文件内容结束###  *******************************
  三、编辑任务相关:
  2.1、任务echo.yml相关:vim /data/tmpansible/echo.yml   (ansible任务的执行模板。为yml文件格式)
###echo.yml内容开始###  
---
  
- name:操作三台主机
  
  hosts:hosts_group                #对应config/hosts下的3台主机组的名称
  
  roles:                           #角色(echo为任务的角色)
  
    - echo                         #ansible会执行roles下面的echo任务的tasks
  
###echo.yml内容结束###
  2.2、任务roles相关
  mkdir -p  /data/tmpansible/roles/echo/{templates,tasks,files}       #批量递增创建templates,tasks,files这三个文件夹
  #echo为具体roles的任务,对应echo.yml中的echo;templates为ansible的任务的模板,可以使用宏变量;
  #tasks为具体的任务,默认会执行它下面的任务;files为tasks会使用的文件;
     2.2.1、编辑任务执行文件main.yml                              #千万不要自定义文件名,这个才是我们实际需要操作的内容(拷贝文件、执行脚本之类)
  
vim /data/tmpansible/roles/echo/tasks/main.yml###main.yml文件内容开始###  ---
  - name: (Checkbundle) Step 1, Transfer domain.txt(拷贝文件)                                 
    copy: src=文件名 dest=目录/文件名
  - name: (Checkbundle) Step 2, Transfer scripts(拷贝脚本)                                    
   #这个是将templates目录下的文件复制过去,里面可以嵌套更改一些变量 (模板:dest=**/scripts/**.sh)
  template: src=脚本名 dest=目录/脚本名         - name: (Checkbundle) Step 3,                                                      
  #这个是执行脚本(模板:nohup sh **/scripts/**.sh &)
  shell: nohup sh 目录/脚本名 &  ###main.yml文件内容结束###
  
  **************注 释**********************
# {{ install_dir_name }} 等就是变量,实际操作的时候请替换成真正的脚本名字,具体脚本中也能增加变量# 变量的索引地址可以放在 /data/tmpansible/group_vars/all 中  例如&quot;install_dir_name: jutidejiaobenmingzi&quot;  
      2.2.2、创建脚本
vim /data/tmpansible/roles/echo/templates/scripts.sh###scripts.sh文件内容开始####!/bin/bashecho &quot;hello&quot; > /tmp/echo###scripts.sh文件内容结束###  
  2.2.3、执行任务
cd /data/ansible/  ansible-playbook echo.yml
  #ansible-playbook -C echo.yml可查看执行步骤
#然后观察屏幕输出或者logs下的日志  四、ansible常用模块及用法
  官方模块列表:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
  1、copy模块(从本地copy文件分发到目录主机路径 )
  src= 源文件路径
  dest= 目标路径
  注意:src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制过去
  content= 自行填充的文件内容
  owner 属主       group 属组         mode权限
  示例:[root@DB2 ansible]# ansible all -m copy -a &quot;src=/data/1.txt dest=/tmp/1.txt.ansible mode=600&quot;
DSC0000.jpg

  查看node1、node2主机的/tmp目录,文件已经以1.txt.ansible重名民的方式传输成功。
DSC0001.jpg

  2、fetch模块(从node1拉取文件到ansible主机端)
  示例:[root@DB2 ansible]# ansible all -m fetch -a &quot;src=/tmp/an.txt dest=/tmp&quot;
   DSC0002.jpg
  3、command模块(在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析。不支持管道功能)
  示例:[root@DB2 ansible]# ansible all -m command -a &quot;ifconfig&quot;
   DSC0003.jpg
  4、shell模块(由于commnad只能执行裸命令(即系统环境中有支持的命令),至于管道之类的功能不支持,shell模块可以做到。)
  示例:[root@DB2 ansible]# ansible all -m shell -a &quot;ifconfig|grep eno&quot;
   DSC0004.jpg
  5、file模块(设置文件属性(创建文件))
  path=目标路径      group 目录属组         owner 属主
  state=directory为目录,link为软件链接
  示例:创建目录:[root@DB2 ansible]# ansible all -m file -a &quot;path=/var/tmp/hello.dir state=directory&quot;
  创建软连接文件:[root@DB2 ansible]# ansible all -m file -a &quot;src=/tmp/hi.txt  path=/var/tmp/hi.link state=link&quot;
   DSC0005.jpg
  6、cron模块(通过cron模块对目标主机生成计划任务)
  分(minute)时(hour)日(day)月(month)周(week)
  name=(本次计划任务的名称)
  state=present生成(默认)|absent 删除(基于name)
  示例1:对所有机器执行任务:每隔3分钟从time.windows.com同步时间(因为cron默认是生成任务,结尾不加state=present表示生成任务
  [root@DB2 ansible]# ansible all -m cron -a &quot;minute=*/3 job='/usr/sbin/update time.windows.com &>/dev/null' name=update_time&quot;
   DSC0006.jpg 示例2:删除计划任务(结尾加state=absent为删除任务
  [root@DB2 ansible]# ansible all -m cron -a &quot;name=update_time state=absent&quot;
  
   DSC0007.jpg
  7、yum模块(故名思义就是yum安装软件包的模块)
  enablerepo表示启用,    disablerepo禁用某repo库
  name 安装包名
  state (present' orinstalled', latest')表示安装, (absent' or `removed') 表示删除
  示例:通过安装epel扩展源并安装nginx
  [root@DB2 ansible]# ansible all -m yum -a&quot;name=epel-release state=installed&quot;
  [root@DB2 ansible]# ansible all -m yum -a&quot;name=nginx state=installed&quot;
  
  8、service模块(服务管理模块)
  name:服务名
  state:服务状态
  enabled: 是否开机启动 true|false
  runlevel: 启动级别 (systemed方式忽略)
  示例:开机启动nginx:[root@DB2 ansible]# ansible all -m service -a &quot;name=nginx state=started enabled=true&quot;
  
  9、script模块(把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;)
  示例:直接在ansible上执行脚本
   DSC0008.jpg
  [root@DB2 01]# ansible all -m script -a &quot;/root/01/scripts/test.sh&quot;
  
  [root@DB2 01]# cat /tmp/ansible.txt
  ansible script test!
   DSC0009.jpg
  
  
  

运维网声明 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-542930-1-1.html 上篇帖子: ansible模块批量管理 下篇帖子: 1,Ansible---安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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