运维自动化——Ansible

本文详细介绍了Ansible的命令执行过程,包括加载配置、执行模块等步骤,并列举了常用的Ansible模块,如command、shell、script、copy、fetch、file、unarchive、archive、hostname、cron、Yum、service、systemd、user、group、mount、setup、firewalld和get_url,阐述了它们的功能和使用示例,帮助读者理解如何利用Ansible进行运维自动化。

一:ansible命令执行过程

1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg

2. 加载自己对应的模块文件,如command

3. 通过ansible将模块或命令生成对应的临时py文件, 并将该文件传输至远程服务器的对应执行用户                 $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

4. 给文件+x执行

5. 执行并返回结果

6. 删除临时py文件,sleep 0退出

执行状态: 绿色:执行成功并且不需要做改变的操作

                  黄色:执行成功并且对目标主机做变更

                  红色:执行失败

二:ansible常用模块:

1.command模块:command:在远程主机执行命令,默认模块,可忽略  -m  选项

 但是,command模块不支持特殊符号,| > *,也不支持变量:

 Shell命令是通过/bin/sh进行执行的,command命令没有shell的环境变量,因此不支持特殊符号或者变量的操作。

2.shell模块:和command模块相似,用shell执行命令

shell模块支持一些特殊符号:重定向符号,变量等的操作

 调用Bash执行命令,类似于:cat /tmp/first.txt | awk -F '|'  '{print $1,$2}'  &> /tmp/example.txt  这些复杂命令,即使使用shell也可能会失败。解决办法:写到脚本中,copy到远程执行,再把需要的结果拉回执行命令的机器。

3.script模块:功能:在远程机器上执行本地脚本

(1)执行本地的shell脚本文件,管控机的shell脚本文件

 (2)判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过:

情况1:被控机上 /root/ 不存在(script.sh)文件,则主控机上会在被控机上执行这个脚本

 

情况2:被控机上 /root/ 存在和主控机/root/一样的(script.sh)文件,则主控机不会在被控机上执行这个脚本

(3)判断被控机上的文件或目录是否存在,如果存在则不执行,如果不存在,则执行:

4.copy模块:copy:从ansible服务器主控端复制文件到远程主机

src:源文件  指定拷贝文件的本地路径(如果有,则拷贝目录内容,比拷贝目录本身)

dest:指定目录路径

mode:设置权限

backup:备份源文件

centent:代替src  指定本机文件内容,生成目标主机文件

(1)dest

 

 (2)如果目标存在,默认覆盖。(此处举例指定先备份)

 (3)指定内容,直接生成目标文件 (dest指定的必须是一个文件)

 

 (4)复制/etc/目录下的文件,不包括/etc/目录本身:

5.fetch模块:从远程主机提取文件至主控端,和copy相反,目前不支持目录!可以先打包,再提取文件。

(1)

 

 注意:会生成每个被管理主机不同编号的目录,不会发生文件名冲突

(2)

 

 6.file模块:file:设置文件属性

path:要管理的文件路径(强制添加)

recurse:递归,文件夹要递归

src:创建硬链接,软链接时,指定源目标,配合"state=link"或者"state=hard"设置软链接,硬链接

state:状态

absent:缺席,删除

(1)创建空文件:

 (2)删除空文件:

 (3)创建文件时,指定文件属主和权限:

(4)创建目录:

 (5)删除目录:

 (6)创建软链接:

 (7)删除软链接:

 (8)递归设置目录及文件属性,必须和 state=directory 结合使用

 7.unarchive模块:unarchive:解包解压缩,有两种方法:

(1)将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

(2)将远程主机上的某个压缩包解压到指定路径下,设置copy=no

常见参数:

copy:默认为yes,当copy=yes时,拷贝的文件是从ansible主机复制到远程主机上;如果设置为               copy=no,会在远程主机上寻找src源文件

        src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上                  的路径,则需要设置copy=no

        dest:远程主机上的目标路径

        mode:设置解压缩后的文件权限

示例:(1)默认copy为yes,将本机目录文件解压到目录主机对应目录下:

 (2)解压远程主机文件到指定目录下,并设置权限为777(前提是被控机上有这个压缩包)

 

 8.archive模块:archive:打包压缩,将远程主机目录打包

        path:指定路径

        dest:指定目标文件

        format:指定打包格式

        owner:指定所属者

        mode:设置权限

示例:将远程主机的目录打包归档至指定目录下,并设置权限为777:

 

 9.hostname模块:hostname:管理主机名

ansible 192.168.137.160 -m hostname -a "name=new_name"    #更改单个主机名

10.cron模块:cron模块主要用于添加,删除,更新操作系统的crontab任务计划

