自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本

Posted 码海小虾米_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本相关的知识,希望对你有一定的参考价值。

一、inventory 主机清单

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

如果是名称类似的主机,可以使用列表的方式表示各个主机
vim /etc/ansible/hosts
[webservers]
192.168.80.50:2222			#冒号后定义远程连接端口,默认是ssh的22端口
192.168.80.5[1:5]			#范围是:192.168.80.51192.168.80.55

[dbservers]
db-[a:f].example.org		#支持匹配 a~f

inventory 中的变量

Inventory变量名含义
ansible_hostansible连接节点时的IP地址
ansible_port连接对方的端口号,ssh连 接时默认为22
ansible_user连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户
ansible_passwd连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args提供给ssh、sftp、 scp命 令的额外参数
ansible_become允许进行权限提升
ansible_become_method指定提升权限的方式,例如可使用sudo/su/runas等方式
ansible_become_user提升为哪个用户的权限,默认提升为root
ansible_become_password提升为指定用户权限时的密码

1.1 主机变量

[webservers]
192.168.80.50 ansible_port=22 ansible_user=root ansible_password=abc123			#不建立将密码直接写入配置,不安全

1.2 组变量

[webservers:vars]				#表示为 webservers 组内所有主定义变量
ansible_user=root
ansible_password=abc1234

[all:vars]						#表示为所有组内的所有主机定义变量
ansible_port=22

1.3 组嵌套

[nginx]
192.168.80.50
192.168.80.60
192.168.80.70

[apache]
192.168.80.5[0:3]

[webservers:children]
nginx					#表示为 webservers 主机组中包含了nginx组和apache组内的所有主机
apache

二、剧本(playbook)

2.1 playbook介绍

____playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbook是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。


____ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules)来完成不同的功能的。不管是执行单条命令还是play-book都是基于清单文件。


playbook格式:

  • playbook由YMAL语言编写。YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

  • 一个剧本里面可以有多个play,每个play只能有一个tasks,每个tasks可以有多个name。


2.2 playbooks 的组成

  1. Tasks:任务,即通过 task 调用 ansible 的模块将多个操作组织在一个playbook 中运行。
  2. Variables:变量
  3. Templates:模板
  4. Handlers:处理器,当 changed 状态条件满足时,(notify)触发执行的操作。
  5. Roles:角色

2.3 案例:编写httpd的playbook

vim test1.yaml
---     #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play     #定义一个play的名称,可省略
  gather_facts: false    #设置不进行facts信息收集,这可以加快执行速度,可省略
  hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔
  remote_user: root    #指定被管理主机上执行任务的用户
  tasks:     #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
   - name: test connection    #自定义任务名称
     ping:     #使用 module: [options] 格式来定义一个任务
   - name: disable selinux
     command: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式
     ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration file for httpd
     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件
     notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted

① Ansible 管理端编写好playbook剧本

② 在webservers端(client1)准备httpd模板配置文件

③ 在webservers端(client1)将准备好的httpd模板配置文件发送到Ansible管理端

④ 确认被控制端的httpd服务是否安装,firewalld处于开启状态,本机的httpd模板文件准备完成并且路径和剧本配置一致

⑤ 执行playbook剧本


⑥ 检查被deservers控制端(client2)192.168.80.60的httpd服务和防火墙状态以及httpd配置文件

以上是关于自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维管理工具 Ansible的详细解读

自动化运维之详细部署安装Ansible服务(超简单)

自动化运维利器 Ansible 和企业级 Ansible 应用解读

运维自动化之ansible--(playbook模式)

自动化运维Ansible之Playbook剧本(持续更新)

自动化运维工具 Ansible 的详细部署