Exemple #1
0
    def home(self):
        listx = lxc.listx()

        # return all containers sorted by status
        # memory usage is excluded in this as it slows down the homepage
        # quite a bit, they are retrieved later using AJAX.
        all_containers = []
        for status in ('RUNNING', 'FROZEN', 'STOPPED'):
            all_containers.append({
                'status': status.lower(),
                'containers': [{
                    'name': container,
                    'memory_usage': 0,  # I prefer to cache this one day
                    'settings': get_container_settings(container),
                    'bucket': get_bucket_token(container)
                } for container in listx[status]]
            })

        return {
            'all_containers': all_containers,
            'dist': check_ubuntu(),
            'host': socket.gethostname(),
            'templates': get_templates_list(),
            'storage_repos': self.settings['storage_repos'],
            'auth': self.settings['auth.backend']
        }
Exemple #2
0
 def refresh_memory(self):
     name = self.request.matchdict['name']
     if name == 'containers':
         containers_running = lxc.running()
         containers = []
         for container in containers_running:
             container = container.replace(' (auto)', '')
             containers.append({
                 'name': container,
                 'memory_usage': memory_usage(container),
                 'settings': get_container_settings(container)
             })
         return containers
     elif name == 'host':
         return host_memory_usage()
     return {'memory_usage': memory_usage(name)}
Exemple #3
0
    def edit_container(self):
        """
        edit containers page and actions if form post request
        """
        container = self.request.matchdict['container']
        cfg = get_container_settings(container)
        form = EditContainerForm(self.request.POST, container=container, **strip_empty_fields(cfg))

        if self.request.method == 'POST':
            if form.validate():
                # when memory sliders are at maximum, unset them
                if form.memlimit.data == TOTAL_HOST_MEMORY:
                    form.memlimit.data = ''
                if form.swlimit.data == TOTAL_HOST_MEMORY * 2:
                    form.swlimit.data = ''

                for field_name, field in form._fields.items():
                    # nothing changed, one is None, the other an empty string
                    # this happens with IntegerField + Optional() validator
                    if field.data is None and cfg[field_name] == '':
                        continue

                    # a field has changed, something needs to be saved
                    if field.data != cfg[field_name]:
                        if field_name == 'bucket':
                            machine = Machine.objects.get(name=container)
                            if machine:
                                # update bucket token
                                machine.bucket_token = field.data
                                machine.save()
                            else:
                                # create new record in machine table
                                Machine.objects.create(name=container, bucket_token=field.data)
                            self.session.flash('Bucket config for {} saved'.format(container), queue='success')
                        else:
                            # convert to lxc config values
                            if field_name == 'flags':
                                value = 'up' if field.data else 'down'
                            elif field_name == 'start_auto':
                                value = '1' if form.start_auto.data else '0'
                            else:
                                value = field.data
                            push_config_value(CGROUP_EXT[field_name][0], value, container=container)
                            self.session.flash(CGROUP_EXT[field_name][1], queue='success')

                # re-read container configuration now to be coherent
                cfg = get_container_settings(container)
                form = EditContainerForm(container=container, **strip_empty_fields(cfg))

        info = lxc.info(container)

        return {
            'form': form,
            'container': container,
            'infos': {
                'status': info['state'],
                'pid': info['pid'],
                'memory_usage': memory_usage(container)
            },
            'settings': cfg,
            'host_memory': TOTAL_HOST_MEMORY,
            'storage_repos': self.settings['storage_repos']
        }