def add_container(): data = request.get_json(force=True) if data is None: return jsonify(status="error", error="Bad request"), 400 if (bool('template' not in data) != bool('clone' not in data)) | bool('name' not in data): return jsonify(status="error", error="Bad request"), 400 print data if 'template' in data: # we want a new container if 'store' not in data: data.update(store=None) if 'xargs' not in data: data.update(xargs=None) try: lxc.create(data.name, data.template, data.store, data.xargs) except lxc.ContainerAlreadyExists: return jsonify(status="error", error="Container yet exists"), 409 else: #we want to clone a container try: lxc.clone(data.clone, data.name) except lxc.ContainerAlreadyExists: return jsonify(status="error", error="Container yet exists"), 409 except: abort(500) return jsonify(status="ok"), 200
def create_container(): if 'logged_in' in session: if request.method == 'POST': name = request.form['name'] template = request.form['template'] xargs = request.form['ccommand'] if re.match('^(?!^containers$)|[a-zA-Z0-9_-]+$', name): storage_method = request.form['backingstore'] if storage_method == 'default': try: if lxc.create(name, template=template, xargs=xargs) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') elif storage_method == 'directory': directory = request.form['dir'] if re.match('^/[a-zA-Z0-9_/-]+$', directory) and directory != '': try: if lxc.create(name, template=template, xargs=xargs, backing_store='dir --dir %s' % directory) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') elif storage_method == 'lvm': lvname = request.form['lvname'] vgname = request.form['vgname'] fstype = request.form['fstype'] fssize = request.form['fssize'] storage_options = 'lvm' if re.match('^[a-zA-Z0-9_-]+$', lvname) and lvname != '': storage_options += ' --lvname %s' % lvname if re.match('^[a-zA-Z0-9_-]+$', vgname) and vgname != '': storage_options += ' --vgname %s' % vgname if re.match('^[a-z0-9]+$', fstype) and fstype != '': storage_options += ' --fstype %s' % fstype if re.match('^[0-9][G|M]$', fssize) and fssize != '': storage_options += ' --fssize %s' % fssize try: if lxc.create(name, template=template, xargs=xargs, backing_store=storage_options) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The container/logical volume %s is already created!' % name, 'error') else: flash(u'Missing parameters to create container!', 'error') else: if name == '': flash(u'Please enter a container name!', 'error') else: flash(u'Invalid name for \"%s\"!' % name, 'error') return redirect(url_for('home')) return render_template('login.html')
def create_container(): ''' verify all forms to create a container ''' if 'logged_in' in session: if session['su'] != 'Yes': return abort(403) if request.method == 'POST': name = request.form['name'] template = request.form['template'] command = request.form['command'] if re.match('^(?!^containers$)|[a-zA-Z0-9_-]+$', name): storage_method = request.form['backingstore'] if storage_method == 'default': try: if lxc.create(name, template=template, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') elif storage_method == 'directory': directory = request.form['dir'] if re.match('^/[a-zA-Z0-9_/-]+$', directory) and directory != '': try: if lxc.create(name, template=template, storage='dir --dir %s' % directory, xargs=command) == 0: flash( u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash( u'The Container %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') elif storage_method == 'lvm': lvname = request.form['lvname'] vgname = request.form['vgname'] fstype = request.form['fstype'] fssize = request.form['fssize'] storage_options = 'lvm' if re.match('^[a-zA-Z0-9_-]+$', lvname) and lvname != '': storage_options += ' --lvname %s' % lvname if re.match('^[a-zA-Z0-9_-]+$', vgname) and vgname != '': storage_options += ' --vgname %s' % vgname if re.match('^[a-z0-9]+$', fstype) and fstype != '': storage_options += ' --fstype %s' % fstype if re.match('^[0-9][G|M]$', fssize) and fssize != '': storage_options += ' --fssize %s' % fssize try: if lxc.create(name, template=template, storage=storage_options, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash( u'The container/logical volume %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') else: flash(u'Missing parameters to create container!', 'error') else: if name == '': flash(u'Please enter a container name!', 'error') else: flash(u'Invalid name for \"%s\"!' % name, 'error') return redirect(url_for('home')) return render_template('login.html')
def create_container(): ''' verify all forms to create a container ''' if 'logged_in' in session: if session['su'] != 'Yes': return abort(403) if request.method == 'POST': name = request.form['name'] template = request.form['template'] command = request.form['command'] if re.match('^(?!^containers$)|[a-zA-Z0-9_-]+$', name): storage_method = request.form['backingstore'] if storage_method == 'default': try: if lxc.create(name, template=template, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') elif storage_method == 'directory': directory = request.form['dir'] if re.match('^/[a-zA-Z0-9_/-]+$', directory) and \ directory != '': try: if lxc.create(name, template=template, storage='dir --dir %s' % directory, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') elif storage_method == 'zfs': zfs = request.form['zpoolname'] if re.match('^[a-zA-Z0-9_/-]+$', zfs) and zfs != '': try: if lxc.create(name, template=template, storage='zfs --zfsroot %s' % zfs, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The Container %s is already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') elif storage_method == 'lvm': lvname = request.form['lvname'] vgname = request.form['vgname'] fstype = request.form['fstype'] fssize = request.form['fssize'] storage_options = 'lvm' if re.match('^[a-zA-Z0-9_-]+$', lvname) and lvname != '': storage_options += ' --lvname %s' % lvname if re.match('^[a-zA-Z0-9_-]+$', vgname) and vgname != '': storage_options += ' --vgname %s' % vgname if re.match('^[a-z0-9]+$', fstype) and fstype != '': storage_options += ' --fstype %s' % fstype if re.match('^[0-9][G|M]$', fssize) and fssize != '': storage_options += ' --fssize %s' % fssize try: if lxc.create(name, template=template, storage=storage_options, xargs=command) == 0: flash(u'Container %s created successfully!' % name, 'success') else: flash(u'Failed to create %s!' % name, 'error') except lxc.ContainerAlreadyExists: flash(u'The container/logical volume %s is ' 'already created!' % name, 'error') except subprocess.CalledProcessError: flash(u'Error!' % name, 'error') else: flash(u'Missing parameters to create container!', 'error') else: if name == '': flash(u'Please enter a container name!', 'error') else: flash(u'Invalid name for \"%s\"!' % name, 'error') return redirect(url_for('home')) return render_template('login.html')