【运维知识进阶篇】Ansible自动化运维-ad-hoc详解

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云防火墙,500元 1000GB
简介: 【运维知识进阶篇】Ansible自动化运维-ad-hoc详解

啥是ad-hoc,简而言之就是一条命令,执行完即结束,并不会保存。适用于在多台机器查看某个进程活动,或者拷贝指定文件到本地,这种临时的,只需要执行一次的命令。

ad-hoc模式的命令构成

1. #命令+主机名称+'-m'指定模块参数+模块名称+'-a模块动作'+'df -h'具体命令
2. [root@Ansible ~]# ansible web01 -m command -a 'df -h'
3. web01 | CHANGED | rc=0 >>
4. Filesystem      Size  Used Avail Use% Mounted on
5. devtmpfs        476M     0  476M   0% /dev
6. tmpfs           487M     0  487M   0% /dev/shm
7. tmpfs           487M  7.7M  479M   2% /run
8. tmpfs           487M     0  487M   0% /sys/fs/cgroup
9. /dev/sda3        19G  2.5G   17G  13% /
10. /dev/sda1       197M  110M   88M  56% /boot
11. tmpfs            98M     0   98M   0% /run/user/0

ad-hoc结果返回颜色

绿色:代表没有被管理端主机修改

黄色:代表被管理端主机变更

红色:代表出现故障,注意查看提示

ad-hoc常用模块

1. command             # 执行shell命令(不支持管道等特殊字符)
2. shell               # 执行shell命令
3. scripts             # 执行shell脚本
4. yum_repository      # 配置yum仓库
5. yum                 # 安装软件
6. copy                # 变更配置文件
7. file                # 建立目录或文件
8. service             # 启动与停止服务
9. mount               # 挂载设备
10. cron                # 定时任务
11. get_url             #下载软件
12. firewalld           #防火墙
13. selinux             #selinux

Ansible-doc帮助手册

1. [root@Ansible ~]# ansible-doc -l        #查看所有可用模块
2. [root@Ansible ~]# ansible-doc -copy     #查看指定模块方法
3. [root@Ansible ~]# ansible-doc -s copy   #查看指定模块参数

Ansible命令模块

1、command

1. #默认模块,执行命令
2. [root@Ansible ~]# ansible web_group -a 'hostname'
3. web02 | CHANGED | rc=0 >>
4. Web02
5. web01 | CHANGED | rc=0 >>
6. Web01

2、shell

1. #如果需要管道操作,则使用shell
2. [root@Ansible ~]# ansible web_group -m shell -a 'ps -ef|grep nginx' -f 50
3. #-f 在多台主机运行的并发数量

3、script

1. #编写脚本
2. [root@Ansible ~]# cat yum.sh
3. #!/usr/bin/bash
4. yum install -y vsftpd
5. 
6. #该脚本文件在本机即可实现远程执行,不需要将脚本文件推送目标主机执行
7. [root@Ansible ~]# ansible web_group -m script -a '/root/yum.sh'

Ansible软件管理模块

4、yum

1. [root@Ansible ~]# ansible web_group -m yum -a "name=httpd state=present"
2. name                      #指定对象
3.     httpd                 #软件包名称
4.     file://               #本地安装路径(相当于yum localinstall本地rpm包)
5.     http://               #指定yum源(远程仓库获取rpm包)
6. 
7. state                     #进行的操作
8.     installed、present    #安装软件包
9.     removed、absent       #移除软件包
10.     latest                #安装最新软件包
11. 
12. [root@Ansible ~]# ansible-doc yum
13. exclude=kernel*、foo*           #排除某些包
14. list=ansible                    #类似于yum list查看是否可以安装
15. disablerepo="epel,ol7_latest"   #禁用指定的yum仓库
16. download_only=true              #只下载不安装,类似于yum install d

5、yum_repository

1. name            #指定仓库名,没有则用file当仓库文件名
2. description     #描述
3. baseurl         #指定yum源
4. file            #配置文件名,当仓库名与配置文件名不同时候使用
5. mirrorlist      #镜像列表
6. state           #行为
7. gpgcheck        #指定检查秘钥
8. enable          #是否启用仓库

Ansible文件管理模块

适用于生产场景,统一管理配置

6、copy

