summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Asleson <tasleson@redhat.com>2013-09-10 18:05:28 -0500
committerTony Asleson <tasleson@redhat.com>2013-11-19 14:40:36 -0600
commit531d85a0ee3854e49f9b81658dd6d7c60bb4de86 (patch)
treea131964dcbab2dcfd102658c5af2376c69ba512e
parent04304ba7356c90568dcf32f0772a2023f4684656 (diff)
downloadlvm2-531d85a0ee3854e49f9b81658dd6d7c60bb4de86.tar.gz
python-lvm: Add addl. PV create arguments
Added overloaded PV create arguments with defaults for PV creation. Addresses bug: https://bugzilla.redhat.com/show_bug.cgi?id=880395 Signed-off-by: Tony Asleson <tasleson@redhat.com>
-rw-r--r--python/liblvm.c51
1 files changed, 45 insertions, 6 deletions
diff --git a/python/liblvm.c b/python/liblvm.c
index 36b64e4e7..033de820c 100644
--- a/python/liblvm.c
+++ b/python/liblvm.c
@@ -23,6 +23,7 @@
#include <Python.h>
#include "lvm2app.h"
+#include "defaults.h"
static lvm_t _libh;
@@ -317,24 +318,62 @@ static PyObject *_liblvm_lvm_pv_remove(PyObject *self, PyObject *arg)
return Py_None;
}
+static int _set_pv_numeric_prop(pv_create_params_t pv_params, const char *name,
+ unsigned long long value)
+{
+ struct lvm_property_value prop_value;
+ prop_value.is_integer = 1;
+ prop_value.value.integer = value;
+
+ return lvm_pv_params_set_property(pv_params, name, &prop_value);
+}
+
+#define SET_PV_PROP(params, name, value) \
+ do { \
+ if (_set_pv_numeric_prop(params, name, value) == -1) \
+ goto error; \
+ } while(0)\
+
static PyObject *_liblvm_lvm_pv_create(PyObject *self, PyObject *arg)
{
const char *pv_name;
- unsigned long long size;
+ unsigned long long size = 0;
+ unsigned long long pvmetadatacopies = DEFAULT_PVMETADATACOPIES;
+ unsigned long long pvmetadatasize = DEFAULT_PVMETADATASIZE;
+ unsigned long long data_alignment = 0;
+ unsigned long long data_alignment_offset = 0;
+ unsigned long long zero = 1;
+ pv_create_params_t pv_params = NULL;
LVM_VALID(NULL);
- if (!PyArg_ParseTuple(arg, "sK", &pv_name, &size))
+ if (!PyArg_ParseTuple(arg, "s|KKKKKK", &pv_name, &size, &pvmetadatacopies,
+ &pvmetadatasize, &data_alignment,
+ &data_alignment_offset, &zero))
return NULL;
- if (lvm_pv_create(_libh, pv_name, size) == -1) {
- PyErr_SetObject(_LibLVMError, _liblvm_get_last_error());
- return NULL;
+ pv_params = lvm_pv_params_create(_libh, pv_name);
+ if (!pv_params) {
+ goto error;
}
- Py_INCREF(Py_None);
+ SET_PV_PROP(pv_params, "size", size);
+ SET_PV_PROP(pv_params, "pvmetadatacopies", pvmetadatacopies);
+ SET_PV_PROP(pv_params, "pvmetadatasize", pvmetadatasize);
+ SET_PV_PROP(pv_params, "data_alignment", data_alignment);
+ SET_PV_PROP(pv_params, "data_alignment_offset", data_alignment_offset);
+ SET_PV_PROP(pv_params, "zero", zero);
+
+ if (lvm_pv_create_adv(pv_params)) {
+ goto error;
+ }
+ Py_INCREF(Py_None);
return Py_None;
+
+error:
+ PyErr_SetObject(_LibLVMError, _liblvm_get_last_error());
+ return NULL;
}
static PyObject *_liblvm_lvm_percent_to_float(PyObject *self, PyObject *arg)