hope I got the merge wright...
[monitor.git] / tools / extra / template.py
diff --git a/tools/extra/template.py b/tools/extra/template.py
new file mode 100644 (file)
index 0000000..430d7cf
--- /dev/null
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+
+
+from monitor.wrapper import emailTxt
+class Type:
+       def __init__(self, value):
+               self.value = value
+       def name(self):
+               return self.__class__.__name__
+       
+class Is(Type): pass
+class Match(Type): pass
+class ListMatch(Type): pass
+class FilledIn(Type): pass
+class PortOpen(Type): pass
+class NodesUp(Type): pass
+
+# a failed constraint leads to a message-escelation process.
+# so, define a constraint, which defines the set of nodes it operates on, the
+#        message to send if it fails, and maybe a thank you message when it's
+#        satisfied (if previously failed.).
+standardnode = {
+       'membership' : [ { 'plcnode/nodegroups' : Match('.*') } ],
+       'site'       : [ { 'nodes'    : NodesUp(2), } ],
+       'node'       : { 'constraint' : 
+                                                               [ {     'state'    : Match('BOOT'),
+                                                               'kernel'   : Match('2.6.22.19-vs2.3.0.34'), } ],
+                                        'failed_message'       : [ emailTxt.mailtxt.newdown ],
+                                        'resolved_message'     : [ emailTxt.mailtxt.newthankyou ],
+                                       },
+       'pcu'            : { 
+                                        'constraint' : [ {     'hostname' : FilledIn(True),
+                                                                               'password' : FilledIn(True), },
+                                                                        {      'ip' : FilledIn(True),
+                                                                               'password' : FilledIn(True), },
+                                                                       ],
+                                        'failed_message'       : [ emailTxt.mailtxt.pcudown ],
+                                        'resolved_message'     : [ emailTxt.mailtxt.pcuthankyou ],
+                                       },
+}
+
+dc7800 = {
+       # if membership constraint it true, then apply the other constraints.
+       'membership'    : [ { 'plcnode/nodegroups' : ListMatch('DC7800Deployment'), } ],
+
+       'pcu'                   : { 'constraint' : [ { 'hostname'       : FilledIn(True),
+                                                                       'ip'            : FilledIn(True),
+                                                                       'password'      : FilledIn(True),
+                                                                       'model'         : Match('AMT'),
+                                                                       'username'      : Match('admin'),
+                                                                       'portstatus': PortOpen(16992),
+                                                                       'reboot'        : Is(0),
+                                                                },
+                                                                {      'hostname'      : FilledIn(True),
+                                                                       'ip'            : FilledIn(True),
+                                                                       'password'      : FilledIn(True),
+                                                                       'reboot'        : Is(0),
+                                                                       #'valid'                : Is(True),
+                                                                },],
+                                        'failed_message'       : [ emailTxt.mailtxt.donation_nopcu],
+                                        'resolved_message'     : [ emailTxt.mailtxt.pcuthankyou ],
+                                        },
+       'node'       : { 'constraint' : 
+                                                               [ {     'state'    : Match('BOOT'),
+                                                                       'kernel'   : Match('2.6.22.19-vs2.3.0.34'), } ],
+                                        'failed_message'       : [ emailTxt.mailtxt.donation_down],
+                                        'resolved_message'     : [ emailTxt.mailtxt.newthankyou ],
+                               },
+}
+
+#
+# data source, { constraints ... value } 
+# action on failure of constraint
+# information about why it failed
+# # stop action if constraint is satisfied at a later time.
+# kind of like asynchronous constraint solving.
+# or stored procedures.