1. #拷贝文件模块
2. [root@Ansible ~]# ansible web_group -m copy -a 'src=/etc/passwd dest=/tmp/pass.txt'
3. 
4. #在推送覆盖客户端文件前,对客户端已有文件进行备份(按照时间信息备份)
5. [root@Ansible ~]# ansible web_group -m copy -a 'src=/etc/passwd dest=/tmp/pass.txt  backup=yes'
6. 
7. #直接向客户端文件中写入数据信息,并且会覆盖客户端文件内原有的数据信息
8. [root@Ansible ~]# ansible web_group -m copy -a 'content='123' dest=/tmp/pass.txt'
9. [root@Web01 ~]# cat /tmp/pass.txt 
10. 123
11. [root@Ansible ~]# ansible web_group -m copy -a 'content='12345' dest=/tmp/pass.txt'
12. [root@Web01 ~]# cat /tmp/pass.txt 
13. 12345
14. 
15. src             #源文件路径
16. dest            #目标路径
17. backup          #对推送传输的文件进行备份
18. content         #添加覆盖内容内容
19. group           #指定文件属组
20. owner           #指定文件属主
21. mode            #指定文件权限

7、file

1. #创建目录
2. [root@Ansible ~]# ansible web_group -m file -a 'path=/root/test state=directory'
3. 
4. #创建文件并指定权限位、属主、属组
5. [root@Ansible ~]# ansible web_group -m file -a 'path=/root/test.txt state=touch mode=0555 owner=root group=root'
6. [root@Web01 ~]# ll test.txt 
7. -r-xr-xr-x 1 root root 0 Apr 17 15:43 test.txt
8. 
9. #客户端创建软链接
10. [root@Ansible ~]# ansible web_group -m file -a 'src=/root/test path=/root/test_link state=link'
11. 
12. #创建目录,指定属组、属主、权限授权位,并进行递归授权
13. [root@Ansible ~]# ansible web_group -m file -a 'path=/root/test state=directory owner=www group=www mode=0700 recurse=yes'
14. 
15. path            #指定远程主机目录或文件信息
16. recurse         #递归授权
17. state
18.     directory   #在客户端创建目录
19.     touch       #在客户端创建文件
20. link        #link表示创建软链接文件
21.     absent      #表示删除文件或目录
22. mode            #设置文件或目录权限
23. owner           #设置文件或目录属主信息
24. group           #设置文件或目录属组信息

8、get_url

1. [root@Ansible ~]# ansible web_group -m get_url -a 'url=https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.0-1.el7.x86_64.rpm dest=/root mode=0644'
2. 
3. url         #指定下载地址
4. dest        #指定客户端下载目录
5. mode        #指定下载文件权限
6. checksum    #检验加密算法
7.     md5
8.     sha256

Ansible服务管理模块

9、service、systemd

1. #启动crond并加入开机自启动
2. [root@Ansible ~]# ansible web_group -m service -a 'name=crond state=started enable=yes'
3. [root@Ansible ~]# ansible web_group -m systemd -a 'name=crond state=started enable=yes'
4. 
5. #停止crond并删除开机自启动
6. [root@Ansible ~]# ansible web_group -m service -a 'name=crond state=stoped enable=no'
7. [root@Ansible ~]# ansible web_group -m systemd -a 'name=crond state=stoped enable=no'
8. 
9. name           #定义要启动服务的名称
10. state          #指定服务状态
11.     started    #启动服务
12.     stopped    #停止服务
13.     restarted  #重启服务
14.     reloaded   #重载服务
15. enabled        #开机自启动
16.     yes
17. no

Ansible用户管理模块

Ansible管理用户与组,通常使用user、group模块

10、group

1. [root@Ansible ~]# ansible web_group -m group -a 'name=www gid=888'
2. 
3. name    #组名
4. gid     #组gid
5. state
6.     absent    #移除客户机组
7.     present   #创建客户机组(默认)

11、user

1. #创建用户,指定uid、gid,不创建家目录,不允许用户登录
2. [root@Ansible ~]# ansible web_group -m user -a 'name=www uid=888 group=www shell=/sbin/nologin create_home=false'
3. 
4. #创建用户并生成秘钥对
5. [root@Ansible ~]# ansible web_group -m user -a 'name=www uid=888 group=www shell=/bin/bash generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
6. 
7. #将明文密码加密,然后进行用户创建
8. [root@Ansible ~]# ansible web_group -m debug -a "{{'koten'|password_hash('sha512','salt')}}"
9. 
10. #创建用户
11. [root@Ansible ~]# ansible web_group -m user -a 'name=koten password=xxxx create_home=true shell=/bin/bash'
12. 
13. uid            #指定用户uid
14. group          #指定用户组名称
15. groups         #指定附加组名称
16. password       #给用户添加密码(-a后需要用单引号)
17. shell          #指定用户登录shell
18. create_home    #是否创建家目录
19.     yes
20. false

Ansible定时任务模块

12、cron

