LoginSignup
4
6

More than 5 years have passed since last update.

CMDBuildをコンテナで簡単起動~APIで構成情報を自動収集

Last updated at Posted at 2018-04-26

CMDBuildは、OSSの構成管理ツールです。
ITシステムにおける各種構成要素の情報管理が可能です。詳しくはOSSラボさんの紹介資料とかご参考ください。

参考) https://www.slideshare.net/sfunai/cmdbuild

今回は、CMDBuildをDockerコンテナで簡単起動して、API経由でCMDBuildで管理されている情報を取り出すところまで実施。

CMDBuildのコンテナとDB(PostgreSQL)のコンテナをdocker-composeで一発起動

CMDBuildは構成情報をDB保存することになるので、CMDBuildのコンテナイメージとDB(PostgreSQL)のコンテナイメージが必要となります。

docker-compose.ymlの定義だと以下のようになります。

docker-compose.yml
version: "3"
services:
  cmdbuild:
    image: quentinv/cmdbuild:latest
    container_name: cmdbuild
    ports:
      - 28080:8080
    networks:
      - cmdbuild-net
  cmdbuild-db:
    image: postgres:9.6.8-alpine
    container_name: cmdbuild-db
    environment:
      POSTGRES_PASSWORD: cmdbuild
    networks:
      - cmdbuild-net
networks:
  cmdbuild-net:
    driver: bridge

このファイルを作成し、docker環境上でdocker-compose upを実行。
すると2コンテナ稼働。

$ docker-compose up -d
$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                         PORTS                     NAMES
49feb8a8a4a3        quentinv/cmdbuild:latest   "catalina.sh run"        36 minutes ago      Up 36 minutes                  0.0.0.0:28080->8080/tcp   cmdbuild
41559aa86e40        postgres:9.6.8-alpine      "docker-entrypoint..."   36 minutes ago      Up 36 minutes                  0.0.0.0:32768->5432/tcp   cmdbuild-db

CMDBuildの初期設定

あとは、管理画面上からの設定でOK。
上記のymlで起動した場合、「http://dockerホスト名:28080/」にアクセス。

初期設定を実施。

まずは言語選択

cmdbuild_1.png

データベースの設定
cmdbuild_2.png

初期ユーザの登録
cmdbuild_3.png

これで完了。あとは上記で作成した初期ユーザでログインすれば利用できる状態に。

構成管理の基本情報を登録

ここまでの手順を実施した段階ではまだ中身のデータが空っぽの状態です。
そのため、まずは構成管理の基礎となるクラス情報等の登録が必要となります。
なお、最初から必要な情報を登録した状態で使えるReady2useというものも提供されているので、手間を省きたい場合はそちらの利用を検討されると良いかと思います。(Subscription型での提供だと思います。)

クラス登録

Configuration Itemに含まれる区分けをクラスとして定義します。
クラスは例えば以下のような感じで定義します。

  • Location(環境の場所情報管理用)
  • Infrastructure(インフラ情報管理用)
    • Server (サーバ情報管理用)
    • Storage (ストレージ情報管理用)
    • Rack (ラック情報管理用)
    • Network Device (ネットワーク機器情報管理用)
  • Software instance (ソフトウェア情報管理用)
    • Database (データベースSW情報管理用)
    • Application (アプリケーションSW情報管理用)  等々

登録はCMDBuildの管理画面から行います。

ログイン後、「アドミニストレーションモジュール」から登録作業を行います。

cmdbuild_4.png

cmdbuild_5.png

クラス作成するだけではクラスの中の属性項目がCode(クラスオブジェクトの識別文字列)とDescription(オブジェクトの概要)の2項目のみなので、クラスの「アクティビティ」から属性値を追加します。

cmdbuild_6.png

あとは、クラス間に関連性を持たせて管理するケースもあるのでリレーションの定義を行います。「ドメイン」から登録です。
以下の図では、LocationとInfrastructure間に1:Nの関係性を定義しています。

cmdbuild_7.png

データ登録

ここまでくればあとは、実際の構成管理データを登録します。
データの登録は「データ管理モジュール」から実施です。
Locationとして「東京第1」といったデータを登録しています。

cmdbuild_10.png

次に、Infrastructureとして「System1のインフラ」という情報を登録し、「東京第1」に対してリレーションを設定しています。
cmdbuild_11.png
cmdbuild_12.png

すると、こんな感じで関連性を持った状態で構成管理されます。

cmdbuild_13.png

こういった要領で構成管理情報を登録・更新して管理していきます。

APIで構成管理情報を取り出し

最後に、構成情報をAPIで取り出す方法をまとめておきます。
CMDBuildにはREST API、SOAP APIの2種類のWeb APIが実装されています。
詳しくはこちら(pdf)を参照してください。
今回はREST API経由で先程登録したカード情報をピックアップしてみます。

ログイン(POST)

まずは、各種メソッドの実行のためにはログインしてトークン情報を発行しておく必要があります。

$ curl -X POST "http://CMDBuildホスト名:ポート/services/rest/v2/sessions/" -H "Content-Type: application/json" -s -d '{"username": "ユーザ名", "password": "パスワード"}'
{"data":
  {
    "username":"admin",
    "role":"SuperUser",
    "availableRoles":["SuperUser"],
    "_id":"9ba.......e3256"
  }
}

_idという部分が認証トークンです。以降の処理はこのトークン情報をリクエストのヘッダーに設定して送信することでAPI処理可能となります。

クラスリストの取得(GET)

先程登録したクラスのリストを取得します。

$ curl -X GET "http://CMDBuildホスト名:ポート/services/rest/v2/classes/" -s -H "Content-Type: application/json" -H "CMDBuild-Authorization: 9ba.......e3256"
{"data":
  [
    {
      "name":"Application",
      "description":"Application",
      "parent":"Class",
      "prototype":false,
      "_id":"Application"
    },
    {
      "name":"Class",
      "description":"Class",
      "parent":null,
      "prototype":true,
      "_id":"Class"
    },
    {
      "name":"Database",
      "description":"Database",
      "parent":"Class",
      "prototype":false,
      "_id":"Database"
    },
    {
      "name":"Infrastructure",
      "description":"Infrastructure",
      "parent":"Class",
      "prototype":false,
      "_id":"Infrastructure"
    },
    {
      "name":"Location",
      "description":"Location",
      "parent":"Class",
      "prototype":false,
      "_id":"Location"
    },
    ・・略
  ],
  "meta":{
    "total":10,
    "positions":{},
    "references":{}
  }
}

Locationクラスのカード情報を取得(GET)

$ curl -X GET "http://CMDBuildホスト名:ポート/services/rest/v2/classes/Location/cards/" -s -H "Content-Type: application/json" -H "CMDBuild-Authorization: 9ba.......e3256"
{"data":
  [
    {
      "_type":"Location",
      "Description":"東京第1",
      "_id":24,
      "Code":"tokyo-001",
      "Notes":null
    }
  ],
  "meta":{
    "total":1,
    "positions":{},
    "references":{}
  }
}

Locationクラスのカードを追加(POST)

$ curl -X POST "http://CMDBuildホスト名:ポート/services/rest/v2/classes/Location/cards/" -H "Content-Type: application/json" -H "CMDBuild-Authorization: 9ba.......e3256" -s -d '{"Code":"osaka-001", "Description": "Osaka1"}'
{"data":34}

まとめ

触りの部分だけではありますが、簡単につかえるイメージはもっていただけなのではないでしょうか。
Ready2useを使えばこちらのスライドにもある通り非常にいろんなことできそうです。

4
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6