diff options
author | Peter Mikus <pmikus@cisco.com> | 2017-06-22 13:24:22 +0200 |
---|---|---|
committer | Tibor Frank <tifrank@cisco.com> | 2017-06-23 07:56:36 +0000 |
commit | 45aa8056fd26ea55e3e229c4d5b164a272a5b3c2 (patch) | |
tree | af5cf1a96ea01ee10cb023bc090a6a4d8d3a2a1c /resources/libraries/python/LXCUtils.py | |
parent | 2a17b5c9e6746cff71eff0e0a9c6f822eb6645f8 (diff) |
Update of LXCUtil library
Change-Id: I1a095e45960ca004413c4ecbfd410e41fb621c74
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources/libraries/python/LXCUtils.py')
-rw-r--r-- | resources/libraries/python/LXCUtils.py | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/resources/libraries/python/LXCUtils.py b/resources/libraries/python/LXCUtils.py index 3f251a0db1..9f42540986 100644 --- a/resources/libraries/python/LXCUtils.py +++ b/resources/libraries/python/LXCUtils.py @@ -14,8 +14,10 @@ """Library to manipulate LXC.""" from resources.libraries.python.ssh import SSH +from resources.libraries.python.constants import Constants from resources.libraries.python.topology import NodeType + __all__ = ["LXCUtils"] class LXCUtils(object): @@ -25,6 +27,8 @@ class LXCUtils(object): # LXC container name self._container_name = container_name self._node = None + # Host hugepages dir that will be mounted inside LXC + self._host_hugepages_dir = '/dev/hugepages' # Host dir that will be mounted inside LXC self._host_dir = '/tmp/' # Guest dir to mount host dir to @@ -251,7 +255,7 @@ class LXCUtils(object): """ if self.is_container_present(): if force_create: - self.container_destroy() + self.destroy_container() else: return @@ -296,7 +300,7 @@ class LXCUtils(object): self.stop_container() self.start_container() - def container_destroy(self): + def destroy_container(self): """Stop and destroy a container.""" self._lxc_destroy() @@ -329,11 +333,10 @@ class LXCUtils(object): ssh = SSH() ssh.connect(self._node) - self.lxc_attach('mkdir -p {0}'.format(self._guest_dir)) - mnt_cfg = 'lxc.mount.entry = {0} /var/lib/lxc/{1}/rootfs{2} ' \ - 'none bind 0 0'.format(self._host_dir, self._container_name, - self._guest_dir) + 'none bind,create=dir 0 0'.format(self._host_dir, + self._container_name, + self._guest_dir) ret, _, _ = ssh.exec_command_sudo( "sh -c 'echo \"{0}\" >> /var/lib/lxc/{1}/config'" .format(mnt_cfg, self._container_name)) @@ -343,6 +346,27 @@ class LXCUtils(object): self.restart_container() + def mount_hugepages_in_container(self): + """Mount hugepages inside container. + + :raises RuntimeError: If failed to mount hugepages in a container. + """ + + ssh = SSH() + ssh.connect(self._node) + + mnt_cfg = 'lxc.mount.entry = {0} dev/hugepages ' \ + 'none bind,create=dir 0 0'.format(self._host_hugepages_dir) + ret, _, _ = ssh.exec_command_sudo( + "sh -c 'echo \"{0}\" >> /var/lib/lxc/{1}/config'" + .format(mnt_cfg, self._container_name)) + if int(ret) != 0: + raise RuntimeError('Failed to mount {0} in lxc: {1}' + .format(self._host_hugepages_dir, + self._container_name)) + + self.restart_container() + def install_vpp_in_container(self, install_dkms=False): """Install vpp inside a container. @@ -373,3 +397,27 @@ class LXCUtils(object): ssh.connect(self._node) self.lxc_attach('service vpp restart') + + def create_vpp_cfg_in_container(self, vat_template_file, **args): + """Create VPP exec config for a container on given node. + + :param vat_template_file: Template file name of a VAT script. + :param args: Parameters for VAT script. + :type vat_template_file: str + :type args: dict + """ + ssh = SSH() + ssh.connect(self._node) + + vat_file_path = '{}/{}'.format(Constants.RESOURCES_TPL_VAT, + vat_template_file) + + with open(vat_file_path, 'r') as template_file: + cmd_template = template_file.readlines() + for line_tmpl in cmd_template: + vat_cmd = line_tmpl.format(**args) + ssh.exec_command('echo "{0}" | ' + 'sudo lxc-attach --name {1} -- ' + '/bin/sh -c "/bin/cat >> /tmp/running.exec"' + .format(vat_cmd.replace('\n', ''), + self._container_name)) |