Difference between revisions of "Satori/OpinionsProposal"
Caleb Groom (talk | contribs) m (→Example Use Case) |
Caleb Groom (talk | contribs) m (→Example Use Case) |
||
Line 72: | Line 72: | ||
</nowiki> | </nowiki> | ||
− | Note: The type | + | '''Note''': The type field contains Heat's [http://docs.openstack.org/developer/heat/template_guide/openstack.html resource types]. Heat does not currently have Barbican resources. |
== List of Valid Statuses == | == List of Valid Statuses == |
Revision as of 19:03, 4 March 2014
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:
- DNS information for the netloc
- Nova host with an IP that the netloc resolves to
- SSL certificate of netloc
- Neutron LBaaS that the netloc resolves to (not yet implemented in Satori)
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.
Contents
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 = { 'ssl-certificate://domain.com': { 'type': 'OS::Barbican::SSLCertificate', 'domain': 'domain.com', 'expires': datetime(2020, 1, 1), 'opinions': { 'certificate': { 'expiration': { 'title': 'SSL Renewal Check', 'description': 'domain.com expires in 2000 days', 'status': 'Ok' } } } 'https://nova.api.somecloud.com/v2/111222/servers/d9119040-f767-414', 'type': 'OS::Nova::Server', 'flavor': 4, 'region': 'westcoast', 'opinions': { 'nova': { 'flavor': { 'title': 'Production Server Size', 'description': 'Flavor ID 4 is too small for production use-cases' 'status': 'Warning' } } } } }
Note: The type field contains Heat's resource types. Heat does not currently have Barbican resources.
List of Valid Statuses
Ok Warning Error
Command line usage
$ satori https://domain.com --opinions myopinions.production
Proposed Implementation Plan
- Write example built-in opinions.
- Create `satori/opinions/examples.py`
- Opinion 1 - Nova: Warn if the hostname of a discovered nova instance is not a FQDN.
- Opinion 2: - DNS: Warn if their are fewer than two authoritative nameservers.
- In a separate repo, create a 3rd party opinions module template
- Alter `satori/discovery.py run()` to load the built-in example opinions if the `--opinions satori.opinions` command is provided. This should also work for the 3rd party opinions module with `--opinions mypython.module.name`.
- Call the provided module's opinions() function for every resource and append the data to the resource record.
- Update the shell code to output the opinions data.