Merged iteration3 branch to master. Fixed pep8.
This commit is contained in:
commit
cf928abf09
@ -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):
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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]
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)))
|
||||||
|
@ -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()
|
@ -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'))
|
||||||
|
@ -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)
|
||||||
|
@ -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))
|
||||||
|
@ -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)
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user