Jump to: navigation, search

Satori/OpinionsProposal

< Satori
Revision as of 16:27, 19 February 2014 by Caleb Groom (talk | contribs) (Add link to blueprint)

Specification for Blueprint https://blueprints.launchpad.net/satori/+spec/poc-resource-opinions

As Satori gathers information about a network location it accumulates a list of resources that are related. Some examples of related resources:

A user-provided Python module should be loaded at runtime that will allow the user to add "opinions" to the resources based on their attributes.

There should not be any opinions built into Satori as opinions will most likely include business logic that are not universally accepted.

Proposed Opinion Data Structure

 opinions = {
 	'opinion_group1': {
 		'opinion1': {
			'title': 'My Title',
			'description': 'My description',
			'status': 'Warning'
		}
	}
 }
 

Example Use Case

Bob expects to renew SSL certificates within 30 days of their expiration and does not want his operations teams to deploy instances with flavor ID 4 into production. His Satori discovery on `https://domain.com` reveals that the SSL certificate is not going to expire soon but the Nova flavor is a violation of his best practices.

His opinions module would alter Satori's resource data and the resulting mashup would look like the following:

 resources = {
	'0': {
		'type': 'ssl-certificate',
		'domain': 'domain.com',
		'expires': datetime(2020, 1, 1),
		'opinions': {
			'certificate': {
				'expiration': {
					'title': 'SSL Renewal Check',
					'description': 'domain.com expires in 2000 days',
					'status': 'Ok'
				}
			}
		}
	'1',
		'type': 'nova-instance',
		'flavor': 4,
		'region': 'westcoast',
		'opinions': {
			'nova': {
				'flavor': {
					'title': 'Production Server Size',
					'description': 'Flavor ID 4 is too small for production use-cases'
					'status': 'Warning'
				}
			}
		}
	}
 }

List of Valid Statuses

Ok
Warning
Error

Command line usage

$ satori https://domain.com --opinions myopinions.production

Proposed Implementation Plan

  1. In a separate repo, create an opinions module template
  2. Alter `satori/discovery.py run()` to load the Python module provided on the command line.
  3. Call the provided module's opinions() function for every resource and append the data to the resource record.
  4. Update the shell code to output the opinions data.