kolla-ansible快速入门
kolla-ansible是一个结构相对简单的项目,它通过一个shell脚本,根据用户的参数,选择不同的playbook和不同的参数调用ansible-playbook执行,没有数据库,没有消息队列,所以本文的重点是ansible本身的语法。
kolla-ansible命令
kolla-ansible命令的主要代码如下:
#!/bin/bash
#
# This script can be used to interact with kolla via ansible.
# 默认变量
INVENTORY="${BASEDIR}/ansible/inventory/all-in-one"
PLAYBOOK="${BASEDIR}/ansible/site.yml"
CONFIG_DIR="/etc/kolla"
PASSWORDS_FILE="${CONFIG_DIR}/passwords.yml"
while [ "$#" -gt 0 ]; do
case "$1" in
(--inventory|-i)
INVENTORY="$2"
shift 2
;;
kolla-ansible支持的各种参数,略
esac
done
case "$1" in
(prechecks)
ACTION="Pre-deployment checking"
EXTRA_OPTS="$EXTRA_OPTS -e action=precheck"
;;
(mariadb_recovery)
略,以下类似皆略
esac
CONFIG_OPTS="-e @${CONFIG_DIR}/globals.yml -e @${PASSWORDS_FILE} -e CONFIG_DIR=${CONFIG_DIR}"
CMD="ansible-playbook -i $INVENTORY $CONFIG_OPTS $EXTRA_OPTS $PLAYBOOK $VERBOSITY"
process_cmd
可以看出,当我们执行kolla-ansible deploy时,kolla-ansible命令帮我们调用了对应的ansible-playbook执行,除此之外,没有其他工作。所以对于kolla-ansible项目,主要学习ansible语法即可。
ansible
一个简单的ansible命令示例如下:ansible -i /root/myhosts ha01 -m setup
这个命令的作用是,对/root/hosts文件中的所有属于ha01分类的主机,执行setup模块收集该主机的信息,它包括两种元素,主机清单和模块,下面分别介绍这两种元素。
Host Inventory(主机清单)
host inventory 是一个文件,存放了所有被ansible管理的主机,可以在调用anabile命令时,通过-i参数指定。
- 下面是一个最简单的hosts file的例子,包含1个主机ip和两个主机名:
193.192.168.1.50
ha01
ha02·
可以执行以下命令检查ha01是否能够连通
ansible -i $filename ha01 -m ping
ha01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.我们可以把主机分类,示例如下
deploy-node
[ha]
ha01
ha02
[compute]
compute01
compute02
compute03
- 如果主机数量比较多,也可以用正则表达,示例如下:
deploy-node
[ha]
ha[01:02]
[openstack-compute]
compute[01:50]
[openstack-controller]
controller[01:03]
[databases]
db-[a:f].example.com
- 所有的controller和compute,都是openstack的节点,所以我们可以再定义一个类别openstack-common,把他们里面的主机都包括进去
[openstack-common:children]
openstack-controller
openstack-compute
[common:children]
openstack-common
databases
ha
- 当我们有了如上的inventory 文件后,可以执行如下命令,检验是不是所有机器都能够被ansible管理
ansible -i $file common -m ping
Module(模块)
ansible封装了很多python脚本作为module提供给使用者,如:yum、copy、template,command,etc. 当我们会特定主机执行某个module时,ansible会把这个module对应的python脚本,拷贝到目标主机上执行。可以使用ansible-doc -l来查看ansible支持的所有module。使用ansible -v 模块名 来查看该模块的详细信息。
1. 一个例子,ping
上文的例子,使用了-m ping参数,意思是对这些主机,执行ping 模块,ping 模块是一个python脚本,作用是用来判断:目标机器是否能够通过ssh连通并且已经安装了python。
# ping module主要源码
description:
- A trivial test module, this module always returns C(pong) on successful
contact. It does not make sense in playbooks, but it is useful from
C(/usr/bin/ansible)