Changes between Version 11 and Version 12 of CloudPlugin


Ignore:
Timestamp:
Jan 28, 2011, 11:26:19 PM (4 years ago)
Author:
robguttman
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CloudPlugin

    v11 v12  
    104104
    105105== Example ==
    106 
    107 trac.ini config ...
    108 
    109 [cloud]
     106Each supported AWS resource is configured independently in a separate section in {{{trac.ini}}}.  (The plugin currently only supports ec2 instances.)  Each section must be named as follows:
     107{{{
     108[cloud.<resource_name>]
    110109...
     110}}}
     111
     112For example, a section named {{{[cloud.instance]}}} defines a resource named {{{instance}}}.  The resource name is used in the uri, so for example, this {{{instance}}} resource would be accessed at:
     113{{{
     114http://trac.domain.com/cloud/instance
     115}}}
     116
     117You can name resources whatever you want as long as they're unique.
     118
     119=== Instances ===
     120Here's how to configure ec2 instance resources.  It's best to explain the configuration piecemeal:
     121
     122{{{
     123[cloud.instance]
     124class = Ec2Instance
     125title = Instances
     126order = 1
     127label = Instance
     128description = AWS EC2 instances.
     129}}}
     130
     131 * {{{class}}} - must map to the exact python class name for that instance.  For ec2 instances, it's {{{Ec2Instance}}}.
     132 * {{{title}}} - used in the sub-navigation (aka contextual) menu - see screenshot above.
     133 * {{{order}}} - defines the order in the contextual menu (much like custom field ordering).
     134 * {{{label}}} - used in several views to describe a single on of these resources.
     135 * {{{description}}} - used in the grid view - see screenshot above.
     136
     137Now it gets a bit more intense:
     138
     139{{{
     140[cloud.instance]
     141..
     142fields = name < NameHandler, ec2.instance_id as Instance ID, run_list_ as Roles < RunListHandler, created_by as Created By < AuthorHandler, created_at_ as Created At < EpochHandler, ohai_time_ as Last Check-in < AgoEpochHandler, ec2.instance_type as Instance Type, ec2.hostname as Private Hostname, ec2.public_hostname_ as Public Hostname < SshHandler, ec2.placement_availability_zone as Availability Zone, ec2.ami_id as Image ID, supervisord.ssl_port_ as supervisord < HttpsHandler
     143}}}
     144
     145Whoa!  The {{{fields}}} option is a list if those chef attributes (aka fields) where you want to provide either a display name, a format handler, or both.  So for example, {{{ec2.instance_type as Instance Type}}} above will use 'Instance Type' as the name of the {{{ec2.instance_type}}} attribute's the column or field.  To define a display name (or label) for an attribute, list the attribute name followed by {{{ as }}} followed by the display name.
     146
     147Only slightly more complicated are handlers to format fields.  So for example, {{{ohai_time_ as Last Check-in < AgoEpochHandler}}} has a display name as we've seen plus the {{{< AgoEpochHandler}}} directs the plugin to use a specific handler to format the {{{ohai_time}}} field's value.  In this example, the {{{AgoEpochHandler}}} handler converts an epoch to a string format such as "0:08:36 ago" meaning "8 minutes and 36 seconds ago" as shown in the screenshot above.  But wait, what's up with the underscore after the {{{ohai_time_}}}?  In most cases when using a handler, you should postfix the field's name with an underscore ({{{_}}}) so that the re-formatted value doesn't get written back to the field's value.  ''[I'm likely to get rid of the underscore business to make it simpler, but that's what it is for now. - rhg]''  See the {{{handlers.py}}} file for a full list of provided field handlers.
     148
     149{{{
     150grid_index = node
     151grid_columns = name, run_list_, created_by, ohai_time_, ec2.instance_type, ec2.placement_availability_zone
     152grid_sort = created_at_
     153grid_asc = 0
     154}}}
     155
     156The {{{grid*}}} options configure the grid view of the resource - i.e., the view shown in the screenshot above:
     157 * {{{grid_index}}} - must map to the chef search index name.  For ec2 instances, this is {{{node}}}.
     158 * {{{grid_columns}}} - the list of chef attributes to display in order.  The column names will use any display names from {{{fields}}} and its cell values will be formatted using any handlers from {{{fields}}}.
     159 * {{{grid_sort}}} - the default sort attribute/field.  You can resort the grid by clicking on the column name.
     160 * {{{grid_asc}}} - the default sort direction.  You can change the sort direction by clicking on the same column name.
     161
     162{{{
     163crud_resource = nodes
     164crud_view = name, ec2.instance_id, run_list_, created_by, created_at_, ohai_time_, ec2.instance_type, ec2.hostname, ec2.public_hostname_, ec2.placement_availability_zone, ec2.ami_id, supervisord.ssl_port_
     165crud_new = run_list_||, created_by, ec2.instance_type|, ec2.ami_id|, ec2.placement_availability_zone|us-east-1a|us-east-1b|us-east-1c|us-east-1d
     166crud_edit = run_list_||, created_by, ec2.instance_type*, ec2.ami_id*, ec2.placement_availability_zone*
     167}}}
     168
     169The {{{crud_*}}} options configure aspects for creating, reading updating, and deleting (i.e., CRUD) the resource:
     170 * {{{crud_resource}}} - must map to the chef resource name.  For ec2 instances, this is {{{nodes}}}.
     171 * {{{crud_view}}} - the list of chef attributes to display in order.  The field names will use any display names from {{{fields}}} and its cell values will be formatted using any handlers from {{{fields}}}.
     172 * {{{crud_new}}} and {{{crud_edit}}} - the list of augmented chef attributes to display for editing in order.  The field names will use any display names from {{{fields}}} and its cell values will be formatted using any handlers from {{{fields}}}.
     173
     174The field names in {{{crud_new}}} and {{{crud_edit}}} are augmented to provide additional metadata so the plugin knows how to properly configure the form.  So for example:
     175{{{
     176ec2.placement_availability_zone|us-east-1a|us-east-1b|us-east-1c|us-east-1d
     177}}}
     178
     179The pipe ({{{|}}}) after the field name indicates that the form should use a select/dropdown menu for this field.  If the select/dropdown should support multiple selections, then use two pipes instead of one as in {{{run_list_||}}}.  The remainder of the definition is a pipe-delimited list of options for this field (much like how custom field options are defined).  If there's no list of options, then the plugin will search a chefserver data bag of the same name as the field for the list of options.  So for example, {{{ec2.instance_type|}}} will direct the plugin to search for a data bag on the chefserver named {{{ec2_instance_type}}} (periods are invalid and so are replaced with underscores).  The individual data bag items should be formatted like this:
     180{{{
     181{
     182  "id": "m1_large",
     183  "value": "m1.large",
     184  "name": "m1.large - Large (64-bit)",
     185  "order": 3
     186}
     187}}}
     188
     189The {{{name}}} will be used as the option's name and the {{{value}}} will be used as the option's value.  If {{{order}}} fields are provided, then it will be used to order the options accordingly (much like custom field ordering).
     190
     191Lastly, if you want to have a field displayed but as read-only, then the field name should be immediately postfixed with an asterisk as in {{{ec2.ami_id*}}} above.
     192
    111193
    112194== Recent Changes ==