自动化运维工具Ansible实战(二)主机清单的管理

简介:

        Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,来同时连接到多个远程主机,来执行远程操作任务的,但是如果要修改默认路径可以通过修改主配置文件 ansible.cfg 的 hostfile 参数指定相应的路径。具体查看相应的路径为:

1
2
3
4
5
6
[root@Monitor ansible] # vim ansible.cfg 
remote_port    = 22
remote_user = root
private_key_file = ~/. ssh /id_rsa_web
host_key_checking = False
hostfile =  /etc/ansible/conf/hosts

接下来会详细讲解主机和组,以及他们的正则表达式的匹配:

(一)主机和组(Hosts and Groups)

通过配置/etc/ansible/hosts这个文件来定义主机和组

(1)简单的主机和组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Monitor ansible] # vim /etc/ansible/conf/hosts
[webserver]                              ###定义组名
#192.168.180.4                    ###定义主机
192.168.180.5
192.168.180.6
192.168.180.23
[dbserver]
192.168.180.2
[root@Monitor ansible] # ansible webserver -m command -a 'uptime'
192.168.180.23 | SUCCESS | rc=0 >>
  15:00:30 up 45 days, 23:43,  4  users ,  load average: 0.00, 0.01, 0.05
 
192.168.180.5 | SUCCESS | rc=0 >>
  15:01:10 up 45 days, 23:44,  2  users ,  load average: 0.00, 0.00, 0.00
 
192.168.180.6 | SUCCESS | rc=0 >>
  15:01:27 up 45 days, 23:44,  2  users ,  load average: 2.00, 2.00, 2.00

注意的要点有:

a.中括号中的名字代表组名,可以根据自己的需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;

b.主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;

(2)端口与别名。

SSH默认的端口是22(此时的ansible主机配置文件可以省略),但是如果某些主机的SSH运行在自定义的端口上,ansible使用Paramiko进行ssh连接时不会使用你SSH配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用:

1
2
3
4
5
6
7
8
9
10
11
12
######在client192.168.180.5上ssh开启了2个端口连接
[root@localhost ~] # vim /etc/ssh/sshd_config 
#       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
Port 10022
Port 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
######在ansible服务端的配置:
[root@Monitor ansible] # vim /etc/ansible/conf/hosts            
[webserver]
#192.168.180.4
192.168.180.5:10022
192.168.180.6
192.168.180.23
[root@Monitor ansible] # ansible webserver -m command -a 'uptime'  
192.168.180.23 | SUCCESS | rc=0 >>
  16:12:33 up 46 days, 55 min,  4  users ,  load average: 0.00, 0.01, 0.05
 
192.168.180.5 | SUCCESS | rc=0 >>
  16:14:58 up 22 min,  3  users ,  load average: 0.00, 0.00, 0.00
 
192.168.180.6 | SUCCESS | rc=0 >>
  16:13:43 up 46 days, 56 min,  2  users ,  load average: 2.00, 2.00, 2.00

(3)指定主机范围

hosts官方有个列子是通过指定主机名的范围来进行多台主机的定义

1
2
3
4
5
[root@Monitor ansible] # vim /etc/ansible/conf/hosts   
    [webservers]
     www[01:50].yanruogu.com
     [databases]
     db-[a:f].yanruogu.com

上面指定了从web1到web50,webservers组共计50台主机;databases组有db-a到db-f共6台主机。

(4)使用主机变量

hosts主机经常使用到的变量为:

1
2
3
4
5
6
7
8
9
10
11
ansible_ssh_host      #用于指定被管理的主机的真实IP
ansible_ssh_port      #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user      #ssh连接时默认使用的用户名
ansible_ssh_pass      #ssh连接时的密码
ansible_sudo_pass      #使用sudo连接用户时的密码
ansible_sudo_exec      #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file      #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type      #目标系统的shell的类型,默认sh
ansible_connection      #SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)
ansible_python_interpreter      #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径
ansible_*_interpreter      #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言

上边的实例也可以如下配置直接使用用户名和密码和端口号进行连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Monitor ansible] # vim /etc/ansible/conf/hosts             
[webserver]
#192.168.180.4
192.168.180.5 ansible_ssh_port=10022 ansible_ssh_user=root ansible_ssh_pass= '123456'
192.168.180.6 ansible_ssh_user=root ansible_ssh_pass= '123456'
192.168.180.23 ansible_ssh_user=appuser ansible_ssh_pass= '123456'
 
 
[root@Monitor ansible] # ansible webserver -m command -a 'uptime'
192.168.180.5 | SUCCESS | rc=0 >>
  16:54:09 up  1:01,  3  users ,  load average: 0.00, 0.00, 0.00
 
192.168.180.23 | SUCCESS | rc=0 >>
  16:52:07 up 46 days,  1:34,  4  users ,  load average: 0.00, 0.01, 0.05
 
192.168.180.6 | SUCCESS | rc=0 >>
  16:52:08 up 46 days,  1:34,  2  users ,  load average: 2.05, 2.01, 2.00

(5)定义组变量

