1、ansible简介nginx
ansible是一种自动化运维工具。实现批量操做系统配置、批量程序部署、批量命令运行等功能。web
ansible工做在agentless模式下,而且具备幂等性(幂等性不会重复执行相同指令,例如不会重复安装软件,当你但愿一个文件中存在一行内容为 "aaaaaa", 若是不存在就会插入,若是存在就会跳过)。apache
ansible架构大体以下:数据结构
2、基本使用架构
一、定义Host Inventory /etc/ansible/hostsless
[webhosts]运维
172.16.10.22 ansible_ssh_user=root ansible_ssh_pass=passwdssh
172.16.10.33 ansible_ssh_user=root ansible_ssh_pass=passwd工具
## ansible_ssh_user=root 是登录用户操作系统
## ansible_ssh_pass=passwd 是ssh登录密码
## 使用 ansible-doc MOD 查看模块的用法,例如 ansible-doc copy
2.示例使用
查看时间信息
添加用户,user模块
安装软件和启动服务
支持管道服务
3、YAML语言介绍
YAML是一种可读性高的用来表达资料序列的格式。
YAML Ain't Markup Language即YAML不是XML。
YAML的可读性好
YAML和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML有个一致的信息模型
YAML表达能力强扩展性好
1. YAML 简介
*********************************************YAML语法
YAML语法能够简单表达清单、散列表、标量等数据结构。其结构Structure经过空格展现,序列Sequence的项用“-”来表明
Map里的键值对用“:”分割。下面是一个示例:
name: Jonh Smith
age: 41
gender: Male
YAML 2个重要的结构组成部分list和directory
********************************************list
列表的全部元素均使用“-”开始,例如:
- Apple
- Orange
- Strawberry
- Mango
********************************************dictionary
字典经过key与value标识,例如:
---
name: Example Developer
job: Developer
skill: Elite
也能够将key:value放置于{ }进行表示,例如:
---
{name: Example Developer, job: Developer, skill: Elite}
2.YAML的变量
########################### 变量命名
变量名仅支持字母、数字和下划线而且只能以字母开头
facts 是由正在通讯的远程目标主机发回的信息,这些信息保存在ansible变量中。获取facts可以使用以下命令:
# ansible webservers -m setup
########################### 自定义变量
使用关键字vars来定义变量
vars:
var_name: value
########################### 变量引用
{{ var_name }}
######################### 变量迭代
当须要重复执行任务时使用迭代机制,使用格式为:将须要迭代的内容定义为item变量引用,并经过with_items语句指明迭代的元素列表。
例如:
- name: add several users
vars:
user1: testuser1
user2: testuser2
user: name={{ user1 }} state=present group=wheel
user: name={{ user2 }} state=present group=wheel
使用迭代方式:
- name: add several users
user: name={{item.name}} state=present groups={{item.groups}}
with_items:
- { name: 'testuser1', groups: 'wheel' }
- { name: 'testuser2', groups: 'root' }
3. Invetory格式
inventory文件遵循INI文件风格(括号中的字符串为组名)。能够将同一个主机同时归并到不一样的组中,当目标主机使用非默认的SSH端口,还能够在主机名称以后使用冒号加端口来代表。
[webservers]
www1.webserver.com:2222
www2.webserver.com
############################主机变量
能够在inventory中定义主机时,添加主机变量以便于在playbook中使用,例如
www1.webserver.com http_port=80 maxRequestPerChild=808
############################ 组变量
组变量是赋予制定组内全部主机的playbook可用的变量。例如:
[webservers]
www1.webserver.com
www2.webserver.com
[webservers:vars]
ntp_server=ntp.webserver.com
nfs_server=nfs.webserver.com
############################ 组嵌套
inventory中组能够包含其余的组,而且也能够向组中的主机指定变量。
[apache]
httpd1.magedu.com
httpd2.magedu.com
[nginx]
ngx1.magedu.com
ngx2.magedu.com
[webservers:children]
apache
nginx
############################ inventory参数
ansible_ssh_host # 主机名
ansible_ssh_port # 端口号,默认22
ansible_ssh_user # ssh链接时默认用的用户名
ansible_ssh_pass # ssh链接时的密码
4. playbooks
############################ Hosts和Users