Tideway Community Forum

forgot password?
   
 
CI relationships to Contact Info
Posted: 20 October 2008 05:18 PM   [ Ignore ]  
Jr. Member
RankRank
Total Posts:  46
Joined  2008-10-17

How can I link contact information to specific CIs? For example, how would I show a relationship between a CI for a specific Windows Server to the Administrator of that server? Or for a particular network appliance to the contact information of the vendor for that appliance?

Profile
 
 
Posted: 20 October 2008 06:24 PM   [ Ignore ]   [ # 1 ]  
Administrator
Rank
Total Posts:  6
Joined  2008-01-25
wearnest@teleflora.com - 20 October 2008 05:18 PM
How can I link contact information to specific CIs? For example, how would I show a relationship between a CI for a specific Windows Server to the Administrator of that server? Or for a particular network appliance to the contact information of the vendor for that appliance?

One way to achieve this is to write a pattern to establish and maintain the relationship. For example, you could write a simple pattern that triggers on a Host and use the pattern to relate the Host to the right Administrator person – perhaps with a lookup table and a “calculated” administrator that is based on some criteria related to the Host or what it is used for.

With this approach, the system will maintain the relationships automatically even as the infrastructure changes over time – and it can of course be extended to describe or maintain any relationship you can think of.

Profile
 
 
Posted: 20 October 2008 07:32 PM   [ Ignore ]   [ # 2 ]  
Jr. Member
RankRank
Total Posts:  46
Joined  2008-10-17
Allan Mertner - 20 October 2008 06:24 PM
wearnest@teleflora.com - 20 October 2008 05:18 PM
How can I link contact information to specific CIs? For example, how would I show a relationship between a CI for a specific Windows Server to the Administrator of that server? Or for a particular network appliance to the contact information of the vendor for that appliance?

One way to achieve this is to write a pattern to establish and maintain the relationship. For example, you could write a simple pattern that triggers on a Host and use the pattern to relate the Host to the right Administrator person – perhaps with a lookup table and a “calculated” administrator that is based on some criteria related to the Host or what it is used for.

With this approach, the system will maintain the relationships automatically even as the infrastructure changes over time – and it can of course be extended to describe or maintain any relationship you can think of.

So instead of maintaining the relationship within the Tideway interface, I can configure the Tideway appliance to “automatically” maintain the relationship, based on a pattern, which I have to manually create, which in turn will monitor some external table that I also manually maintain?

Can you provide any examples of external sources for this contact info?

Profile
 
 
Posted: 21 October 2008 09:05 AM   [ Ignore ]   [ # 3 ]  
Newbie
Rank
Total Posts:  4
Joined  2008-02-28

wearnest@teleflora.com - 20 October 2008 07:32 PM

So instead of maintaining the relationship within the Tideway interface, I can configure the Tideway appliance to “automatically” maintain the relationship, based on a pattern, which I have to manually create, which in turn will monitor some external table that I also manually maintain?

Can you provide any examples of external sources for this contact info?

You can put the lookup table directly into the pattern. I’ve given an example below. In Foundation 7.2, the Data Integration for Patterns feature will allow you to write patterns that pull in data from external databases (for example, your existing asset database) and annotate the Foundation model with that information.

In the example pattern below, the lookup table People contains information on people, and the table Ownership relates hosts to the people that perform different roles for that host.

The pattern triggers whenever a host is created or updated, uses the hostname to lookup the people in the Ownership table, and makes the appropriate relationships to the people. If you modify the pattern (be sure the change the email address suffix!), upload and activate it, and rescan a host, then, browse to view the Host node and look at the “Ownership & Location” section. Links to this contact info should appear.

Hope that helps,
Tim

tpl 1.0 module BigCorp.Ownership;

metadata
    origin 
:= "Demo";
end metadata;

table People 1.0
    
// Name -> Username/Email (fragment), Phone, Role
    
'Frank Thomas' -> 'frank.thomas''+44 (0) 7777 123 123''Test Lab Support';
    
'Bill Smith' -> 'bill.smith''+44 (0) 7777 321 321''Development Infrastructure';
    
'John Harris' -> 'john.harris''+44 (0) 7777 987 987''Production Support';
    
'Andy Other' -> 'an.other''+44 (0) 7777 456 755''Production Support';

    
// TODO: use real data here ...

    
default -> '''''';
end table;     

table Ownership 1.0
    
    
// hostname -> Support Owner, IT Owner, Business Owner
    
    
'lon1d0200vm'  -> 'Frank Thomas''Bill Smith''John Harris';
    
'lon1d0201app' -> 'Andy Other''Frank Thomas''John Harris';
    
    
// TODO: use real data here ...

    
default -> '''''';
end table;     

pattern HostOwnership 1.0
    
'''Host Ownership rules'''

    
overview
        tags Demo
;
    
end overview;

    
triggers
        on host 
:= Host createdmodified where hostname exists;
    
end triggers;

    
body
        
// Get Ownership info
        
owners := Ownership[host.hostname];

        
// Support Owner
        
if owners[0] then
            name 
:= owners[0];

            
// Lookup Support Owner
            
owner := People[name];

            
// Get Support Owner (Person) node
            
person := model.Person(
                        
key := "Person/&#xna;me%",
                        
name := name,
                        
email := owner[0] "@mycompany.com",
                        
phone := owner[1],
                        
role := owner[2],
                        
username := owner[0] );

            
// Link Host to Support Owner
            
model.rel.Ownership(SupportOwner := personOwnedItem := host);
        
end if;

        
// IT Ownership
        
if owners[1] then
            name 
:= owners[1];

            
// Lookup IT Owner
            
owner := People[name];

            
// Get IT Owner (Person) node
            
person := model.Person(
                        
key := "Person/&#xna;me%",
                        
name := name,
                        
email := owner[0] "@mycompany.com",
                        
phone := owner[1],
                        
role := owner[2],
                        
username := owner[0] );

            
// Link Host to IT Owner
            
model.rel.Ownership(ITOwner := personOwnedItem := host);
        
end if;

        
// Business Ownership
        
if owners[2] then
            name 
:= owners[2];

            
// Lookup Business Owner
            
owner := People[name];

            
// Get Business Owner (Person) node
            
person := model.Person(
                        
key := "Person/&#xna;me%",
                        
name := name,
                        
email := owner[0] "@mycompany.com",
                        
phone := owner[1],
                        
role := owner[2],
                        
username := owner[0] );

            
// Link Host to Business Owner
            
model.rel.Ownership(BusinessOwner := personOwnedItem := host);
        
end if;
    
end body;

end pattern

Profile
 
 
Posted: 21 October 2008 09:27 AM   [ Ignore ]   [ # 4 ]  
Administrator
Avatar
RankRankRankRank
Total Posts:  132
Joined  2008-01-25

Note that Tim’s example uses the existing Person nodes and Ownership roles already defined in the Foundation model for this purpose.

You can view the model in the product by going Administration -> View Taxonomy. From here you can view the active taxonomy inline as a HTML page, or download a summary diagram.

If you don’t have the product to hand then there is a copy of the 7.1.5 model as part of the Power Tips.

Profile
 
 
Posted: 21 October 2008 05:27 PM   [ Ignore ]   [ # 5 ]  
Jr. Member
RankRank
Total Posts:  46
Joined  2008-10-17

t.moreton@tideway.com - 21 October 2008 09:05 AM
You can put the lookup table directly into the pattern. I’ve given an example below. In Foundation 7.2, the Data Integration for Patterns feature will allow you to write patterns that pull in data from external databases (for example, your existing asset database) and annotate the Foundation model with that information.

In the example pattern below, the lookup table People contains information on people, and the table Ownership relates hosts to the people that perform different roles for that host.

The pattern triggers whenever a host is created or updated, uses the hostname to lookup the people in the Ownership table, and makes the appropriate relationships to the people. If you modify the pattern (be sure the change the email address suffix!), upload and activate it, and rescan a host, then, browse to view the Host node and look at the “Ownership & Location” section. Links to this contact info should appear.

Hope that helps,
Tim

Tim, thanks for the example. That is exactly what I was wanting to figure out. This certainly doesn’t appear to be a very user friendly way of maintaining the contact information. Importing a list of contacts sounds reasonable, because that information is likely to exist in another location already. Is there not a way to select two CIs in the UI and click a button to assign a relationship?

Profile
 
 
Posted: 22 October 2008 09:51 AM   [ Ignore ]   [ # 6 ]  
Newbie
Rank
Total Posts:  4
Joined  2008-02-28
wearnest@teleflora.com - 21 October 2008 05:27 PM
This certainly doesn’t appear to be a very user friendly way of maintaining the contact information. Importing a list of contacts sounds reasonable, because that information is likely to exist in another location already. Is there not a way to select two CIs in the UI and click a button to assign a relationship?

At present we’ve chosen not to allow administrators to make such relationships manually — the reason being maintainability. Foundation focuses on providing an accurate record of what is out there in your IT infrastructure by building a model based on real observation and the patterns you’ve configured — this will include in future pulling in extra information from other sources of record, such as databases (in a few lines of TPL).

Our experience in the past is that creating links manually (such as to identify ownership) rather than encoding rules to create them in patterns, means that the accuracy of those relationships decays over time. When Foundation discovers that the properties of a host (e.g its name, its OS, its installed software changes), patterns allow it to reason about whether it needs to update those links. Manual links stick — and having that link there when we can’t reason about whether it is still the case or not impacts on how trustworthy users consider Tideway’s data to be. You’ll have seen that data provenance is an important part of how we give confidence in the accuracy of our model.

Further, writing patterns to do this job this rarely involves writing many unwieldy lookup tables, as my example may have suggested. Many customers already encode department or location in hostnames, for example, or the presence of a particular bit of software can be used to associate a host with a particular support team. We find taking this approach is usually simple and effective.

Tim

Profile
 
 
Posted: 23 October 2008 11:05 PM   [ Ignore ]   [ # 7 ]  
Jr. Member
RankRank
Total Posts:  46
Joined  2008-10-17

I understand the logical argument for basing these relationships on observation rather than manual entry. It is in theory a very good design. However, this assumes that every piece of data already exists in an electronic format somewhere and is often not a true assumption.

One of our primary needs in a CMDB solution is to have a centrally accessible location for data regarding our IT systems and how they relate to our business processes. In many cases, a federated model of data discovery works great, but there are many additional pieces of data, which do not already exist in another system, and which a CMDB solution should be able to provide an interface for entering/maintaining this data. These data points may be as simple as attributes added to discovered nodes or other node types with their own attributes as well.

I’m having trouble understanding why some nodes (such as those listed under the Administration section of the Administration tab, like Organizational Unit and Location) allow manual entry, but others do not. This seems to go against the flexibility described in the Foundation Datastore article. Also, if some nodes can be manually entered and maintained within the UI, why not relationships as well? Also, why not provide the ability to manually edit nodes and attributes within the UI? After all, the history of the node is being tracked.

Perhaps the UI should be smarter, so that it is able to trigger based on manual edits and dynamically build a pattern to suit that edit?

Profile