Giter Site home page Giter Site logo

idb-project / the-idb Goto Github PK

View Code? Open in Web Editor NEW
8.0 4.0 7.0 1.49 MB

The infrastructure database core application

License: GNU Affero General Public License v3.0

Ruby 65.83% JavaScript 10.81% CSS 1.45% HTML 20.95% Shell 0.15% SCSS 0.51% Dockerfile 0.25% Makefile 0.04% Procfile 0.01%
idb puppetdb infrastructure-database cidb cmdb devops devops-tools

the-idb's Introduction

the idb

Once upon a time we used spreadsheets and wiki pages to document our server landscape. Then the age of working together, more people joined the team and it became tedious to maintain all those wiki pages.

And we thought, why not keep to the principle of:

Automate all boring things!

And the idb - the infrastructure database core application - was created.

What this really is

This is a rails based web application known as 'idb-core', that is fed by various 'adapters' to corelate information for machines, inventory-items, networks and such. You can find various idb adapters within the github organization:

https://github.com/idb-project

It all began with puppet and puppetdb

The primary adapter for gathering informations has been PuppetDB. That's the reason why - unlike other adapters - the PuppetDB adapter is bundled directly within the idb. Don't fear: the idb can be used without puppet just fine.

Install packages

You might find several but probably untested packages for various operating systems at https://packager.io/gh/idb-project/the-idb/refs/develop

Contact to the team

Either contact us through github or use team AT the-idb.org.

Commercial support

While the idb is an open source project, there is commercial support available from the fine folks at bytemine. They offer the idb packaged for various platforms and these come with support and services. (Disclaimer: currently all people working on the idb are employed by bytemine)

the-idb's People

Contributors

bjo81 avatar dependabot[bot] avatar dra avatar ecm75 avatar fkr avatar idb-reporter avatar rahulrairai59 avatar rbns avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

the-idb's Issues

per module mail recipient

Redmine#3977
It would be cool if we could start breaking up the e-mailing from idb into several pieces.
Initial idea would be to have a per module recipient list (eg. one or many)

A module is:

  • inventory
  • network
  • machines
  • locations

Create an interface to plan a maintenance

Redmine#2548
There should be some kind of button in the machine details to plan a maintenance.

  • Take a date
  • Take a user who is responsible
  • Maybe notes about the update. (to add ticket references etc.)

Add a JSON column to machines reflecting software versions

Redmine#4651
machine has a active softwareconfiguration.

softwareconfiguration would consist of a field holding a json structure and for the papertrail a date and active/inactive marker, thus previous software lists can be kept around for a machine.

{
"software": [{
"name": "foo",
"version": "1.2.3.4",
"license_key": "abcde",
"description": "a piece of installed software"
}, {
"name": "bar"
}]
}

adapter name field

Redmine#4355
i think it would be useful to have a field that contains the name of the adapter which has updated/created a machine.

Implement tags on all objects

Redmine#4666
Every object (machine, inventory, owner, etc.) can have 0..n tags. By a special view one can filter/search for these tags over all objects.

Allow grouping of related machines

Redmine#2533
To allow grouping of machines by i.e. customers, we need to be able to assign machines to groups. One machine can be in multiple groups.

To avoid building an interface for that, we just create a configuration file that contains the group names and an unique identifier.

Machine facts should be used like tags so one can filter by operating system and location for example.

Batch delete

Redmine#2981
I would like something that allows me to batch delete from the machines listing.

Example: I filter for a certain hostname pattern within the fqdn field and want to delete the whole result OR part of the result within another click.

per module mail recipient

Redmine#3977
It would be cool if we could start breaking up the e-mailing from idb into several pieces.
Initial idea would be to have a per module recipient list (eg. one or many)

A module is:

  • inventory
  • network
  • machines
  • locations

define a hostname mangling method

Redmine#4399
it is frequently required to mangle the hostnames received from other management tools down to a fqdn.
define a method for doing this and implement it in idbclient.

Report duplicate MAC addresses

Redmine#3965
If by an automatic update, e.g. by puppetDB, a MAC address is used that already exists in the IDB an email should be sent out that there is a conflicting MAC address.

icinga2 Integration via event stream api

Redmine#2676
It would be nice to have some icinga information on the machine's detail page.

Some ideas (tbd):

  • Link to the machine in icinga.
  • Overview of the status.
  • Links to the alert tickets in RT
  • Buttons to ack, disable notifications, re-check
    ** ack one service
    ** ack all critical services

RequestTracker integration

Redmine#2667
There should be a tab pane on the machine details that could show related request tracker tickets for a machine.

Idea on how to implement this:

RT will get a custom field where the RT-API or a regular user can add the FQDN or Icinga name for machine. The IDB gets a background job that collects all tickets that have the custom machine name field set to a value on a regular basis and links them to the corresponding machines.

  • The machine name field in RT can contain the FQDN or the Nagios/Icinga name.
    The IDB can resolve the name because it can read the Icinga config.
  • Check which fields should be stored in the IDB for a ticket.
    ** Ticket id
    ** status?
    ** owner?
  • Storing above data requires updating the fields on a regular basis to get ticket updates. (owner change, resolved, ...) tbd

copyable inventory items

Redmine#4396
Inventory items should be copyable to allow time saving when adding multiple similar items.

icinga2 Integration via event stream api

Redmine#2676
It would be nice to have some icinga information on the machine's detail page.

