Esempio n. 1
0
def cloudendure_machine_migration(request, project_id, machine_id):
    action_url = reverse('cloudendure_machine_migration',
                         args=[project_id, machine_id])

    if request.method == 'POST':
        cloud_endure_manager = CloudEndureManager()
        form = CloudEndureLaunchTypeForm(request.POST)
        response = cloud_endure_manager.launch_machine(
            project_id, machine_id, form.data['launch_type'])
        if response[0] == 202:
            messages.success(request, response[1])
        elif response[0] == 400:
            messages.warning(request, response[1])
        elif response[0] == 402:
            messages.warning(request, response[1])
        else:
            messages.error(request, response)
        return HttpResponseRedirect(request.META['HTTP_REFERER'])

    return {
        'title': _("Migrate VM to AWS?"),
        'form': CloudEndureLaunchTypeForm(),
        'use_ajax': True,
        'action_url': action_url,
        'submit': _("Migrate"),
    }
Esempio n. 2
0
def create_cloudendure_project(request):
    """
    Create a cloud endure project
    """
    action_url = reverse('create_cloudendure_project')
    cloud_endure_manager = CloudEndureManager()
    if request.method == 'POST':
        form = CloudEndureProjectNameForm(request.POST)
        response = cloud_endure_manager.create_project(
            form.data['project_name'], form.data['cloud'],
            form.data['public_key'], form.data['private_key'])
        if response.status_code == 201:
            msg = "The CloudEndure project has been created."
        else:
            msg = "Project could not be created"
        messages.success(request, msg)
        return HttpResponseRedirect(request.META['HTTP_REFERER'])
    else:
        form = CloudEndureProjectNameForm()

    return {
        'title': 'Add a CloudEndure project',
        'form': form,
        'use_ajax': True,
        'action_url': action_url,
        'top_content': "",
        'submit': 'Save',
    }
Esempio n. 3
0
    def clean(self):

        ce = CloudEndureManager()
        if not ce.verify_connection(
            self.cleaned_data.get('protocol'),
            self.cleaned_data.get('ip'),
            self.cleaned_data.get('username'),
            self.cleaned_data.get('port'),
            self.cleaned_data.get('password'),
        ):
            raise forms.ValidationError(
                "Unable to connect to CloudEndure Management Endpoint using the parameters provided ")

        return self.cleaned_data
Esempio n. 4
0
def cloudendure_machine_actions(request, server_id, action):

    if action == 'start':
        new_action = "Start", "Start cloudendure replication?"
    elif action == 'stop':
        new_action = "Stop", "Stop cloudendure replication?"
    elif action == 'pause':
        new_action = "Pause", "Pause cloudendure replication?"
    elif action == 'uninstall':
        new_action = "Uninstall", "Uninstall cloudendure agent?"
    elif action == 'migrate':
        form = CloudEndureLaunchTypeForm()
        new_action = "Migrate", "Migrate VM to AWS?"

    try:
        form = form
    except NameError:
        form = None

    if request.method == 'GET':
        return {
            'title':
            _(new_action[1]),
            'form':
            form,
            'use_ajax':
            True,
            'action_url':
            reverse('cloudendure_machine_actions', args=[server_id, action]),
            'submit':
            _(new_action[0]),
        }
    server = Server.objects.get(id=server_id)
    cloud_endure_manager = CloudEndureManager()
    if action == 'migrate':
        form = CloudEndureLaunchTypeForm(request.POST)
        response = cloud_endure_manager.replication_actions(
            server, action, launch_type=form.data['launch_type'])
        if response[0]:
            messages.success(request, response[1])
        else:
            messages.warning(request, response[1])
    else:
        response = cloud_endure_manager.replication_actions(server, action)
        if response[0]:
            messages.success(request, response[1])
        else:
            messages.warning(request, response[1])
    return HttpResponseRedirect(reverse('server_detail', args=[server_id]))
