12
12
__metaclass__ = type
16
sys.path.append('/usr/share/maas')
18
from getpass import getuser
20
from formencode import Schema
21
from formencode.validators import (
27
15
from provisioningserver.amqpclient import AMQFactory
28
16
from provisioningserver.cobblerclient import CobblerSession
29
from provisioningserver.pxe.tftppath import locate_tftp_path
17
from provisioningserver.config import Config
30
18
from provisioningserver.remote import ProvisioningAPI_XMLRPC
31
19
from provisioningserver.services import (
110
97
raise NotImplementedError()
113
class ConfigOops(Schema):
114
"""Configuration validator for OOPS options."""
116
if_key_missing = None
118
directory = String(if_missing=b"")
119
reporter = String(if_missing=b"")
121
chained_validators = (
122
RequireIfPresent("reporter", present="directory"),
126
class ConfigBroker(Schema):
127
"""Configuration validator for message broker options."""
129
if_key_missing = None
131
host = String(if_missing=b"localhost")
132
port = Int(min=1, max=65535, if_missing=5673)
133
username = String(if_missing=getuser())
134
password = String(if_missing=b"test")
135
vhost = String(if_missing="/")
138
class ConfigCobbler(Schema):
139
"""Configuration validator for connecting to Cobbler."""
141
if_key_missing = None
144
add_http=True, require_tld=False,
145
if_missing=b"http://localhost/cobbler_api",
147
username = String(if_missing=getuser())
148
password = String(if_missing=b"test")
151
class ConfigTFTP(Schema):
152
"""Configuration validator for the TFTP service."""
154
if_key_missing = None
156
root = String(if_missing=locate_tftp_path())
157
port = Int(min=1, max=65535, if_missing=5244)
159
add_http=True, require_tld=False,
160
if_missing=b"http://localhost:5243/api/1.0/pxeconfig",
164
class Config(Schema):
165
"""Configuration validator."""
167
if_key_missing = None
169
interface = String(if_empty=b"", if_missing=b"127.0.0.1")
170
port = Int(min=1, max=65535, if_missing=5241)
171
username = String(not_empty=True, if_missing=getuser())
172
password = String(not_empty=True)
173
logfile = String(if_empty=b"pserv.log", if_missing=b"pserv.log")
175
broker = ConfigBroker
176
cobbler = ConfigCobbler
180
def parse(cls, stream):
181
"""Load a YAML configuration from `stream` and validate."""
182
return cls.to_python(yaml.safe_load(stream))
185
def load(cls, filename):
186
"""Load a YAML configuration from `filename` and validate."""
187
with open(filename, "rb") as stream:
188
return cls.parse(stream)
191
100
class Options(usage.Options):
192
101
"""Command line options for the provisioning server."""