# Ansible权威指南
[TOC]
## 第1章 基础入门
> Ansible is a radically simple IT automation engine.
```bash
# 列出所有的模块
ansible-doc -l
```
特点:
支持的系统有Linux、Windows、AIX
基于python(建议python2.6.6以上)开发,去中心化,无客户端。
如何工作的:
底层通信依赖于系统软件,linux下基于OpenSSH,windows基于PowerShell,但是管理端必须是linux,使用者认证通过后再管理节点通过Ansible工具调用各应用模块将指令推送至被管理端执行,并在执行完毕后自动删除产生的临时文件。参考:https://www.ansible.com/how-ansible-works。使用者者使用Ansible或Ansible-playbook(会额外读取playbook文件)时,在服务器终端输入Ansible的Ad-Hoc命令集或playbook后,Ansible会遵循预先编排的规则将playbooks逐条拆解为play,再将play组织成Ansible可识别的任务(Task),随后调用任务涉及的所有模块(module)和插件(Plugin),根据Invertory中定义的主机列表通过SSH将任务集以临时的文件或命令的形式传送到远程客户端执行并返回执行结果,如果是临时文件则执行完毕后删除。
过程角色:使用者,ansible工具集,作用对象。
? 使用者:cmdb,public和privat的api调用,user直接使用Ad-hoc,user直接使用playbook
? 工具集:调用入口
通信模块:
? paramiko,openssh,加速模式
系统操作:
? 文件传输、命令执行
工作类型:
? 应用部署,配置管理,任务流编排
安装源:
? redhat的【EPEL】,PIP,easy_install
python多环境扩展管理
? Pyenv,Virtualenv
```bash
pip install virtualenv #先安装这个 环境切换的东西
#virtualenv -h #查看帮助
#virtualenv venv #创建虚拟环境的目录,名为venv,它包含了Python可执行文件和拷贝过来的pip 库(能安装需要的包到虚拟环境)
#(若省略名字将不创建目录,文件均直接放在当前目录)
virtualenv -p /usr/bin/python2.7 venv# -p选项 选择使用哪一版本的Python解释器
#--no-site-packages 选项 virtualenv 将不会包括物理机python环境安装的包(这在 virtualenv 1.7及之后是默认的)
source venv/bin/activate #激活刚才创建的虚拟环境
# deactivate #有必要时可关闭虚拟环境
pip install -r requirements.txt #安装项目需要的包
#pip list #查看 当前环境中所有包及各自的版本的列表。
#创建一个 requirements.txt 文件(包含了当前环境中所有包及各自的版本的简单列表)
#pip freeze > requirements.txt
#virtualenv --relocatable env
#打包虚拟环境env 。 可以解压到本机其他目录后直接使用
##(实例1) 下载基于CentOS Linux release 7.6.1810 (Core)的vitualenv的ansible环境
# https://github.com/ansible/ansible/tree/stable-2.3 下载zip包
#创建虚拟环境,基于默认Python 2.7.5
virtualenv -p /usr/bin/python /root/hunan/virtualpy
#将ansible包拷贝至虚拟环境并解压
cp /root/ansible-stable-2.3.zip virtualpy/ &&cd virtualpy/ && unzip ansible-stable-2.3.zip && mv ansible-stable-2.3 ansible
# 加载虚拟环境
source /root/hunan/virtualpy/bin/activate
# 安装ansible的依赖
pip install paramiko PyYAML jinja2
# 在虚拟环境加载ansible
source /root/hunan/virtualpy/ansible/hacking/env-setup -q
# 验证ansible是否可用
ansible --version
# 验证ansible远程执行命令
ansible 10.5.40.159 -i hosts -m ping
```
原文:https://www.cnblogs.com/landerhu/p/12842221.html