diff --git a/README.md b/README.md index 4bd26fb..fdc2975 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ print(''.join([random.SystemRandom().choice(haystack) for _ in range(50)])) ### Install WebVirtCloud panel (Ubuntu) ```bash -sudo apt-get -y install git python-virtualenv python-dev python-lxml libvirt-dev zlib1g-dev libxslt1-dev nginx supervisor libsasl2-modules gcc pkg-config python-guestfs +sudo apt-get -y install git virtualenv python-virtualenv python-dev python-lxml libvirt-dev zlib1g-dev libxslt1-dev nginx supervisor libsasl2-modules gcc pkg-config python-guestfs git clone https://github.com/retspen/webvirtcloud cd webvirtcloud cp webvirtcloud/settings.py.template webvirtcloud/settings.py @@ -219,6 +219,25 @@ login: admin password: admin +### Configuring Compute SSH connection +This is a short example of configuring cloud and compute side of the ssh connection. + +On the webvirtcloud machine you need to generate ssh keys and optionally disable StrictHostKeyChecking. +``` +chown www-data -R ~www-data +sudo -u www-data ssh-keygen +cat > ~www-data/.ssh/config << EOF +Host * +StrictHostKeyChecking no +EOF +chown www-data -R ~www-data/.ssh/config +``` + +You need to put cloud public key into authorized keys on the compute node. Simpliest way of doing this is to use ssh tool from the webvirtcloud server. +``` +sudo -u www-data ssh-copy-id root@compute1 +``` + ### Cloud-init Currently supports only root ssh authorized keys and hostname. Example configuration of the cloud-init client follows. ``` diff --git a/instances/templates/instance.html b/instances/templates/instance.html index ba5c891..b879b02 100644 --- a/instances/templates/instance.html +++ b/instances/templates/instance.html @@ -1284,6 +1284,8 @@ image = new_vname + "-" + disk_minus_suffix; } else if (disk_name.lastIndexOf('.') > -1 && disk_dot_suffix.length <= 7) { image = new_vname + "." + disk_dot_suffix + } else if (new_vname != disk_name) { + image = new_vname } else { image = new_vname + '-clone'; } diff --git a/vrtManager/instance.py b/vrtManager/instance.py index ae04b4a..b27baa0 100644 --- a/vrtManager/instance.py +++ b/vrtManager/instance.py @@ -245,7 +245,10 @@ class wvmInstance(wvmConnect): try: dev = disk.xpath('target/@dev')[0] src_fl = disk.xpath('source/@file|source/@dev|source/@name|source/@volume')[0] - disk_format = disk.xpath('driver/@type')[0] + try: + disk_format = disk.xpath('driver/@type')[0] + except: + pass try: vol = self.get_volume_by_path(src_fl) volume = vol.name() @@ -719,6 +722,28 @@ class wvmInstance(wvmConnect): stg = vol.storagePoolLookupByVolume() stg.createXMLFrom(vol_clone_xml, vol, meta_prealloc) + source_protocol = elm.get('protocol') + if source_protocol == 'rbd': + source_name = elm.get('name') + clone_name = "%s/%s" % (os.path.dirname(source_name), target_file) + elm.set('name', clone_name) + + vol = self.get_volume_by_path(source_name) + vol_format = util.get_xml_path(vol.XMLDesc(0), + "/volume/target/format/@type") + + vol_clone_xml = """ + + %s + 0 + 0 + + + + """ % (target_file, vol_format) + stg = vol.storagePoolLookupByVolume() + stg.createXMLFrom(vol_clone_xml, vol, meta_prealloc) + source_dev = elm.get('dev') if source_dev: clone_path = os.path.join(os.path.dirname(source_dev), target_file)