简介
Ansible is Simple IT Automation。ansible是一个简单的自动化运维工具,能够轻松实现配置、命令管理等常见运维工作。另外,它是一种Python语言开发的agentless工具,通过ssh服务连接被管理端,不需要在被管理端额外安装监管程序。这也意味着ansible主机的安全至关重要。
特征
模块化:调用特定的模块,完成特定任务
基于Python语言实现,调用了三个python模块:Paramiko,PyYAML(语法格式)和Jinja2(模板语言)三个关键模块
部署简单:agentless 即no agent 仅需要ssh服务链接即可
支持自定义模块
支持playbook
幂等性:执行一遍和十遍都是一样的
可以在epel源中直接应用
安装
# yum install epel-release ansible |
配置文件
/etc/ansible/ansible.cfg # 配置文件
/etc/ansible/hosts # 主机列表
/etc/ansible/roles/ # 角色目录
rpm -ql ansible # 详情查看
主程序
ansible
ansible-doc
ansible-playbook
使用
ansible
ansible <host-pattern> [-f forks] [-m module_name] [-a args] |
ansible-doc
ansible-doc -l # 获取ansible模块列表
ansible-doc -s MODULE_NAME #获取指定模块名使用帮助
ansible-playbook
ansible-playbook <filename.yml> … [options] |
Ansible Playbooks
Playbooks是Ansible的配置/部署/任务编排使用的语言。
Ansible modules是负责具体任务的工具,playbooks负责设计和安排如何使用这些工具
Ansible playbooks的内容基于YAML语法
Ansible playbooks的官方配置用例请参考:https://github.com/ansible/ansible-examples
Ansible官方文档请参考:http://docs.ansible.com/ansible/index.html
实例- host: all
remote_user: root
tasks:
- name: create user user1
user: name=user1 system=true uid=301
- name: create user user2
user: name=user2 system=true uid=302
缩进:使用两个空格表示父子关系,不要使用Tab
冒号:键值对以:
分开,后面跟一个空格再跟value
短横杠:-
加一个空格,使用同样的缩进表示同一个KEY有多个value
YAML语法参考:http://ansible-tran.readthedocs.io/en/latest/docs/YAMLSyntax.html#id1
playbook核心元素
Hosts #被管控主机列表
Tastk #任务
Variables #变量,内置变量/自定义变量
Templates #模板,包含了模板语法的文本文件
Handlers #特定条件触发的任务
Roles #角色,运行的一类目标主机
playbook基础组件
模块:modules
通知:notify
标签:tags
变量:variables
模板:template
条件测试:when
循环:根据item进行迭代
template
template中使用Jinja2模板编程语言格式语法。实际上,模板只是普通文件中嵌入了Jinja2编程语言格式的变量、逻辑、算数运算而已。
字面量
字符串:使用单引号或双引号;
数字:整数,浮点数;
列表:[item1, item2, …]
元组:(item1, item2, …)
字典:{key1:value1, key2:value2, …}
布尔型:true/false
算数运算
+, -, *, /, %, //, **
比较操作
==, !=, >, >=, <, <=
逻辑运算
and, or, not
实例cp /etc/nginx/nginx.conf /root/nginx.conf.j2
#修改以下行: |
vim nginx.yml |
- hosts: all |
# ansible-playbook --check nginx.yml |
# ansible-playbook -t copyconf nginx.yml |
条件测试
when语句:在task中使用,jinja2的语法格式的判断语句tasks:
- name: install conf file to centos7
template: src=files/nginx.conf.c7.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "7"
- name: install conf file to centos6
template: src=files/nginx.conf.c6.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "6"
循环
迭代,需要重复执行的任务;
对迭代项的引用,固定变量名为”item”;而后,要在task中使用with_items给定要迭代的元素列表
列表方法:字符串、字典
- name: createdb |
角色(roles)
每个角色以特定的目录结构组织nginx/
├── default
├── files
│ └── hosts
├── handlers
│ └── main.yml
├── meta
├── tasks
│ └── main.yml
├── templates
│ ├── default.html.j2
│ └── nginx.conf.j2
└── vars
default/ 设定默认变量时使用此目录中的main.yml文件
files/ 存放由copy或script模块等调用的文件
handlers/ 至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
meta/ 至少应该包含一个名为main.yml的文件;定义当前角色的特殊设定及其依赖关系;其它的文件需要在此文件中通过include进行包含
tasks/ 至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
templates/ template模块查找所需要模板文件的目录
vars/ 至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
角色调用
在playbook调用角色方法1: |
LKNAPM
看图意会
下载地址
https://github.com/mrchain/mrchen/tree/upload/ansible_LKNAPM# tar xvf LKNAPM.tar.xz -C /etc/ansible/
# ansible-playbook LKNAPM.yml |