Ansible简介
- Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt
- 这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务
- 服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责
安装ansible
- 在线安装
[root@localhost ~]# yum install -y ansible
- 创建ansible工作目录
[root@bogon ~]# mkdir /root/myansi/
- 创建配置文件
[root@bogon ~]# cd /root/myansi/
[root@bogon myansi]# cat ansible.cfg
[defaults]
inventory = hosts
remote_user = root
- 声明被管理主机
[root@bogon myansi]# cat hosts
[myself]
localhost
[webservers]
node1.cn
- 配置名称解析
[root@bogon myansi]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.113.134 node1.cn node1
- 添加远程主机密钥到信任列表
[root@bogon myansi]# ssh-keyscan localhost 127.0.0.1 node1.cn
192.168.113.134 >> /root/.ssh/known_hosts
- 测试
#加-k是进入交互式密码,免密不需要加-k
[root@bogon myansi]# ansible all -m ping -k
SSH password:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
node1.cn | SUCCESS => {
"changed": false,
"ping": "pong"
}
Ansible应用
使用playbook
- Playbooks是Ansible的配置、部署、编排语言。
- 它们可以被描述为一个需要希望远程主机执行命令的方案,或者一组程序运行的命令集合
- Playbook由一到多个Play组成
- 每个play可以指定哪些主机执行哪些任务
- 执行任务一般通过调用模块来实现
Yaml简介
- Playbooks的格式是YAML
- 语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本
- 使用 YAML 是因为它像 XML 或 JSON 是一种利于人们读写的数据格式
Yaml语法
- 每一个 YAML 文件都是从一个列表开始
- 列表中的每一项都是一个键值对, 通常它们被称为一个“哈希 或“字典”
- 所有的 YAML 文件开始行都应该是 —。这是 YAML 格式的一部分,表明一个文件的开始
- 列表中的所有成员都开始于相同的缩进级别,并且使用一个 "- " 作为开头(一个横杠和一个空格)
- 一个字典是由一个简单的 键: 值 的形式组成(冒号后面必须是一个空格)
配置VIM
- Yaml的缩进不能使用tab键
- 建议缩进为两个空格
- 为了实现yml文件按tab键缩进两个空格,可以按以下方式对vim进行定制
[root@bogon myansi]# cat ~/.vimrc
autocmd FileType yaml setlocal sw=2 ts=2 et ai
使用模块
- Ansible的模块实际上就是一个个的python程序文件
- Ansible执行任务就是通过调用这些模块来完成的
- 查看模块列表
[root@bogon myansi]# ansible-doc -l
- 查看模块帮助
[root@bogon myansi]# ansible-doc yum
编写playbook,在web服务器上安装httpd服务
[root@bogon myansi]# vim install_web.yml
Ansible编程基础
执行playbook
- 检查语法
[root@bogon myansi]# ansible-playbook --syntax-check install_web.yml
- 执行
[root@bogon myansi]# ansible-playbook install_web.yml -k
配置lamp分离结构
# vim lamp.yml
---
- name: configure webservers
hosts: webservers
tasks:
- name: install web pkgs
yum:
name: [httpd, php, php-mysql]
state: present
- name: configure web service
service:
name: httpd
state: started
enabled: yes
- name: configure dbservers
hosts: dbservers
tasks:
- name: install db pkgs
yum:
name: mariadb-server
state: present
- name: configure db service
service:
name: mariadb
state: started
enabled: yes
# ansible-playbook lamp.yml
命名元组
- 命名元组与普通元组一样,有相同的表现特征,其添加的功能就是可以根据名称引用元组中的项
- collections 模块提供了namedtuple()函数,用于创建自定义的元组数据类型
>>> from collections import namedtuple
>>> user = namedtuple('user', ['name', 'age'])
>>> bob = user('Bob Green', 23)
>>> bob[0]
'Bob Green'
>>> bob[1]
23
>>> bob.name
'Bob Green'
ansible-cmdb
可以将服务器的信息以web形式展现
# 在虚拟环境中安装ansible-cmdb
# pip3 install ansible-cmdb_pkgs/*
# 或在线安装
# pip3 install ansible-cmdb
# 获取远程主机的信息
# ansible all -m setup --tree /tmp/servers
# ls /tmp/servers
# ansible-cmdb分析获取的信息文件,生成html文件
# ansible-cmdb /tmp/servers > /tmp/servers.html
# firefox /tmp/servers.html
Ansible常用属性
from ansible.parsing.dataloader import DataLoader
用来加载解析yaml文件或JSON内容,并且支持vault的解密from ansible.vars.manager import VariableManager
管理变量的类,包括主机,组,扩展等变量from ansible.inventory.manager import InventoryManager