一、playbook
playbook是剧本的意思
通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。
playbook本身由以下各部分组成:
- Tasks: 任务,即调用模块完成的某操作
- Variables: 变量
- Templates: 模板
- Handlers: 处理器,当某条件满足时,触发执行的操作
- Roles: 角色
- playbook yaml语法是换行空两格,-和:后必须空一格
playbook由YMAL语言编写,YAML是一种非标记语言。是用来写配置文件的语言,非常简洁合强大
- YAML语法和其他语言类似,也可以表达散列表、标量等数据结构
- 结构通过空格来展示,
- 序列里配置项通过 - 来表示
- Map里的键值用:来分隔
- YAML的扩展名为yaml
1.1、playbook简介
- Playbooks 是 Ansible的配置、部署、编排语言,他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合
- Playbooks 与 ad-hoc相比,是一种完全不同的运用ansible的方式,是非常之强大的
- 简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础,与现有的其他系统有不同之处,且非常适合于复杂应用的部署。
- playbook是ansible用于配置,部署,和管理被控节点的剧本。
- 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。
- 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情
1.2、playbook使用场景
执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。
就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。
1.3、yaml基本语法规则
1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用tab键、只允许使用空格
4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
hosts | 定义节点,可以是组 |
---|---|
remote_user | 是你以什么用户身份进行登陆 |
tasks | 是你的任务 |
become:yes | 表示切换用户 |
become_user: mysql | 表示切换到mysql用户,配合上一条使用 |
- name: | 为下面执行的操作起名 |
1.4、yaml支持的数据结构
- 对象:键值对的集合,又被映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
- 属组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
- 纯量:单个的、不可再分的值
二、Inventory中的变量
Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts
2.1、Inventory变量参数
参数 | 说明 |
ansible_ssh_host | 将要连接的远程主机名,与你想要设定的主机的别名不同的话,可通过此变量设置 |
ansible_ssh_port | ssh端口号,如果不是默认的端口号,通过此变量设置 |
ansible_ssh_user | 默认的ssh用户名 |
ansible_ssh_pass | ssh密码(这种方式并不安全,我们强烈建议使用 --ask-pass或SSH密钥) |
ansible_ssh_private_key_file | ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况 |
ansible_ssh_common_args | 此设置附加到sftp,scp和ssh的缺省命令行 |
ansible_sftp_extra_args | 此设置附加到默认sftp命令行 |
ansible_scp_extra_args | 此设置附加到默认scp命令行 |
ansible_ssh_extra_args | 此设置附加到默认ssh命令行 |
ansible_ssh_pipelining | 确定是否使用SSH管道。这可以覆盖ansible.cfg中得到设置 |
ansible_shell_type | 目标系统的shell类型,默认情况下,命令的执行使用sh语法,可设置为csh 或 fish |
ansible_python_interpreter | 目标主机的python路径,适用于的情况:系统中有多个python,或者命令路径不是“/usr/bin/python” |
ansible_*_interpreter | 这里的*可以是ruby或perl或其他语言的解释器,作用和ansible_python_interpreter类似 |
ansible_shell_executable | 这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh |
三、playbook示例
基本命令介绍
ansible-playbook xxx.yaml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook xxx.yaml --list-task #检查tasks任务
ansible-playbook xxx.yaml --list-hosts #检查生效的主机
ansible-playbook xxx.yaml --start-at-task='xxx' #指定从某个task开始运行- hosts: nginx #指定主机组,可以是一个或多个组remote_user: root #指定远程主机执行的用户名
说明 | |
---|---|
-k(-ask-pass) | 用来交互输入ssh密码 |
-K(-ask-become-pass) | 用来交互输入sudo密码 |
-u | 指定用户 |
-e | 引入变量值 |
正在加载...