基本概念
-
Inventory: 部署、管理目标服务器列表,命令行中用
-i
指定 -
Playbook: 具体部署任务的定义文件,包含多个步骤,每个步骤包含名称、task 定义等, 通过
ansible-playbook
执行 -
Module: 也叫 task plugin,一个在 remote controlled host 上执行的具体任务(例如运行一个命令), 命令行中用
-m
指定,ansible-doc -l
列出内置 module, 例如检查系统包是否存在package
,执行任意命令的command
、 管理服务的service
等,用ansible-doc service
查看参数列表和示例 -
Action plugin: 是对 moudle 功能的补充和增强,在 master 主机上运行 (而不是在 remote controlled host),当执行一个 module 时, 如果有和它同名的 action plugin,则先执行此 action plugin,再执行 module
-
Task: 在 remote managed node 上执行一个具体操作(一般是一个 module)
-
Role: 相当于 Linux container 的一个 app,完成一项具体功能的应用,具有固定的目录结构, 例如 https://github.com/gantsign/ansible-role-oh-my-zsh role 可以被插入到 playbook (
roles
标记下)或者作为 tasks 中的一个 task 用include_role
或者import_role
导入进来 -
Play: 一次完整的 ansible 执行过程,可能包含多个 playbook 和 role
-
Ansible Galaxy: 上传、下载、分享、评价 ansible role 的分享平台。
-
Ansible Tower: Red Hat 在 Ansible 基础上添加了图形管理功能的付费产品
Note:
Salt developed by SaltStack 有着非常复杂的体系架构,适合高速部署大量服务器。 且 master 节点始终与各个被控机器保持联系,类似于 Puppet 的工作模式。
Written in 2016.1.8.
使用源代码版本的ansible
按照Running From Source,
首先安装依赖包 (sudo pip install paramiko PyYAML Jinja2 httplib2 six
),
clone ansible的github repo, 然后配置环境变量,就可以使用ansible的各个版本了。
git clone git://github.com/ansible/ansible.git --recursive $HOME/apps
需要使用ansible时,运行:
source $HOME/apps/ansible/hacking/env-setup
默认是devel分支,如果要切换到稳定版分支,首先列出所有分支:git branch -ra
,
然后切换到此分支上:
cd $HOME/apps/ansible
git checkout origin/stable-2.0.1
source $HOME/apps/ansible/hacking/env-setup
更新代码库:
cd $HOME/apps/ansible
git pull --rebase
git submodule update --init --recursive
lookup ini plugin
通过pip安装的ansible是1.9.4版本,这一版没有lookup ini plugin. 在The INI File Lookup 下可以看到 "New in version 2.0.".
运行下面的task时,
- debug: msg="User in integration is {{ lookup('ini', 'user section=integration file=users.ini') }}"
会报错:
lookup plugin (ini) not found
用pip安装后,所有的lookup plugin的安装目录是 /usr/local/lib/python2.7/dist-packages/ansible/runner/lookup_plugins 下面没有ini.py.
解决方法见上节使用源代码版本的ansible.
有了ini lookup plugin, 可以在ansible的roles/
- name: download codes to laptop
local_action: >
command
{{ lookup('ini', 'GIT_REPO section=' + inventory_hostname + ' file=' + env_settings) }}
{{ local_repo }}
相关的文件:
cat $ANSIBLE_PRJ_HOME/roles/deploy/vars/main.yml
repo_base: "~/temp"
timestamp: "{{ ansible_date_time.epoch }}"
repo_name: "{{ inventory_hostname }}-{{ timestamp }}"
local_repo: "{{ repo_base }}/{{ repo_name }}"
target_branch: "develop"
ext_path: "{{ ansible_env.HOME }}/{{ repo_name }}"
nodejs_bin_path: "{{ ansible_env.PATH }}:/opt/node-v0.10.40-linux-x64/bin"
app_settings: "~/docs/website/v3/settings.json"
env_settings: "~/docs/website/v3/serverEnv.ini"
cat ~/docs/website/v3/serverEnv.ini
[common]
PORT=3000
[p21.newfairs-inc.com]
MONGO_URL=mongodb://dba:dba@192.168.100.3:27017/production
ROOT_URL=http://www.newfairs.net
GIT_REPO=git clone ssh://git@git.newfairs-inc.com/diffusion/NEWFAIRS/newfairs.git
[p22.newfairs-inc.com]
MONGO_URL=mongodb://dba:dba@192.168.100.3:27017/production
ROOT_URL=http://www.newfairs.net
GIT_REPO=git clone ssh://git@git.newfairs-inc.com/diffusion/NEWFAIRS/newfairs.git
[beta-app.newfairs-inc.com]
MONGO_URL=mongodb://dba:dba@192.168.100.3:27017/production
ROOT_URL=http://beta.newfairs.com
GIT_REPO=git clone ssh://git@git.newfairs-inc.com/diffusion/NEWFAIRS/newfairs.git
[console.newfairs-inc.com]
MONGO_URL=mongodb://dba:dba@192.168.100.3:27017/console
ROOT_URL=http://console.newfairs-inc.com
GIT_REPO=git clone ssh://git@git.newfairs-inc.com/diffusion/CONSOLE/newfairs-console.git