ITSMO & files
You are using a filesystem to store some scripts and documentation. You want to manage it using ITIL best practices.
You want to use a CMDB based on an RDF knowledge graph providing a SPARQL interface.
A file system is generally not well-suited to serve as a Configuration Management Database (CMDB) for several reasons. While both store information, they have very different purposes, architectures, and functionalities. Here’s why a file system is difficult to use as a CMDB:
- Lack of Structure: File systems store files in a hierarchical directory structure. They are primarily designed for storing and retrieving data such as documents, media files, and executables. While you can organize these files into folders, the file system lacks a specific structure for representing relationships between different items or configurations. A CMDB is designed to store information about IT assets, services, configurations, and their relationships. It requires a much more structured approach, often with predefined schemas, fields, and relationships between objects (e.g., servers, software, networks). The CMDB is intended to provide insights into how assets are interconnected, dependencies, and their current states.
- Absence of Metadata and Context: File systems mainly store the name, size, date of creation, and other file attributes, but they don’t store rich metadata that provides context about the contents or relationships of the data. A CMDB tracks complex metadata such as version, ownership, location, status, configurations, dependencies, and even historical changes. This contextual data is crucial for managing IT environments, and it’s often stored in structured formats such as relational databases or specialized tools.
- Lack of Relationship Tracking: File systems are good for storing files, but they don’t inherently manage the relationships between files, users, or services. They do not track dependencies between objects (for example, how a specific software depends on a server or network infrastructure). A key function of a CMDB is to map and visualize relationships between configuration items (CIs), such as a server depending on a specific database or a service relying on a particular network configuration. Without this feature, a CMDB is not effective in helping IT teams understand the impact of changes.
- No Change History or Versioning: While a file system can store versions of files (through timestamps or using version control tools), it does not automatically track changes to the configuration or state of the files in a meaningful way. CMDB is designed to track changes over time, such as updates to software versions, hardware upgrades, or changes in network configurations. This version history and audit trail are critical for understanding how the configuration has evolved and ensuring compliance.
- Limited Access Control for Configuration Management : Access control in file systems is typically limited to file permissions." While this works for protecting access to files, it doesn’t have the depth needed for configuration management, where roles such as “admin,” “approver,” and “auditor” may require different levels of access. CMDB tools have robust access control mechanisms that allow different levels of access based on roles, ensuring that only authorized personnel can make changes to critical configuration information. This feature is necessary to ensure data integrity and compliance in an enterprise setting.
That said, a simple configuration management system can often be implemented using a plain file system with carefully manually applied naming conventions and organizational rules. This approach, while basic, can be surprisingly effective for small-scale or less complex environments.
How ITSMO can help:
While a traditional file system is not designed for the complexities of a Configuration Management Database (CMDB), with ITSMO it’s possible to implement certain organizational strategies to address some of the limitations. Below are a few ways you can organize a file system to simulate or bypass some of the constraints when managing configurations or IT assets, although it still won’t provide the full functionality of a CMDB.
Suggested directory Structure
Create a directory structure that mimics the hierarchical relationships and categorization of configuration items (CIs).
For example:
/
service1/
v1.0.0/
itsmo.ttl
install-script.sh
install-data.txt
...
v2.0.0/
itsmo.ttl
install-script.sh
install-data.txt
...
doc1/
v1.0.0/
itsmo.ttl
README.MD
...
v1.0.1/
itsmo.ttl
README.MD
...
Use ITSMO to inject a meaning to such structure:
dir level | role | Notes |
---|---|---|
root directory | CMDB | could be a relative directory |
first level | repository | Each directory represents a ObjectRepository |
second level | baseline | Each directory represents a ConfigurationBaseline |
third level | controlled files | baseline content, each baseline contains a file named itsmo.ttl that stores CI metadata |
The URI file://<fileserver>/rootdirectory/
represent the prefix for all other URIs.
Each folder under the root must contain a metadata.ttl
directory to store information like version, owner, and status (active/inactive). This file should be a valid RDF serialized linked data using ITSMO
example of service1/v2.0.0/itsmo.ttl:
@prefix : <https://w3id.org/itsmo#>.
@prefix schema: <https://schema.org/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
<service1/v2.0.0#service> a :ITService ;
:versionOf <https://service1.example.com/> ;
schema:description "my simple service v1.0.0 deployed in production"@en ;
:deployedFrom </service1/v1.0.0/install-script#deployment> ;
:created "2025-01-12T15:23:35"^^xsd:dateTime ; # from dir last modified date
prov:wasRevisionOf </service1/v1.0.0#service>
.
</service1/v2.0.0/install-script#deployment> a :Deployment ;
schema:description "the service 1 install script"@en ;
:created "2025-01-12T15:23:35"^^xsd:dateTime ; # from file last modified date
:versionOf <service1> ;
:versionTag "2.0.0" ;
:path "/install-script"
:requires </service1/v2.0.0/install-data.txt#dataset> ;
:hasOwner <https://example.com/me> ;
:hasResponsible <https://example.com/me> ;
.
</service1/v2.0.0/install-data.txt#dataset> a :Dataset;
schema:description "some data required by service 1 install script"@en ;
:created "2025-01-12T15:23:35"^^xsd:dateTime ; # from file last modified date
:versionOf <service1> ;
:versionTag "2.0.0" ;
:created "2025-01-12T15:23:35"^^xsd:dateTime ; # from file last modified date
:path "/install-data.txt"
.
Now You can load all .ttl
files in a RDF Data Store to enable all query features required by a CMDB.
While organizing a file system in this manner can help you simulate some of the functions of a CMDB, it requires lot of manual effort to maintain dependencies, relationships, and metadata.
Note that much of the metadata file content can be generated by analyzing the directory structure. Consider writing scripts and aliases to automate part of your work.