前言
Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible 并不使用守护进程,它也不需要任何额外的自定义安全架构,因此它的部署可以说是十分容易。你需要的全部东西便是 SSH 客户端和服务器了。
Ansible是基于模块工作的,ansible提供一个框架,通过模块实现批量部署。
1、安装
使用的系统是Ubuntu 16.04,使用apt-get安装,也可通过pip安装。
apt-get install ansible
2、设置 SSH 公钥认证
创建SSH证书。
ssh-keygen -t rsa
通过ssh-copy-id命令复制公钥(~/.ssh/id_rsa.pub)到服务器,用于ansible控制机和服务器直接的ssh链接。
ssh-copy-id username@server
3、运行ansible
首先,需修改/etc/ansible/hosts,添加主机,具体可参考hosts文件中的说明。
ansible简单的操作就是远程执行一条简单的shell命令。
ansible all -m ping
all表示所有主机,也可改成host文件中定义的组名。
-m用于指定模块名称,模块列表见:http://docs.ansible.com/ansible/modules_by_category.html
4、简单的ansible-playbook
Playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行。
Playbook的文件格式是yaml,一个简单的playbook,至少保护host,remote_user,tasks,如示例。
---# ansible playboo学习示例
- name: hello ansiblehosts: allremote_user: jaygather_facts: falsevars:var_bFlag: truevar_strFlag: Variable Flagtasks:- name: test environmentsudo: noshell: envargs:executable: /bin/bash- debug:msg: "'{{ var_strFlag }}' is true."when: var_bFlag==True
- debug:msg: "'{{ var_strFlag }}' is false."when: var_bFlag==False
运行ansible-playbook命令:
ansible-playbook -i inventory hello-ansible.yml
5、通过role更好的组织playbook
上面简单的playbook,将所有内容均放在yaml文件中,有时会非常复杂且不容易分享。ansible提供了基于role来组织playbook。
Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers,基于 roles 对内容进行分组,一个项目的结构如下:
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
一个 playbook 如下:
---
- hosts: webservers
roles:
- common
- webservers
这个 playbook 为一个角色 ‘x’ 指定了如下的行为:
- 如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
- 如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
- 如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
- 如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
- 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
- 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
- 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
- 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。
参考资料:
Ansible :一个配置管理和IT自动化工具: https://linux.cn/article-4215-1.html
Ansible中文权威指南: http://www.ansible.com.cn/docs/intro_getting_started.html#id3
原理与运用(一):远程登录: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html