Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
RHEL 7: -o rhv-upload: Use Python 2 instead of Python 3.
  • Loading branch information
rwmjones committed Mar 22, 2018
1 parent 55d7f5d commit bff845c
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 30 deletions.
17 changes: 8 additions & 9 deletions v2v/output_rhv_upload.ml
Expand Up @@ -77,7 +77,6 @@ let parse_rhv_output_options options =

{ rhv_cafile; rhv_cluster; rhv_direct; rhv_verifypeer }

let python3 = "python3" (* Defined by PEP 394 *)
let pidfile_timeout = 30
let finalization_timeout = 5*60

Expand Down Expand Up @@ -134,14 +133,14 @@ class output_rhv_upload output_alloc output_conn
error (f_"nbdkit is not new enough, you need to upgrade to nbdkit ≥ 1.1.16")
in

(* Check that the python3 plugin is installed and working
(* Check that the python plugin is installed and working
* and can load the plugin script.
*)
let error_unless_nbdkit_python3_working () =
let error_unless_nbdkit_python_working () =
let cmd = sprintf "nbdkit %s %s --dump-plugin >/dev/null"
python3 (quote plugin) in
"python" (quote plugin) in
if Sys.command cmd <> 0 then
error (f_"nbdkit Python 3 plugin is not installed or not working. It is required if you want to use ‘-o rhv-upload’.
error (f_"nbdkit Python plugin is not installed or not working. It is required if you want to use ‘-o rhv-upload’.
See also \"OUTPUT TO RHV\" in the virt-v2v(1) manual.")
in
Expand Down Expand Up @@ -192,7 +191,7 @@ See also \"OUTPUT TO RHV\" in the virt-v2v(1) manual.")
"--newstyle"; (* use newstyle NBD protocol *)
"--exportname"; "/";

"python3"; (* use the nbdkit Python 3 plugin *)
"python"; (* use the nbdkit Python plugin *)
plugin; (* Python plugin script *)
] in
let args = if verbose () then args @ ["--verbose"] else args in
Expand All @@ -208,7 +207,7 @@ object

method precheck () =
error_unless_nbdkit_working ();
error_unless_nbdkit_python3_working ();
error_unless_nbdkit_python_working ();
if have_selinux then
error_unless_nbdkit_compiled_with_selinux ()

Expand All @@ -234,7 +233,7 @@ object
with_open_out
json_param_file
(fun chan -> output_string chan (JSON.string_of_doc json_params));
if run_command [ python3; precheck; json_param_file ] <> 0 then
if run_command [ "python"; precheck; json_param_file ] <> 0 then
error (f_"failed server prechecks, see earlier errors");

