Merged iteration3 branch to master. Fixed pep8.

This commit is contained in:
Timur Nurlygayanov 2013-03-15 11:39:11 +04:00
commit cf928abf09
17 changed files with 278 additions and 106 deletions

View File

@ -61,20 +61,6 @@ def datacenters_deploy(request, datacenter_id):
return windcclient(request).sessions.deploy(datacenter_id, session_id) return windcclient(request).sessions.deploy(datacenter_id, session_id)
def datacenters_get_status(request, datacenter_id):
sessions = windcclient(request).sessions.list(datacenter_id)
for session in sessions:
if session.state == 'deployed':
windcclient(request).sessions.delete(datacenter_id, session.id)
sessions = windcclient(request).sessions.list(datacenter_id)
if sessions:
session = sessions[0]
else:
session = windcclient(request).sessions.configure(datacenter_id)
return session.state
def services_create(request, datacenter, parameters): def services_create(request, datacenter, parameters):
session_id = windcclient(request).sessions.list(datacenter)[0].id session_id = windcclient(request).sessions.list(datacenter)[0].id
if parameters['service_type'] == 'Active Directory': if parameters['service_type'] == 'Active Directory':
@ -106,8 +92,12 @@ def services_list(request, datacenter_id):
return services return services
def services_get(request, datacenter, service_id): def services_get(request, datacenter_id, service_id):
return windcclient(request).services.get(datacenter, service_id) services = services_list(request, datacenter_id)
for service in services:
if service.id is service_id:
return service
def services_delete(request, datacenter_id, service_id): def services_delete(request, datacenter_id, service_id):

View File

@ -133,38 +133,40 @@ class UpdateDCRow(tables.Row):
ajax = True ajax = True
def get_data(self, request, datacenter_id): def get_data(self, request, datacenter_id):
datacenter = api.windc.datacenters_get(request, datacenter_id) return api.windc.datacenters_get(request, datacenter_id)
datacenter.status = api.windc.datacenters_get_status(request,
datacenter_id)
return datacenter class UpdateServiceRow(tables.Row):
ajax = True
def get_data(self, request, service_id):
link = request.__dict__['META']['HTTP_REFERER']
datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1]
return api.windc.services_get(request, datacenter_id, service_id)
STATUS_DISPLAY_CHOICES = ( STATUS_DISPLAY_CHOICES = (
('deploying', 'Deploy in progress'), ('draft', 'Ready to deploy'),
('open', 'Ready to deploy') ('pending', 'Wait for configuration'),
('inprogress', 'Deploy in progress'),
('finished', 'Active')
) )
def get_datacenter_status(datacenter):
return datacenter.status
class WinDCTable(tables.DataTable): class WinDCTable(tables.DataTable):
STATUS_CHOICES = ( STATUS_CHOICES = (
(None, True), (None, True),
('Ready to deploy', False), ('Ready to deploy', True),
('deploying', True), ('Active', True)
('deployed', True),
('ready', True),
('error', False),
) )
name = tables.Column('name', name = tables.Column('name',
link=('horizon:project:windc:services'), link=('horizon:project:windc:services'),
verbose_name=_('Name')) verbose_name=_('Name'))
status = tables.Column(get_datacenter_status, verbose_name=_('Status'), status = tables.Column('status', verbose_name=_('Status'),
status=True, status=True,
status_choices=STATUS_CHOICES, status_choices=STATUS_CHOICES,
display_choices=STATUS_DISPLAY_CHOICES) display_choices=STATUS_DISPLAY_CHOICES)
@ -173,7 +175,34 @@ class WinDCTable(tables.DataTable):
name = 'windc' name = 'windc'
verbose_name = _('Windows Data Centers') verbose_name = _('Windows Data Centers')
row_class = UpdateDCRow row_class = UpdateDCRow
status_columns = ['status']
table_actions = (CreateDataCenter,) table_actions = (CreateDataCenter,)
row_actions = (ShowDataCenterServices, DeleteDataCenter,
DeployDataCenter)
class WinServicesTable(tables.DataTable):
STATUS_CHOICES = (
(None, True),
('Ready to deploy', True),
('Active', True)
)
name = tables.Column('name', verbose_name=_('Name'),
link=('horizon:project:windc:service_details'),)
_type = tables.Column('service_type', verbose_name=_('Type'))
status = tables.Column('status', verbose_name=_('Status'),
status=True,
status_choices=STATUS_CHOICES,
display_choices=STATUS_DISPLAY_CHOICES)
class Meta:
name = 'services'
verbose_name = _('Services')
row_class = UpdateServiceRow
status_columns = ['status'] status_columns = ['status']
row_actions = (ShowDataCenterServices, DeleteDataCenter, row_actions = (ShowDataCenterServices, DeleteDataCenter,
DeployDataCenter) DeployDataCenter)