Esempio n. 5
0
def install_cloudendure_agent(request, server_id):
    server = Server.objects.get(id=server_id)
    cloud_endure_manager = CloudEndureManager()
    if request.method == 'GET':
        form = CloudEndureProjectSelectForm()
        return {
            'title': _("Install CloudEndure Agent on this server?"),
            'form': form,
            'use_ajax': True,
            'action_url': reverse('install_cloudendure_agent',
                                  args=[server_id]),
            'submit': _("Install"),
        }

    if request.method == 'POST':
        form = CloudEndureConnectionForm(request.POST)
        install_token = cloud_endure_manager.get_agent_installation_token(
            form.data['project'])
        cloud_endure_project = form.data['project']

        CustomField.objects.get_or_create(
            name='cloud_endure_project',
            type='STR',
            defaults={
                'label': 'Cloud Endure Project Name',
                'description':
                'Name of the project the agent of this server belongs to',
                'show_as_attribute': True
            })

        try:
            install_agent_action = CloudBoltHook.objects.get(
                name="Install CloudEndure Agent")
        except Exception:
            cloud_endure_manager.setup_cloud_endure_install_agent_action()
            install_agent_action = CloudBoltHook.objects.get(
                name="Install CloudEndure Agent")

        install_job = install_agent_action.run_as_job(
            server=server,
            install_token=install_token,
            cloud_endure_project=cloud_endure_project)[0]
        messages.success(
            request,
            mark_safe(
                f"<a href='{install_job.get_absolute_url()}'>Job {install_job.id}</a> to install agent started"
            ))

    return HttpResponseRedirect(reverse('server_detail', args=[server_id]))
Esempio n. 6
0
def delete_cloudendure_endpoint(request):
    cloudendure_ci = CloudEndureManager().get_connection_info()
    if request.method == 'POST':
        cloudendure_ci.delete()
        msg = "The CloudEndure Endpoint has been deleted."
        messages.success(request, msg)
        return HttpResponseRedirect(request.META['HTTP_REFERER'])

    return {
        'title': 'Remove CloudEndure Endpoint?',
        'content': 'Are you sure you want to delete CloudEndure Endpoint',
        'use_ajax': True,
        'action_url': reverse('delete_cloudendure_endpoint'),
        'submit': 'Remove'
    }
Esempio n. 7
0
class CloudEndureProjectNameForm(C2Form):
    cemanager = CloudEndureManager()
    all_clouds = cemanager.get_all_clouds()
    cloud = forms.ChoiceField(choices=all_clouds, label='Target Cloud')
    project_name = forms.CharField(label="Project Name")
    public_key = forms.CharField(label="AWS Access Key")
    private_key = forms.CharField(label="AWS Access Key Secret")
Esempio n. 8
0
class CloudEndureProjectSelectForm(C2Form):
    cemanager = CloudEndureManager()
    my_projects = cemanager.get_all_projects()

    # get a tuple of all projects
    projects_tuple = [(name, name) for name in iter(my_projects)]
    project = forms.ChoiceField(choices=projects_tuple, label='Select Project')
Esempio n. 9
0
def edit_cloudendure_endpoint(request):
    """
    Edit CloudEndure connection credentials
    """
    connection_info = CloudEndureManager().get_connection_info()

    action_url = reverse('edit_cloudendure_endpoint')
    if request.method == 'POST':
        form = CloudEndureConnectionForm(request.POST,
                                         instance=connection_info)
        if form.is_valid():
            form.save()
            msg = "The CloudEndure credentials have been updated"
            messages.success(request, msg)
            return HttpResponseRedirect(request.META['HTTP_REFERER'])
    else:
        form = CloudEndureConnectionForm(instance=connection_info)

    return {
        'title': 'Edit CloudEndure Endpoint Settings',
        'form': form,
        'use_ajax': True,
        'action_url': action_url,
        'top_content':
        "CloudEndure Endpoint Settings. Supports agent install, replication and migration.",
        'submit': 'Save',
    }
Esempio n. 10
0
def verify_cloudendure_connection(request):
    cloudendure = CloudEndureManager()

    if cloudendure.verify_connection():
        msg = format_html(
            '<p style="color: green">Successfully connected to CloudEndure</p>'
        )
    else:
        msg = format_html(
            '<p style="color: red">Could not make a connection to CloudEndure</p>'
        )

    return {
        'title': 'Verify connection to CloudEndure Endpoint',
        'content': msg,
        'submit': None,
        'cancel': "OK",
    }
