Ansible自动化运维-常用三大武器 (一)

     Ansible是最近比较热门的一款服务器自动化运维工具,其简单,高效,配置管理灵活的特点受到行业的广泛青睐。ansible集合了许多其它运维工具的优点,比如:批量系统配置、批量程序部署、批量运行命令。在实际使用中十分快速方便。

如下图,Ansible与其他自动化工具的对比,可以看出ansible在自动化运维方面大有一家独大的趋势。

选择ansible的优点:
– 是仅需要ssh和Python即可使用
– 无客户端
• ansible功能强大,模块丰富
• 上手容易门槛低
• 基亍 python 开发,做二次开发更容易
• 社区活跃,有较为健全的开发生态

言归正传,ansible的搭建十分简单,且十分灵活,可以在任何路径下创建服务,且多个ansible相互独立,不会影响到其他,在ansible使用上有一下三大常用武器:

Ansible常用三大武器

第一种武器.ansible常用命令

一.ansible常用命令
– ansible 命令,用亍执行临时性的工作,也是必须掌握的。常用的方法有
– ansible all --list-hosts      • 列出要执行的主机,不执行任何操作
– ansible all -m ping        • 批量检测主机

Command模块:

– ansible all -m command -a 'id' -k  • 批量执行命令

Linux中Bash 才能实现> | &等命令,而在command 中直接进行命令而没开启bash进程 command 执行的是硬盘上可以执行的文件 与bash相关的就不能执行。

如:

[root@ansible ~]# ansible db1 -m command -a 'set' 

db1 | FAILED | rc=2 >>

[Errno 2] 没有那个文件或目录

##################################

– 该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有字符部分则执行不成功,如"<", ">", "|", "&"

– 该模块不开启 shell 直接在 ssh 远程中执行,所有使用,到 shell 特性的命令执行都会失败

 

给所有主机部署公钥

在/root/.ssh/下

– ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/authorized_keys)'"  -k  -v

-exclusive=true(强行覆盖)

manage_dir=true(若文件夹目录不存在则部署一个)

key='$(< /root/.ssh/authorized_keys)'"(将key完整的读取出来)

-k(需要密钥时询问)

注意:在第一次输入的时候会要求ssh输入yes---->报错"msg": "Using a SSH password

解决办法:

– 修改 ansible.cfg ------>   将host_key改为False: host_key_checking = False

 

----------------------------------------------------------------------------------------------------------------

第二种武器.ansible-doc模块

– ansible-doc 是 Ansible模块文档说明,针对每个模块都有详绅的用法说明及应用案例介终,功能和Linux系统man命令类似。

Ansible -doc 模块手册

Ansible -doc -l 列出所有模块------1378个

学会查找模块以及用法十分有用:

Ping 模块:测试ssh是否能够登陆

ansible t1 -m ping

Shell/row模块

– shell 模块用法基本和command一样,区别是 shell模块是通过/bin/sh执行命令,可以执行任意命令

– raw模块,用法和shell 模块一样 ,可以执行任意命令

– 区别是 raw 没有chdir、creates、removes参数

总结:shell最强,command默认,row最兼容

 

script模块

对于复杂命令,直接在本地写脚本,然后使用 script 模块批量执行

– ansible t1 -m script -a 'urscript'

远程执行文件

可以写脚本,给各个主机批量执行

如:vim user.sh 

#!/bin/bash
#判断是否存在hurry,若不存在则创建fedora 

id hurry

if [ $? != 0 ];then

        useradd fedora

        echo 123 | passwd --stdin fedora

fi

执行语句:

ansible app -m script -a 'a.sh'

 

copy模块

ansible web -m copy -a 'src=/etc/dns.conf dest=/etc/dns.conf'

Src=源 dest=目标地址

适合用于长的一样的配置文件

 

Lineinfile| replace模块

类似于sed的替换方式:用于有个性的配置文件,正则用法与sed完全一致

 

ansible db1 -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^ONBOOT" line="ONBOOT=\"no\""'

path=需要修改文件所在的路径

Regexp匹配到了这一行的内容,line将整行删掉重新写

Replace模块:将匹配到的内容重新写入

#将eth0网卡中的ONBOOT从no改为yes
ansible db1 -m replace -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^(ONBOOT=).*" replace="\1\"yes\""'

Yum模块

– 使用yum包管理器来管理软件包

– config_file:yum的配置文件

– disable_gpg_check:关闭gpg_check

– disablerepo:不用某个源

– enablerepo:启用某个源

– name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

– state:状态(present,absent,latest)

 

– 删除多个软件包

ansible t1 -m yum -a 'name="lrzsz,lftp" state=absent'

– 安装多个软件包

ansible t1 -m yum -a 'name="lrzsz,lftp"'

在ansible种还有许多的模块这里就不一一介绍了,通常使用:

[root@ansible ~]# ansible-doc | grep "需要查找的命令"  
[root@ansible ~]# ansible-doc "需要查找的命令"
在他的使用帮助中寻找具体的用法(特别是EXAMPLE:)是一种简单高效,十分有用的方法。(未完待续)

你可能感兴趣的:(Ansible自动化运维-常用三大武器 (一))