zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux下51单片机开发解决方案
    ubuntu下virtualbox配置hostonly网络
    标准c头文件
    linux下vim和bash配置文件
    排序算法
    系统空闲一段时间后关闭指定进程
    c常用字符串函数
    lubuntu自动登录(lxde)
    开源软件发展史
    awk命令(语言)
  • 原文地址:https://www.cnblogs.com/Nolover/p/10978244.html
Copyright © 2011-2022 走看看