diff --git a/dashboard/api/windc.py b/dashboard/api/windc.py index 16f289b..98b777d 100644 --- a/dashboard/api/windc.py +++ b/dashboard/api/windc.py @@ -51,19 +51,35 @@ def datacenters_get(request, datacenter_id): def datacenters_list(request): return windcclient(request).environments.list() +def datacenters_deploy(request, datacenter_id): + session_id = windcclient(request).sessions.list(datacenter_id)[0].id + return windcclient(request).sessions.deploy(datacenter_id, session_id) def services_create(request, datacenter, parameters): - return windcclient(request).services.create(datacenter, parameters) + LOG.critical("////////////////////////////////") + LOG.critical(parameters) + LOG.critical("////////////////////////////////") + session_id = windcclient(request).sessions.list(datacenter)[0].id + if parameters['service_type'] == 'active directory': + res = windcclient(request).activeDirectories.create(datacenter, session_id, parameters) + else: + res = windcclient(request).webServers.create(datacenter, session_id, parameters) + + return res -def services_list(request, datacenter): - LOG.critical("********************************") - LOG.critical(dir(windcclient(request))) - LOG.critical("********************************") +def services_list(request, datacenter_id): session_id = request.user.token.token['id'] services = [] - services += windcclient(request).activeDirectories.list(datacenter, session_id) - #services += windcclient(request).webServers.list(datacenter) + + sessions = windcclient(request).sessions.list(datacenter_id) + for s in sessions: + if s.state == 'open': + windcclient(request).sessions.delete(datacenter_id, s.id) + + session_id = windcclient(request).sessions.configure(datacenter_id).id + services = windcclient(request).activeDirectories.list(datacenter_id, session_id) + services += windcclient(request).webServers.list(datacenter_id, session_id) return services diff --git a/dashboard/windc/forms.py b/dashboard/windc/forms.py index 7340fb2..37e1751 100644 --- a/dashboard/windc/forms.py +++ b/dashboard/windc/forms.py @@ -38,9 +38,9 @@ LOG = logging.getLogger(__name__) class WizardFormServiceType(forms.Form): service = forms.ChoiceField(label=_("Service Type"), choices=[ - ('active directory', 'Active Directory'), - ('iis', 'Internet Information Services') - ]) + ('active directory', 'Active Directory'), + ('iis', 'Internet Information Services') + ]) class WizardFormConfiguration(forms.Form): @@ -59,21 +59,18 @@ class WizardFormADConfiguration(forms.Form): initial=1) adm_password = forms.CharField(widget=forms.PasswordInput, - label=_("Administrator password"), - required=False) + label=_("Administrator password"), required=False) recovery_password = forms.CharField(widget=forms.PasswordInput, - label=_("Recovery password"), - required=False) - + label=_("Recovery password"), required=False) + class WizardFormIISConfiguration(forms.Form): iis_name = forms.CharField(label=_("IIS Server Name"), required=False) - + adm_password = forms.CharField(widget=forms.PasswordInput, - label=_("Administrator password"), - required=False) + label=_("Administrator password"), required=False) iis_count = forms.IntegerField(label=_("IIS Servers Count"), required=True, @@ -83,14 +80,13 @@ class WizardFormIISConfiguration(forms.Form): iis_domain = forms.CharField(label=_("Member of the Domain"), required=False) - + domain_user_name = forms.CharField(label=_("Domain User Name"), - required=False) - + required=False) + domain_user_password = forms.CharField(widget=forms.PasswordInput, - label=_("Domain User Password"), - required=False) - + label=_("Domain User Password"), required=False) + class UpdateWinDC(forms.SelfHandlingForm): tenant_id = forms.CharField(widget=forms.HiddenInput) diff --git a/dashboard/windc/tables.py b/dashboard/windc/tables.py index a5c7b4d..e9564e4 100644 --- a/dashboard/windc/tables.py +++ b/dashboard/windc/tables.py @@ -102,6 +102,23 @@ class DeleteService(tables.BatchAction): ############## api.windc.services_delete(request, datacenter_id, service_id) + + +class DeployDataCenter(tables.BatchAction): + name = "deploy" + action_present = _("Deploy") + action_past = _("Deploy") + data_type_singular = _("Data Center") + data_type_plural = _("Data Center") + classes = ("btn-launch") + + def allowed(self, request, datum): + return True + + def action(self, request, datacenter_id): + #link = request.__dict__['META']['HTTP_REFERER'] + #datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] + return api.windc.datacenters_deploy(request, datacenter_id) class EditService(tables.LinkAction): @@ -143,7 +160,8 @@ class WinDCTable(tables.DataTable): verbose_name = _("Windows Data Centers") row_class = UpdateRow table_actions = (CreateDataCenter,) - row_actions = (ShowDataCenterServices, DeleteDataCenter) + row_actions = (ShowDataCenterServices, DeleteDataCenter, + DeployDataCenter) STATUS_DISPLAY_CHOICES = ( diff --git a/dashboard/windc/templates/windc/_services_tabs.html b/dashboard/windc/templates/windc/_services_tabs.html index a00c4c3..1173703 100644 --- a/dashboard/windc/templates/windc/_services_tabs.html +++ b/dashboard/windc/templates/windc/_services_tabs.html @@ -7,6 +7,11 @@ {% block modal-header %}{% trans "Create Service" %}{% endblock %} {% block modal-body %} +
+
+{% if wizard.steps.next %} +


+{% endif %} {{ wizard.management_form }} {% if wizard.form.forms %} @@ -19,6 +24,29 @@ {% endif %} {{ wizard.form.forms }}
+
+
+ {% if wizard.steps.prev %} + {% if service_type == 'active directory' %} +

