ansible源码分析之安装

源码

git clone https://github.com/ansible/ansible.git

git checkout stable-2.3

切换到2.3版本

目录结构

bin目录下面会放一些ansible脚本,也就是我们日常中实现的ansible 命令

lib目录下就是ansible的核心库。

 

lib下面的modules目录下就是ansible所有的模块了

 

examples下面放置的是ansible一下默认的配置文件:ansible读取配置默认会从/etc/ansible/下的文件。内部有个配置文件地址轮询查找机制

setup.py就是安装工具了。

setup.py

ansible的安装过程都在此目录中定义。一起来看看此源码中的内容把

 1 #!/usr/bin/env python
 2 import os
 3 import sys
 4 from glob import glob
 5 #直接把上面目录结构 lib添加到环境变量中,方便后续直接import
 6 sys.path.insert(0, os.path.abspath('lib'))
 7 from ansible import __version__, __author__
 8 try:
###如果没有安装 下面这些库就直接退出,提示安装
9 from setuptools import setup, find_packages 10 except ImportError: 11 print "Ansible now needs setuptools in order to build. " 12 "Install it using your package manager (usually python-setuptools) or via pip (pip install setuptools)." 13 sys.exit(1) 14#定义一下包相关的东西,名字、描述信息、作者、邮箱、官网url、即依赖库、 15 setup(name='ansible', 16 version=__version__, 17 description='Radically simple IT automation', 18 author=__author__, 19 author_email='michael@ansible.com', 20 url='http://ansible.com/', 21 license='GPLv3',
#ansible核心库 paramiko 可以参考https://www.cnblogs.com/Nolover/p/8745446.html中的demo
22 install_requires=['paramiko', 'jinja2', "PyYAML", 'setuptools', 'pycrypto >= 2.6'],
#库和源码映射位置,比如ansible库 对应
lib/ansible 下的源代码。
23 package_dir={ 'ansible': 'lib/ansible' }, 24 packages=find_packages('lib'), 25 package_data={ 26 '': ['module_utils/*.ps1'], 27  },
###把bin下面的几个文件映射车成脚本,这样在linux上就是可执行命令了
28 scripts=[ 29 'bin/ansible', 30 'bin/ansible-playbook', 31 'bin/ansible-pull', 32 'bin/ansible-doc', 33 'bin/ansible-galaxy', 34 'bin/ansible-vault', 35 ], 36 data_files=[], 37 )

 执行setup安装ansible

啪啦啪啦一大堆输出,其中你能明确的看到它在安装我们上面给定义的那些库,和代码迁移到python环境变量下面去

 /usr/lib/python2.7/site-packages//usr/lib/python2.7/site-packages/ansible-2.3.4.0-py2.7.egg//ansible

这个报错提示setuptools的版本太老了,需要执行

安装一下依赖

yum -y install sshpass gcc g++ install python-devel

pip install --upgrade pip

pip install --upgrade setuptools

安装完成后可以直接执行ansible命令看看是否安装成功

 

ansible配置文件拷贝

mkdir -p /etc/ansible/

cp -rp examples/* /etc/ansible/

下面部分代码就是查找配置文件的。

优先级顺序 当前目录下的 >  ~/下的> etc下的。优先级主要是for循环决定的

def load_config_file():
    ''' Load Config File order(first found is used): ENV, CWD, HOME, /etc/ansible '''

    p = configparser.ConfigParser()

    path0 = os.getenv("ANSIBLE_CONFIG", None)
    if path0 is not None:
        path0 = os.path.expanduser(path0)
        if os.path.isdir(path0):
            path0 += "/ansible.cfg"
    try:
        path1 = os.getcwd() + "/ansible.cfg"
    except OSError:
        path1 = None
    path2 = os.path.expanduser("~/.ansible.cfg")
    path3 = "/etc/ansible/ansible.cfg"

    for path in [path0, path1, path2, path3]:
        if path is not None and os.path.exists(path):
            try:
                p.read(path)
            except configparser.Error as e:
                raise AnsibleOptionsError("Error reading config file: 
{0}".format(e))
            return p, path
    return None, 

  

到此为止已经全部安装成功了,

Welcome to visit
原文地址:https://www.cnblogs.com/Nolover/p/10978244.html