diff --git a/dashboard/api/windc.py b/dashboard/api/windc.py index 26033eb..5fcac63 100644 --- a/dashboard/api/windc.py +++ b/dashboard/api/windc.py @@ -61,20 +61,6 @@ def datacenters_deploy(request, datacenter_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): session_id = windcclient(request).sessions.list(datacenter)[0].id if parameters['service_type'] == 'Active Directory': @@ -106,8 +92,12 @@ def services_list(request, datacenter_id): return services -def services_get(request, datacenter, service_id): - return windcclient(request).services.get(datacenter, service_id) +def services_get(request, datacenter_id, 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): diff --git a/dashboard/windc/tables.py b/dashboard/windc/tables.py index c6f998d..db29e6a 100644 --- a/dashboard/windc/tables.py +++ b/dashboard/windc/tables.py @@ -133,38 +133,40 @@ class UpdateDCRow(tables.Row): ajax = True def get_data(self, request, datacenter_id): - datacenter = api.windc.datacenters_get(request, datacenter_id) - datacenter.status = api.windc.datacenters_get_status(request, - datacenter_id) - return datacenter + return api.windc.datacenters_get(request, datacenter_id) + + +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 = ( - ('deploying', 'Deploy in progress'), - ('open', 'Ready to deploy') + ('draft', '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): STATUS_CHOICES = ( (None, True), - ('Ready to deploy', False), - ('deploying', True), - ('deployed', True), - ('ready', True), - ('error', False), + ('Ready to deploy', True), + ('Active', True) ) name = tables.Column('name', link=('horizon:project:windc:services'), verbose_name=_('Name')) - status = tables.Column(get_datacenter_status, verbose_name=_('Status'), + status = tables.Column('status', verbose_name=_('Status'), status=True, status_choices=STATUS_CHOICES, display_choices=STATUS_DISPLAY_CHOICES) @@ -173,7 +175,34 @@ class WinDCTable(tables.DataTable): name = 'windc' verbose_name = _('Windows Data Centers') row_class = UpdateDCRow + status_columns = ['status'] 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'] row_actions = (ShowDataCenterServices, DeleteDataCenter, DeployDataCenter) diff --git a/dashboard/windc/views.py b/dashboard/windc/views.py index 4ab32ab..d6d9e2d 100644 --- a/dashboard/windc/views.py +++ b/dashboard/windc/views.py @@ -66,6 +66,10 @@ class Wizard(ModalFormMixin, SessionWizardView, generic.FormView): parameters['configuration'] = 'standalone' parameters['name'] = str(form_list[1].data.get('1-dc_name', 'noname')) + + # Fix Me in orchestrator + parameters['domain'] = parameters['name'] + parameters['adminPassword'] = \ str(form_list[1].data.get('1-adm_password', '')) 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', '') parameters['name'] = str(form_list[1].data.get('1-iis_name', 'noname')) + parameters['credentials'] = {'username': 'Administrator', 'password': password} - parameters['domain'] = {'name': str(domain), - 'username': str(dc_user), - 'password': str(dc_pass)} + parameters['domain'] = str(domain) parameters['location'] = 'west-dc' parameters['units'] = [] @@ -153,7 +156,6 @@ class WinServices(tables.DataTableView): def get_context_data(self, **kwargs): context = super(WinServices, self).get_context_data(**kwargs) - data = self.get_data() context['dc_name'] = self.dc_name return context @@ -167,7 +169,7 @@ class WinServices(tables.DataTableView): services = [] exceptions.handle(self.request, _('Unable to retrieve list of services for ' - 'data center "%s".') % dc_id) + 'data center "%s".') % self.dc_name) return services diff --git a/portas/etc/portas-api-paste.ini b/portas/etc/portas-api-paste.ini index 3bb4591..3c4b22f 100644 --- a/portas/etc/portas-api-paste.ini +++ b/portas/etc/portas-api-paste.ini @@ -9,10 +9,10 @@ paste.filter_factory = portas.api.middleware.context:ContextMiddleware.factory [filter:authtoken] paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory -auth_host = 172.18.79.73 +auth_host = localhost auth_port = 35357 auth_protocol = http admin_tenant_name = admin admin_user = admin -admin_password = swordfish -signing_dir = /tmp/keystone-signing-portas \ No newline at end of file +admin_password = password +signing_dir = /tmp/keystone-signing-portas diff --git a/portas/etc/portas-api.conf b/portas/etc/portas-api.conf index b572829..be932a2 100644 --- a/portas/etc/portas-api.conf +++ b/portas/etc/portas-api.conf @@ -28,6 +28,6 @@ reports_queue = task-reports host = localhost port = 5672 use_ssl = false -userid = guest -password = guest -virtual_host = / \ No newline at end of file +userid = keero +password = keero +virtual_host = keero diff --git a/portas/portas/api/v1/__init__.py b/portas/portas/api/v1/__init__.py index 2cb29e7..6fa090e 100644 --- a/portas/portas/api/v1/__init__.py +++ b/portas/portas/api/v1/__init__.py @@ -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 -def get_draft(session_id): +def get_draft(environment_id=None, session_id=None): unit = get_session() - session = unit.query(Session).get(session_id) - - return session.description + #TODO: When session is deployed should be returned env.description + if session_id: + 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): @@ -14,4 +18,71 @@ def save_draft(session_id, draft): session = unit.query(Session).get(session_id) session.description = draft - session.save(unit) \ No newline at end of file + 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 diff --git a/portas/portas/api/v1/active_directories.py b/portas/portas/api/v1/active_directories.py index 2487cee..2b57a67 100644 --- a/portas/portas/api/v1/active_directories.py +++ b/portas/portas/api/v1/active_directories.py @@ -1,5 +1,5 @@ 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.openstack.common import wsgi, timeutils from portas.openstack.common import log as logging @@ -8,32 +8,32 @@ log = logging.getLogger(__name__) class Controller(object): - @utils.verify_session def index(self, request, environment_id): - draft = get_draft(request.context.session) + log.debug(_('ActiveDirectory:Index '.format(environment_id))) - if not draft.has_key('services'): - return dict() + draft = prepare_draft(get_draft(environment_id, request.context.session)) - if not draft['services'].has_key('activeDirectories'): - return dict() + for dc in draft['services']['activeDirectories']: + dc['status'] = get_service_status(environment_id, request.context.session, dc) return {'activeDirectories': draft['services']['activeDirectories']} @utils.verify_session def create(self, request, environment_id, body): - draft = get_draft(request.context.session) + log.debug(_('ActiveDirectory:Create '.format(environment_id, body))) + + draft = get_draft(session_id=request.context.session) active_directory = body.copy() active_directory['id'] = uuidutils.generate_uuid() - active_directory['created'] = timeutils.utcnow - active_directory['updated'] = timeutils.utcnow + active_directory['created'] = str(timeutils.utcnow()) + active_directory['updated'] = str(timeutils.utcnow()) unit_count = 0 for unit in active_directory['units']: unit_count += 1 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['services']['activeDirectories'].append(active_directory) @@ -42,6 +42,8 @@ class Controller(object): return active_directory def delete(self, request, environment_id, active_directory_id): + log.debug(_('ActiveDirectory:Delete '.format(environment_id, active_directory_id))) + draft = get_draft(request.context.session) draft['services']['activeDirectories'] = [service for service in draft['services']['activeDirectories'] if service['id'] != active_directory_id] diff --git a/portas/portas/api/v1/environments.py b/portas/portas/api/v1/environments.py index 040aa10..e8c82ee 100644 --- a/portas/portas/api/v1/environments.py +++ b/portas/portas/api/v1/environments.py @@ -1,4 +1,5 @@ from webob import exc +from portas.api.v1 import get_env_status from portas.db.session import get_session from portas.db.models import Environment from portas.openstack.common import wsgi @@ -10,17 +11,23 @@ log = logging.getLogger(__name__) class Controller(object): def index(self, request): - log.debug(_("Display list of environments")) + log.debug(_('Environments:List')) #Only environments from same tenant as users should be shown filters = {'tenant_id': request.context.tenant} session = get_session() 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): + log.debug(_('Environments:Create '.format(body))) + #tagging environment by tenant_id for later checks params = body.copy() params['tenant_id'] = request.context.tenant @@ -39,6 +46,8 @@ class Controller(object): return environment.to_dict() def show(self, request, environment_id): + log.debug(_('Environments:Show '.format(environment_id))) + session = get_session() 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.') 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): + log.debug(_('Environments:Update '.format(environment_id, body))) + session = get_session() environment = session.query(Environment).get(environment_id) @@ -62,6 +76,8 @@ class Controller(object): return environment.to_dict() def delete(self, request, environment_id): + log.debug(_('Environments:Delete '.format(environment_id))) + session = get_session() environment = session.query(Environment).get(environment_id) diff --git a/portas/portas/api/v1/sessions.py b/portas/portas/api/v1/sessions.py index b7ce024..dd12cea 100644 --- a/portas/portas/api/v1/sessions.py +++ b/portas/portas/api/v1/sessions.py @@ -24,6 +24,8 @@ class Controller(object): self.ch.exchange_declare('tasks', 'direct', durable=True, auto_delete=False) def index(self, request, environment_id): + log.debug(_('Session:List '.format(environment_id))) + filters = {'environment_id': environment_id, 'user_id': request.context.user} unit = get_session() @@ -33,13 +35,16 @@ class Controller(object): session.environment.tenant_id == request.context.tenant]} def configure(self, request, environment_id): + log.debug(_('Session:Configure '.format(environment_id))) + params = {'environment_id': environment_id, 'user_id': request.context.user, 'state': 'open'} session = Session() session.update(params) 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') raise exc.HTTPConflict @@ -53,6 +58,8 @@ class Controller(object): return session.to_dict() def show(self, request, environment_id, session_id): + log.debug(_('Session:Show '.format(environment_id, session_id))) + unit = get_session() session = unit.query(Session).get(session_id) @@ -63,6 +70,8 @@ class Controller(object): return session.to_dict() def delete(self, request, environment_id, session_id): + log.debug(_('Session:Delete '.format(environment_id, session_id))) + unit = get_session() session = unit.query(Session).get(session_id) @@ -76,12 +85,16 @@ class Controller(object): return None def reports(self, request, environment_id, session_id): + log.debug(_('Session:Reports '.format(environment_id, session_id))) + unit = get_session() statuses = unit.query(Status).filter_by(session_id=session_id) return {'reports': [status.to_dict() for status in statuses]} def deploy(self, request, environment_id, session_id): + log.debug(_('Session:Deploy '.format(environment_id, session_id))) + unit = get_session() session = unit.query(Session).get(session_id) diff --git a/portas/portas/api/v1/webservers.py b/portas/portas/api/v1/webservers.py index a5c3c5e..d1af6bc 100644 --- a/portas/portas/api/v1/webservers.py +++ b/portas/portas/api/v1/webservers.py @@ -1,5 +1,5 @@ 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.openstack.common import wsgi, timeutils from portas.openstack.common import log as logging @@ -8,32 +8,32 @@ log = logging.getLogger(__name__) class Controller(object): - @utils.verify_session def index(self, request, environment_id): - draft = get_draft(request.context.session) + log.debug(_('WebServer:List '.format(environment_id))) - if not draft.has_key('services'): - return dict() + draft = prepare_draft(get_draft(environment_id, request.context.session)) - if not draft['services'].has_key('webServers'): - return dict() + for dc in draft['services']['webServers']: + dc['status'] = get_service_status(environment_id, request.context.session, dc) return {'webServers': draft['services']['webServers']} @utils.verify_session def create(self, request, environment_id, body): - draft = get_draft(request.context.session) + log.debug(_('WebServer:Create '.format(environment_id, body))) + + draft = get_draft(session_id=request.context.session) webServer = body.copy() webServer['id'] = uuidutils.generate_uuid() - webServer['created'] = timeutils.utcnow - webServer['updated'] = timeutils.utcnow + webServer['created'] = str(timeutils.utcnow()) + webServer['updated'] = str(timeutils.utcnow()) unit_count = 0 for unit in webServer['units']: unit_count += 1 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['services']['webServers'].append(webServer) @@ -43,7 +43,9 @@ class Controller(object): @utils.verify_session def delete(self, request, environment_id, web_server_id): - draft = get_draft(request.context.session) + log.debug(_('WebServer:Delete '.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 service['id'] != web_server_id] save_draft(request.context.session, draft) diff --git a/portas/portas/common/service.py b/portas/portas/common/service.py index f9a13cf..143a358 100644 --- a/portas/portas/common/service.py +++ b/portas/portas/common/service.py @@ -35,7 +35,7 @@ class TaskResultHandlerService(service.Service): def bind(exchange, queue): if not exchange: 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: ch.queue_bind(queue, exchange, queue) @@ -43,7 +43,7 @@ class TaskResultHandlerService(service.Service): bind(conf.reports_exchange, conf.reports_queue) 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: ch.wait() @@ -51,8 +51,12 @@ class TaskResultHandlerService(service.Service): def handle_report(msg): 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.update(anyjson.deserialize(msg.body)) + status.update(params) session = get_session() #connect with session @@ -63,8 +67,6 @@ def handle_report(msg): with session.begin(): session.add(status) - msg.channel.basic_ack(msg.delivery_tag) - def handle_result(msg): log.debug(_('Got result message from orchestration engine:\n{0}'.format(msg.body))) diff --git a/portas/portas/db/migrate_repo/versions/006_add_entity_id_column_to_status.py b/portas/portas/db/migrate_repo/versions/006_add_entity_id_column_to_status.py new file mode 100644 index 0000000..e96dd7d --- /dev/null +++ b/portas/portas/db/migrate_repo/versions/006_add_entity_id_column_to_status.py @@ -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() diff --git a/portas/portas/db/models.py b/portas/portas/db/models.py index bdfa0e6..412d1fb 100644 --- a/portas/portas/db/models.py +++ b/portas/portas/db/models.py @@ -132,7 +132,8 @@ class Session(BASE, ModelBase): class Status(BASE, ModelBase): __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) environment_id = Column(String(32), ForeignKey('environment.id')) session_id = Column(String(32), ForeignKey('session.id')) diff --git a/python-portasclient/portasclient/v1/client.py b/python-portasclient/portasclient/v1/client.py index a8678d5..720142e 100644 --- a/python-portasclient/portasclient/v1/client.py +++ b/python-portasclient/portasclient/v1/client.py @@ -33,4 +33,4 @@ class Client(http.HTTPClient): self.environments = environments.EnvironmentManager(self) self.sessions = sessions.SessionManager(self) self.activeDirectories = services.ActiveDirectoryManager(self) - self.webServers = services.WebServerManager(self) \ No newline at end of file + self.webServers = services.WebServerManager(self) diff --git a/python-portasclient/portasclient/v1/environments.py b/python-portasclient/portasclient/v1/environments.py index 0aba249..4b07d9a 100644 --- a/python-portasclient/portasclient/v1/environments.py +++ b/python-portasclient/portasclient/v1/environments.py @@ -34,10 +34,11 @@ class EnvironmentManager(base.Manager): return self._create('environments', {'name': 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): return self._delete('environments/{id}'.format(id=environment_id)) def get(self, environment_id): - return self._get("environments/{id}".format(id=environment_id)) \ No newline at end of file + return self._get("environments/{id}".format(id=environment_id)) diff --git a/python-portasclient/portasclient/v1/services.py b/python-portasclient/portasclient/v1/services.py index 84a76f1..dd65448 100644 --- a/python-portasclient/portasclient/v1/services.py +++ b/python-portasclient/portasclient/v1/services.py @@ -27,22 +27,32 @@ class ActiveDirectory(base.Resource): class ActiveDirectoryManager(base.Manager): resource_class = ActiveDirectory - def list(self, environment_id, session_id): - headers = {'X-Configuration-Session': session_id} - return self._list('environments/{id}/activeDirectories'.format(id=environment_id), 'activeDirectories', + def list(self, environment_id, session_id=None): + if session_id: + headers = {'X-Configuration-Session': session_id} + else: + headers = {} + + return self._list('environments/{id}/activeDirectories'. + format(id=environment_id), + 'activeDirectories', headers=headers) def create(self, environment_id, session_id, active_directory): 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) - 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} + path = 'environments/{id}/activeDirectories/{active_directory_id}' - return self._delete('environments/{id}/activeDirectories/{active_directory_id}' - .format(id=environment_id, active_directory_id=active_directory_id), headers=headers) + return self._delete(patch.format(id=environment_id, + active_directory_id=service_id), + headers=headers) class WebServer(base.Resource): @@ -56,19 +66,29 @@ class WebServer(base.Resource): class WebServerManager(base.Manager): resource_class = WebServer - def list(self, environment_id, session_id): - headers = {'X-Configuration-Session': session_id} - return self._list('environments/{id}/webServers'.format(id=environment_id), 'webServers', + def list(self, environment_id, session_id=None): + if session_id: + headers = {'X-Configuration-Session': session_id} + else: + headers = {} + + return self._list('environments/{id}/webServers'. + format(id=environment_id), + 'webServers', headers=headers) def create(self, environment_id, session_id, web_server): 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) - 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} 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) diff --git a/python-portasclient/portasclient/v1/sessions.py b/python-portasclient/portasclient/v1/sessions.py index 2d21e55..200078b 100644 --- a/python-portasclient/portasclient/v1/sessions.py +++ b/python-portasclient/portasclient/v1/sessions.py @@ -37,26 +37,32 @@ class SessionManager(base.Manager): resource_class = Session 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): - 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): - 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): + path = 'environments/{id}/sessions/{session_id}/deploy' self.api.json_request('POST', - 'environments/{id}/sessions/{session_id}/deploy'.format(id=environment_id, - session_id=session_id)) + path.format(id=environment_id, + session_id=session_id)) def reports(self, environment_id, session_id): + path = 'environments/{id}/sessions/{session_id}/reports' resp, body = self.api.json_request('GET', - 'environments/{id}/sessions/{session_id}/reports'. - format(id=environment_id, session_id=session_id)) + path.format(id=environment_id, + session_id=session_id)) data = body['reports'] return [Status(self, res, loaded=True) for res in data if res] 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))