View File

@ -66,6 +66,10 @@ class Wizard(ModalFormMixin, SessionWizardView, generic.FormView):
parameters['configuration'] = 'standalone' parameters['configuration'] = 'standalone'
parameters['name'] = str(form_list[1].data.get('1-dc_name', parameters['name'] = str(form_list[1].data.get('1-dc_name',
'noname')) 'noname'))
# Fix Me in orchestrator
parameters['domain'] = parameters['name']
parameters['adminPassword'] = \ parameters['adminPassword'] = \
str(form_list[1].data.get('1-adm_password', '')) str(form_list[1].data.get('1-adm_password', ''))
dc_count = int(form_list[1].data.get('1-dc_count', 1)) dc_count = int(form_list[1].data.get('1-dc_count', 1))
@ -87,11 +91,10 @@ class Wizard(ModalFormMixin, SessionWizardView, generic.FormView):
dc_pass = form_list[1].data.get('1-domain_user_password', '') dc_pass = form_list[1].data.get('1-domain_user_password', '')
parameters['name'] = str(form_list[1].data.get('1-iis_name', parameters['name'] = str(form_list[1].data.get('1-iis_name',
'noname')) 'noname'))
parameters['credentials'] = {'username': 'Administrator', parameters['credentials'] = {'username': 'Administrator',
'password': password} 'password': password}
parameters['domain'] = {'name': str(domain), parameters['domain'] = str(domain)
'username': str(dc_user),
'password': str(dc_pass)}
parameters['location'] = 'west-dc' parameters['location'] = 'west-dc'
parameters['units'] = [] parameters['units'] = []
@ -153,7 +156,6 @@ class WinServices(tables.DataTableView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(WinServices, self).get_context_data(**kwargs) context = super(WinServices, self).get_context_data(**kwargs)
data = self.get_data()
context['dc_name'] = self.dc_name context['dc_name'] = self.dc_name
return context return context
@ -167,7 +169,7 @@ class WinServices(tables.DataTableView):
services = [] services = []
exceptions.handle(self.request, exceptions.handle(self.request,
_('Unable to retrieve list of services for ' _('Unable to retrieve list of services for '
'data center "%s".') % dc_id) 'data center "%s".') % self.dc_name)
return services return services

View File

@ -9,10 +9,10 @@ paste.filter_factory = portas.api.middleware.context:ContextMiddleware.factory
[filter:authtoken] [filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 172.18.79.73 auth_host = localhost
auth_port = 35357 auth_port = 35357
auth_protocol = http auth_protocol = http
admin_tenant_name = admin admin_tenant_name = admin
admin_user = admin admin_user = admin
admin_password = swordfish admin_password = password
signing_dir = /tmp/keystone-signing-portas signing_dir = /tmp/keystone-signing-portas

View File

@ -28,6 +28,6 @@ reports_queue = task-reports
host = localhost host = localhost
port = 5672 port = 5672
use_ssl = false use_ssl = false
userid = guest userid = keero
password = guest password = keero
virtual_host = / virtual_host = keero

View File

@ -1,12 +1,16 @@
from portas.db.models import Session from portas.db.models import Session, Environment, Status
from portas.db.session import get_session from portas.db.session import get_session
def get_draft(session_id): def get_draft(environment_id=None, session_id=None):
unit = get_session() unit = get_session()
session = unit.query(Session).get(session_id) #TODO: When session is deployed should be returned env.description
if session_id:
return session.description session = unit.query(Session).get(session_id)
return session.description
else:
environment = unit.query(Environment).get(environment_id)
return environment.description
def save_draft(session_id, draft): def save_draft(session_id, draft):
@ -14,4 +18,71 @@ def save_draft(session_id, draft):
session = unit.query(Session).get(session_id) session = unit.query(Session).get(session_id)
session.description = draft session.description = draft
session.save(unit) session.save(unit)
def get_env_status(environment_id, session_id):
status = 'draft'
unit = get_session()
if not session_id:
session = unit.query(Session).filter(
Session.environment_id == environment_id and Session.state.in_(['open', 'deploying'])).first()
if session:
session_id = session.id
else:
return status
session_state = unit.query(Session).get(session_id).state
reports_count = unit.query(Status).filter_by(environment_id=environment_id, session_id=session_id).count()
if session_state == 'deployed':
status = 'finished'
if session_state == 'deploying' and reports_count > 1:
status = 'pending'
draft = get_draft(environment_id, session_id)
if not 'services' in draft:
return 'pending'
def get_statuses(type):
if type in draft['services']:
return [get_service_status(environment_id, session_id, service) for service in
draft['services'][type]]
else:
return []
is_inprogress = filter(lambda item: item == 'inprogress',
get_statuses('activeDirectories') + get_statuses('webServers'))
if session_state == 'deploying' and is_inprogress > 1:
status = 'inprogress'
return status
def get_service_status(environment_id, session_id, service):
status = 'draft'
unit = get_session()
session_state = unit.query(Session).get(session_id).state
entities = [u['id'] for u in service['units']]
reports_count = unit.query(Status).filter(Status.environment_id == environment_id
and Status.session_id == session_id
and Status.entity_id.in_(entities)) \
.count()
if session_state == 'deployed':
status = 'finished'
if session_state == 'deploying' and reports_count == 0:
status = 'pending'
if session_state == 'deploying' and reports_count > 0:
status = 'inprogress'
return status

View File

@ -1,5 +1,5 @@
from portas import utils from portas import utils
from portas.api.v1 import save_draft, get_draft from portas.api.v1 import save_draft, get_draft, get_service_status
from portas.common import uuidutils from portas.common import uuidutils
from portas.openstack.common import wsgi, timeutils from portas.openstack.common import wsgi, timeutils
from portas.openstack.common import log as logging from portas.openstack.common import log as logging
@ -8,32 +8,32 @@ log = logging.getLogger(__name__)
class Controller(object): class Controller(object):
@utils.verify_session
def index(self, request, environment_id): def index(self, request, environment_id):
draft = get_draft(request.context.session) log.debug(_('ActiveDirectory:Index <EnvId: {0}>'.format(environment_id)))
if not draft.has_key('services'): draft = prepare_draft(get_draft(environment_id, request.context.session))
return dict()
if not draft['services'].has_key('activeDirectories'): for dc in draft['services']['activeDirectories']:
return dict() dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'activeDirectories': draft['services']['activeDirectories']} return {'activeDirectories': draft['services']['activeDirectories']}
@utils.verify_session @utils.verify_session
def create(self, request, environment_id, body): def create(self, request, environment_id, body):
draft = get_draft(request.context.session) log.debug(_('ActiveDirectory:Create <EnvId: {0}, Body: {1}>'.format(environment_id, body)))
draft = get_draft(session_id=request.context.session)
active_directory = body.copy() active_directory = body.copy()
active_directory['id'] = uuidutils.generate_uuid() active_directory['id'] = uuidutils.generate_uuid()
active_directory['created'] = timeutils.utcnow active_directory['created'] = str(timeutils.utcnow())
active_directory['updated'] = timeutils.utcnow active_directory['updated'] = str(timeutils.utcnow())
unit_count = 0 unit_count = 0
for unit in active_directory['units']: for unit in active_directory['units']:
unit_count += 1 unit_count += 1
unit['id'] = uuidutils.generate_uuid() unit['id'] = uuidutils.generate_uuid()
unit['name'] = 'dc{0}'.format(unit_count) unit['name'] = 'dc{0}{1}'.format(unit_count, active_directory['id'][:4])
draft = prepare_draft(draft) draft = prepare_draft(draft)
draft['services']['activeDirectories'].append(active_directory) draft['services']['activeDirectories'].append(active_directory)
@ -42,6 +42,8 @@ class Controller(object):
return active_directory return active_directory
def delete(self, request, environment_id, active_directory_id): def delete(self, request, environment_id, active_directory_id):
log.debug(_('ActiveDirectory:Delete <EnvId: {0}, Id: {1}>'.format(environment_id, active_directory_id)))
draft = get_draft(request.context.session) draft = get_draft(request.context.session)
draft['services']['activeDirectories'] = [service for service in draft['services']['activeDirectories'] if draft['services']['activeDirectories'] = [service for service in draft['services']['activeDirectories'] if
service['id'] != active_directory_id] service['id'] != active_directory_id]

View File

@ -1,4 +1,5 @@
from webob import exc from webob import exc
from portas.api.v1 import get_env_status
from portas.db.session import get_session from portas.db.session import get_session
from portas.db.models import Environment from portas.db.models import Environment
from portas.openstack.common import wsgi from portas.openstack.common import wsgi
@ -10,17 +11,23 @@ log = logging.getLogger(__name__)
class Controller(object): class Controller(object):
def index(self, request): def index(self, request):
log.debug(_("Display list of environments")) log.debug(_('Environments:List'))
#Only environments from same tenant as users should be shown #Only environments from same tenant as users should be shown
filters = {'tenant_id': request.context.tenant} filters = {'tenant_id': request.context.tenant}
session = get_session() session = get_session()
environments = session.query(Environment).filter_by(**filters) environments = session.query(Environment).filter_by(**filters)
environments = [env.to_dict() for env in environments]
return {"environments": [env.to_dict() for env in environments]} for env in environments:
env['status'] = get_env_status(env['id'], request.context.session)
return {"environments": environments}
def create(self, request, body): def create(self, request, body):
log.debug(_('Environments:Create <Body {0}>'.format(body)))
#tagging environment by tenant_id for later checks #tagging environment by tenant_id for later checks
params = body.copy() params = body.copy()
params['tenant_id'] = request.context.tenant params['tenant_id'] = request.context.tenant
@ -39,6 +46,8 @@ class Controller(object):
return environment.to_dict() return environment.to_dict()
def show(self, request, environment_id): def show(self, request, environment_id):
log.debug(_('Environments:Show <Id: {0}>'.format(environment_id)))
session = get_session() session = get_session()
environment = session.query(Environment).get(environment_id) environment = session.query(Environment).get(environment_id)
@ -46,9 +55,14 @@ class Controller(object):
log.info('User is not authorized to access this tenant resources.') log.info('User is not authorized to access this tenant resources.')
raise exc.HTTPUnauthorized raise exc.HTTPUnauthorized
return environment.to_dict() env = environment.to_dict()
env['status'] = get_env_status(environment_id, request.context.session)
return env
def update(self, request, environment_id, body): def update(self, request, environment_id, body):
log.debug(_('Environments:Update <Id: {0}, Body: {1}>'.format(environment_id, body)))
session = get_session() session = get_session()
environment = session.query(Environment).get(environment_id) environment = session.query(Environment).get(environment_id)
@ -62,6 +76,8 @@ class Controller(object):
return environment.to_dict() return environment.to_dict()
def delete(self, request, environment_id): def delete(self, request, environment_id):
log.debug(_('Environments:Delete <Id: {0}>'.format(environment_id)))
session = get_session() session = get_session()
environment = session.query(Environment).get(environment_id) environment = session.query(Environment).get(environment_id)

View File

@ -24,6 +24,8 @@ class Controller(object):
self.ch.exchange_declare('tasks', 'direct', durable=True, auto_delete=False) self.ch.exchange_declare('tasks', 'direct', durable=True, auto_delete=False)
def index(self, request, environment_id): def index(self, request, environment_id):
log.debug(_('Session:List <EnvId: {0}>'.format(environment_id)))
filters = {'environment_id': environment_id, 'user_id': request.context.user} filters = {'environment_id': environment_id, 'user_id': request.context.user}
unit = get_session() unit = get_session()
@ -33,13 +35,16 @@ class Controller(object):
session.environment.tenant_id == request.context.tenant]} session.environment.tenant_id == request.context.tenant]}
def configure(self, request, environment_id): def configure(self, request, environment_id):
log.debug(_('Session:Configure <EnvId: {0}>'.format(environment_id)))
params = {'environment_id': environment_id, 'user_id': request.context.user, 'state': 'open'} params = {'environment_id': environment_id, 'user_id': request.context.user, 'state': 'open'}
session = Session() session = Session()
session.update(params) session.update(params)
unit = get_session() unit = get_session()
if unit.query(Session).filter_by(**{'environment_id': environment_id, 'state': 'open'}).first(): if unit.query(Session).filter(Session.environment_id == environment_id and Session.state.in_(
['open', 'deploing'])).first():
log.info('There is already open session for this environment') log.info('There is already open session for this environment')
raise exc.HTTPConflict raise exc.HTTPConflict
@ -53,6 +58,8 @@ class Controller(object):
return session.to_dict() return session.to_dict()
def show(self, request, environment_id, session_id): def show(self, request, environment_id, session_id):
log.debug(_('Session:Show <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
unit = get_session() unit = get_session()
session = unit.query(Session).get(session_id) session = unit.query(Session).get(session_id)
@ -63,6 +70,8 @@ class Controller(object):
return session.to_dict() return session.to_dict()
def delete(self, request, environment_id, session_id): def delete(self, request, environment_id, session_id):
log.debug(_('Session:Delete <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
unit = get_session() unit = get_session()
session = unit.query(Session).get(session_id) session = unit.query(Session).get(session_id)
@ -76,12 +85,16 @@ class Controller(object):
return None return None
def reports(self, request, environment_id, session_id): def reports(self, request, environment_id, session_id):
log.debug(_('Session:Reports <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
unit = get_session() unit = get_session()
statuses = unit.query(Status).filter_by(session_id=session_id) statuses = unit.query(Status).filter_by(session_id=session_id)
return {'reports': [status.to_dict() for status in statuses]} return {'reports': [status.to_dict() for status in statuses]}
def deploy(self, request, environment_id, session_id): def deploy(self, request, environment_id, session_id):
log.debug(_('Session:Deploy <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
unit = get_session() unit = get_session()
session = unit.query(Session).get(session_id) session = unit.query(Session).get(session_id)

View File

@ -1,5 +1,5 @@
from portas import utils from portas import utils
from portas.api.v1 import save_draft, get_draft from portas.api.v1 import save_draft, get_draft, get_service_status
from portas.common import uuidutils from portas.common import uuidutils
from portas.openstack.common import wsgi, timeutils from portas.openstack.common import wsgi, timeutils
from portas.openstack.common import log as logging from portas.openstack.common import log as logging
@ -8,32 +8,32 @@ log = logging.getLogger(__name__)
class Controller(object): class Controller(object):
@utils.verify_session
def index(self, request, environment_id): def index(self, request, environment_id):
draft = get_draft(request.context.session) log.debug(_('WebServer:List <EnvId: {0}>'.format(environment_id)))
if not draft.has_key('services'): draft = prepare_draft(get_draft(environment_id, request.context.session))
return dict()
if not draft['services'].has_key('webServers'): for dc in draft['services']['webServers']:
return dict() dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'webServers': draft['services']['webServers']} return {'webServers': draft['services']['webServers']}
@utils.verify_session @utils.verify_session
def create(self, request, environment_id, body): def create(self, request, environment_id, body):
draft = get_draft(request.context.session) log.debug(_('WebServer:Create <EnvId: {0}, Body: {1}>'.format(environment_id, body)))
draft = get_draft(session_id=request.context.session)
webServer = body.copy() webServer = body.copy()
webServer['id'] = uuidutils.generate_uuid() webServer['id'] = uuidutils.generate_uuid()
webServer['created'] = timeutils.utcnow webServer['created'] = str(timeutils.utcnow())
webServer['updated'] = timeutils.utcnow webServer['updated'] = str(timeutils.utcnow())
unit_count = 0 unit_count = 0
for unit in webServer['units']: for unit in webServer['units']:
unit_count += 1 unit_count += 1
unit['id'] = uuidutils.generate_uuid() unit['id'] = uuidutils.generate_uuid()
unit['name'] = 'iis{0}'.format(unit_count) unit['name'] = 'iis{0}{1}'.format(unit_count, webServer['id'][:3])
draft = prepare_draft(draft) draft = prepare_draft(draft)
draft['services']['webServers'].append(webServer) draft['services']['webServers'].append(webServer)
@ -43,7 +43,9 @@ class Controller(object):
@utils.verify_session @utils.verify_session
def delete(self, request, environment_id, web_server_id): def delete(self, request, environment_id, web_server_id):
draft = get_draft(request.context.session) log.debug(_('WebServer:Delete <EnvId: {0}, Id: {1}>'.format(environment_id, web_server_id)))
draft = get_draft(session_id=request.context.session)
draft['services']['webServers'] = [service for service in draft['services']['webServers'] if draft['services']['webServers'] = [service for service in draft['services']['webServers'] if
service['id'] != web_server_id] service['id'] != web_server_id]
save_draft(request.context.session, draft) save_draft(request.context.session, draft)

View File

@ -35,7 +35,7 @@ class TaskResultHandlerService(service.Service):
def bind(exchange, queue): def bind(exchange, queue):
if not exchange: if not exchange:
ch.exchange_declare(exchange, 'direct', durable=True, auto_delete=False) ch.exchange_declare(exchange, 'direct', durable=True, auto_delete=False)
ch.queue_declare(queue) ch.queue_declare(queue, durable=True, auto_delete=False)
if not exchange: if not exchange:
ch.queue_bind(queue, exchange, queue) ch.queue_bind(queue, exchange, queue)
@ -43,7 +43,7 @@ class TaskResultHandlerService(service.Service):
bind(conf.reports_exchange, conf.reports_queue) bind(conf.reports_exchange, conf.reports_queue)
ch.basic_consume(conf.results_exchange, callback=handle_result) ch.basic_consume(conf.results_exchange, callback=handle_result)
ch.basic_consume(conf.reports_exchange, callback=handle_report) ch.basic_consume(conf.reports_exchange, callback=handle_report, no_ack=True)
while ch.callbacks: while ch.callbacks:
ch.wait() ch.wait()
@ -51,8 +51,12 @@ class TaskResultHandlerService(service.Service):
def handle_report(msg): def handle_report(msg):
log.debug(_('Got report message from orchestration engine:\n{0}'.format(msg.body))) log.debug(_('Got report message from orchestration engine:\n{0}'.format(msg.body)))
params = anyjson.deserialize(msg.body)
params['entity_id'] = params['id']
del params['id']
status = Status() status = Status()
status.update(anyjson.deserialize(msg.body)) status.update(params)
session = get_session() session = get_session()
#connect with session #connect with session
@ -63,8 +67,6 @@ def handle_report(msg):
with session.begin(): with session.begin():
session.add(status) session.add(status)
msg.channel.basic_ack(msg.delivery_tag)
def handle_result(msg): def handle_result(msg):
log.debug(_('Got result message from orchestration engine:\n{0}'.format(msg.body))) log.debug(_('Got result message from orchestration engine:\n{0}'.format(msg.body)))

View File

@ -0,0 +1,17 @@
from sqlalchemy.schema import MetaData, Table, Column
from sqlalchemy.types import String
meta = MetaData()
def upgrade(migrate_engine):
meta.bind = migrate_engine
status = Table('status', meta, autoload=True)
entity_id = Column('entity_id', String(32), nullable=True)
entity_id.create(status)
def downgrade(migrate_engine):
meta.bind = migrate_engine
status = Table('status', meta, autoload=True)
status.c.entity_id.drop()

View File

@ -132,7 +132,8 @@ class Session(BASE, ModelBase):
class Status(BASE, ModelBase): class Status(BASE, ModelBase):
__tablename__ = 'status' __tablename__ = 'status'
id = Column(String(32), primary_key=True) id = Column(String(32), primary_key=True, default=uuidutils.generate_uuid)
entity_id = Column(String(32), nullable=False)
entity = Column(String(10), nullable=False) entity = Column(String(10), nullable=False)
environment_id = Column(String(32), ForeignKey('environment.id')) environment_id = Column(String(32), ForeignKey('environment.id'))
session_id = Column(String(32), ForeignKey('session.id')) session_id = Column(String(32), ForeignKey('session.id'))

View File

@ -33,4 +33,4 @@ class Client(http.HTTPClient):
self.environments = environments.EnvironmentManager(self) self.environments = environments.EnvironmentManager(self)
self.sessions = sessions.SessionManager(self) self.sessions = sessions.SessionManager(self)
self.activeDirectories = services.ActiveDirectoryManager(self) self.activeDirectories = services.ActiveDirectoryManager(self)
self.webServers = services.WebServerManager(self) self.webServers = services.WebServerManager(self)

View File

@ -34,10 +34,11 @@ class EnvironmentManager(base.Manager):
return self._create('environments', {'name': name}) return self._create('environments', {'name': name})
def update(self, environment_id, name): def update(self, environment_id, name):
return self._update('environments/{id}'.format(id=environment_id), {'name': name}) return self._update('environments/{id}'.format(id=environment_id),
{'name': name})
def delete(self, environment_id): def delete(self, environment_id):
return self._delete('environments/{id}'.format(id=environment_id)) return self._delete('environments/{id}'.format(id=environment_id))
def get(self, environment_id): def get(self, environment_id):
return self._get("environments/{id}".format(id=environment_id)) return self._get("environments/{id}".format(id=environment_id))

View File

@ -27,22 +27,32 @@ class ActiveDirectory(base.Resource):
class ActiveDirectoryManager(base.Manager): class ActiveDirectoryManager(base.Manager):
resource_class = ActiveDirectory resource_class = ActiveDirectory
def list(self, environment_id, session_id): def list(self, environment_id, session_id=None):
headers = {'X-Configuration-Session': session_id} if session_id:
return self._list('environments/{id}/activeDirectories'.format(id=environment_id), 'activeDirectories', headers = {'X-Configuration-Session': session_id}
else:
headers = {}
return self._list('environments/{id}/activeDirectories'.
format(id=environment_id),
'activeDirectories',
headers=headers) headers=headers)
def create(self, environment_id, session_id, active_directory): def create(self, environment_id, session_id, active_directory):
headers = {'X-Configuration-Session': session_id} headers = {'X-Configuration-Session': session_id}
return self._create('environments/{id}/activeDirectories'.format(id=environment_id), active_directory, return self._create('environments/{id}/activeDirectories'.
format(id=environment_id),
active_directory,
headers=headers) headers=headers)
def delete(self, environment_id, session_id, active_directory_id): def delete(self, environment_id, session_id, service_id):
headers = {'X-Configuration-Session': session_id} headers = {'X-Configuration-Session': session_id}
path = 'environments/{id}/activeDirectories/{active_directory_id}'
return self._delete('environments/{id}/activeDirectories/{active_directory_id}' return self._delete(patch.format(id=environment_id,
.format(id=environment_id, active_directory_id=active_directory_id), headers=headers) active_directory_id=service_id),
headers=headers)
class WebServer(base.Resource): class WebServer(base.Resource):
@ -56,19 +66,29 @@ class WebServer(base.Resource):
class WebServerManager(base.Manager): class WebServerManager(base.Manager):
resource_class = WebServer resource_class = WebServer
def list(self, environment_id, session_id): def list(self, environment_id, session_id=None):
headers = {'X-Configuration-Session': session_id} if session_id:
return self._list('environments/{id}/webServers'.format(id=environment_id), 'webServers', headers = {'X-Configuration-Session': session_id}
else:
headers = {}
return self._list('environments/{id}/webServers'.
format(id=environment_id),
'webServers',
headers=headers) headers=headers)
def create(self, environment_id, session_id, web_server): def create(self, environment_id, session_id, web_server):
headers = {'X-Configuration-Session': session_id} headers = {'X-Configuration-Session': session_id}
return self._create('environments/{id}/webServers'.format(id=environment_id), web_server, return self._create('environments/{id}/webServers'.
format(id=environment_id),
web_server,
headers=headers) headers=headers)
def delete(self, environment_id, session_id, web_server_id): def delete(self, environment_id, session_id, service_id):
headers = {'X-Configuration-Session': session_id} headers = {'X-Configuration-Session': session_id}
return self._delete('environments/{id}/webServers/{web_server_id}' return self._delete('environments/{id}/webServers/{web_server_id}'
.format(id=environment_id, web_server_id=web_server_id), headers=headers) .format(id=environment_id,
web_server_id=service_id),
headers=headers)

View File

@ -37,26 +37,32 @@ class SessionManager(base.Manager):
resource_class = Session resource_class = Session
def list(self, environment_id): def list(self, environment_id):
return self._list('environments/{id}/sessions'.format(id=environment_id), 'sessions') return self._list('environments/{id}/sessions'.
format(id=environment_id), 'sessions')
def get(self, environment_id, session_id): def get(self, environment_id, session_id):
return self._get('environments/{id}/sessions/{session_id}'.format(id=environment_id, session_id=session_id)) return self._get('environments/{id}/sessions/{session_id}'.
format(id=environment_id, session_id=session_id))
def configure(self, environment_id): def configure(self, environment_id):
return self._create('environments/{id}/configure'.format(id=environment_id), None) return self._create('environments/{id}/configure'.
format(id=environment_id), None)
def deploy(self, environment_id, session_id): def deploy(self, environment_id, session_id):
path = 'environments/{id}/sessions/{session_id}/deploy'
self.api.json_request('POST', self.api.json_request('POST',
'environments/{id}/sessions/{session_id}/deploy'.format(id=environment_id, path.format(id=environment_id,
session_id=session_id)) session_id=session_id))
def reports(self, environment_id, session_id): def reports(self, environment_id, session_id):
path = 'environments/{id}/sessions/{session_id}/reports'
resp, body = self.api.json_request('GET', resp, body = self.api.json_request('GET',
'environments/{id}/sessions/{session_id}/reports'. path.format(id=environment_id,
format(id=environment_id, session_id=session_id)) session_id=session_id))
data = body['reports'] data = body['reports']
return [Status(self, res, loaded=True) for res in data if res] return [Status(self, res, loaded=True) for res in data if res]
def delete(self, environment_id, session_id): def delete(self, environment_id, session_id):
return self._delete("environments/{id}/sessions/{session_id}".format(id=environment_id, session_id=session_id)) return self._delete("environments/{id}/sessions/{session_id}".
format(id=environment_id, session_id=session_id))