(* Create an nbdkit instance for each disk and set the
Expand Down Expand Up @@ -381,7 +380,7 @@ If the messages above are not sufficient to diagnose the problem then add the

let ovf_file = tmpdir // "vm.ovf" in
with_open_out ovf_file (fun chan -> output_string chan ovf);
if run_command [ python3; createvm; json_param_file; ovf_file ] <> 0 then
if run_command [ "python"; createvm; json_param_file; ovf_file ] <> 0 then
error (f_"failed to create virtual machine, see earlier errors")

end
Expand Down
20 changes: 16 additions & 4 deletions v2v/rhv-upload-createvm.py
@@ -1,5 +1,6 @@
# -*- python -*-
# oVirt or RHV upload create VM used by ‘virt-v2v -o rhv-upload’
# coding: utf-8
# oVirt or RHV upload create VM used by 'virt-v2v -o rhv-upload'
# Copyright (C) 2018 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
Expand All @@ -23,8 +24,8 @@
import sys
import time

from http.client import HTTPSConnection
from urllib.parse import urlparse
from httplib import HTTPSConnection
from urlparse import urlparse

# Parameters are passed in via a JSON doc from the OCaml code.
# Because this Python code ships embedded inside virt-v2v there
Expand All @@ -36,8 +37,19 @@
raise RuntimeError("incorrect number of parameters")

# Parameters are passed in via a JSON document.
# https://stackoverflow.com/a/13105359
def byteify(input):
if isinstance(input, dict):
return {byteify(key): byteify(value)
for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
with open(sys.argv[1], 'r') as fp:
params = json.load(fp)
params = byteify(json.load(fp))

# What is passed in is a password file, read the actual password.
with open(params['output_password'], 'r') as fp:
Expand Down
30 changes: 21 additions & 9 deletions v2v/rhv-upload-plugin.py
@@ -1,5 +1,6 @@
# -*- python -*-
# oVirt or RHV upload nbdkit plugin used by ‘virt-v2v -o rhv-upload’
# coding: utf-8
# oVirt or RHV upload nbdkit plugin used by 'virt-v2v -o rhv-upload'
# Copyright (C) 2018 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
Expand All @@ -16,7 +17,7 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import builtins
from __builtin__ import open as builtin_open
import json
import logging
import ovirtsdk4 as sdk
Expand All @@ -25,8 +26,8 @@
import sys
import time

from http.client import HTTPSConnection
from urllib.parse import urlparse
from httplib import HTTPSConnection
from urlparse import urlparse

# Timeout to wait for oVirt disks to change status, or the transfer
# object to finish initializing [seconds].
Expand All @@ -35,14 +36,25 @@
# Parameters are passed in via a JSON doc from the OCaml code.
# Because this Python code ships embedded inside virt-v2v there
# is no formal API here.
# https://stackoverflow.com/a/13105359
def byteify(input):
if isinstance(input, dict):
return {byteify(key): byteify(value)
for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
params = None

def config(key, value):
global params

if key == "params":
with builtins.open(value, 'r') as fp:
params = json.load(fp)
with builtin_open(value, 'r') as fp:
params = byteify(json.load(fp))
else:
raise RuntimeError("unknown configuration key '%s'" % key)

Expand All @@ -56,7 +68,7 @@ def open(readonly):
username = parsed.username or "admin@internal"

# Read the password from file.
with builtins.open(params['output_password'], 'r') as fp:
with builtin_open(params['output_password'], 'r') as fp:
password = fp.read()
password = password.rstrip()

Expand Down Expand Up @@ -180,7 +192,7 @@ def get_options(h):

r = http.getresponse()
if r.status == 200:
j = json.loads(r.read())
j = byteify(json.loads(r.read()))
h['can_zero'] = "zero" in j['features']
h['can_trim'] = "trim" in j['features']
h['can_flush'] = "flush" in j['features']
Expand Down Expand Up @@ -403,7 +415,7 @@ def close(h):
pass

# Write the disk ID file. Only do this on successful completion.
with builtins.open(params['diskid_file'], 'w') as fp:
with builtin_open(params['diskid_file'], 'w') as fp:
fp.write(disk.id)

# Otherwise if we did fail then we should delete the disk.
Expand Down
22 changes: 17 additions & 5 deletions v2v/rhv-upload-precheck.py
@@ -1,5 +1,6 @@
# -*- python -*-
# oVirt or RHV pre-upload checks used by ‘virt-v2v -o rhv-upload’
# coding: utf-8
# oVirt or RHV pre-upload checks used by 'virt-v2v -o rhv-upload'
# Copyright (C) 2018 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
Expand All @@ -23,8 +24,8 @@
import sys
import time

from http.client import HTTPSConnection
from urllib.parse import urlparse
from httplib import HTTPSConnection
from urlparse import urlparse

# Parameters are passed in via a JSON doc from the OCaml code.
# Because this Python code ships embedded inside virt-v2v there
Expand All @@ -35,8 +36,19 @@
raise RuntimeError("incorrect number of parameters")

# Parameters are passed in via a JSON document.
# https://stackoverflow.com/a/13105359
def byteify(input):
if isinstance(input, dict):
return {byteify(key): byteify(value)
for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
with open(sys.argv[1], 'r') as fp:
params = json.load(fp)
params = byteify(json.load(fp))

# What is passed in is a password file, read the actual password.
with open(params['output_password'], 'r') as fp:
Expand Down Expand Up @@ -66,7 +78,7 @@
)
if len(vms) > 0:
vm = vms[0]
raise RuntimeError("VM already exists with name ‘%s’, id ‘%s’" %
raise RuntimeError("VM already exists with name '%s', id '%s'" %
(params['output_name'], vm.id))

# Otherwise everything is OK, exit with no error.
6 changes: 3 additions & 3 deletions v2v/test-v2v-python-syntax.sh
Expand Up @@ -22,6 +22,6 @@ $TEST_FUNCTIONS
skip_if_skipped

# Checks the files are syntactically correct, but not very much else.
python3 -m py_compile rhv-upload-createvm.py
python3 -m py_compile rhv-upload-plugin.py
python3 -m py_compile rhv-upload-precheck.py
python -m py_compile rhv-upload-createvm.py
python -m py_compile rhv-upload-plugin.py
python -m py_compile rhv-upload-precheck.py

0 comments on commit bff845c

Please sign in to comment.