1. #正常使用crond服务
2. [root@Ansible ~]# crontab -l
3. no crontab for root
4. 
5. #使用ansible添加一条定时任务
6. [root@Ansible ~]# ansible web_group -m cron -a "minute=* hour=* day=* mounth=* weekday=* job='/bin/sh /root/test.sh'"
7. 
8. #不定义默认每分钟执行一次
9. [root@Ansible ~]# ansible web_group -m cron -a "job='/bin/sh /root/test.sh'"
10. 
11. #设置定时任务注释信息,可以用name设定
12. [root@Ansible ~]# ansible web_group -m cron -a "name='cron01' job='/bin/sh /root/test.sh'"
13. 
14. #删除相应定时任务
15. [root@Ansible ~]# ansible web_group -m cron -a "name='cron01' job='/bin/sh /root/test.sh' state=absent"
16. 
17. #注释相应定时任务,使定时任务失效
18. [root@Ansible ~]# ansible web_group -m cron -a "name='cron01' job='/bin/sh /root/test.sh' disabled=no"

Ansible磁盘挂载模块

13、mount

1. #指定源目录与挂载目录,挂载类型,挂载方式,传递给挂载命令的参数
2. [root@Ansible ~]# ansible web_group -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted"
3. 
4. opts        #传递给挂载命令的参数
5. present     #开机挂载,仅将挂载配置写入/etc/fstab
6. mounted     #挂载设备,并将配置写入/etc/fstab
7. unmounted   #卸载设备,不会清除/etc/fstab写入的配置
8. absent      #卸载设备,会清理/etc/fstab写入的配置

Ansible防火墙模块

14、selinux

1. #修改配置文件关闭selinux,重启后生效
2. [root@Ansible ~]# ansible web_group -m selinux -a 'state=disabled'
3. 
4. #临时关闭selinux
5. [root@Ansible ~]# ansible web_group -m shell -a 'setenforce 0' 
6. 
7. #获取selinux当前状态
8. [root@Ansible ~]# ansible web_group -m shell -a 'getenforce'

15、firewalld

1. #开启http服务的防火墙,并设置为开机自启动
2. [root@Ansible ~]# ansible web_group -m firewalld -a 'service=http permanent=yes state=enabled'
3. 
4. #开启http服务的防火墙,并设置为开机自启动,临时生效
5. [root@Ansible ~]# ansible web_group -m firewalld -a "service=http immediate=yes permanent=yes state=enabled"
6. 
7. 开启端口8080-8090端口tcp协议的防火墙,并设置为开机自启动,临时生效
8. [root@Ansible ~]# ansible web_group -m firewalld -a "port=8080-8090/tcp immediate=yes permanent=yes state=enabled"
9. 
10. service                 #指定开放或关闭的服务名称
11. port                    #指定开放或关闭的端口
12. permanent               #是否添加永久生效
13. state                   #开启或者关闭
14.     enabled
15.     disabled
16. zone                    #指定配置某个区域
17. rich_rule               #配置辅规则
18. masquerade              #开启地址伪装
19. immediate               #临时生效
20. source                  #指定来源IP

Ansible主机信息模块

在以下场景中会经常用到主机信息

1、根据不同主机不同IP创建对应不同的IP目录

2、根据不同主机不同主机名创建对应主机名的目录

3、自动化运维平台需要自动获取到主机的IP地址,内存信息,磁盘信息,主机名等等

4、如果安装数据库,分配内存为物理内存的80%,此时有3台不同物理内存的机器2G、4G、16G,写playbook的话,可以获取对应主机的内存做出计算,写判断进行内存分配。

16、setup查看所有详细信息

[root@Ansible ~]# ansible Web01 -m setup

17、setup获取IP地址

[root@Ansible ~]# ansible Web01 -m setup -a 'filter=ansible_default_ipv4'

18、setup获取主机名

[root@Ansible ~]# ansible Web01 -m setup -a 'filter=ansible_fqdn'

19、setup获取内存信息

[root@Ansible ~]# ansible Web01 -m setup -a 'filter=ansible_memory_mb'

20、setup获取磁盘信息

[root@Ansible ~]# ansible Web01 -m setup -a 'filter=ansible_devices'

21、其他信息参数

1. ansible_all_ipv4_addresses:仅显示ipv4的信息。
2. ansible_devices:仅显示磁盘设备信息。
3. ansible_distribution:显示是什么系统,例:centos,suse等。
4. ansible_distribution_major_version:显示是系统主版本。
5. ansible_distribution_version:仅显示系统版本。
6. ansible_machine:显示系统类型,例:32位,还是64位。
7. ansible_eth0:仅显示eth0的信息。
8. ansible_hostname:仅显示主机名。
9. ansible_kernel:仅显示内核版本。
10. ansible_lvm:显示lvm相关信息。
11. ansible_memtotal_mb:显示系统总内存。
12. ansible_memfree_mb:显示可用系统内存。
13. ansible_memory_mb:详细显示内存情况。
14. ansible_swaptotal_mb:显示总的swap内存。
15. ansible_swapfree_mb:显示swap内存的可用内存。
16. ansible_mounts:显示系统磁盘挂载情况。
17. ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
18. ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