name:任务计划名称
cron_file:替换客户端该用户的任务计划的文件
minute:分(0-59,*,*/2)
hour:时(0-23,*,*/2)
day:日(1-31,*,*/2)
month:月(1-12,*,*/2)
weekday:周(0-6或1-7, *)


job:任何计划执行的命令
backup:是否备份之前的任务计划
user:新建任务计划的用户
state:指定任务计划present、absent


#特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),
weekly(每周),daily(每天),hourly(每小时)

示例:(1)创建任务

 

 (2)删除任务:

 

 (3)注释任务,不再生效

(3)删除名称为空的计划任务:

 11.Yum模块:yum:管理包

enablerepo:启用某个源

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

state定义软件包的状态:

        -present:安装(installed也可以)

        -absent:删除(removed)

        -latest:安装最新的

示例:(1)查看程序列表:

 (2)安装:

[root@Ansible_Master ~]# ansible 192.168.137.160 -m yum -a "anme=httpd state=present"

(3)删除:

[root@Ansible_Master ~]# ansible 192.168.137.160 -m yum -a "anme=httpd state=absent"

12.service模块:功能:实现远程管理服务的生命周期

关键参数:enabled        #开机启动 yes|no

                  name        #服务名称,必选项

                  runlevel        #运行级别

                  state        #状态:started | stopped | restarted | reloaded

示例:(1)停止服务:

ansible srv -m service -a 'name=httpd state=started enabled=yes'#启动服务,并设为开机自启

ansible srv -m service -a 'name=httpd state=reloaded' #重新加载

ansible srv -m service -a 'name=httpd state=restarted' #重启服务

ansible web -m service -a "name=httpd state=started" #启动

ansible web -m service -a "name=keepalived enabled=yes" #设置开机自启动

 13.systemd模块:systemd模块用于控制主机的systemd服务。说白了,就是Linux下的systemd命令。需要远程主机支持systemd。

ansible test -m systemd -a "name=httpd state=started"    #启动

ansible test -m systemd -a "name=httpd state=stopped"    #停止服务

ansible test -m systemd -a "name=httpd state=restarted"    #重启服务

ansible test -m systemd -a "name=httpd state=reloaded"    #重新加载

14.user模块:user:管理用户

关键参数:group        #属组

                groups        #附加组

                home        #设置家目录

                name        #用户名

                remove        #删除用户并删除用户的家目录

                shell        #用户登陆后的shell

                system        #系统用户

                uid        #用户的id        

                state        #创建或删除

                shell        制定用户的shell环境

15.group模块

关键参数:gid        #组id

                system        #系统组

                name        #名称

ansible web -m group -a "name=jason10 system=yes gid=5000" # 创建系统组

ansible web -m group -a "name=jason11" # 创建普通的组

ansible web -m group -a "name=jason11 state=absent" # 删除组

示例:创建普通的组:

 16.mount模块:

path:挂载到本地的目录

src:对端目录

fstype:文件系统类型        nfs  |  ext4  |  ext3

state:        present:只写入开机自动挂载的文件中,不挂载

                mounted:既写入文件,又挂载

                absent:卸载设备,并且清理开机自动挂载文件

                unmounted:只卸载不清理文件

推荐:挂载的时候:mounted

        卸载的时候:absent

#挂载192.168.5.80:/data目录到web_group组中的主机
ansible web_group -m mount -a 'path=/mnt 192.168.5.80:/data fstype=nfs state=mounted'

卸载,会直接删除/data目录,挂载的时候也不需要创建目标的/data目录
#ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=absent"

17.setup模块:setup模块用于收集远程主机的一些基本信息。

filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

ansible websrvs -m setup
返回的信息非常多,很多情况我们并不需要全部的信息,可以通过过滤获得指定的信息。
获取主机ip
ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"


获取对应主机的内存信息
ansible websrvs -m setup -a "filter=ansible_memory_mb"


通过通配符实现模糊匹配,比如以”mb”关键字结尾的信息
ansible ansible-demo3 -m setup -a "filter=*mb"


获取主机名
ansible web01 -m setup -a 'filter=ansible_fqdn'

示例:查看IP

 18.firewalld模块:

ansible all -m firewalld -a 'port=443/tcp permanent=nostate=enabled'
#使用防火墙规则将443/tcp端口打开

ansible all -m firewalld -a 'service=http permanent=nostate=enabled'

19.get_url模块:(相当于Linux中的wget)

用于将文件或软件从http、https或ftp下载到本地节点上或被管理机节点上
ansible 192.168.42.210 -m get_url -a "dest=/opt/ owner=nebula group=nebula mode=600
url=http://archive.apache.org/dist/httpd/httpd-2.4.7.tar.gz"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值