import re
import subprocess
import platform
+import requests
from collections import Counter
# VPP_VERSION = '1707'
# VPP_VERSION = '1710'
-VPP_VERSION = '1801'
+VPP_VERSION = '1810'
class VPPUtil(object):
# Backup the sources list
self._autoconfig_backup_file(sfile)
- # Remove the current file
- cmd = 'rm {}'.format(sfile)
- (ret, stdout, stderr) = self.exec_command(cmd)
- if ret != 0:
- logging.debug('{} failed on node {} {}'.format(
- cmd,
- node['host'],
- stderr))
-
- reps = 'deb [trusted=yes] https://nexus.fd.io/content/'
+ reps = 'deb [trusted=yes] https://packagecloud.io/fdio/'
# When using a stable branch
- # reps += 'repositories/fd.io.stable.{}.ubuntu.{}.main/ ./\n'.format(fdio_release, ubuntu_version)
+ # reps += '{}/ubuntu {} main ./\n'.format(fdio_release, ubuntu_version)
# When using release
- reps += 'repositories/fd.io.ubuntu.{}.main/ ./\n'.format(ubuntu_version)
-
- cmd = 'echo "{0}" | sudo tee {1}'.format(reps, sfile)
+ reps += 'release/ubuntu {} main ./\n'.format(ubuntu_version)
+ # When using master
+ # reps += 'master/ubuntu {} main/ ./\n'.format(ubuntu_version)
+
+ with open(sfile, 'w') as sfd:
+ sfd.write(reps)
+ sfd.close()
+
+ # Add the key
+ key = requests.get('https://packagecloud.io/fdio/{}/gpgkey'.format('release'))
+ # cmd = 'curl -L https://packagecloud.io/fdio/{}/gpgkey | apt-key add -'.format(fdio_release)
+ # cmd = 'curl -L https://packagecloud.io/fdio/{}/gpgkey | apt-key add -'.format('mastert')
+ cmd = 'echo "{}" | apt-key add -'.format(key.content)
(ret, stdout, stderr) = self.exec_command(cmd)
if ret != 0:
raise RuntimeError('{} failed on node {} {}'.format(
self._install_vpp_pkg_ubuntu(node, 'vpp-lib')
self._install_vpp_pkg_ubuntu(node, 'vpp')
self._install_vpp_pkg_ubuntu(node, 'vpp-plugins')
- self._install_vpp_pkg_ubuntu(node, 'vpp-dpdk-dkms')
- self._install_vpp_pkg_ubuntu(node, 'vpp-dpdk-dev')
self._install_vpp_pkg_ubuntu(node, 'vpp-api-python')
self._install_vpp_pkg_ubuntu(node, 'vpp-api-java')
self._install_vpp_pkg_ubuntu(node, 'vpp-api-lua')
:type centos_version: string
"""
+ # Be sure the correct system packages are installed
+ cmd = 'yum -y update'
+ (ret, stdout, stderr) = self.exec_command(cmd)
+ if ret != 0:
+ logging.debug('{} failed on node {} {}'.format(
+ cmd,
+ node['host'],
+ stderr))
+
+ cmd = 'yum -y install pygpgme yum-utils'
+ (ret, stdout, stderr) = self.exec_command(cmd)
+ if ret != 0:
+ logging.debug('{} failed on node {} {}'.format(
+ cmd,
+ node['host'],
+ stderr))
+
# Modify the sources list
sfile = '/etc/yum.repos.d/fdio-release.repo'
node['host'],
stderr))
- reps = '[fdio-stable-{}]\n'.format(fdio_release)
- reps += 'name=fd.io stable/{} branch latest merge\n'.format(fdio_release)
- # When using stable
- # reps += 'baseurl=https://nexus.fd.io/content/repositories/fd.io.stable.{}.{}/\n'.\
- # format(fdio_release, centos_version)
- # When using release
- reps += 'baseurl=https://nexus.fd.io/content/repositories/fd.io.{}/\n'.format(centos_version)
+ # Set the branch
+ bname = 'release'
+ # bname = '1810'
+ # bname = 'master'
+
+ # Get the file contents
+ reps = '[fdio_{}]\n'.format(bname)
+ reps += 'name=fdio_{}\n'.format(bname)
+ reps += 'baseurl=https://packagecloud.io/fdio/{}/el/7/$basearch\n'.format(bname)
+ reps += 'repo_gpgcheck=1\n'
+ reps += 'gpgcheck=0\n'
+ reps += 'enabled=1\n'
+ reps += 'gpgkey=https://packagecloud.io/fdio/{}/gpgkey\n'.format(bname)
+ reps += 'sslverify=1\n'
+ reps += 'sslcacert=/etc/pki/tls/certs/ca-bundle.crt\n'
+ reps += 'metadata_expire=300\n'
+ reps += '\n'
+ reps += '[fdio_{}-source]\n'.format(bname)
+ reps += 'name=fdio_release-{}\n'.format(bname)
+ reps += 'baseurl=https://packagecloud.io/fdio/{}/el/7/SRPMS\n'.format(bname)
+ reps += 'repo_gpgcheck=1\n'
+ reps += 'gpgcheck=0\n'
reps += 'enabled=1\n'
- reps += 'gpgcheck=0'
+ reps += 'gpgkey=https://packagecloud.io/fdio/{}/gpgkey\n'.format(bname)
+ reps += 'sslverify =1\n'
+ reps += 'sslcacert=/etc/pki/tls/certs/ca-bundle.crt\n'
+ reps += 'metadata_expire=300\n'
- cmd = 'echo "{0}" | sudo tee {1}'.format(reps, sfile)
+ with open(sfile, 'w') as sfd:
+ sfd.write(reps)
+ sfd.close()
+
+ # Update the fdio repo
+ cmd = 'yum clean all'
(ret, stdout, stderr) = self.exec_command(cmd)
if ret != 0:
- raise RuntimeError('{} failed on node {} {}'.format(
+ logging.debug('{} failed on node {} {}'.format(
+ cmd,
+ node['host'],
+ stderr))
+
+ cmd = "yum -q makecache -y --disablerepo='*' --enablerepo='fdio_{}'".format(bname)
+ (ret, stdout, stderr) = self.exec_command(cmd)
+ if ret != 0:
+ logging.debug('{} failed on node {} {}'.format(
cmd,
node['host'],
stderr))
# Install the packages
-
+ self._install_vpp_pkg_centos(node, 'vpp-selinux-policy')
self._install_vpp_pkg_centos(node, 'vpp-lib')
self._install_vpp_pkg_centos(node, 'vpp')
self._install_vpp_pkg_centos(node, 'vpp-plugins')
- # jadfix Check with Ole
- # self._install_vpp_pkg_centos(node, 'vpp-dpdk-devel')
self._install_vpp_pkg_centos(node, 'vpp-api-python')
self._install_vpp_pkg_centos(node, 'vpp-api-java')
self._install_vpp_pkg_centos(node, 'vpp-api-lua')
self._install_vpp_pkg_centos(node, 'vpp-devel')
+ self._install_vpp_pkg_centos(node, 'vpp-debuginfo')
def install_vpp(self, node):
"""
:type node: dict
"""
distro = self.get_linux_distro()
+ logging.info(" {}".format(distro[0]))
if distro[0] == 'Ubuntu':
+ logging.info("Install Ubuntu")
self._install_vpp_ubuntu(node)
elif distro[0] == 'CentOS Linux':
logging.info("Install CentOS")
self._install_vpp_centos(node)
else:
- return
+ logging.info("Install CentOS (default)")
+ self._install_vpp_centos(node)
+ return
def _uninstall_vpp_pkg_ubuntu(self, node, pkg):
"""
if len(pkgs) > 0:
if 'version' in pkgs[0]:
logging.info("Uninstall Ubuntu Packages")
+ self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dbg')
+ self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dev')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp-api-python')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp-api-java')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp-api-lua')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp-plugins')
- self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dpdk-dev')
- self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dpdk-dkms')
- self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dev')
- self._uninstall_vpp_pkg_ubuntu(node, 'vpp-dbg')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp')
self._uninstall_vpp_pkg_ubuntu(node, 'vpp-lib')
else:
if len(pkgs) > 0:
if 'version' in pkgs[0]:
logging.info("Uninstall CentOS Packages")
+ self._install_vpp_pkg_centos(node, 'vpp-debuginfo')
+ self._uninstall_vpp_pkg_centos(node, 'vpp-devel')
self._uninstall_vpp_pkg_centos(node, 'vpp-api-python')
self._uninstall_vpp_pkg_centos(node, 'vpp-api-java')
self._uninstall_vpp_pkg_centos(node, 'vpp-api-lua')
self._uninstall_vpp_pkg_centos(node, 'vpp-plugins')
- self._uninstall_vpp_pkg_centos(node, 'vpp-dpdk-devel')
- self._uninstall_vpp_pkg_centos(node, 'vpp-devel')
self._uninstall_vpp_pkg_centos(node, 'vpp')
self._uninstall_vpp_pkg_centos(node, 'vpp-lib')
+ self._uninstall_vpp_pkg_centos(node, 'vpp-selinux-policy')
else:
logging.info("Uninstall locally installed CentOS Packages")
for pkg in pkgs:
distro = self.get_linux_distro()
if distro[0] == 'Ubuntu':
+ logging.info("Uninstall Ubuntu")
self._uninstall_vpp_ubuntu(node)
elif distro[0] == 'CentOS Linux':
logging.info("Uninstall CentOS")
self._uninstall_vpp_centos(node)
else:
+ logging.info("Uninstall CentOS (Default)")
+ self._uninstall_vpp_centos(node)
return
def show_vpp_settings(self, *additional_cmds):
elif distro[0] == 'CentOS Linux':
pkgs = self._get_installed_vpp_pkgs_centos()
else:
+ pkgs = self._get_installed_vpp_pkgs_centos()
return []
return pkgs
cmd = 'service vpp stop'
(ret, stdout, stderr) = VPPUtil.exec_command(cmd)
if ret != 0:
- raise RuntimeError('{} failed on node {} {} {}'.
+ logging.debug('{} failed on node {} {} {}'.
format(cmd, node['host'],
stdout, stderr))
distro = platform.linux_distribution()
if distro[0] == 'Ubuntu' or \
distro[0] == 'CentOS Linux' or \
- distro[:26] == 'Linux Distribution Red Hat':
+ distro[:7] == 'Red Hat':
return distro
else:
raise RuntimeError('Linux Distribution {} is not supported'.format(distro[0]))
:param node: VPP node.
:type node: dict
+ :returns: A list of interfaces
"""
+ ifaces = []
cmd = 'vppctl show bridge'
(ret, stdout, stderr) = VPPUtil.exec_command(cmd)
if ret != 0:
for line in lines:
if line == 'no bridge-domains in use':
print line
- return
+ return ifaces
if len(line) == 0:
continue
raise RuntimeError('{} failed on node {} {} {}'.
format(cmd, node['host'],
stdout, stderr))
- print stdout
+
+ lines = stdout.split('\r\n')
+ for line in lines:
+ iface = re.findall(r'[a-zA-z]+\d+/\d+/\d+', line)
+ if len(iface):
+ ifcidx ={'name': iface[0], 'index': line.split()[1] }
+ ifaces.append(ifcidx)
+
+ print stdout
+ return ifaces