今天心情不错~~~~第25个生日了,又遇昨晚百年难得一见的蓝月亮,所以昨晚连夜整理了文档,

会分为两部分发出去,ansible批量化部署在工作中是非常实用,建议呢 整理大量常用模块去练习



1.1.1 ansible软件介绍

1. ansible是一个基于python开发的自动化运维工具!(saltstack

2. 其功能的实现是基础SSH远程连接服务的

3. ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

1.1.2 ansible软件相关参考链接信息

   http://docs.ansible.com/ansible/intro_installation.html

   http://www.ansible.com.cn/

   http://docs.ansible.com/modules_by_category.html

   http://www.ansible.cn/docs/

1.1.3 ansible软件特点

1. 不需要单独安装客户端,基于ssh服务

2. 不需要安装服务端

3. 需要依靠大量的模块实现批量部署

4. 配置文件/etc/ansible/ansible.cfg

 

1.1.4 ansible软件安装部署和配置

PS:为了安全,尽量不要配置外网

首先保证:可以免秘钥登录被管理端

1. 管理端安装软件:

yum install ansible -y

 

2. 被管理端安装软件:

yum install libselinux-python -y

PS:如果关闭selinux,那么被管理端可以不安装(建议安装)

3. ansible软件管理配置文件

vim /etc/ansible/hosts    #定义ansible可管理的主机

[george]

172.16.1.7

172.16.1.31

172.16.1.41

4. 进行ansible软件批量管理:

ansible george -m command -a "uptime"

PS: 查看的是george主机组,模块为command,的主机负载信息

 george  #主机组

-m  #指定模块参数(command为默认模块,不写也可以)

command #模块名称

-a  #指定利用模块执行的动作参数,-a后面的是要执行的命令

uptime #批量执行的命令

 

image.png 

 

1.1.5 ansible软件命令常用参数

-k :以交互方式输入密码,进行远程管理

-a :指定应用模块的相应参数信息

-m  :指定应该什么模块(默认为command模块)

 


1.1.6 ansible模块总结

参考ansible官方http://docs.ansible.com/ansible/latest/modules_by_category.html

           进入all modules中,使用google浏览器,ctrl+f根据查找模块名查找对应信息

 

ansible执行命令后输出信息中:

绿色——表示查询,或者没有发生任何改变

红色——表示命令操作出现异常

屎×××——对远程主机做了相应改动

粉色——对操作提出建议或忠告

 

ansible系统命令帮助文档查看方法:

ansible-doc -l     --- 列出所有可用的模块信息

ansible-doc -s cron  --- 查看指定模块的参数信息

 

1. command模块实践:(默认模块

ansible george -m command -a "ifconfig"

#批量显示远程主机的网卡信息

ansible george -m commadn -a "chair=/tmp touch kai.txt"

#批量切换到远程主机的/tmp目录下,创建kai.txt这个文件

ansible george -m command -a "creates=/tmp/kai touch /tmp/kai"

#批量判断远程主机/tmp下有没有kai这个文件,如果有就skip,没有就执行后面的命令

ansible george -m command -a "removes=/tmp/kai.txt touch /tmp/123.txt"

#批量判断远程主机/tmp下有没有kai这个文件,如果有就执行后面的命令, 没有就skip

ansible george -m command -a "ls -l"

#free_from(默认参数)可以输入任何系统命令信息,但是不包含一些特殊环境变量和特殊符号信息,如:<>,|;&


2. ping模块实践      

[root@m01 scripts]# ansible george -m ping

172.16.1.31 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.7 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

#返回pong,说明可以登录SSH连接,这里ping但不是测试网络连通性的,用于验证能否登录SSH连接,在查  看是否满足python的支持, 属于system模块

 

 

3.debug调试模块实践             

[root@m01 scripts]# ansible george -m debug

172.16.1.31 | SUCCESS => {

    "changed": false,

    "msg": "Hello world!"

}

172.16.1.7 | SUCCESS => {

    "changed": false,

    "msg": "Hello world!"

}

#此模块在执行过程中打印语句,对于调试变量或表达式非常有用,而不一定会停止播放。与“When:”指令 一起调试非常有用。

 

4.  copy模块实践         

1copy参数src              

例: ansible george -m copy -a "src=/etc/hosts dest=/tmp/"

#将本机/etc/hosts文件复制到远程主机的/tmp目录下(如果/tmp下已有同名hosts,那么会被覆盖)

例: ansible george -m copy -a "src=/etc/hosts dest=/tmp/dir/"

#如果远程主机没有dir目录,那么会创建dir目录

例: ansible george -m copy -a "src=/etc/hosts dest=/tmp/1/2/3/4/"       

#但传输文件时,如果上级目录不存在,则不会创  建,传输就无法成功

例: ansible george -m copy -a "src=/tmp dest=/tmp/1/2/3/4"

#传输目录时,如果远程主机目录不存在,传输时可以创建多层目录,

#如果传输的是目录本身及下面内容,后面不要加/

例: ansible george -m copy -a "src=/tmp dest=/tmp/1/2/3/4"

#如果传输的是目录下面的内容,后面必须加/

例: ansible george -m copy -a "remote_src=true src=/etc/hosts dest=/tmp/1/2/"

#批量操作远程主机,对他们本机上的文件进行本地操作

    #设置为true时(默认为flase),不支持递归复制

 

2copy参数backup=yes  

 ansible george -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"

# 分发文件时,如果与远程主机下hosts文件内容不一致,那么会备份源文件为"hosts.5714...以时间戳命名   ",   在修改hosts源文件的内容

    #不输入默认backup=no,就是不备份,会覆盖源文件

 

3copy参数modeownergroup

ansible george -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=george group=george"

#改变文件的权限为0600,所有者和属组为george


4 copy参数force

ansible george -m copy -a "src=/etc/hosts dest=/tmp/ force=yes"

#默认为forec=yes,如果和远程主机信息不一致,会覆盖

#如果force=no,那么远程主机同名文件不会做改变

 

5copy参数content  

ansible george -m copy -a "content=123123 dest=/tmp/hosts"

#写入信息到/tmp/ hosts中会把源内容覆盖掉,谨慎操作,只能添加少量的信息

#添加多量的,可以用template模块

 

5. shell模块实践  

ansible george -m shell -a "hostname;hostname -i"

# 支持特殊符号,-a里面可接多个名,用分号分割

 

测试:用shell执行一个脚本很麻烦的,用script执行

1)推送脚本过去,并授权

ansible george -m copy -a "src=/tmp/test.sh dest=/tmp mode=+x"

2)运行脚本

