DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Ansible Notes


基本概念

  • 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//tasks/main.yml中 引用ansible变量和外部ini文件:

- 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


Published

Jan 8, 2016

Last Updated

Sep 24, 2020

Category

Tech

Tags

  • ansible 1

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor