[Kimchi-devel] [project-kimchi][PATCHv2 1/2] utils: Add nfs prevalication
Aline Manera
alinefm at linux.vnet.ibm.com
Wed Dec 18 12:34:57 UTC 2013
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 12/18/2013 07:34 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Abstract a helper function to parse cmd result.
> Usage:
> (1)get cmd result with subprocess.call or subprocess.Popen
> (2) call pass_cmd_output to get formated outputs
> Example:
> blkid = subprocess.Popen(["cat", "/proc/mounts"],
> stdout=subprocess.PIPE, stderr=subprocess.PIPE)
> outs = blkid.communicate()[0]
> output_items= ['path', 'mnt_point', 'type', 'option']
> utils.parse_cmd_output(outs, output_items)
> Sample output:
> [{'path': '/dev/sda8', 'type': 'ext4',
> 'option': 'rw,relatime,data=ordered', 'mnt_point': '/home'},
> {'path': 'localhost:/home/royce/isorepo', 'type': 'nfs4',
> 'option': 'rw...addr=127.0.0.1', 'mnt_point': '/mnt'}]
>
> To prevent future mount of nfs path will hang,
> we will try nfs path with a quick mount,
> if this check fails, report warning to user.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
> src/kimchi/utils.py | 38 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/src/kimchi/utils.py b/src/kimchi/utils.py
> index f7eda93..14b9c8a 100644
> --- a/src/kimchi/utils.py
> +++ b/src/kimchi/utils.py
> @@ -22,6 +22,9 @@
> #
>
> import cherrypy
> +import subprocess
> +import tempfile
> +import threading
> import os
>
>
> @@ -84,3 +87,38 @@ def import_class(class_path):
>
> def import_module(module_name):
> return __import__(module_name, fromlist=[''])
> +
> +def parse_cmd_output(output, output_items):
> + res = []
> + for line in output.split("\n"):
> + res.append(dict(zip(output_items, line.split())))
> +
> + return res
> +
> +def check_nfs_export(export_path):
> + res = False
> + outputs = None
> + mnt_point = tempfile.mkdtemp(dir='/tmp')
> + cmd = ["mount", "-o", 'soft,timeo=100,retrans=3,retry=0',
> + export_path, mnt_point]
> + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
> + stderr=subprocess.PIPE)
> + thread = threading.Thread(target = proc.communicate)
> + thread.start()
> + thread.join(30)
> +
> + if thread.is_alive():
> + proc.kill()
> + thread.join()
> +
> + with open("/proc/mounts" , "rb") as f:
> + outputs = f.read()
> + output_items = ['dev_path', 'mnt_point', 'type']
> + mounts = parse_cmd_output(outputs, output_items)
> + for item in mounts:
> + if 'dev_path' in item and item['dev_path'] == export_path:
> + res = True
> + cmd = ["umount", "-f", export_path]
> + subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
> +
> + return res
--
project-kimchi mailing list <project-kimchi at googlegroups.com>
https://groups.google.com/forum/#!forum/project-kimchi
---
You received this message because you are subscribed to the Google Groups "project-kimchi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe at googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
More information about the Kimchi-devel
mailing list