运维自动化路线:

CMDB概述(二)

cmdb的开发需要包含三部分功能:

  ·采集硬件数据

  ·API

  ·页面管理

执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取到的数据保存到数据库中,后台管理程序负责对服务器信息的配置和展示。

采集硬件信息

采集硬件信息可以有两种方式实现:

  1、利用puppet中的report功能
  2、自己写agent,定时执行

两种方式的优缺点各异:

  方式一

    优点是不需要在每台服务器上步一个agent

    缺点是依赖于puppet,并且使用ruby开发

  方式二

    优点是用于python调用shell命令,学习成本低

    缺点是需要在每台服务器上发一个agent

方式一

默认情况下,puppet的client会在每半个小时连接puppet的master来同步数据如果定义了report,那么在每次client和master同步数据时,会执行report的process函数,在该函数中定义一些逻辑,获取每台服务器信息并将信息发送给API

puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:

on master

/etc/puppet/puppet.conf
[main]
reports = store #默认
#report = true #默认
#pluginsync = true #默认

on client

/etc/puppet/puppet.conf
[main]
#report = true #默认
  
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com

如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent  --test

所以,我们可以创建自己的report来实现cmdb数据的采集,创建report也有两种方式

Demo 1

1、创建report

/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
 
require 'puppet'
require 'fileutils'
require 'puppet/util'
  
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
  
Puppet::Reports.register_report(:cmdb) do
  desc "Store server info
    These files collect quickly -- one every half hour -- so it is a good idea
    to perform some maintenance on them if you use this report (it's the only
    default report)."
  
  def process
    certname = self.name
    now = Time.now.gmtime
    File.open("/tmp/cmdb.json",'a') do |f|
      f.write(certname)
      f.write(' | ')
      f.write(now)
      f.write("\r\n")
    end
  
  end
end

2、应用report

/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默认
#pluginsync = true #默认

Demo 2

1、创建report

在 /etc/puppet/modules 目录下创建如下文件结构:

modules
└── cmdb
    ├── lib
    │   └── puppet
    │       └── reports
    │           └── cmdb.rb
    └── manifests
        └── init.pp

require 'puppet'
require 'fileutils'
require 'puppet/util'
  
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
  
Puppet::Reports.register_report(:cmdb) do
  desc "Store server info
    These files collect quickly -- one every half hour -- so it is a good idea
    to perform some maintenance on them if you use this report (it's the only
    default report)."
  
  def process
    certname = self.name
    now = Time.now.gmtime
    File.open("/tmp/cmdb.json",'a') do |f|
      f.write(certname)
      f.write(' | ')
      f.write(now)
      f.write("\r\n")
    end
  
  end
end

2、应用report

/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默认
#pluginsync = true #默认

方式二

使用python调用shell命令,解析命令结果并将数据发送到API

API

  ·REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  ·REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致               使这些应用转变状态

  ·REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  ·所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

  ·对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

django中可以使用 Django rest framwork 来实现:http://www.django-rest-framework.org/

class Blog(models.Model):
    
    title = models.CharField(max_length=50)
    content = models.TextField()
models.py

相关文章:

  • 2021-07-31
  • 2021-07-14
  • 2022-02-05
  • 2021-10-17
  • 2021-12-08
  • 2021-11-08
  • 2021-06-06
  • 2022-02-12
猜你喜欢
  • 2021-12-19
  • 2021-05-27
  • 2021-11-19
  • 2021-11-08
  • 2022-01-06
  • 2021-09-19
相关资源
相似解决方案