ansible george -m shell -a "/tmp/test.sh"

 

6. script模块实践  

ansible george -m script -a "/server/scritps/keepalived.sh"

#将本地脚本中的信息,在远程主机上执行

 

7. setup模块实践  

ansible george -m setup

#显示远程主机的所有信息(后面加-v显示详细信息)

#提取IP、或架构信息等,X86来判断主机架构,安装合适软件

 

ansible georhe -m setup -v   

#主要用于解决一些错误:如远程主机hang住了,ansible会输出少量信息(最多-vvvv)

 

8. yum模块实践

ansible george -m yum -a "name=iotop state=installed"

#批量使用yum安装软件iotop

 

9. service模块实践

ansible george -m service -a "name=crond state=stopped enable=no" #stopped是2个p

#临时停止crond服务,取消开机自启动(相反:state=started enable=yes)

10.file模块实践                      #修改文件或目录属性信息,用于创建文件或目录,也可以用modeownergroup定义文件或目录的权限信息

1)path参数        

ansible george -m file "path=/tmp/ state=directory mode=0644"

#指定路径,是dest,name的别名,作用一样

2)state参数  

ansible george -m file -a "dest=/opt/dir_01/ state=directory"

#创建目录为dir_01

ansible george -m file -a "dest=/opt/file_01 state=touch"

#创建文件为file_01

ansible george -m file -a "dest=/opt/file_01 state=absent"

#删除文件file_01

ansible george -m file -a "src=/opt/hosts dest=/opt/hosts_link state=link"

#创建符号链接,基于本机有源文件

 

11. cron模块实践                      #定时任务模块

 * * * * *  /bin/sh /server/scripts/test.sh &>/dev/null

    minute                 # Minute when the job should run ( 0-59, *, */2, etc )

hour                   # Hour when the job should run ( 0-23, *, */2, etc )

day                    # Day of the month the job should run ( 1-31, *, */2, etc )

month                  # Month of the year the job should run ( 1-12, *, */2, etc )

weekday                # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )

job                    # 定义定时任务与要做什么事

name       # 给定时任务加一个备注,避免创建出多个重复的定时任务(根据定时任务备份判断        是否生成一个新的定时任务)

stat       #若设置为present,表示创建定时任务,若设置为absent,表示删除指定定时任务

只能管理自己创建的定时任务,本来有的管理不了

disabled      #disable=yes注释掉定时任务(不生效),disable=no解除注释定时任务(生效)

 

ansible george -m cron -a "name='backup servcie' minute=*/5 job='/usr/sbin/ntpdate  time.nist.gov >/dev/null 2>&1'"      

#创建定时任务

ansible george -m cron -a "name=`backup service` state=absent"

#删除定时任务

ansible george -m cron -a "name=dancy01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' disabled=yes"              

#注释掉定时任务,反之取消注释

12.mount模块实践

ansible george -m mount -a "state=mounted src=172.16.1.31:/data path=/data fstype=nfs"

src   #要被挂载的目录或文件

path  #指定挂载点的路径

fstype  #指定挂载时的文件系统类型

opts  #在挂载时,指定挂载参数信息

state  #state=mounted,在fstab文件中的备份将被激活挂载或适当配置,如果指定mounted的挂载挂载点不存在,会创建       

   #state=unmounted,设备将被卸载不会改变fstab文件中的信息

   #state=absent和state=present,只处理fatab,但不影响目录的挂载


小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅

qrcode_for_gh_5ecc48d3d14a_258.jpg

关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量! 

qrcode_for_gh_d20dccd1c74b_258.jpg