变量也可以通过组名,然后应用到组内的所有成员。组变量的作用域是覆盖组所有成员,通过定义一个新块,块名由组名+":vars" 组成,定义格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
[web1]
Server6
Server5
[web1:vars]
ntp=192.168.180.23
nginx=192.168.180.5
[root@Monitor ansible] # ansible web1 -m command -a 'uptime'
Server5 | SUCCESS | rc=0 >>
  10:26:01 up 23 min,  2  users ,  load average: 0.00, 0.00, 0.00
 
Server6 | SUCCESS | rc=0 >>
  10:26:06 up 40 min,  2  users ,  load average: 0.00, 0.00, 0.00

####说明:上面的web1组中包含了两台主机Server5和Server6,通过对web1组指定了vars变量,相应的Server5和Server6主机相当于相应的指定了ntp和nginx变量的参数值。

(6)同时Ansible支持组嵌套组 ,通过定义一个新块,块名由组名+":children"组成,格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hangzhou]
host1
host2
[jiaxing]
host2
host3
[zhejiang:children]
hangzhou
jiaxing
[zhejiang:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
[china:children]
zhejiang
henan
shandong
hebei
southeast

如上面的示例中,我指定了杭州组我有host1、hosts2;嘉兴组我有host3、host4主机;我又指定了一个组浙江组,同时包含杭州和嘉兴;同时为该组内的所有主机指定了四个vars变量。

分离主机与组特定数据

为了更好规范定义的主机与组变量,Ansible支持将/etc/ansible/hosts定义的主机名与组变量单独剥离出来存放到指定文件夹中.将采用YAML格式存放,存放位置规定: "/etc/ansible/group_vars/+组名" 和 "/etc/ansible/host_vars/+主机名" 分别存放指定组名或者主机名定义的变量。如下:

/etc/ansible/group_vars/dbservers

/etc/ansible/group_vars/webservers

定义的dbserver变量格式为:

[/etc/ansible/group_vars/dbservers]

---

ntp_server:acme.example.org

database_server:storage.example.org


(二)Patterns(主机与组正则匹配部分)

把Patterns 其实就是ansible中的规则去管理哪些主机,也可以理解为,要与哪台主机进行通信。

以下ansible的用法:

ansible <pattern_goes_here> -m <module_name> -a <arguments>
ansible  <执行的客户机列表>   -m <调用的模块>    -a <执行的参数>

直接上一个示例:

ansible webservers -m service -a "name=httpd state=restarted"

这里是ansible对webservers 组内的主机来进行远程重启httpd服务 ,其中webservers 就是Pattern部分。而之所以上面说Pattern(模式)可以理解为正则,主要针对下面经常用到的用法而言的。

  1. 表示所有的主机可以使用all 或 *

  2.  通配符和逻辑或

利用通配符还可以指定一组具有规则特征的主机或主机名,冒号表示or---逻辑或



本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1961480

相关文章
|
4天前
|
弹性计算 运维 监控
自动化AutoTalk第十一期-应知必会的自动化工具之阿里云配额中心
本次分享主题为“应知必会的自动化工具之阿里云配额中心”,课程围绕三个方面展开:1) 认识配额及其作用;2) 配额管理的意义与方法;3) 阿里云配额中心的功能和使用场景。通过学习,了解如何有效管理和监控配额,避免资源限制影响业务,并实现自动化集成,提升运维效率。
30 10
|
4天前
|
JavaScript Java 开发工具
AutoTalk第十三期-应知必会的自动化工具-阿里云SDK支持策略(一)
AutoTalk第十三期探讨阿里云SDK支持策略,涵盖四大方面:发布策略、版本规范、更新策略及停止支持策略。重点介绍SDK的及时性、完整性、测试覆盖度和版本命名规范;并以Python部分语言版本停止支持为案例,帮助开发者了解维护策略,确保平稳过渡到新版本。
|
5天前
|
算法 安全 Java
自动化AutoTalk第十期:应知必会的自动化工具-阿里云SDK
本期《自动化AutoTalk》第十期聚焦应知必会的自动化工具——阿里云SDK。主要内容分为三部分:1. 阿里云SDK概述,介绍其支持的300多款云产品和8种主流编程语言;2. 快速生成SDK示例,以Java语言为例展示如何通过OpenAPI门户快速生成并下载SDK工程;3. 进阶特性介绍,涵盖签名算法、Endpoint配置、代理设置、HTTPS请求配置、超时机制及异常处理等重要功能。通过这些内容,帮助开发者更高效、安全地使用阿里云SDK。
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
209 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
2月前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:使用Ansible进行服务器管理
在现代IT基础设施中,自动化运维已成为提高效率和可靠性的关键。本文将引导您通过使用Ansible这一强大的自动化工具来简化日常的服务器管理任务。我们将一起探索如何配置Ansible、编写Playbook以及执行自动化任务,旨在为读者提供一条清晰的路径,从而步入自动化运维的世界。
|
1月前
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
1月前
|
运维 Ubuntu 网络协议
自动化运维:使用Ansible进行服务器配置管理
在现代IT架构中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和标准化服务器的配置管理过程。通过具体的代码示例和操作步骤,我们将展示如何快速部署应用、管理配置以及自动化日常任务,从而确保环境的一致性和可靠性。
|
2月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。

热门文章

最新文章