Python CMDB開發

來源:互聯網
上載者:User

標籤:www   hit   elf   lap   indicator   quick   gen   dem   cat   

營運自動化路線:

 

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

123456 /etc/puppet/puppet.conf[main]reports = store #預設#report = true #預設#pluginsync = true #預設

on client

12345678 /etc/puppet/puppet.conf[main]#report = true #預設  [agent]runinterval = 10server = master.puppet.comcertname = c1.puppet.com

如上述設定之後,每次執行client和master同步,就會在master伺服器的 【/var/lib/puppet/reports】路徑下建立一個檔案,主動執行:puppet agent  --test

所以,我們可以建立自己的report來實現cmdb資料的採集,建立report也有兩種方式。

Demo 1

1、建立report

+ View Code

2、應用report

+ View Code

Demo 2

1、建立report

在 /etc/puppet/modules 目錄下建立如下檔案結構: 

modules└── cmdb    ├── lib    │   └── puppet    │       └── reports    │           └── cmdb.rb    └── manifests        └── init.pp
123456789101112131415161718192021222324 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    endend

2、應用report

12345 /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()    
from django.contrib.auth.models import Userfrom rest_framework import routers, serializers, viewsetsfrom app02 import modelsfrom rest_framework.decorators import detail_route, list_routefrom rest_framework import responsefrom django.shortcuts import HttpResponse# Serializers define the API representation.class UserSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = User        fields = (‘url‘, ‘username‘, ‘email‘, ‘is_staff‘)# ViewSets define the view behavior.class UserViewSet(viewsets.ModelViewSet):    queryset = User.objects.all()    serializer_class = UserSerializer        # Serializers define the API representation.class BlogSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = models.Blog        depth = 1        fields = (‘url‘,‘title‘, ‘content‘,)        # ViewSets define the view behavior.class BLogViewSet(viewsets.ModelViewSet):    queryset = models.Blog.objects.all()    serializer_class = BlogSerializer        @list_route()    def detail(self,request):        print request        #return HttpResponse(‘ok‘)        return response.Response(‘ok‘)
from django.conf.urls import patterns, include, urlfrom django.contrib import adminfrom rest_framework import routersfrom app02 import apifrom app02 import views# Routers provide an easy way of automatically determining the URL conf.router = routers.DefaultRouter()router.register(r‘users‘, api.UserViewSet)router.register(r‘blogs‘, api.BLogViewSet)urlpatterns = patterns(‘‘,        url(r‘^‘, include(router.urls)),    url(r‘index/‘, views.index),    #url(r‘^api-auth/‘, include(‘rest_framework.urls‘, namespace=‘rest_framework‘)))
from django.shortcuts import renderfrom rest_framework.decorators import api_viewfrom rest_framework.response import Response# Create your views here.@api_view([‘GET‘, ‘PUT‘, ‘DELETE‘,‘POST‘]) def index(request):    print request.method    print request.DATA    return Response([{‘asset‘: ‘1‘,‘request_hostname‘: ‘c1.puppet.com‘ }]) 
後台管理頁面

後台管理頁面需要實現對資料表的增刪改查。

 

 

 問題:

1、paramiko執行sudo

1234 /etc/sudoers Defaults    requirettyDefaults:cmdb    !requiretty

  

 

Python CMDB開發

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.