Esempio n. 11
0
def cloudendure_tab(request, obj_id):
    context = {}
    server = Server.objects.get(id=obj_id)
    cloud_endure_manager = CloudEndureManager()
    context['install_ready'] = cloud_endure_manager.check_agent_status(
        server)[0]
    context['server'] = server

    # check if server credentials are set
    if server.password is None:
        msg = helper_tags.alert(
            'warning',
            'Agent is not installed. It can not be installed because the server password is not set.'
        )
        context['server_credentials'] = False, msg
    else:
        context['server_credentials'] = True, "Server password is set"

    # check if the server is turned on
    if server.power_status == 'POWERON':
        context['power_on'] = True, "Server is turned on"
    else:
        msg = helper_tags.alert(
            'warning',
            'Agent is not installed. It can not be installed because the server is turned off.'
        )
        context['power_on'] = False, msg

    context['machine_actions'] = [('start', 'Start Data Replication'),
                                  ('uninstall', 'Uninstall Agent'),
                                  ('pause', 'Pause Data Replication'),
                                  ('stop', 'Stop Data Replication'),
                                  ('migrate', 'Migrate VM to AWS')]

    install_job = server.jobs.filter(
        job_parameters__hookparameters__hook__name='Install CloudEndure Agent'
    ).last()
    job_running = False
    if install_job and install_job.is_active():
        job_running = True
        context['job_url'] = install_job.get_absolute_url()

    context['job_running'] = job_running
    return render(request, 'cloudendure/templates/server_tab.html', context)
Esempio n. 12
0
def admin_page(request):
    cloud_endure_manager = CloudEndureManager()
    cloudendure_ci = cloud_endure_manager.get_connection_info()
    machines = cloud_endure_manager.get_all_servers()
    projects = cloud_endure_manager.get_all_projects(more_info=True)
    jobs = cloud_endure_manager.get_all_jobs()

    if machines:
        for machine in machines:
            server = Server.objects.filter(
                hostname__icontains=machine.get('name')).first()
            if server:
                machine['environment'] = server.environment.name
                machine['server_url'] = server.get_absolute_url()
                machine['ip'] = server.ip
    cloudendure_context = {
        'tabs':
        TabGroup(
            template_dir='cloudendure/templates',
            request=request,
            tabs=[(_("Dashboard"), 'dashboard',
                   dict(context={"cloudendure_ci": cloudendure_ci})),
                  (_("Servers"), 'servers',
                   dict(context={'machines': machines})),
                  (_("Projects"), 'projects',
                   dict(context={'projects': projects})),
                  (_("Jobs"), 'jobs', dict(context={'jobs': jobs}))],
        )
    }
    return render(request, 'cloudendure/templates/admin_page.html',
                  cloudendure_context)
Esempio n. 13
0
def run(server, *args, **kwargs):
    set_progress("Starting install CloudEndure agent process...")
    cloud_endure_manager = CloudEndureManager()
    install_token = kwargs.get('install_token')
    cloud_endure_project = kwargs.get('cloud_endure_project')

    if server.is_windows():
        try:
            cloud_endure_manager.install_agent(
                INSTALL_WINDOWS_AGENT,
                {'agent_installation_token': install_token[0]}, server)
        except Exception as error:
            set_progress(error)
        try:
            if cloud_endure_manager.check_agent_status(server):
                set_progress("The agent was installed successfully.")
                server.cloud_endure_project = cloud_endure_project
                server.save()
                return "SUCCESS", "The agent was installed successfully.", ""
            else:
                set_progress("The agent was not installed successfully.")
                return "FAILURE", "Agent not installed", ""
        except Exception as error:
            set_progress(error)
            return "FAILURE", "", f"{error}"

    elif server.os_family.get_base_name() == 'Linux':
        try:
            cloud_endure_manager.install_agent(
                INSTALL_LINUX_AGENT,
                {'agent_installation_token': install_token[0]}, server)
        except Exception as error:
            set_progress(
                f"Error occurred while trying to install the agent. {error}")
        try:
            if cloud_endure_manager.check_agent_status(server):
                set_progress("The agent was installed successfully.")
                server.cloud_endure_project = cloud_endure_project
                server.save()
                return "SUCCESS", "The agent was installed successfully.", ""
            else:
                set_progress("The agent was not installed successfully.")

        except Exception as error:
            set_progress(f"The agent was not installed successfully. {error}")
            return "FAILURE", "", f"{error}"
    else:
        return "FAILURE", "CloudEndure Agent can't be installed on this server", ""