Active Directory Service

+

{% trans "Now you can set the parameters for Active Directory Service." %}

+

{% trans "You can create few Active Directory instances, in this case will be created one Main Active Directory server and few Secondary Active Directory servers." %}

+

{% trans "The DNS service will be automatically created on each Active Directory servers." %}

+ {% else %} +

Internet Information Services

+

{% trans "Now you can set parameters for IIS Service." %}

+

{% trans "The IIS Service - it is the server with complex IIS infrastructure, which included to the domain infrasructure." %}

+

{% trans "Please, set the complex password for local administrator account." %}

+

{% trans "Also, you can add this IIS server to the existing domain and configure credentials for domain user." %}

+ {% endif %} + + {% else %} +

{% trans "Description" %}:

+

{% trans "Now you can select the type of the service." %}

+

{% trans "The Active Directory Service allows to configure Domain Controllers with Active Directory and DNS infrastructure. You can create one Main Domain Controller and few Secondary Domain Controllers." %}

+

{% trans "The Internet Information Services allows to configure IIS servers, which can be included to the existing domain infrastructure." %}

+ {% endif %} +
{% endblock %} {% block modal-footer %} diff --git a/dashboard/windc/urls.py b/dashboard/windc/urls.py index 7b5f987..c8f81b0 100644 --- a/dashboard/windc/urls.py +++ b/dashboard/windc/urls.py @@ -28,7 +28,7 @@ VIEW_MOD = 'openstack_dashboard.dashboards.project.windc.views' urlpatterns = patterns(VIEW_MOD, url(r'^$', IndexView.as_view(), name='index'), - url(r'^create$', + url(r'^create$', Wizard.as_view([WizardFormServiceType, WizardFormConfiguration]), name='create'), url(r'^create_dc$', CreateWinDCView.as_view(), name='create_dc'), diff --git a/dashboard/windc/views.py b/dashboard/windc/views.py index acbd23c..20a650d 100644 --- a/dashboard/windc/views.py +++ b/dashboard/windc/views.py @@ -58,31 +58,35 @@ class Wizard(ModalFormMixin, SessionWizardView, generic.FormView): link = self.request.__dict__['META']['HTTP_REFERER'] datacenter_id = re.search('windc/(\S+)', link).group(0)[6:-1] url = "/project/windc/%s/" % datacenter_id - + service_type = form_list[0].data.get('0-service', '') - parameters = {} - if form_list[1].data: - data = form_list[1].data - + parameters = {'service_type': service_type} + if service_type == 'active directory': - parameters['dc_name'] = str(data.get('1-dc_name', 'noname')) - parameters['adm_password'] = str(data.get('1-adm_password', '')) - parameters['dc_count'] = int(data.get('1-dc_count', 1)) - parameters['recovery_password'] = \ - str(data.get('1-recovery_password', '')) + parameters['configuration'] = 'standalone' + parameters['name'] = str(form_list[1].data.get('1-dc_name', 'noname')) + parameters['adminPassword'] = str(form_list[1].data.get('1-adm_password', '')) + dc_count = int(form_list[1].data.get('1-dc_count', 1)) + recovery_password = str(form_list[1].data.get('1-recovery_password', '')) + parameters['units'] = [] + parameters['units'].append({'isMaster': True, 'recoveryPassword': recovery_password, + 'location': 'west-dc'}) + for dc in range(dc_count-1): + parameters['units'].append({'isMaster': False, 'recoveryPassword': recovery_password, + 'location': 'west-dc'}) + elif service_type == 'iis': - parameters['iis_name'] = str(data.get('1-iis_name', 'noname')) - parameters['adm_password'] = str(data.get('1-adm_password', '')) - parameters['iis_count'] = int(data.get('1-iis_count', 1)) - parameters['iis_domain'] = str(data.get('1-iis_domain', '')) - parameters['domain_user_name'] = \ - str(data.get('1-domain_user_name', '')) - parameters['domain_user_password'] = \ - str(data.get('1-domain_user_password', '')) + parameters['name'] = str(form_list[1].data.get('1-iis_name', 'noname')) + parameters['credentials'] = {'username': 'Administrator', + 'password': str(form_list[1].data.get('1-adm_password', ''))} + parameters['domain'] = {'name': str(form_list[1].data.get('1-iis_domain', '')), + 'username': str(form_list[1].data.get('1-domain_user_name', '')), + 'password': str(form_list[1].data.get('1-domain_user_password', ''))} + parameters['location'] = 'west-dc' service = api.windc.services_create(self.request, datacenter_id, - parameters) + parameters) message = "The %s service successfully created." % service_type messages.success(self.request, message) @@ -93,13 +97,23 @@ class Wizard(ModalFormMixin, SessionWizardView, generic.FormView): LOG.debug("********" + str(self.form_list)) if data: service_type = data.get('0-service', '') - + self.service_type = service_type if service_type == 'active directory': self.form_list['1'] = WizardFormADConfiguration elif service_type == 'iis': self.form_list['1'] = WizardFormIISConfiguration return form + + def get_form_step_data(self, form): + LOG.debug(form.data) + return form.data + + def get_context_data(self, form, **kwargs): + context = super(Wizard, self).get_context_data(form=form, **kwargs) + if self.steps.index > 0: + context.update({'service_type': self.service_type}) + return context class IndexView(tables.DataTableView): @@ -132,7 +146,7 @@ class WinServices(tables.DataTableView): dc_id = self.kwargs['data_center_id'] datacenter = api.windc.datacenters_get(self.request, dc_id) self.dc_name = datacenter.name - services = api.windc.services_list(self.request, datacenter) + services = api.windc.services_list(self.request, dc_id) except: services = [] exceptions.handle(self.request,