自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本
Posted 码海小虾米_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本相关的知识,希望对你有一定的参考价值。
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.51到192.168.80.55
[dbservers]
db-[a:f].example.org #支持匹配 a~f
inventory 中的变量
Inventory变量名 | 含义 |
---|---|
ansible_host | ansible连接节点时的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 的组成
- Tasks:任务,即通过 task 调用 ansible 的模块将多个操作组织在一个playbook 中运行。
- Variables:变量
- Templates:模板
- Handlers:处理器,当 changed 状态条件满足时,(notify)触发执行的操作。
- 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剧本的主要内容,如果未能解决你的问题,请参考以下文章