Merge pull request #12 from toci-dev/add-new-patches
Add new patches for fedora.
This commit is contained in:
commit
4db2dc86d1
@ -0,0 +1,171 @@
|
||||
From e3fec050e24a30b93dac3afe3b6615aafc049cf1 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Alvares Gomes <lucasagomes@gmail.com>
|
||||
Date: Thu, 16 May 2013 16:45:36 +0100
|
||||
Subject: [PATCH] Libvirt to create and destroy bridges.
|
||||
|
||||
Modifying networking information directly via /etc/network/interfaces
|
||||
is not cross-distro compatible.
|
||||
---
|
||||
lib/actions.py | 96 ++++++++++++++++++++++++----------------------------------
|
||||
1 file changed, 39 insertions(+), 57 deletions(-)
|
||||
|
||||
diff --git a/lib/actions.py b/lib/actions.py
|
||||
index f0a3e95..0ed5f44 100755
|
||||
--- a/lib/actions.py
|
||||
+++ b/lib/actions.py
|
||||
@@ -24,6 +24,7 @@
|
||||
from textwrap import dedent
|
||||
import re
|
||||
from lxml import objectify
|
||||
+from lxml import etree
|
||||
from collections import defaultdict
|
||||
|
||||
def call(*args, **kwargs):
|
||||
@@ -47,14 +48,6 @@ def __call__(self, parser, params, values, option_string=None, **kwargs):
|
||||
self._print(self.params, verbose=True)
|
||||
|
||||
self.conn=libvirt.open(self.params.qemu)
|
||||
- self.bridge_template = dedent( """\
|
||||
-
|
||||
- # bm_poseur bridge
|
||||
- auto %(bridge)s
|
||||
- iface %(bridge)s inet manual
|
||||
- bridge_ports %(ports)s #bmposeur
|
||||
-
|
||||
- """)
|
||||
|
||||
# action function mapping
|
||||
actions = { 'create-vm' : self.create_vms,
|
||||
@@ -91,42 +84,27 @@ def get_macs(self):
|
||||
for domain in domains:
|
||||
if not domain.find(self.params.prefix) == -1:
|
||||
_xml = objectify.fromstring(self.conn.lookupByName(domain).XMLDesc(0))
|
||||
-
|
||||
+
|
||||
output += "%s" % _xml.devices.interface[0].mac.attrib.get("address")
|
||||
try:
|
||||
output += ",%s " % _xml.devices.interface[1].mac.attrib.get("address")
|
||||
except IndexError:
|
||||
output += " "
|
||||
|
||||
-
|
||||
+
|
||||
print '%s' % output.strip(' ')
|
||||
|
||||
|
||||
def destroy_bridge(self):
|
||||
""" This destroys the bridge """
|
||||
- self._print("reading network config file", True)
|
||||
-
|
||||
- # remove the route first
|
||||
- idx=self.params.bridge_ip.rindex('.')
|
||||
- net=self.params.bridge_ip[0:idx] + ".0"
|
||||
- call('route del -net %s netmask 255.255.255.0' % net, shell=True)
|
||||
-
|
||||
- # take the bridge down
|
||||
- call('ifdown %s' % self.params.bridge, shell=True)
|
||||
-
|
||||
- network_file = open(self.params.network_config, 'r').read()
|
||||
- ports = " ".join(self.params.bridge_port) or "none"
|
||||
- to_remove = self.bridge_template % dict(bridge=self.params.bridge, ports=ports)
|
||||
- to_remove = to_remove.strip().splitlines()
|
||||
-
|
||||
- self._print("clearing bridge", True)
|
||||
- for line in to_remove:
|
||||
- network_file = network_file.replace(line,'')
|
||||
+ if not self.is_already_bridge():
|
||||
+ self._print('%s network not found' % self.params.bridge)
|
||||
+ return
|
||||
|
||||
- self._print("writing changed network config file", True)
|
||||
- outf = open( self.params.network_config , "w")
|
||||
- outf.write(network_file.strip())
|
||||
- outf.close()
|
||||
+ network = self.conn.networkLookupByName(self.params.bridge)
|
||||
+ if network.isActive():
|
||||
+ network.destroy()
|
||||
+ network.undefine()
|
||||
|
||||
self._print("removing dnsmasq exclusion file", True)
|
||||
try:
|
||||
@@ -138,12 +116,30 @@ def destroy_bridge(self):
|
||||
|
||||
def is_already_bridge(self):
|
||||
""" returns t/f if a bridge exists or not """
|
||||
- network_file = open(self.params.network_config, 'r').read()
|
||||
- if network_file.find(self.params.bridge) == -1:
|
||||
- return False
|
||||
- else:
|
||||
- return True
|
||||
+ #listNetworks = list the active networks
|
||||
+ #listDefinedNetworks = list the inactive networks
|
||||
+ all_networks = self.conn.listNetworks() + \
|
||||
+ self.conn.listDefinedNetworks()
|
||||
+ return self.params.bridge in all_networks
|
||||
+
|
||||
+ def build_bridge_xml(self):
|
||||
+ """ """
|
||||
+ root = etree.Element('network')
|
||||
+ name_el = etree.SubElement(root, 'name')
|
||||
+ name_el.text = self.params.bridge
|
||||
+
|
||||
+ stp = "on" if len(self.params.bridge_port) > 1 else "off"
|
||||
+ bridge_el = etree.SubElement(root, 'bridge',
|
||||
+ name=self.params.bridge,
|
||||
+ stp=stp)
|
||||
|
||||
+ if self.params.bridge_ip and self.params.bridge_ip.lower() != 'none':
|
||||
+ etree.SubElement(root, 'ip', address=self.params.bridge_ip)
|
||||
+
|
||||
+ for p in self.params.bridge_port:
|
||||
+ etree.SubElement(root, 'forward', mode='route', dev=p)
|
||||
+
|
||||
+ return etree.tostring(root)
|
||||
|
||||
def create_bridge(self):
|
||||
""" this creates a bridge """
|
||||
@@ -152,21 +148,11 @@ def create_bridge(self):
|
||||
print('bridge already exists')
|
||||
return
|
||||
|
||||
- self._print("Creating bridge interface %(bridge)s." %
|
||||
- dict(bridge=self.params.bridge), verbose=True)
|
||||
-
|
||||
- ports = " ".join(self.params.bridge_port) or "none"
|
||||
-
|
||||
- self._print(" Writing new stanza for bridge interface %(bridge)s." %
|
||||
- dict(bridge=self.params.bridge), verbose=True)
|
||||
-
|
||||
- with file(self.params.network_config, 'ab') as outf:
|
||||
- outf.seek(0, 2)
|
||||
- outf.write(self.bridge_template % dict(bridge=self.params.bridge, ports=ports))
|
||||
-
|
||||
- self._print(" Wrote new stanza for bridge interface %s." %
|
||||
+ self._print(" Creating a new bridge interface %s." %
|
||||
self.params.bridge, verbose=True)
|
||||
|
||||
+ self.conn.networkDefineXML(self.build_bridge_xml())
|
||||
+
|
||||
self._print(" Writing dnsmasq.d exclusion file.", verbose=True)
|
||||
|
||||
with file('/etc/dnsmasq.d/%(bridge)s' % dict(bridge=self.params.bridge), 'wb') as outf:
|
||||
@@ -177,13 +163,9 @@ def create_bridge(self):
|
||||
self.params.bridge, verbose=True)
|
||||
|
||||
self._print('bring bridge online')
|
||||
- call('ifup %s ' % self.params.bridge , shell=True)
|
||||
- if self.params.bridge_ip and self.params.bridge_ip.lower() != 'none':
|
||||
- # XXX: This should change the stanza rather than calling ip
|
||||
- self._print('Assigning IP %s to bridge' % self.params.bridge_ip)
|
||||
- call('ip addr add dev %s local %s/24 scope global' %
|
||||
- (self.params.bridge, self.params.bridge_ip),
|
||||
- shell=True)
|
||||
+ network = self.conn.networkLookupByName(self.params.bridge)
|
||||
+ network.setAutostart(True)
|
||||
+ network.create()
|
||||
|
||||
#idx=self.params.bridge_ip.rindex('.')
|
||||
#net=self.params.bridge_ip[0:idx] + ".0"
|
||||
--
|
||||
1.8.1.6
|
||||
|
70
patches/bm_poseur-0002-Abstract-kvm-executable-names.patch
Normal file
70
patches/bm_poseur-0002-Abstract-kvm-executable-names.patch
Normal file
@ -0,0 +1,70 @@
|
||||
From c2edd258fcdd76f6a4f4fa31bbc989268833d803 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Alvares Gomes <lucasagomes@gmail.com>
|
||||
Date: Fri, 17 May 2013 11:14:25 +0100
|
||||
Subject: [PATCH 1/1] Abstract KVM executable name.
|
||||
|
||||
RedHat and Debian based systems have different executable names.
|
||||
---
|
||||
lib/actions.py | 18 +++++++++++++++++-
|
||||
lib/template.xml | 2 +-
|
||||
2 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/actions.py b/lib/actions.py
|
||||
index 0ed5f44..a9c68d9 100755
|
||||
--- a/lib/actions.py
|
||||
+++ b/lib/actions.py
|
||||
@@ -174,6 +174,20 @@ class actions(argparse.Action):
|
||||
# (net, self.params.bridge),
|
||||
# shell=True)
|
||||
|
||||
+ def get_emulator(self):
|
||||
+ """
|
||||
+ Return the right emulator. RedHat and Debian based systems have
|
||||
+ different executable names.
|
||||
+ """
|
||||
+ if os.path.exists("/usr/bin/kvm"): # Debian
|
||||
+ return "/usr/bin/kvm"
|
||||
+ elif os.path.exists("/usr/bin/qemu-kvm"): # Redhat
|
||||
+ return "/usr/bin/qemu-kvm"
|
||||
+ else:
|
||||
+ self._print("ERROR: Emulator not found. You need to have either "
|
||||
+ "kvm or qemu-kvm installed before continue.")
|
||||
+ sys.exit(1)
|
||||
+
|
||||
def load_xml(self, name, image):
|
||||
"""Loads the xml file and evals it with the right settings"""
|
||||
self._print('load_xml called')
|
||||
@@ -187,6 +201,7 @@ class actions(argparse.Action):
|
||||
name=name,
|
||||
max_mem=self.params.max_mem,
|
||||
cpus=self.params.cpus,
|
||||
+ emulator=self.get_emulator(),
|
||||
image=image )
|
||||
|
||||
|
||||
@@ -218,7 +233,8 @@ class actions(argparse.Action):
|
||||
name = "%s%s" % (self.params.prefix , str(i))
|
||||
image = "%s%s.img" % (self.params.image_path, name)
|
||||
call("sudo rm -f %s" % image, shell=True)
|
||||
- cmd = "kvm-img create -f raw %s %s" % (image, self.params.disk_size)
|
||||
+ cmd = "qemu-img create -f raw %s %s" % (image,
|
||||
+ self.params.disk_size)
|
||||
call(cmd, shell=True)
|
||||
|
||||
self.conn.defineXML(self.load_xml(name,image))
|
||||
diff --git a/lib/template.xml b/lib/template.xml
|
||||
index 59f5391..388e16e 100644
|
||||
--- a/lib/template.xml
|
||||
+++ b/lib/template.xml
|
||||
@@ -18,7 +18,7 @@
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
- <emulator>/usr/bin/kvm</emulator>
|
||||
+ <emulator>%(emulator)s</emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='raw' cache='writeback'/>
|
||||
<source file='%(image)s'/>
|
||||
--
|
||||
1.8.1.4
|
||||
|
45
patches/incubator-0001-Dont-hard-code-libvirt-emulator.patch
Normal file
45
patches/incubator-0001-Dont-hard-code-libvirt-emulator.patch
Normal file
@ -0,0 +1,45 @@
|
||||
From 941862202864ed2f65018b5af3f8b5d340ba5116 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Prince <dprince@redhat.com>
|
||||
Date: Thu, 16 May 2013 13:54:56 -0400
|
||||
Subject: [PATCH] Don't hard code libvirt emulator.
|
||||
|
||||
Updates configure-bootstrap-vm so that it determines the correct
|
||||
location of the emulator binary and injects it as a parameter
|
||||
into the libvirt template.
|
||||
---
|
||||
bootstrap/bootstrap.xml | 2 +-
|
||||
bootstrap/configure-bootstrap-vm | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/bootstrap/bootstrap.xml b/bootstrap/bootstrap.xml
|
||||
index 726022e..1425e7e 100644
|
||||
--- a/bootstrap/bootstrap.xml
|
||||
+++ b/bootstrap/bootstrap.xml
|
||||
@@ -16,7 +16,7 @@
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
- <emulator>/usr/bin/kvm</emulator>
|
||||
+ <emulator>%(emulator)s</emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2' cache='writeback'/>
|
||||
<source file='%(imagefile)s'/>
|
||||
diff --git a/bootstrap/configure-bootstrap-vm b/bootstrap/configure-bootstrap-vm
|
||||
index 665fbf2..97d6187 100755
|
||||
--- a/bootstrap/configure-bootstrap-vm
|
||||
+++ b/bootstrap/configure-bootstrap-vm
|
||||
@@ -34,6 +34,11 @@ def main():
|
||||
if args.image is not None:
|
||||
params['imagefile'] = args.image
|
||||
|
||||
+ if os.path.exists("/usr/bin/kvm"): # Debian
|
||||
+ params['emulator'] = "/usr/bin/kvm"
|
||||
+ elif os.path.exists("/usr/bin/qemu-kvm"): # Redhat
|
||||
+ params['emulator'] = "/usr/bin/qemu-kvm"
|
||||
+
|
||||
libvirt_template = source_template % params
|
||||
conn=libvirt.open("qemu:///system")
|
||||
a = conn.defineXML(libvirt_template)
|
||||
--
|
||||
1.8.1.6
|
||||
|
@ -0,0 +1,61 @@
|
||||
From 3e3cbfc54eeea3a63f0629036a8c56db6dc6fc7b Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Alvares Gomes <lucasagomes@gmail.com>
|
||||
Date: Fri, 17 May 2013 10:22:02 +0100
|
||||
Subject: [PATCH] Update the libvirt configuration.
|
||||
|
||||
Management access to libvirt is controlled through membership to a unix
|
||||
group, on fedora/rhel we need to updated the libvirt configuration to
|
||||
give management access to the libvirtd group.
|
||||
---
|
||||
scripts/install-dependencies | 28 +++++++++++++++++++---------
|
||||
1 file changed, 19 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/scripts/install-dependencies b/scripts/install-dependencies
|
||||
index d976c98..7f8b1d2 100755
|
||||
--- a/scripts/install-dependencies
|
||||
+++ b/scripts/install-dependencies
|
||||
@@ -6,15 +6,6 @@ if ! grep "$(cat ~/.ssh/id_rsa.pub)" ~/.ssh/authorized_keys >/dev/null; then
|
||||
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
|
||||
fi
|
||||
|
||||
-# libvirtd group
|
||||
-grep libvirtd /etc/group || sudo groupadd libvirtd
|
||||
-if ! id | grep libvirtd; then
|
||||
- echo "adding $USER to group libvirtd"
|
||||
- sudo usermod -a -G libvirtd $USER
|
||||
- exec sudo su -l $USER $PWD/$0
|
||||
- PRINT_RESTART=1
|
||||
-fi
|
||||
-
|
||||
# packages
|
||||
os=unsupported
|
||||
if [ -f /etc/redhat-release ]; then
|
||||
@@ -56,6 +47,25 @@ if [ "$os" = "redhat" ]; then
|
||||
sudo service libvirtd restart
|
||||
fi
|
||||
|
||||
+# libvirtd group
|
||||
+grep libvirtd /etc/group || sudo groupadd libvirtd
|
||||
+if ! id | grep libvirtd; then
|
||||
+ echo "adding $USER to group libvirtd"
|
||||
+ sudo usermod -a -G libvirtd $USER
|
||||
+
|
||||
+ if [ "$os" = "redhat" ]; then
|
||||
+ libvirtd_file=/etc/libvirt/libvirtd.conf
|
||||
+ if ! sudo grep "^unix_sock_group" $libvirtd_file > /dev/null; then
|
||||
+ sudo sed -i 's/^#unix_sock_group.*/unix_sock_group = "libvirtd"/g' $libvirtd_file
|
||||
+ sudo sed -i 's/^#auth_unix_rw.*/auth_unix_rw = "none"/g' $libvirtd_file
|
||||
+ sudo sed -i 's/^#unix_sock_rw_perms.*/unix_sock_rw_perms = "0770"/g' $libvirtd_file
|
||||
+ sudo service libvirtd restart
|
||||
+ fi
|
||||
+ fi
|
||||
+
|
||||
+ exec sudo su -l $USER $PWD/$0
|
||||
+fi
|
||||
+
|
||||
echo "Check to see that you are in the libvirtd group in your current shell before going on. You can check by running:"
|
||||
echo
|
||||
echo "id | grep libvirtd"
|
||||
--
|
||||
1.8.1.6
|
||||
|
31
patches/incubator-0003-Remove-yum-update.patch
Normal file
31
patches/incubator-0003-Remove-yum-update.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 805222d71ba8d4f3d80a6ddb14ae82dc9fac01e9 Mon Sep 17 00:00:00 2001
|
||||
From: Lucas Alvares Gomes <lucasagomes@gmail.com>
|
||||
Date: Fri, 17 May 2013 12:03:04 +0100
|
||||
Subject: [PATCH 1/1] Remove yum update.
|
||||
|
||||
Remove the yum update because we want to install some dependencies
|
||||
and not update the whole system. Audit was added to the list
|
||||
of dependencies to avoid conflict with the glibc package:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=949745
|
||||
---
|
||||
scripts/install-dependencies | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/scripts/install-dependencies b/scripts/install-dependencies
|
||||
index d976c98..d4abf8b 100755
|
||||
--- a/scripts/install-dependencies
|
||||
+++ b/scripts/install-dependencies
|
||||
@@ -47,9 +47,8 @@ if [ "$os" = "debian" ]; then
|
||||
fi
|
||||
|
||||
if [ "$os" = "redhat" ]; then
|
||||
- sudo yum update -y
|
||||
# For RHEL/CentOS, python-pip is in EPEL
|
||||
- sudo yum install -y python-lxml libvirt-python libvirt qemu-kvm git python-pip openssl-devel python-devel gcc
|
||||
+ sudo yum install -y python-lxml libvirt-python libvirt qemu-kvm git python-pip openssl-devel python-devel gcc audit
|
||||
|
||||
sudo pip-python install -U python-novaclient python-glanceclient python-heatclient python-keystoneclient
|
||||
|
||||
--
|
||||
1.8.1.4
|
||||
|
Loading…
Reference in New Issue
Block a user