Some ideas (tbd):

  • Link to the machine in icinga.
  • Overview of the status.
  • Links to the alert tickets in RT
  • Buttons to ack, disable notifications, re-check
    ** ack one service
    ** ack all critical services

Report duplicate MAC addresses

Redmine#3965
If by an automatic update, e.g. by puppetDB, a MAC address is used that already exists in the IDB an email should be sent out that there is a conflicting MAC address.

RequestTracker integration

Redmine#2667
There should be a tab pane on the machine details that could show related request tracker tickets for a machine.

Idea on how to implement this:

RT will get a custom field where the RT-API or a regular user can add the FQDN or Icinga name for machine. The IDB gets a background job that collects all tickets that have the custom machine name field set to a value on a regular basis and links them to the corresponding machines.

  • The machine name field in RT can contain the FQDN or the Nagios/Icinga name.
    The IDB can resolve the name because it can read the Icinga config.
  • Check which fields should be stored in the IDB for a ticket.
    ** Ticket id
    ** status?
    ** owner?
  • Storing above data requires updating the fields on a regular basis to get ticket updates. (owner change, resolved, ...) tbd

Add some internal statistics to visualize errors and allow monitoring

Redmine#2661
Background jobs may fail due to the unavailability of external services. Those errors should be catched and somehow recorded (not via exceptions) so we can alert if there are too many errors or errors over a log period of time. Having jobs fail from time to time is normal, but we want to know if the jobs stop working at all.

Create an interface to plan a maintenance

Redmine#2548
There should be some kind of button in the machine details to plan a maintenance.

  • Take a date
  • Take a user who is responsible
  • Maybe notes about the update. (to add ticket references etc.)

Allow re-labeling of general purpose fields

Redmine#4380
The fields:

config instructions
business purpose
business criticality
Software characteristics
Business notification

should be allowed to be re-labeled via config file

Allow grouping of related machines

Redmine#2533
To allow grouping of machines by i.e. customers, we need to be able to assign machines to groups. One machine can be in multiple groups.

To avoid building an interface for that, we just create a configuration file that contains the group names and an unique identifier.

Machine facts should be used like tags so one can filter by operating system and location for example.

Extend the 'untracked' feature to handle e.g. API calls

Redmine#4309
We would like to track an API call that does not explicitely set the "create_machine" option as an untracked entry, like the automatically discovered puppetDB hosts not added to IDB.

Therefore we have to create a structure with a special Redis key able to hold the FQDNs and the payload; than we hook the store mechanism into the API if machine does not exist and "create_machine" is not set.
Then the list handling and "Add to IDB" feature has to be implemented.

display services that need a restart

Redmine#4410
might be useful for e.g. libc updates as an indicator that even a reboot should be considered.

for yum:
yum-utils provides needs-restarting

for apt:
debian-goodies provides checkrestart

puppetize bootstrapping of vagrant boxes

Redmine#3084
There is an initial bootstrap.pp present. this needs to be extended as follows:

  • create database 'idb' and 'idb_test' within the mysql

  • grant access to these databases to these with the credentials found in config/databases.yml

  • run 'gem install bundler' within the shared directory to the vagrantbox (/vagrant/)

  • run 'bundle install --path vendor/bundle' within the shared directory to the vagrantbox (/vagrant/)

  • run 'bundle exec rake db:schema:load' within the shared directory to the vagrantbox (/vagrant/)

puppetize bootstrapping of vagrant boxes

Redmine#3084
There is an initial bootstrap.pp present. this needs to be extended as follows:

  • create database 'idb' and 'idb_test' within the mysql

  • grant access to these databases to these with the credentials found in config/databases.yml

  • run 'gem install bundler' within the shared directory to the vagrantbox (/vagrant/)

  • run 'bundle install --path vendor/bundle' within the shared directory to the vagrantbox (/vagrant/)

  • run 'bundle exec rake db:schema:load' within the shared directory to the vagrantbox (/vagrant/)

Supplier contact information

Redmine#4376
The supplier is backed with more information than a name in other peoples database, including address/telephone/mail. Maybe this would also make sense for the IDB.

Add some internal statistics to visualize errors and allow monitoring

Redmine#2661
Background jobs may fail due to the unavailability of external services. Those errors should be catched and somehow recorded (not via exceptions) so we can alert if there are too many errors or errors over a log period of time. Having jobs fail from time to time is normal, but we want to know if the jobs stop working at all.

define a hostname mangling method

Redmine#4399
it is frequently required to mangle the hostnames received from other management tools down to a fqdn.
define a method for doing this and implement it in idbclient.

Batch delete

Redmine#2981
I would like something that allows me to batch delete from the machines listing.

Example: I filter for a certain hostname pattern within the fqdn field and want to delete the whole result OR part of the result within another click.

adjust columns in summary broken; tablesorter handling needs refactoring

Redmine#4426
If a summary for a customer should be created with only specific columns, some of them are not working, if others are already hided.

In my case I wanted to hide all inventory columns and all unimportant columns from the machines:

  • click on Columns
  • find Inventory No
  • unmark all columns from Inventory No to Comment
  • unmark BN

Only columns Owner, CI, SC, BP, BC left.
When showing all columns again, then unmark and mark a random column from the machine, all informations are back.

Seems like there are dependencies.

Another example:

  • unmark User and Owner from Inventory
  • try to toggle VM Host from Machines

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.