帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:Ansible  overview  OUT  FACT  ANSI  HOST  输出  
Generate host overview from ansible fact gathering output

  • 源代码名称:ansible-cmdb
  • 源代码网址:http://www.github.com/fboender/ansible-cmdb
  • ansible-cmdb源代码文档
  • ansible-cmdb源代码下载
  • Git URL:
    git://www.github.com/fboender/ansible-cmdb.git
  • Git Clone代码到本地:
    git clone http://www.github.com/fboender/ansible-cmdb
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/fboender/ansible-cmdb
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Ansible配置管理数据库

    Status: StableBuild StatusActivity: Active developmentLicense: GPLv3

    ansible cmdb接受ansible收集的事实输出,并将它的转换为 static HTML概览页面( 等等),包含系统配置信息。

    它支持多种类型的输出( html,csv,sql等),并通过定制数据扩展Ansible收集的信息。 对于每个主机,它还显示组。主机变量。自定义变量和机器本地事实。

    HTML示例输出。

    支持的输出格式/模板:

    • 漂亮的HTML ( --template html_fancy ),如屏幕截图中所见。
    • 漂亮的HTML拆分( --template html_fancy_split ),每个主机的细节都在一个单独的文件( 对于大量主机) 中。
    • CSV ( --template csv ),可以信任和灵活的逗号分隔格式。
    • JSON ( --template json ),是JSON格式的所有事实的转储。
    • Markdown ( --template markdown ),适用于复制到维基和 wiki 。
    • Markdown 拆分('--template markdown_split'),在单独的文件( 对于大量主机) 中包含主机的每个细节。
    • SQL ( --template sql ),用于将主机事实导入( 我的) SQL数据库。
    • 纯文本 table ( --template txt_table ),用于控制台专家。
    • 当然,任何你想要制作的定制模板。

    安装

    ansible cmdb需要 python v2.7 +/3 。0+

    ansible cmdb可以使用 pip ( 。python 软件包管理器) 安装,独立于你的发行版或者通过brew和普通的老 make install 安装。

    通过 Pip

    通过 Pip 进行安装:

    如果你还没有安装 pip,请为你的发行版安装。

    通过Pip安装 ansible cmdb:

    sudo pip install ansible-cmdb

    你还可以通过Pip升级 ansible cmdb:

    sudo pip install --upgrade ansible-cmdb

    分发包

    发布版本中获取发行版的软件包( macOS X 安装不需要)

    对于 debian/ubuntu系统,请按以下步骤操作:

    sudo dpkg -i ansible-cmdb*.deb

    对于 /centos 系统:

    sudo yum --disablerepo=* install ansible-cmdb*.rpm

    对于 Arch系统:/ansible/ansible/

    用于其它系统

    对于 macOS X 系统:

    brew install ansible-cmdb

    对于其他系统:

    tar -vxzf ansible-cmdb*.tar.gz
    cd ansible-cmdb*
    sudo make install

    的Git 库安装:

    git clone git@github.com:fboender/ansible-cmdb.git
    cd ansible-cmdb
    sudo make install

    用法

    基本

    首先,为你的主机生成Ansible输出:

    mkdir out
    ansible -m setup --tree out/all

    接下来,在生成的out/ 目录调用 ansible CMDB以生成CMDB概览页面:

    ansible-cmdb out/> overview.html

    默认模板是 html_fancy,它使用 jQuery 。

    完全使用

    Usage: ansible-cmdb [option] <dir>> output.html
    Options:
     --version show program's version number and exit
     -h, --help show this help message and exit
     -t TEMPLATE, --template=TEMPLATE
     Template to use. Default is 'html_fancy'
     -i INVENTORY, --inventory=INVENTORY
     Inventory to read extra info from
     -f, --fact-cache <dir> contains fact-cache files
     -p PARAMS, --params=PARAMS
     Params to send to template
     -d, --debug Show debug output
     -c COLUMNS, --columns=COLUMNS
     Show only given columns
     --exclude-cols=EXCLUDE_COLUMNS
     Exclude cols from output

    库存扫描

    ansible cmdb可以读取库存文件( 。hosts,默认情况下),库存目录或者动态库存,并从中提取有用的信息,例如:

    • 主机所属的所有组。
    • 主机变量。每个主机都可以选择的键/值对,可以在剧本中使用。 通过 ansible cmdb扫描它们并将它的添加到'hostvars'部分下发现的facts 。

    读取清单是使用 -i switch 来实现cmdb的。 它需要一个参数: 包含主机文件或者动态库存脚本路径的主机文件目录。 可以通过将多个清单文件与逗号( 不包含空格) 分开来指定多个清单文件。

    例如:

    $ ansible-cmdb -i./hosts out/> overview.html

    如果在该位置存在 host_vars 和/或者 group_vars 目录,也将读取它们。

    ''html_fancy''模板使用四个额外的字段:

    • groups: 主机所属的Ansible组的列表。
    • dtap: 主机是否是开发。测试。验收或者生产系统。
    • comment: 主机的注释。
    • ext_id: 主机的外部唯一标识符。

    例如假设我们有以下 hosts file:

    [cust.megacorp]
    db1.dev.megacorp.com dtap=dev comment="Old database server"
    db2.dev.megacorp.com dtap=dev comment="New database server"
    test.megacorp.com dtap=test 
    acc.megacorp.com dtap=acc comment="24/7 support"
    megacorp.com dtap=prod comment="Hosting by Foo" ext_id="SRV_10029"
    [os.redhat]
    megacorp.com
    acc.megacorp.com
    test.megacorp.com
    db2.dev.megacorp.com
    [os.debian]
    db1.dev.megacorp.com

    主机 acc.megacorp.com 将拥有组'megacorp 。'和'操作系统。redhat',并有注释说它有 24个/7 支持,将被标记为 acc 服务器。 Megacorp.com 主机将有一个"srv_10029"的外部标识,这将是与Foo公司进行主机托管所需要的。

    有关主机变量的更多信息,请参见 http://docs.ansible.com/intro_inventory.html#host-variables

    为主机设置的任何变量将在"自定义变量"标题下的html_fancy模板中可用。

    模板

    指定模板

    ansible-cmdb提供多个模板你可以使用 -t 或者 --template 参数选择你的模板:

    ansible-cmdb -t tpl_custom out/> overview.html

    'html_fancy'模板是默认模板。

    模板可以由 NAME 引用,也可以由 .tpl 文件的相对/绝对路径引用。 这允许你实现自己的模板。 例如:

    $ ansible-cmdb -t/home/fboender/my_template out/> my_template.html
    模板参数

    某些模板支持影响它的输出的参数。 参数使用 -p 或者 --parameter 选项指定为 ansible-cmdb 。 可以通过逗号分隔多个参数来指定参数。 参数中必须有 空格。

    例如要指定带有本地Javascript库和关闭树的html_fancy 模板,请执行以下操作:

    ansible-cmdb -t html_fancy -p local_js=1,collapsed=1 out> overview.html
    标准可用模板

    ansible cmdb目前提供了以下模板:

    • html_fancy: 一个包含所有主机的动态的现代HTML页面。
    • html_fancy_split: 一个动态的现代HTML页面,每个细节都包含在一个单独的文件中。
    • txt_table: 一个快速文本 table 摘要,其中包含一些最少的信息。
    • json: 转储所有包括组。变量。自定义信息( JSON格式)的主机。
    • csv: CSV模板输出主机的CSV文件。
    • markdown: Markdown 模板以 Markdown 格式生成主机信息。
    • 收费 : SQL模板生成一个可以加载到SQLite或者MySQL数据库的. sql 文件。

    html_fancy:

    html_fancy 当前是默认模板。

    一个奇妙的HTML页面,使用jQuery和数据表给你一个可以搜索的。可以排序的table 概述。

    它采用可选参数:

    • local_js=0|1: 从本地磁盘( default= 0 ) 加载资源。 如果设置,将从本地磁盘加载资源,而不是通过网络加载资源。
    • collapsed=0|1: 控制默认情况下是否折叠主机信息。 由于默认情况下,主机信息是否折叠,1的值将通过defaultcontrols对所有主机信息进行 collapse 处理。 默认情况下,1的值将 collapse 所有主机信息。 ( default='0')
    • host_details=0|1: 渲染主机详细信息。 ( default= 1 )
    • skip_empty=0|1: 跳过没有收集事实的主机( 无法接通等) 。 ( default= 0 ) 。

    html_fancy_split:

    这个模板与英镑的模板基本相同,但是它生成一个带有 index.html 文件的cmdb/ 目录,并为主机的每个细节生成一个独立的html文件。

    使用方法:

    ansible-cmdb -t html_fancy_split -i hosts out/

    它接受与 html_fancy 模板相同的参数。

    sql:

    sql 模板生成一个. sql 文件,可以以加载到sql埚或者MySQL数据库中。

    $ ansible-cmdb -t sql -i hosts out> cmdb.sql
    $ echo"CREATE DATABASE ansiblecmdb" | mysql 
    $ mysql ansiblecmdb <cmdb.sql

    事实缓存

    Ansible可以在运行剧本时从主机缓存事实。 这种配置在 Ansible Ansible中配置如下:

    [defaults]
    fact_caching=jsonfile
    fact_caching_connection =/path/to/facts/dir

    通过指定 -f ( --fact-cache ) 选项,你可以将这些缓存的事实用作 facts cmdb的事实目录:

    $ ansible-cmdb -f/path/to/facts/dir> overview.html

    请注意,--fact-cache 选项将应用于你指定的所有事实目录 这意味着不能混合事实缓存事实目录和普通 setup 事实目录。 另外,如果希望手动扩展( 。查看 Extending 章节),必须省略 ansible_facts 键并将项目放在JSON的root 中。

    一些模板,如txt_table和 html_fancy,支持列。 如果模板支持列,则可以使用 --columns/-c 命令行 选项指定要显示的列。

    --columns 采用一个逗号分隔的列列表,( 无空格) 应该显示出来。 列必须由它们的id 字段指定。 有关模板支持哪些 id 字段的信息,请在模板中查看。 通常是列标题,但在 lowercase 中,以及用下划线替换的空格。

    例如:

    $ ansible-cmdb -t txt_table --columns name,os,ip,mem,cpus facts/
    Name OS IP Mem CPUs
    ---------------------- ------------- ------------- --- - 
    jib.electricmonk.nl Linuxmint 17 192.168.0.3 16g 1 
    app.uat.local Debian 6.0.10 192.168.57.1 1g 1 
    eek.electricmonk.nl Ubuntu 14.04 192.168.0.10 3g 1 
    db01.prod.local Debian 6.0.10 192.168.58.1 0g 1 
    debian.dev.local Debian 6.0.10 192.168.56.2 1g 1 
    db02.prod.local Debian 6.0.10 192.168.58.2 0g 1 
    centos.dev.local CentOS 6.6 192.168.56.8 1g 1 
    win.dev.local Windows 2012 10.0.0.3 4g 0 
    host5.example.com Debian 6.0.10 192.168.57.1 1g 1 
    db03.prod.local Debian 6.0.10 192.168.58.3 0g 1 
    zoltar.electricmonk.nl Ubuntu 14.04 194.187.79.11 4g 2 

    对于交互式模板( html_fancy 和朋友),--columns 选项只在默认情况下隐藏列。 csv 和其他 static 模板不同,它不会将它们从输出中远程。 如果你想从 html_fancy 和朋友中排除列,请使用 --exclude-cols 选项。 它和 --columns 一样。 例如:

    ansible-cmdb -t html_fancy_split 
     --exclude-cols mem_usage,swap_usage,disk_usage,physdisk_size 
     -i hosts 
     facts/

    扩展

    你可以指定需要扫描的多个目录。 这允许你覆盖。扩展和填充主机上丢失的信息。 你还可以使用它来创建全新的主机或者向主机添加自定义事实。

    扩展事实基本上与普通的Ansible事实文件相同。 指定多个事实目录时,ansible将扫描所有按顺序扫描并覆盖事实。

    注意主机的文件必须仍然存在于主机文件中,否则将不会生成任何内容。

    如果使用 --fact-cache 选项,则必须省略 ansible_facts 键并将项放在JSON的root 中。 这也意味着你只能扩展本机ansible事实,而不是通过 ansible-cmdb读取来自 hosts 文件的信息。

    覆盖/填充事实

    有时Ansible并不能正确收集主机的某些信息。 例如OpenBSD事实不包含 userspace_architecture 事实。 你可以手动将它添加到主机。

    为你的扩展事实创建一个目录:

    $ mkdir out_extend

    在其中创建主机的文件。 文件必须命名为与 hosts file: 中出现的相同

    $ vi out_extend/openbsd.dev.local
    {
    "ansible_facts": {
    "ansible_userspace_architecture":"x86_64"
     }
    }

    在生成输出时指定两个目录:

    ./ansible-cmdb out/out_extend/> overview.html

    你的OpenBSD主机现在将包含'。用户空间架构'事实。

    手动主机

    例如假设你拥有 100个linux机器,但是只有一台 Windows 机器。 在 Windows 机器上设置ansible不值得,但是你仍然希望它出现在你的概述中。

    为你创建自定义事实的目录:

    $ mkdir out_manual

    在 Windows 主机中创建一个文件:

    $ vi out_manual/win.dev.local
    {
    "groups": [
     ],
    "ansible_facts": {
    "ansible_all_ipv4_addresses": [
    "10.10.0.2",
    "191.37.104.122"
     ], 
    "ansible_default_ipv4": {
    "address":"191.37.104.122"
     }, 
    "ansible_devices": {
     }, 
    "ansible_distribution":"Windows", 
    "ansible_distribution_major_version":"2008", 
    "ansible_distribution_release":"", 
    "ansible_distribution_version":"2008", 
    "ansible_domain":"win.dev.local", 
    "ansible_fips": false, 
    "ansible_form_factor":"VPS", 
    "ansible_fqdn":"win.dev.local", 
    "ansible_hostname":"win", 
    "ansible_machine":"x86_64", 
    "ansible_nodename":"win.dev.local", 
    "ansible_userspace_architecture":"x86_64", 
    "ansible_userspace_bits":"64", 
    "ansible_virtualization_role":"guest", 
    "ansible_virtualization_type":"xen", 
    "module_setup": true
     }, 
    "changed": false
    }

    现在,你可以通过指定两个事实目录来创建包括 Windows 主机的概述:

    ./ansible-cmdb out/out_manual/> overview.html
    自定义事实

    你可以向主机添加自定义事实( 不要与'自定义变量') 。 这些事实将默认在 html_fancy 模板中显示在'自定义事实'标题下。

    英镑说明与主机本地事实不相同。 主机本地事实是Ansible从主机目录的每个 /etc/ansible/facts.d 中读取的事实。 这些也包括在 ansible cmdb模板的html_fancy中,但在"主机局部事实"标题下。 这里解释的自定义事实是在运行,的主机上手动定义的,并且与,本身无关。

    假设你想向你的事实添加有关已经安装软件的信息。

    为你创建自定义事实的目录:

    $ mkdir out_custom

    在其中为要添加自定义事实的主机创建一个文件:

    $ vi custfact.test.local
    {
    "custom_facts": {
    "software": {
    "apache": {
    "version":"2.4",
    "install_src":"backport_deb"
     },
    "mysql-server": {
    "version":"5.5",
    "install_src":"manual_compile"
     },
    "redis": {
    "version":"3.0.7",
    "install_src":"manual_compile"
     }
     }
     }
    }

    为此,必须以英镑为代价,以英镑为代价列出 facts key 。

    生成概述:

    ./ansible-cmdb out/out_custom/> overview.html

    软件项目将在"自定义事实"标题下列出。

    不常见的问题

    Solaris计算机没有磁盘信息

    Ansible目前不包括Solaris主机的磁盘大小信息。 因此,我们不能将它包含在 ansible cmdb的输出中。 有关更多信息,请参见 issue #24"。

    提供和开发

    有关贡献和开发的信息,请参见开发文档。

    授权和片尾

    ansible cmdb是在GPLv3下许可的:

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program. If not, see <http://www.gnu.org/licenses/>.
    For the full license, see the LICENSE file.

    ansible cmdb是作为一个简短的python 脚本开始的我在这里写了一个博客:

    http://www.electricmonk.nl/log/2015/01/21/host-inventory-overview-using-ansibles-facts/

    Cris Pelt然后把它扩展到一个HTML页面。 最后我将它分叉到Github并使它的成为 public,增加了一些特性。 许多人合作使 ansible cmdb成为今天的产品。 有关完整列表,请参阅日志记录中的注释。



    文章标签:OUT  HOST  ANSI  输出  FACT  Ansible  overview  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语