Mercurial > illumos > git > illumos-gate
changeset 20203:6f836ae592a5
13368 libbe_py should support temporary BE activation
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Gordon Ross <gordon.w.ross@gmail.com>
author | Andy Fiddaman <omnios@citrus-it.co.uk> |
---|---|
date | Wed, 16 Dec 2020 15:08:40 +0000 |
parents | 8fc178e155c7 |
children | deb4016895be |
files | usr/src/lib/pylibbe/common/libbe_py.c |
diffstat | 1 files changed, 26 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/pylibbe/common/libbe_py.c Fri Dec 18 05:34:43 2020 +0200 +++ b/usr/src/lib/pylibbe/common/libbe_py.c Wed Dec 16 15:08:40 2020 +0000 @@ -22,7 +22,7 @@ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2012 OmniTI Computer Consulting, Inc. All rights reserved. - * Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. */ #include <Python.h> @@ -51,7 +51,7 @@ PyObject *beCreateSnapshot(PyObject *, PyObject *); PyObject *beCopy(PyObject *, PyObject *); PyObject *beList(PyObject *, PyObject *, PyObject *); -PyObject *beActivate(PyObject *, PyObject *); +PyObject *beActivate(PyObject *, PyObject *, PyObject *); PyObject *beDestroy(PyObject *, PyObject *); PyObject *beDestroySnapshot(PyObject *, PyObject *); PyObject *beRename(PyObject *, PyObject *); @@ -93,7 +93,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beCreateSnapshot(PyObject *self, PyObject *args) { @@ -159,7 +158,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beCopy(PyObject *self, PyObject *args) { @@ -285,7 +283,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beList(PyObject *self, PyObject *args, PyObject *keywds) { @@ -413,7 +410,10 @@ * to activate a Boot Environment * Parameters: * args - pointer to a python object containing: - * beName - The name of the BE to activate + * bename - The name of the BE to activate + * temporary - If True, perform a temporary BE activation + * If False, remove a temporary BE activation + * If not present, do nothing in regard to temporary activation * * Returns a pointer to a python object: * BE_SUCCESS - Success @@ -421,28 +421,36 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * -beActivate(PyObject *self, PyObject *args) +beActivate(PyObject *self, PyObject *args, PyObject *keywds) { char *beName = NULL; int ret = BE_PY_SUCCESS; nvlist_t *beAttrs = NULL; + int temp = -1; - if (!PyArg_ParseTuple(args, "z", &beName)) { - return (Py_BuildValue("i", BE_PY_ERR_PARSETUPLE)); + static char *kwlist[] = {"bename", "temporary", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, keywds, "z|i", + kwlist, &beName, &temp)) { + ret = BE_PY_ERR_PARSETUPLE; + goto done; } - if (!convertPyArgsToNvlist(&beAttrs, 2, BE_ATTR_ORIG_BE_NAME, beName)) { - nvlist_free(beAttrs); - return (Py_BuildValue("i", BE_PY_ERR_NVLIST)); + if (!convertPyArgsToNvlist(&beAttrs, 2, BE_ATTR_ORIG_BE_NAME, beName) || + beAttrs == NULL) { + ret = BE_PY_ERR_NVLIST; + goto done; } - if (beAttrs == NULL) { - return (Py_BuildValue("i", BE_PY_ERR_NVLIST)); + if (temp != -1 && nvlist_add_boolean_value(beAttrs, + BE_ATTR_ACTIVE_NEXTBOOT, temp == 0 ? B_FALSE : B_TRUE) != 0) { + ret = BE_PY_ERR_NVLIST; + goto done; } ret = be_activate(beAttrs); +done: nvlist_free(beAttrs); return (Py_BuildValue("i", ret)); } @@ -461,7 +469,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beDestroy(PyObject *self, PyObject *args) { @@ -520,7 +527,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beDestroySnapshot(PyObject *self, PyObject *args) { @@ -564,7 +570,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beRename(PyObject *self, PyObject *args) { @@ -609,7 +614,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beMount(PyObject *self, PyObject *args) { @@ -652,7 +656,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beUnmount(PyObject *self, PyObject *args) { @@ -707,7 +710,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beRollback(PyObject *self, PyObject *args) { @@ -753,7 +755,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * bePrintErrors(PyObject *self, PyObject *args) { @@ -778,7 +779,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beGetErrDesc(PyObject *self, PyObject *args) { @@ -812,7 +812,6 @@ * Scope: * Public */ -/* ARGSUSED */ PyObject * beVerifyBEName(PyObject *self, PyObject *args) { @@ -1038,6 +1037,7 @@ (void) printf("nvlist_add_string failed for %s (%s).\n", pt, pt2); nvlist_free(*nvList); + *nvList = NULL; return (B_FALSE); } } @@ -1097,7 +1097,8 @@ {"beList", (PyCFunction)(uintptr_t)beList, METH_VARARGS | METH_KEYWORDS, "List BE info."}, {"beRename", beRename, METH_VARARGS, "Rename a BE."}, - {"beActivate", beActivate, METH_VARARGS, "Activate a BE."}, + {"beActivate", (PyCFunction)(uintptr_t)beActivate, + METH_VARARGS | METH_KEYWORDS, "Activate a BE."}, {"beRollback", beRollback, METH_VARARGS, "Rollback a BE."}, {"bePrintErrors", bePrintErrors, METH_VARARGS, "Enable/disable error printing."},