| 1 | [[TOC(Software/bAM/*, depth=3)]] |
| 2 | |
| 3 | |
| 4 | == Inventory Aggregate Manager == |
| 5 | |
| 6 | Inventory AM consist of a database with a [http://mytestbed.net/projects/omf/wiki/NewInventoryDesign database schema] that can hold information for arbitrary type of resource and a set of services that are used to manage it |
| 7 | |
| 8 | ==== Resources and Relationships ==== |
| 9 | |
| 10 | Resources are physical entities in a testbed that are assumed to be named with fully qualified domain name (fqdn) (for resources that can have one) or with arbitrary string (for resources that are not IP addressable)and can have any number of attributes. Resource can be in relation with any other resource with, so far, 2 types of relationships: |
| 11 | |
| 12 | ||= Type =||= Relationship =||= Description =|| |
| 13 | || 1 || belong_to || The subject resource belongs to the object resource || |
| 14 | || 2 || installed_in || The subject resource is installed in the object resource || |
| 15 | |
| 16 | Typically, type 1 is used to designate that the node belongs to a testbed, and type 2 for devices that are installed into a node (at the moment type of relationship is not used for any particular function by the inventory). |
| 17 | |
| 18 | To facilitate better classification, inventory services are using string based '''resource type'''. So far, defined resources types are: testbed, node and device (these types are only used by other services). |
| 19 | |
| 20 | === Attributes === |
| 21 | |
| 22 | Attributes are name-value pairs of strings. Attribute names are prefixed to support globbing. |
| 23 | |
| 24 | Attribute prefixes: |
| 25 | |
| 26 | * CM_ - Attributes used by the CMC AM ( CM_TYPE, CM_IP, CM_PORT, CM_USER_NAME, CM_PASSWORD ) |
| 27 | * INF_ - Core infrastructure attributes used by the PXE and Frisbee service ( INF_CONTROL_IP ) |
| 28 | * INV_ - Attributes gathered by the inventory process |
| 29 | |
| 30 | |
| 31 | |
| 32 | === Inventory Service Group === |
| 33 | |
| 34 | {{{ |
| 35 | <services> |
| 36 | <serviceGroup prefix="/inventory" name="inventory"> |
| 37 | <info></info> |
| 38 | <service name="attribute_add"></service> |
| 39 | <service name="attribute_delete"></service> |
| 40 | <service name="attribute_list"></service> |
| 41 | <service name="attribute_listChildren"></service> |
| 42 | <service name="attribute_modify"> |
| 43 | <service name="relation_add"></service> |
| 44 | <service name="resource_add"></service> |
| 45 | <service name="resource_delete"></service> |
| 46 | <service name="resource_list"></service> |
| 47 | <service name="topology_add"></service> |
| 48 | <service name="topology_delete"></service> |
| 49 | <service name="topology_list"></service> |
| 50 | <service name="topology_show"></service> |
| 51 | </serviceGroup> |
| 52 | </services> |
| 53 | }}} |
| 54 | |
| 55 | ==== Resource Services ==== |
| 56 | |
| 57 | {{{ |
| 58 | <service name="resource_add"> |
| 59 | <info>Add resource</info> |
| 60 | <args> |
| 61 | <arg name="name" isRequired="true" value="name"> |
| 62 | <info>name of the resource or fully qualified resource name</info> |
| 63 | </arg> |
| 64 | <arg name="type" isRequired="true" value="type"> |
| 65 | <info>type of the resource</info> |
| 66 | </arg> |
| 67 | <arg name="xml" isRequired="false" value="[xml]"> |
| 68 | <info>xml-encoded hash of resource parameters</info> |
| 69 | </arg> |
| 70 | </args> |
| 71 | </service> |
| 72 | }}} |
| 73 | |
| 74 | {{{ |
| 75 | <service name="resource_delete"> |
| 76 | <info>Remove set of resources</info> |
| 77 | <args> |
| 78 | <arg name="set" isRequired="true" value="set"> |
| 79 | <info>set of resource names</info> |
| 80 | </arg> |
| 81 | </args> |
| 82 | </service> |
| 83 | }}} |
| 84 | {{{ |
| 85 | <service name="resource_list"> |
| 86 | <info>Get all available resources of given type that belongs to given parent resource with all attributes</info> |
| 87 | <args> |
| 88 | <arg name="parent" isRequired="false" value="[parent]"> |
| 89 | <info>Fully qualified resource name</info> |
| 90 | </arg> |
| 91 | <arg name="type" isRequired="false" value="[type]"> |
| 92 | <info>Type name, currently suported testbed, node and device</info> |
| 93 | </arg> |
| 94 | </args> |
| 95 | </service> |
| 96 | }}} |
| 97 | |
| 98 | {{{ |
| 99 | <service name="relation_add"> |
| 100 | <info>Add relatin between two resources</info> |
| 101 | <args> |
| 102 | <arg name="parent" isRequired="true" value="rn"> |
| 103 | <info>parent resource name</info> |
| 104 | </arg> |
| 105 | <arg name="child" isRequired="true" value="rn"> |
| 106 | <info>child resource name</info> |
| 107 | </arg> |
| 108 | </args> |
| 109 | </service> |
| 110 | }}} |
| 111 | === Usage Example === |
| 112 | |
| 113 | Create tesbed, add node to it and add basic attributes |
| 114 | |
| 115 | {{{ |
| 116 | |
| 117 | }}} |
| 118 | |