aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin W. Smith <benjaminwarfield@just-another.net>2009-11-06 19:20:51 -0500
committerBenjamin W. Smith <benjaminwarfield@just-another.net>2009-11-06 19:20:51 -0500
commit077d64b5b49673b79cd99b9abc410f5b486a9e4c (patch)
tree26eef49079f8f08d29721238cda2c3188c9e1f98
parentd7b33833bc2a81e68d98a7fd6c0c22e75de53817 (diff)
parentda49c0fa6cfeb5e2f61c2ed7fc2ac1a90af70b45 (diff)
downloadmrbelvedere-077d64b5b49673b79cd99b9abc410f5b486a9e4c.tar.bz2
mrbelvedere-077d64b5b49673b79cd99b9abc410f5b486a9e4c.tar.xz
mrbelvedere-077d64b5b49673b79cd99b9abc410f5b486a9e4c.zip
Merge everything.
-rw-r--r--mrbelvedere_dsl_thoughts.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/mrbelvedere_dsl_thoughts.py b/mrbelvedere_dsl_thoughts.py
new file mode 100644
index 0000000..3310e65
--- /dev/null
+++ b/mrbelvedere_dsl_thoughts.py
@@ -0,0 +1,91 @@
1# Is this *too* flexible?
2# Am I being naive? Doing it wrong?
3
4from contextlib import contextmanager
5
6class MissingParameterError(Exception):
7
8 def __init__(self, value):
9 self.parameter = value
10
11 def __str__(self):
12 return repr(self.parameter)
13
14# Something like this for the template backend stuff
15class Template(object):
16 def __init__(self, template_name):
17 self.template_name = template_name
18 self.arguments = {}
19
20 def __setattr__(self, attr, value):
21 if attr in ("arguments", "template_name"):
22 object.__setattr__(self, attr, value)
23 else:
24 self.arguments[attr] = value
25
26 def build(self):
27 print "Building template %s with arguments: %s" % (self.template_name, self.arguments)
28
29 # Do some validation checking on certain arguments, execute code as needed
30 # Delete arbitrairy arguments that could be created (but inform the user)
31
32# Something like this for the service backend stuff
33class Service(object):
34 def __init__(self, service_name):
35 self.service_name = service_name
36 self.arguments = {}
37
38 def __setattr__(self, attr, value):
39 if attr in ("arguments", "service_name"):
40 object.__setattr__(self, attr, value)
41 else:
42 self.arguments[attr] = value
43
44 def build(self):
45 print "Building service %s with arguments: %s" % (self.service_name, self.arguments)
46
47 # Do some validation checking on certain arguments, execute code as needed
48 # Delete arbitrairy arguments that could be created (but inform the user)
49
50# Context manager to kick off the dirty work
51@contextmanager
52def create_template(name = None):
53
54 if not name:
55 raise MissingParameterError("Missing template name")
56
57 template = Template(name)
58 yield template
59 template.build()
60
61# Context manager to kick off the dirty work
62@contextmanager
63def create_service(name = None):
64
65 if not name:
66 raise MissingParameterError("Missing service name")
67
68 service = Service(name)
69 yield service
70 service.build()
71
72# Services/Templates would look something like this:
73
74with create_service(name = "network") as service:
75
76 service.description = "Define network stuff"
77
78 service.provides = ['network_guts']
79
80
81with create_template(name = "test_template") as webserver_template:
82
83 webserver_template.desciption = "Builds web server"
84
85 webserver_template.provides = ['webserver']
86
87 webserver_template.needs = ['services.network']
88
89 webserver_template.accounts = ['bsmith', 'mcrute']
90
91