注意:此处的匹配规则支持通配符,后面我们用playbook,会参考这些内置变量使用


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
5天前
|
机器学习/深度学习 人工智能 运维
运维的未来之路:自动化与智能化的融合
【8月更文挑战第15天】在数字化时代的浪潮下,运维领域正经历一场深刻的变革。从手工操作到自动化流程,再到如今智能技术的融入,运维工作正在逐步摆脱繁重而重复的任务,向着更加高效、智能的方向发展。本文将探讨自动化与智能化技术如何重塑运维工作的面貌,以及这一趋势对运维人员技能要求的影响。
20 0
|
2天前
|
机器学习/深度学习 人工智能 运维
智能运维:未来趋势下的自动化与人工智能融合
【8月更文挑战第18天】 在数字化浪潮中,智能运维(AIOps)作为一股不可逆转的力量,正逐步改写传统运维的脚本。本文将探讨AIOps的核心要素、实施路径和面临的挑战,同时分享个人从新手到专家的心路历程,旨在启发读者思考如何在这一领域内持续成长并作出贡献。
12 6
|
4天前
|
机器学习/深度学习 边缘计算 人工智能
运维的未来之路:自动化与智能化
【8月更文挑战第16天】在数字化浪潮的推动下,运维领域正经历着前所未有的变革。本文将探讨自动化与智能化如何重塑运维工作,提升效率,降低成本,并预测未来运维的发展趋势。我们将深入分析当前运维面临的挑战,探讨自动化工具的应用,以及人工智能技术如何助力运维智能化,最后展望运维领域的未来可能性。
|
4天前
|
运维 持续交付 网络安全
自动化运维:Ansible与Terraform的比较
【8月更文挑战第16天】Ansible和Terraform都是自动化运维领域的重要工具,它们各自以其独特的功能和优势在市场中占据了一席之地。在选择使用哪个工具时,用户应根据自己的实际需求和应用场景进行综合考虑。如果主要关注系统配置管理和应用程序部署,那么Ansible可能是一个更好的选择;如果主要关注基础设施的自动化部署和管理,那么Terraform可能更适合您的需求。
|
6天前
|
运维 安全 测试技术
运维之魂:自动化与持续集成的交响曲
在数字时代的交响乐中,自动化和持续集成(CI/CD)是不可或缺的乐章。本文将带您走进运维的世界,探索如何通过自动化和持续集成提升效率、减少错误并确保软件质量。我们将从基础概念讲起,逐步深入到实践案例,最后探讨如何克服实施过程中的挑战,为读者呈现一场技术与艺术完美融合的视听盛宴。
|
11天前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
24 9
|
6天前
|
机器学习/深度学习 人工智能 运维
运维的未来:从自动化到智能化
【8月更文挑战第14天】本文将探讨运维(Operations)的发展历程,从早期的手动操作,到自动化,再到如今的智能化。我们将深入了解智能化运维的优势,以及它如何改变运维人员的工作方式。同时,我们也将讨论智能化运维面临的挑战,以及未来的发展趋势。
|
7天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
11天前
|
运维 Ubuntu 网络安全
Ansible:自动化运维的魔法棒,让复杂工作变得如此简单!
【8月更文挑战第9天】在现代IT运维中,自动化工具不可或缺。Ansible是一款流行的开源工具,以其简洁高效著称。它基于Python,使用YAML编写剧本,通过SSH与远程主机交互,无需安装代理。核心组件包括引擎、剧本、模块等。安装简易,如在Ubuntu上可通过添加PPA后使用`apt-get`命令。通过编写Playbook,如安装并启动Apache2服务的例子所示,可轻松实现自动化任务。Ansible的强大功能和灵活性使其成为提高运维效率的理想选择。
45 6
|
11天前
|
运维 监控 持续交付
"揭秘Puppet:自动化运维的超级英雄,一键驾驭复杂IT环境,让运维繁琐瞬间灰飞烟灭,引领未来运维新纪元!"
【8月更文挑战第9天】Puppet作为自动化运维的杰出代表,凭借其强大的配置管理和高度可定制性,助力IT运维实现自动化与智能化转型。通过定义资源模型与使用声明式语言描述系统状态,Puppet能自动调整系统至期望状态,实现标准化运维流程。其工作流程包括定义-应用-报告三步,支持从服务器配置到复杂网络、数据库管理等多种场景。示例代码展示了如何自动化部署Apache服务器,体现了Puppet在实际操作中的高效与便捷。随着技术演进与社区壮大,Puppet将持续推动运维领域的创新发展。
28 6

热门文章

最新文章