From afe395f18807620682d11436372f882e19465a9e Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Fri, 19 Apr 2024 15:06:21 +0100 Subject: [PATCH 01/44] ci: remove warnings about outdated node versions Signed-off-by: Pau Ruiz Safont --- .github/workflows/1.249-lcm.yml | 41 ++++++++++++--------------------- .github/workflows/docs.yml | 2 +- .github/workflows/hugo.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/release.yml | 2 +- 5 files changed, 20 insertions(+), 31 deletions(-) diff --git a/.github/workflows/1.249-lcm.yml b/.github/workflows/1.249-lcm.yml index 31d5e0b49c8..39132476bd9 100644 --- a/.github/workflows/1.249-lcm.yml +++ b/.github/workflows/1.249-lcm.yml @@ -25,8 +25,6 @@ jobs: ocaml-test: name: Ocaml tests runs-on: ubuntu-20.04 - env: - package: "xapi-cli-protocol xapi-client xapi-consts xapi-database xapi-datamodel xapi-types xapi xe" steps: - name: Checkout code @@ -34,6 +32,10 @@ jobs: with: ref: '1.249-lcm' + - name: Free space + shell: bash + run: sudo rm -rf /usr/local/lib/android + - name: Pull configuration from xs-opam run: | curl --fail --silent https://raw.githubusercontent.com/xapi-project/xs-opam/release/yangtze/lcm/tools/xs-opam-ci.env | cut -f2 -d " " > .env @@ -42,37 +44,24 @@ jobs: id: dotenv uses: falti/dotenv-action@v1 - - name: Retrieve date for cache key (year-week) - id: cache-key - run: echo "date=$(/bin/date -u "+%Y%W")" >> $GITHUB_OUTPUT - shell: bash - - - name: Restore opam cache - id: opam-cache - uses: actions/cache@v4 - with: - path: "~/.opam" - # invalidate cache every week, gets built using a scheduled job - key: ${{ steps.cache-key.outputs.date }}-1.249 - - name: Update Ubuntu repositories + shell: bash run: sudo apt-get update - name: Use ocaml - uses: avsm/setup-ocaml@v1 + uses: ocaml/setup-ocaml@v2 with: - ocaml-version: ${{ steps.dotenv.outputs.ocaml_version_full }} - opam-repository: ${{ steps.dotenv.outputs.repository }} + ocaml-compiler: ${{ steps.dotenv.outputs.ocaml_version_full }} + opam-repositories: | + xs-opam: ${{ steps.dotenv.outputs.repository }} + dune-cache: true - name: Install dependencies - run: | - opam update - opam pin add . --no-action - opam depext -u ${{ env.package }} - opam upgrade - opam install ${{ env.package }} --deps-only --with-test -v + shell: bash + run: opam install . --deps-only --with-test -v - - name: Build + - name: Configure and build + shell: bash run: | opam exec -- ./configure opam exec -- make @@ -85,4 +74,4 @@ jobs: - name: Avoid built packages to appear in the cache # only packages in this repository follow a branch, the rest point # to a tag - run: opam uninstall ${{ env.package }} + run: opam pin list --short | xargs opam unpin diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 0ceb3016ec7..096fe18227b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -43,7 +43,7 @@ jobs: opam exec -- dune exec ocaml/xapi-storage/generator/src/main.exe -- gen_markdown --path=$STORAGE_DOCDIR - name: Deploy xapi-storage docs - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 with: deploy_key: ${{ secrets.ACTIONS_STORAGE_DEPLOY_KEY }} publish_dir: ${{ env.STORAGE_DOCDIR }} diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml index 2d9bfe2bcb2..0b48e6c8a62 100644 --- a/.github/workflows/hugo.yml +++ b/.github/workflows/hugo.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Hugo - uses: peaceiris/actions-hugo@v2 + uses: peaceiris/actions-hugo@v3 with: hugo-version: '0.119.0' @@ -24,7 +24,7 @@ jobs: hugo --minify - name: Deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 with: deploy_key: ${{ secrets.ACTIONS_DOCS_DEPLOY_KEY }} publish_dir: ./doc/public diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9db781fd626..40d9af83faf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,7 +37,7 @@ jobs: - run: echo "::add-matcher::.github/workflows/python-warning-matcher.json" name: "Setup GitHub for reporting Python warnings as annotations in pull request code review" - - uses: pre-commit/action@v3.0.0 + - uses: pre-commit/action@v3.0.1 name: Run pre-commit checks (no spaces at end of lines, etc) if: ${{ matrix.python-version != '2.7' }} with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c4d133d2fa1..1c3dca70fcd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v4 - name: Use python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.x" From c4ec76873f2fbc1d0a81d752413c084df486a30b Mon Sep 17 00:00:00 2001 From: Bernhard Kaindl Date: Mon, 11 Mar 2024 12:41:50 +0100 Subject: [PATCH 02/44] pyproject.toml update settings for pytest etc for running CI locally Also disables pylint checks that are safe to disable - from #5490 and 5424. Co-authored-by: Pau Ruiz Safont Co-authored-by: Fei Su Co-authored-by: Stephen Cheng Signed-off-by: Bernhard Kaindl --- pyproject.toml | 171 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 505f16e430c..59100ec7ab9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ # https://packaging.python.org/en/latest/specifications/pyproject-toml/ [project] name = "xen-api" -requires-python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +requires-python = ">=3.6.*" license = {file = "LICENSE"} keywords = ["xen-project", "Xen", "hypervisor", "libraries"] maintainers = [ @@ -27,14 +27,72 @@ repository = "https://github.com/xapi-project/xen-api" [tool.black] line-length = 88 + +# ----------------------------------------------------------------------------- +# Coverage.py - https://coverage.readthedocs.io/en/coverage-5.5/config.html +# ----------------------------------------------------------------------------- + +[tool.coverage.report] +# Here, developers can configure which lines do not need to be covered by tests: +exclude_lines = [ + "pragma: no cover", # standard pragma for not covering a line or block + "if TYPE_CHECKING:", # imports for type checking only + "pass", + # Other specific lines that do not need to be covered, comment in which file: +] +# precision digits to use when reporting coverage (sub-percent-digits are not reported): +precision = 0 +# skip_covered: Skip reporting files with 100% coverage: +skip_covered = true + + +[tool.coverage.run] +# Default command line for "coverage run": Run pytest in non-verbose mode +command_line = "-m pytest -p no:logging -p no:warnings" +# Default data file for "coverage run": Store coverage data in .git/.coverage +data_file = ".git/.coverage" +# Default context for "coverage run": Use the name of the test function +dynamic_context = "test_function" +# Default omit patterns for "coverage run": Omit test files and test directories +omit = [ + "python3/bin/__init__.py", + "python3/packages/__init__.py", + # omit tests anything in a test directory (focus on the code) + "python3/tests", + "scripts/test_*.py", + # omit anything in a .local directory anywhere + "*/.local/*", + # omit everything in /usr + "/usr/*", +] +relative_files = true + + +# Default output when writing "coveragle xml" data. This needs to match what +# diff-cover and coverage upload to Codecov expect +[tool.coverage.xml] +output = ".git/coverage.xml" + + +# Default output directory for writing "coverage html" data. +# Create it outside the source tree to avoid cluttering the source tree +[tool.coverage.html] +directory = ".git/coverage_html" +show_contexts = true + + [tool.isort] line_length = 88 -py_version = 27 +py_version = 36 profile = "black" combine_as_imports = true ensure_newline_before_comments = false +# ----------------------------------------------------------------------------- +# Mypy static analysis - https://mypy.readthedocs.io/en/stable/config_file.html +# ----------------------------------------------------------------------------- + [tool.mypy] # Note mypy has no config setting for PYTHONPATH, so you need to call it with: # PYTHONPATH="scripts/examples/python:.:scripts:scripts/plugins:scripts/examples" @@ -59,6 +117,115 @@ disallow_any_explicit = false disallow_any_generics = true disallow_any_unimported = true disallow_subclassing_any = true +disable_error_code = ["import-untyped"] # XenAPI is not typed yet + + +[[tool.mypy.overrides]] +module = ["packages.observer"] +disable_error_code = [ + "arg-type", # mypy does not know that the Context class is actually a dict + "override", # Typing problem in the used library + "misc", + "no-any-unimported", +] + + +# ----------------------------------------------------------------------------- +# Pylint - https://pylint.pycqa.org/en/latest/technical_reference/features.html +# ----------------------------------------------------------------------------- + +[tool.pylint.design] +max-branches = 43 # perfmon has 43 branches in a function + + +[tool.pylint.messages_control] +# These are safe to disable, fixing them is best done during a later code cleanup phases +disable = [ + "broad-exception-caught", + "no-else-break", + "no-else-return", + "consider-using-f-string", # f-strings is the big new feature of Python 3.6, + "consider-using-with", # but like with, best done during code cleanup phase + "duplicate-code", # likewise. This is a code cleanup task + "import-error", # pylint does not do inter-procedural analysis + "invalid-name", # doesn't conform to snake_case naming style + "missing-function-docstring", # Best done in the code documentation phase + "missing-module-docstring", # Likewise, best done in the code documentation phase + "missing-class-docstring", # Likewise, best done in the code documentation phase + "no-member", # Existing code breaches this, not part of porting + "no-else-break", # else clause following a break statement + "protected-access", # Best done during the code cleanup phase + "super-with-arguments", # Consider using Python 3 style super(no args) calls + "too-many-branches", # Existing code breaches this, not part of porting + "too-many-arguments", # Likewise, not part of porting + "too-many-locals", # Likewise, not part of porting + "too-many-statements", # Likewise, not part of porting + "unnecessary-pass", # Cosmetic, best done during the code cleanup phase + "useless-object-inheritance", # Useless object inheritance from object, likewise +] + + +# ----------------------------------------------------------------------------- +# Pyright is the static analysis behind the VSCode Python extension / Pylance +# https://microsoft.github.io/pyright/#/configuration?id=main-configuration-options +# ----------------------------------------------------------------------------- + +[tool.pyright] +# Specifies the paths of directories or files that should be included in the +# analysis. If no paths are specified, all files in the workspace are included: +include = ["python3", "ocaml/xcp-rrdd"] + +# Conditionalize the stube files for type definitions based on the platform: +pythonPlatform = "Linux" + +# typeCheckingMode: "off", "basic", "standard" or "strict" +typeCheckingMode = "standard" + +# Specifies the version of Python that will be used to execute the source code. +# Generate errors if the source code makes use of language features that are +# not supported in that version. It will also tailor its use of type stub files, +# which conditionalizes type definitions based on the version. If no version is +# specified, pyright will use the version of the current python interpreter, +# if one is present: +pythonVersion = "3.6" + +# Paths of directories or files that should use "strict" analysis if they are +# included. This is the same as manually adding a "# pyright: strict" comment. +# In strict mode, most type-checking rules are enabled, and the type-checker +# will be more aggressive in inferring types. If no paths are specified, strict +# mode is not enabled: +strict = ["python3/tests/test_observer.py"] + +# +# Paths to exclude from analysis. If a file is excluded, it will not be +# analyzed. +# +# FIXME: Some of these may have type errors, so they should be inspected and fixed: +# +exclude = [ + "ocaml/xcp-rrdd/scripts/rrdd/rrdd.py", + "ocaml/xcp-rrdd/scripts/rrdd/rrdd-example.py", + "python3/packages/observer.py", + "python3/tests/pytype_reporter.py", +] + + +# ----------------------------------------------------------------------------- +# Pytest is the test framework, for discovering and running tests, fixtures etc +# https://pytest.readthedocs.io/en/latest/customize.html +# ----------------------------------------------------------------------------- + + +[tool.pytest.ini_options] +addopts = "-ra" # Show the output of all tests, including those that passed +log_cli = true # Capture log messages and show them in the output as well +log_cli_level = "INFO" +python_files = ["test_*.py", "it_*.py"] +python_functions = ["test_", "it_", "when_"] +pythonpath = "scripts/examples/python" # Allows to import the XenAPI module +required_plugins = ["pytest-mock"] +testpaths = ["python3", "scripts", "ocaml/xcp-rrdd"] +xfail_strict = true # is used to fail tests that are marked as xfail but pass(for TDD) [tool.pytype_reporter] From 06a3d67f9ab5bd4dc6990f9102ddd7a93506dec7 Mon Sep 17 00:00:00 2001 From: Bernhard Kaindl Date: Mon, 11 Mar 2024 12:19:48 +0100 Subject: [PATCH 03/44] pyproject.toml: Migrate pytype_reporter from scripts to python3 Signed-off-by: Bernhard Kaindl --- pyproject.toml | 59 ++++------------------------------------------ pytype_reporter.py | 12 ++++++---- 2 files changed, 12 insertions(+), 59 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 59100ec7ab9..d7bb0d7d1a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -236,65 +236,16 @@ discard_messages_matching = [ "No attribute 'group' on None", "No Node.TEXT_NODE in module xml.dom.minidom, referenced from 'xml.dom.expatbuilder'" ] -expected_to_fail = [ - "scripts/hfx_filename", - "scripts/perfmon", - # Need 2to3 -w and maybe a few other minor updates: - "scripts/hatests", - "scripts/backup-sr-metadata.py", - "scripts/restore-sr-metadata.py", - "scripts/nbd_client_manager.py", - # No attribute 'popen2' on module 'os' [module-attr] and a couple more: - "scripts/mail-alarm", - # SSLSocket.send() only accepts bytes, not unicode string as argument: - "scripts/examples/python/exportimport.py", - # Other fixes needed: - "scripts/examples/python/mini-xenrt.py", - "scripts/examples/python/XenAPI/XenAPI.py", - "scripts/examples/python/monitor-unwanted-domains.py", - "scripts/examples/python/shell.py", - "scripts/examples/smapiv2.py", - "scripts/static-vdis", - # add_interface: unsupported operand type(s) for +: str and UsbInterface - "scripts/usb_scan.py", - # TestUsbScan.assertIn() is called with wrong arguments(code not iterable) - "scripts/test_usb_scan.py", - "scripts/plugins/extauth-hook-AD.py", -] +expected_to_fail = [] [tool.pytype] inputs = [ - "scripts/hfx_filename", - "scripts/perfmon", - "scripts/static-vdis", - "scripts/Makefile", - "scripts/generate-iscsi-iqn", - "scripts/hatests", - "scripts/host-display", - "scripts/mail-alarm", - "scripts/print-custom-templates", - "scripts/probe-device-for-file", - "scripts/xe-reset-networking", - "scripts/xe-scsi-dev-map", - "scripts/examples/python", - "scripts/yum-plugins", - "scripts/*.py", - "python3/packages/*.py", - - # To be added later, - # when converted to Python3-compatible syntax: - # "ocaml/message-switch/python", - # "ocaml/idl/ocaml_backend/python", - # "ocaml/xapi-storage/python", + "python3/", + "ocaml/xcp-rrdd", ] disable = [ - "import-error", # xenfsimage, xcp.bootloader. xcp.cmd - "ignored-abstractmethod", - "ignored-metaclass", - # https://github.com/google/pytype/issues/1130, - # https://github.com/google/pytype/issues/1485: - "pyi-error", ] platform = "linux" -pythonpath = "scripts/examples/python:.:scripts:scripts/plugins:scripts/examples" +# Allow pytype to find the XenAPI module, the rrdd module and python3 modules: +pythonpath = "python3:scripts/examples/python:ocaml/xcp-rrdd/scripts/rrdd" diff --git a/pytype_reporter.py b/pytype_reporter.py index 8207053d7ec..877dc29c9d8 100755 --- a/pytype_reporter.py +++ b/pytype_reporter.py @@ -601,11 +601,13 @@ def main(): config.setdefault("expected_to_fail", []) debug("Expected to fail: %s", ", ".join(config["expected_to_fail"])) - changed_but_in_expected_to_fail = git_diff( - "--name-only", - find_branch_point(config), - *config["expected_to_fail"], - ).splitlines() + changed_but_in_expected_to_fail = [] + if config["expected_to_fail"] != []: + changed_but_in_expected_to_fail = git_diff( + "--name-only", + find_branch_point(config), + *config["expected_to_fail"], + ).splitlines() if check_only_reverts_from_branch_point(config, changed_but_in_expected_to_fail): return run_pytype_and_generate_summary(config) From 45ca37539da0369ea0cbf521778264a405cbd041 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Fri, 19 Apr 2024 16:26:20 +0100 Subject: [PATCH 04/44] ci: do not comment on PRs after merging The comments were far too long and most of the time did not provide any useful information Signed-off-by: Pau Ruiz Safont --- .github/workflows/main.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 40d9af83faf..095557f4a89 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -107,17 +107,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PYTYPE_REPORTER_DEBUG: True - # Try to add pytype_report.py's summary file as a comment to the PR: - # Documentation: https://github.com/marketplace/actions/add-pr-comment - - name: Add the pytype summary as a comment to the PR (if permitted) - uses: mshick/add-pr-comment@v2 - # Depends on pytype checks, which are not run for python 2.7: - if: ${{ matrix.python-version != '2.7' }} - # Fails for user workflows without permissions(fork-based pull requests): - continue-on-error: true - with: - message-path: .git/pytype-summary.md # Add the content of it as comment - ocaml-tests: name: Run OCaml tests runs-on: ubuntu-20.04 From 4661655f36189a9518019299d69867c316a8930e Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Fri, 19 Apr 2024 16:49:06 +0100 Subject: [PATCH 05/44] ci: ignore pylint and pyflakes checks This can happen when there are too many files to be tested, due to a bug Signed-off-by: Pau Ruiz Safont --- .github/workflows/main.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 095557f4a89..dde27bf2421 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -98,6 +98,7 @@ jobs: level: warning # To be customized to cover remaining Python scripts: glob_pattern: "**/*.py" + continue-on-error: true - name: Run pytype checks if: ${{ matrix.python-version != '2.7' }} @@ -107,6 +108,13 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PYTYPE_REPORTER_DEBUG: True + - name: pyflakes + uses: reviewdog/action-pyflakes@v1 + with: + github_token: ${{ secrets.github_token }} + continue-on-error: true + + ocaml-tests: name: Run OCaml tests runs-on: ubuntu-20.04 @@ -162,13 +170,6 @@ jobs: - name: quality-gate run: make quality-gate - - name: pyflakes - uses: reviewdog/action-pyflakes@master - with: - github_token: ${{ secrets.github_token }} - reporter: github-pr-review - level: error - test-sdk-builds: name: Test SDK builds uses: ./.github/workflows/generate-and-build-sdks.yml From 8244e3360c0c5bb2384576fff6e9bffa57bd847f Mon Sep 17 00:00:00 2001 From: Bernhard Kaindl Date: Wed, 6 Mar 2024 12:00:00 +0100 Subject: [PATCH 06/44] test_observer.py: Add setUp() and tearDown() of mock modules Signed-off-by: Bernhard Kaindl --- python3/tests/test_observer.py | 44 +++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/python3/tests/test_observer.py b/python3/tests/test_observer.py index 53944d97ca9..088183d5375 100644 --- a/python3/tests/test_observer.py +++ b/python3/tests/test_observer.py @@ -12,17 +12,6 @@ mock_listdir.return_value = [] from packages import observer -# mock modules to avoid dependencies -sys.modules["opentelemetry"] = MagicMock() -sys.modules["opentelemetry.sdk.resources"] = MagicMock() -sys.modules["opentelemetry.sdk.trace"] = MagicMock() -sys.modules["opentelemetry.sdk.trace.export"] = MagicMock() -sys.modules["opentelemetry.exporter.zipkin.json"] = MagicMock() -sys.modules["opentelemetry.baggage.propagation"] = MagicMock() -sys.modules["opentelemetry.trace.propagation.tracecontext"] = MagicMock() -sys.modules["opentelemetry.context"] = MagicMock() -sys.modules["opentelemetry.trace"] = MagicMock() - TEST_CONFIG = """ XS_EXPORTER_BUGTOOL_ENDPOINT='/var/log/dt/test' OTEL_SERVICE_NAME='test-observer' @@ -31,11 +20,44 @@ TEST_OBSERVER_CONF = "test-observer.conf" OBSERVER_OPEN = "packages.observer.open" +# +# These are the modules that are mocked to avoid dependencies. +# Note: wrapt is not mocked: It is used to wrap the traced script. +# These modules are not imported at the top of observer.py, but are +# imported inside the observer._init_tracing(). This is why they are mocked +# in the test class before calling observer._init_tracing() and then deleted +# in the tearDown of the test class to avoid affecting other tests. +# +MOCKED_MODULES = [ + "opentelemetry", + "opentelemetry.sdk.resources", + "opentelemetry.sdk.trace", + "opentelemetry.sdk.trace.export", + "opentelemetry.exporter.zipkin.json", + "opentelemetry.baggage.propagation", + "opentelemetry.trace.propagation.tracecontext", + "opentelemetry.context", + "opentelemetry.trace", +] + # pylint: disable=missing-function-docstring,protected-access class TestObserver(unittest.TestCase): """Test python3/packages/observer.py""" + def setUp(self) -> None: + # As setup for this class, mock modules to avoid dependencies + for mock in MOCKED_MODULES: + sys.modules[mock] = MagicMock() + return super().setUp() + + def tearDown(self) -> None: + # On teardown, delete mocks so they do not affect other tests + # Otherwise, the mocks will be used in other tests and cause errors + for mock in MOCKED_MODULES: + del sys.modules[mock] + return super().tearDown() + def simple_method(self): """A simple helper method for tests to wrap using observer.span""" return 5 From 4cdcf7482aef07f43b12b3bd503cdba7d2e456f0 Mon Sep 17 00:00:00 2001 From: Bernhard Kaindl Date: Wed, 6 Mar 2024 12:00:00 +0100 Subject: [PATCH 07/44] observer.py: Update error handling Signed-off-by: Bernhard Kaindl --- python3/packages/observer.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/python3/packages/observer.py b/python3/packages/observer.py index b257aa9b3f0..3419c89cd36 100644 --- a/python3/packages/observer.py +++ b/python3/packages/observer.py @@ -401,18 +401,25 @@ def run(file): return 0 except FileNotFoundError as e: print( - f"{__file__}: {' '.join(sys.argv)}\n{e.filename}: No such file", + f"{__file__} {' '.join(sys.argv)}:\nScript not found: {e.filename}", file=sys.stderr, ) return 2 - except Exception: - print( - f"{__file__}: {' '.join(sys.argv)}\n{traceback.format_exc()}", - file=sys.stderr) + except Exception as e: + print(f"{__file__} {' '.join(sys.argv)}:", file=sys.stderr) # the command + print("Exception in the traced script:", file=sys.stderr) + print(e, file=sys.stderr) # Print the exception message + print(traceback.format_exc(), file=sys.stderr) # Print the traceback return 139 # This is what the default SIGSEGV handler on Linux returns return run(argv0) if __name__ == "__main__": - sys.exit(main()) + # Only use sys.exit(ret) raising SystemExit() if the return code is not 0 + # to allow test_observer_as_script() to get the globals of observer.py: + + exit_code = main() # pylint: disable=invalid-name + logging.shutdown() # Reduces the unclosed socket warnings by PYTHONDEVMODE=yes + if exit_code: + sys.exit(exit_code) From e677c054b130fd36ec81928228b981f231724b6e Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Mon, 22 Apr 2024 13:03:57 +0100 Subject: [PATCH 08/44] ci: install observer.py dependencies Signed-off-by: Pau Ruiz Safont --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dde27bf2421..42c06764498 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,7 +51,7 @@ jobs: - name: Install dependencies only needed for python 3 if: ${{ matrix.python-version != '2.7' }} - run: pip install pandas pytype toml wrapt + run: pip install opentelemetry-api opentelemetry-exporter-zipkin-json opentelemetry-sdk pandas pytype toml wrapt - name: Install common dependencies for Python ${{matrix.python-version}} run: pip install future mock pytest-coverage pytest-mock From 026818b317205c7c04ae427d29f307d0084ab1b0 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Mon, 22 Apr 2024 14:45:57 +0100 Subject: [PATCH 09/44] opam: delete xapi-stdext package It only existed because of dune limitations when it was in its own repository Signed-off-by: Pau Ruiz Safont --- Makefile | 4 ++-- dune-project | 15 --------------- xapi-stdext.opam | 34 ---------------------------------- 3 files changed, 2 insertions(+), 51 deletions(-) delete mode 100644 xapi-stdext.opam diff --git a/Makefile b/Makefile index 43ebc394d85..897862dab52 100644 --- a/Makefile +++ b/Makefile @@ -255,7 +255,7 @@ install: build doc sdk doc-json message-switch-unix xapi-idl forkexec xapi-forkexecd xapi-storage xapi-storage-script xapi-storage-cli \ xapi-nbd varstored-guard xapi-log xapi-open-uri xapi-tracing xapi-expiry-alerts cohttp-posix \ xapi-rrd xapi-inventory \ - xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck xapi-stdext + xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck # docs mkdir -p $(DESTDIR)$(DOCDIR) cp -r $(XAPIDOC)/jekyll $(DESTDIR)$(DOCDIR) @@ -277,7 +277,7 @@ uninstall: message-switch-unix xapi-idl forkexec xapi-forkexecd xapi-storage xapi-storage-script xapi-log \ xapi-open-uri xapi-tracing xapi-expiry-alerts cohttp-posix \ xapi-rrd xapi-inventory \ - xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck xapi-stdext + xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck compile_flags.txt: Makefile (ocamlc -config-var ocamlc_cflags;\ diff --git a/dune-project b/dune-project index 747fc62b133..dba83ffab8b 100644 --- a/dune-project +++ b/dune-project @@ -262,21 +262,6 @@ (name xapi-inventory) ) -(package - (name xapi-stdext) - (synopsis "Xapi's standard library extension") - (description "Dummy package that enables the usage of dune-release") - (depends - (xapi-stdext-date (= :version)) - (xapi-stdext-encodings (= :version)) - (xapi-stdext-pervasives (= :version)) - (xapi-stdext-std (= :version)) - (xapi-stdext-threads (= :version)) - (xapi-stdext-unix (= :version)) - (xapi-stdext-zerocheck (= :version)) - ) -) - (package (name xapi-stdext-date) (synopsis "Xapi's standard library extension, Dates") diff --git a/xapi-stdext.opam b/xapi-stdext.opam deleted file mode 100644 index e2654f782ab..00000000000 --- a/xapi-stdext.opam +++ /dev/null @@ -1,34 +0,0 @@ -# This file is generated by dune, edit dune-project instead -opam-version: "2.0" -synopsis: "Xapi's standard library extension" -description: "Dummy package that enables the usage of dune-release" -maintainer: ["Xapi project maintainers"] -authors: ["xen-api@lists.xen.org"] -license: "LGPL-2.1-only WITH OCaml-LGPL-linking-exception" -homepage: "https://xapi-project.github.io/" -bug-reports: "https://github.com/xapi-project/xen-api/issues" -depends: [ - "dune" {>= "2.0"} - "xapi-stdext-date" {= version} - "xapi-stdext-encodings" {= version} - "xapi-stdext-pervasives" {= version} - "xapi-stdext-std" {= version} - "xapi-stdext-threads" {= version} - "xapi-stdext-unix" {= version} - "xapi-stdext-zerocheck" {= version} -] -build: [ - ["dune" "subst"] {pinned} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/xapi-project/xen-api.git" From c59e4ff711ff98e50a5baec7c124019f453623b6 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Mon, 22 Apr 2024 14:47:42 +0100 Subject: [PATCH 10/44] opam: fix xapi-squeezed metadata Signed-off-by: Pau Ruiz Safont --- xapi-squeezed.opam | 1 - xapi-squeezed.opam.template | 1 - 2 files changed, 2 deletions(-) diff --git a/xapi-squeezed.opam b/xapi-squeezed.opam index 978e98953f7..52dd6fdc3dc 100644 --- a/xapi-squeezed.opam +++ b/xapi-squeezed.opam @@ -2,7 +2,6 @@ authors: ["xen-api@lists.xen.org"] license: "LGPL-2.1-only WITH OCaml-LGPL-linking-exception" opam-version: "2.0" -author: "dave.scott@eu.citrix.com" maintainer: "xen-api@lists.xen.org" homepage: "https://github.com/xapi-project/xen-api" bug-reports: "https://github.com/xapi-project/xen-api/issues" diff --git a/xapi-squeezed.opam.template b/xapi-squeezed.opam.template index fc590e1df24..84ad0840a82 100644 --- a/xapi-squeezed.opam.template +++ b/xapi-squeezed.opam.template @@ -1,5 +1,4 @@ opam-version: "2.0" -author: "dave.scott@eu.citrix.com" maintainer: "xen-api@lists.xen.org" homepage: "https://github.com/xapi-project/xen-api" bug-reports: "https://github.com/xapi-project/xen-api/issues" From 13eb35a843924f7b0b9085fa2c16c3ed637116b7 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Mon, 22 Apr 2024 15:27:48 +0100 Subject: [PATCH 11/44] opam: create package xapi-tracing-export This avoids circular dependencies Signed-off-by: Pau Ruiz Safont --- dune-project | 4 ++++ ocaml/libs/tracing/dune | 2 +- ocaml/xenopsd/lib/dune | 2 +- xapi-tracing-export.opam | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 xapi-tracing-export.opam diff --git a/dune-project b/dune-project index dba83ffab8b..20058ef9e72 100644 --- a/dune-project +++ b/dune-project @@ -66,6 +66,10 @@ (name xapi-tracing) ) +(package + (name xapi-tracing-export) +) + (package (name xapi-storage-script) ) diff --git a/ocaml/libs/tracing/dune b/ocaml/libs/tracing/dune index 6c18e2f15c1..0e1160818c2 100644 --- a/ocaml/libs/tracing/dune +++ b/ocaml/libs/tracing/dune @@ -7,7 +7,7 @@ (library (name tracing_export) (modules tracing_export) - (public_name xapi-tracing.export) + (public_name xapi-tracing-export) (libraries cohttp cohttp-posix diff --git a/ocaml/xenopsd/lib/dune b/ocaml/xenopsd/lib/dune index 0521c4b3db4..9f0a63e064c 100644 --- a/ocaml/xenopsd/lib/dune +++ b/ocaml/xenopsd/lib/dune @@ -42,7 +42,7 @@ xapi-stdext-threads xapi-stdext-unix xapi-tracing - xapi-tracing.export + xapi-tracing-export xmlm ) (preprocess diff --git a/xapi-tracing-export.opam b/xapi-tracing-export.opam new file mode 100644 index 00000000000..c58065eb2a3 --- /dev/null +++ b/xapi-tracing-export.opam @@ -0,0 +1,32 @@ +# This file is generated by dune, edit dune-project instead +license: "LGPL-2.1-only WITH OCaml-LGPL-linking-exception" +opam-version: "2.0" +maintainer: "xen-api@lists.xen.org" +authors: "xen-api@lists.xen.org" +homepage: "https://xapi-project.github.io/" +bug-reports: "https://github.com/xapi-project/xen-api.git" +dev-repo: "git+https://github.com/xapi-project/xen-api.git" +build: [[ "dune" "build" "-p" name "-j" jobs ]] + +available: [ os = "linux" ] +depends: [ + "ocaml" + "cohttp-posix" + "dune" + "cohttp" + "rpclib" + "xapi-log" + "xapi-open-uri" + "xapi-stdext-threads" + "xapi-stdext-unix" + "xapi-tracing" + "zstd" +] +synopsis: "Library required by xapi" +description: """ +These libraries are provided for backwards compatibility only. +No new code should use these libraries.""" +url { + src: + "https://github.com/xapi-project/xen-api/archive/master.tar.gz" +} From 95e83078a8e09626297eb7638ab961cfd31f4357 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Mon, 22 Apr 2024 15:31:05 +0100 Subject: [PATCH 12/44] datamodel_lifecycle: bump Signed-off-by: Pau Ruiz Safont --- ocaml/idl/datamodel_lifecycle.ml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ocaml/idl/datamodel_lifecycle.ml b/ocaml/idl/datamodel_lifecycle.ml index 28ff931ec59..94870d262c7 100644 --- a/ocaml/idl/datamodel_lifecycle.ml +++ b/ocaml/idl/datamodel_lifecycle.ml @@ -109,6 +109,12 @@ let prototyped_of_message = function Some "22.20.0" | "Repository", "set_gpgkey_path" -> Some "22.12.0" + | "PCI", "get_dom0_access_status" -> + Some "24.13.0-next" + | "PCI", "enable_dom0_access" -> + Some "24.13.0-next" + | "PCI", "disable_dom0_access" -> + Some "24.13.0-next" | "message", "destroy_many" -> Some "22.19.0" | "VTPM", "set_contents" -> From e699b39a8a73ed2f1c8e90a4de389a0f55e41de5 Mon Sep 17 00:00:00 2001 From: Lin Liu Date: Mon, 22 Apr 2024 06:42:20 +0000 Subject: [PATCH 13/44] CA-391859: Failed to stop varstord-guard varstord-guard has following configuration in the service file After=message-switch.service syslog.target This means varstored-guard needs to be stopped before message-switch, otherwise, it will hung and finally be killed by systemd during xe-toolstack-restart Move message-switch to the begining of the list to shutdown last as all other daemons depend on it Note: the list order is reversed by `for svc in $SERVICES` Signed-off-by: Lin Liu --- scripts/xe-toolstack-restart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/xe-toolstack-restart b/scripts/xe-toolstack-restart index 7cafee29fa4..32ee88609c5 100755 --- a/scripts/xe-toolstack-restart +++ b/scripts/xe-toolstack-restart @@ -27,10 +27,10 @@ echo "Executing $FILENAME" POOLCONF=`cat @ETCXENDIR@/pool.conf` if [ $POOLCONF == "master" ]; then MPATHALERT="mpathalert"; else MPATHALERT=""; fi -SERVICES="perfmon v6d xenopsd xenopsd-xc xenopsd-xenlight +SERVICES="message-switch perfmon v6d xenopsd xenopsd-xc xenopsd-xenlight xenopsd-simulator xenopsd-libvirt xcp-rrdd-iostat xcp-rrdd-squeezed xcp-rrdd-xenpm xcp-rrdd-gpumon xcp-rrdd xcp-networkd squeezed forkexecd - $MPATHALERT xapi-storage-script xapi-clusterd varstored-guard message-switch" + $MPATHALERT xapi-storage-script xapi-clusterd varstored-guard" tmp_file=$(mktemp --suffix="xe-toolstack-restart") systemctl stop stunnel@xapi > $tmp_file 2>&1 From 4c8fcdc3f413c4dcfae9e4c0ff9892f47d5e17fa Mon Sep 17 00:00:00 2001 From: Konstantina Chremmou Date: Tue, 23 Apr 2024 20:35:15 +0100 Subject: [PATCH 14/44] Exposed methods to fetch the methods available in the API. Signed-off-by: Konstantina Chremmou --- ocaml/sdk-gen/csharp/autogen/src/Session.cs | 5 +++++ ocaml/sdk-gen/csharp/templates/JsonRpcClient.mustache | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/ocaml/sdk-gen/csharp/autogen/src/Session.cs b/ocaml/sdk-gen/csharp/autogen/src/Session.cs index a2aef1d672e..4a84b5bcd0c 100644 --- a/ocaml/sdk-gen/csharp/autogen/src/Session.cs +++ b/ocaml/sdk-gen/csharp/autogen/src/Session.cs @@ -333,6 +333,11 @@ public Dictionary RequestHeaders #endregion + public string[] GetSystemMethods() + { + return JsonRpcClient.system_list_methods(); + } + public static Session get_record(Session session, string _session) { Session newSession = new Session(session.Url) { opaque_ref = _session }; diff --git a/ocaml/sdk-gen/csharp/templates/JsonRpcClient.mustache b/ocaml/sdk-gen/csharp/templates/JsonRpcClient.mustache index ac3d0ca625c..307e02560f4 100644 --- a/ocaml/sdk-gen/csharp/templates/JsonRpcClient.mustache +++ b/ocaml/sdk-gen/csharp/templates/JsonRpcClient.mustache @@ -38,6 +38,13 @@ namespace XenAPI { public partial class JsonRpcClient { + public string[] system_list_methods() + { + var converters = new List { }; + var serializer = CreateSerializer(converters); + return Rpc("system.listMethods", new JArray(), serializer); + } + public Event event_get_record(string session, string _event) { var converters = new List {}; From e78773ed43b309b28b0f1a5b1a03497015073a11 Mon Sep 17 00:00:00 2001 From: Konstantina Chremmou Date: Tue, 23 Apr 2024 21:08:58 +0100 Subject: [PATCH 15/44] The github workflow artifacts for C contained unnecessary files. Signed-off-by: Konstantina Chremmou --- .github/workflows/generate-and-build-sdks.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-and-build-sdks.yml b/.github/workflows/generate-and-build-sdks.yml index db28438062f..1886c33c368 100644 --- a/.github/workflows/generate-and-build-sdks.yml +++ b/.github/workflows/generate-and-build-sdks.yml @@ -28,7 +28,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: SDK_Source_C - path: _build/install/default/xapi/sdk/c/* + path: | + _build/install/default/xapi/sdk/c/* + !_build/install/default/xapi/sdk/c/dune - name: Store C# SDK source uses: actions/upload-artifact@v4 @@ -67,7 +69,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: SDK_Artifacts_C - path: source/* + path: | + source/* + !source/src/*.o build-csharp-sdk: name: Build C# SDK From cc55dd2d5afd275b84552e3e22b638219028a62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Thu, 25 Apr 2024 09:18:05 +0100 Subject: [PATCH 16/44] CI: update to Ubuntu 22.04 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need to explicitly install python2, since it is no longer the default. Eventually we may want to drop this completely, but we're not there yet. Signed-off-by: Edwin Török --- .github/workflows/main.yml | 4 ++-- .github/workflows/setup-xapi-environment/action.yml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 42c06764498..9bb4aee895d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -117,7 +117,7 @@ jobs: ocaml-tests: name: Run OCaml tests - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 env: # Ensure you also update test-sdk-builds # when changing this value, to keep builds @@ -158,7 +158,7 @@ jobs: deprecation-test: name: Deprecation tests - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout code diff --git a/.github/workflows/setup-xapi-environment/action.yml b/.github/workflows/setup-xapi-environment/action.yml index e25e0e184fb..c3785924e76 100644 --- a/.github/workflows/setup-xapi-environment/action.yml +++ b/.github/workflows/setup-xapi-environment/action.yml @@ -31,6 +31,10 @@ runs: shell: bash run: sudo apt-get update + - name: Install python2 + shell: bash + run: sudo apt-get install python2 + - name: Use disk with more space for TMPDIR and XDG_CACHE_HOME shell: bash run: | From c5e07819129c59bf17e7a4f01aa464f48e33e4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Thu, 25 Apr 2024 09:46:08 +0100 Subject: [PATCH 17/44] ci(nopin): pinning is very slow and not necessary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We do not publish or use the opam packages from this repo, and therefore pinning is unnecessary. 'opam install --deps-only --with-test .' works without pinning on the version of 'opam' we have here. Pinning ~71 packages is very slow since it makes a full copy of the source+.git folder every time. Skip pinning, this also saves a few gigabytes of disk space. This also makes the cleanup-xapi-environment action a no-op, so remove it. (in fact it'd fail because the output of opam list with master pins is empty). For testing the correctness of opam packages: * we still have the xs-opam CI * we can introduce opam-dune-lint that statically checks opam and dune for missing dependencies (needs new release first) This reduces CI times: * Run OCaml tests: from 15m24s to 10m16s * Setup XenAPI environment: from 7m1s to 5m55s Signed-off-by: Edwin Török --- .../workflows/cleanup-xapi-environment/action.yml | 13 ------------- .github/workflows/generate-and-build-sdks.yml | 3 --- .github/workflows/main.yml | 3 --- .github/workflows/setup-xapi-environment/action.yml | 1 + 4 files changed, 1 insertion(+), 19 deletions(-) delete mode 100644 .github/workflows/cleanup-xapi-environment/action.yml diff --git a/.github/workflows/cleanup-xapi-environment/action.yml b/.github/workflows/cleanup-xapi-environment/action.yml deleted file mode 100644 index 96323007e4e..00000000000 --- a/.github/workflows/cleanup-xapi-environment/action.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Cleanup XenAPI environment -description: Cleanup XenAPI environment created using the setup-xapi-environment composite action - -runs: - using: "composite" - steps: - - name: Uninstall unversioned packages and remove pins - shell: bash - # This should purge them from the cache, unversioned package have - # 'master' as its version - run: | - opam list | awk -F " " '$2 == "master" { print $1 }' | xargs opam uninstall - opam pin list | cut -f1 -d "." | xargs opam unpin diff --git a/.github/workflows/generate-and-build-sdks.yml b/.github/workflows/generate-and-build-sdks.yml index db28438062f..55ac3f4f09a 100644 --- a/.github/workflows/generate-and-build-sdks.yml +++ b/.github/workflows/generate-and-build-sdks.yml @@ -42,9 +42,6 @@ jobs: name: SDK_Source_PowerShell path: _build/install/default/xapi/sdk/powershell/* - - name: Cleanup XenAPI environment - uses: ./.github/workflows/cleanup-xapi-environment - build-c-sdk: name: Build C SDK runs-on: ubuntu-latest diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9bb4aee895d..ada260060ad 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -153,9 +153,6 @@ jobs: - name: Check disk space run: df -h || true - - name: Cleanup XenAPI environment - uses: ./.github/workflows/cleanup-xapi-environment - deprecation-test: name: Deprecation tests runs-on: ubuntu-22.04 diff --git a/.github/workflows/setup-xapi-environment/action.yml b/.github/workflows/setup-xapi-environment/action.yml index c3785924e76..505032095ae 100644 --- a/.github/workflows/setup-xapi-environment/action.yml +++ b/.github/workflows/setup-xapi-environment/action.yml @@ -52,6 +52,7 @@ runs: ocaml-compiler: ${{ steps.dotenv.outputs.ocaml_version_full }} opam-repositories: | xs-opam: ${{ steps.dotenv.outputs.repository }} + opam-pin: false dune-cache: true - name: Install dependencies From ce2f58870cf783cf24a5d356e84f22658b9ea600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Thu, 25 Apr 2024 10:26:15 +0100 Subject: [PATCH 18/44] ci(opam-dune-cache): cache dune builds from opam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Setting DUNE_CACHE_STORAGE_MODE=copy is needed during 'opam install', otherwise dune builds inside opam packages won't be cached. The sandbox used by opam is another partition/device and hardlinking fails with EXDEV. Signed-off-by: Edwin Török --- .github/workflows/setup-xapi-environment/action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/setup-xapi-environment/action.yml b/.github/workflows/setup-xapi-environment/action.yml index 505032095ae..b703d523340 100644 --- a/.github/workflows/setup-xapi-environment/action.yml +++ b/.github/workflows/setup-xapi-environment/action.yml @@ -46,6 +46,8 @@ runs: echo "TMPDIR=${TMPDIR}" >>"$GITHUB_ENV" echo "XDG_CACHE_HOME=${XDG_CACHE_HOME}" >>"$GITHUB_ENV" + # We set DUNE_CACHE_STORAGE_MODE, it is required for dune cache to work inside opam for now, + # otherwise it gets EXDEV and considers it a cache miss - name: Use ocaml uses: ocaml/setup-ocaml@v2 with: @@ -54,6 +56,8 @@ runs: xs-opam: ${{ steps.dotenv.outputs.repository }} opam-pin: false dune-cache: true + env: + DUNE_CACHE_STORAGE_MODE: copy - name: Install dependencies shell: bash From 342e125728fff5b4ab845dc50db02f996c97ab95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Thu, 25 Apr 2024 10:29:50 +0100 Subject: [PATCH 19/44] ci(norm): we have enough space now MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that we no longer pin the local opam packages we have a few more GiB of disk space, and we don't need to rm pre-existing files. This speeds up this step a little. Signed-off-by: Edwin Török --- .github/workflows/setup-xapi-environment/action.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/setup-xapi-environment/action.yml b/.github/workflows/setup-xapi-environment/action.yml index b703d523340..d46ae3a5b96 100644 --- a/.github/workflows/setup-xapi-environment/action.yml +++ b/.github/workflows/setup-xapi-environment/action.yml @@ -8,10 +8,6 @@ inputs: runs: using: "composite" steps: - - name: Free space - shell: bash - run: sudo rm -rf /usr/local/lib/android - - name: Pull configuration from xs-opam shell: bash run: | From 3907e2188d4644fbe994ce970182240b87ba10ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Thu, 25 Apr 2024 10:44:29 +0100 Subject: [PATCH 20/44] ci: separate workflows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dune cache inside 'setup-ocaml' is trimmed to 5GB/jobcount, which is currently about 10. But not all jobs here use the dune cache, so separate the workflows. (Also the dune cache will get compressed afterwards). The SDK build does use the dune cache, but eventually it might become smaller, e.g. if we change it to install just the dependencies needed for SDK gen, and not everything. It does have a lot of unrelated jobs though. The workflows need a unique name, otherwise they cancel each-other. The dune cache is ~1.4GB now compressed, which should speed up the setup-ocaml step on next run as more dependencies will be cached. Setup XenAPI environment now only takes 2m51s instead of 5m55s. Signed-off-by: Edwin Török --- .github/workflows/main.yml | 126 -------------------------------- .github/workflows/other.yml | 138 ++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 126 deletions(-) create mode 100644 .github/workflows/other.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ada260060ad..5f2dd84a112 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,109 +12,6 @@ concurrency: # On new push, cancel old workflows from the same PR, branch or tag cancel-in-progress: true jobs: - python-test: - name: Python tests - runs-on: ubuntu-22.04 - strategy: - fail-fast: false - matrix: - python-version: ["2.7", "3.11"] - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 # To check which files changed: origin/master..HEAD - - uses: LizardByte/setup-python-action@master - with: - python-version: ${{matrix.python-version}} - - - uses: actions/cache@v4 - name: Setup cache for running pre-commit fast - with: - path: ~/.cache/pre-commit - key: pre-commit|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} - - - run: echo "::add-matcher::.github/workflows/python-warning-matcher.json" - name: "Setup GitHub for reporting Python warnings as annotations in pull request code review" - - - uses: pre-commit/action@v3.0.1 - name: Run pre-commit checks (no spaces at end of lines, etc) - if: ${{ matrix.python-version != '2.7' }} - with: - extra_args: --all-files --verbose --hook-stage commit - env: - SKIP: no-commit-to-branch - - - name: Install dependencies only needed for python 2 - if: ${{ matrix.python-version == '2.7' }} - run: pip install enum - - - name: Install dependencies only needed for python 3 - if: ${{ matrix.python-version != '2.7' }} - run: pip install opentelemetry-api opentelemetry-exporter-zipkin-json opentelemetry-sdk pandas pytype toml wrapt - - - name: Install common dependencies for Python ${{matrix.python-version}} - run: pip install future mock pytest-coverage pytest-mock - - - name: Run Pytest for python 2 and get code coverage for Codecov - if: ${{ matrix.python-version == '2.7' }} - run: > - pytest - --cov=scripts --cov=ocaml/xcp-rrdd - scripts/ ocaml/xcp-rrdd -vv -rA - --junitxml=.git/pytest${{matrix.python-version}}.xml - --cov-report term-missing - --cov-report xml:.git/coverage${{matrix.python-version}}.xml - env: - PYTHONDEVMODE: yes - - - name: Run Pytest for python 3 and get code coverage for Codecov - if: ${{ matrix.python-version != '2.7' }} - run: > - pytest - --cov=scripts --cov=ocaml/xcp-rrdd --cov=python3/ - scripts/ ocaml/xcp-rrdd python3/ -vv -rA - --junitxml=.git/pytest${{matrix.python-version}}.xml - --cov-report term-missing - --cov-report xml:.git/coverage${{matrix.python-version}}.xml - env: - PYTHONDEVMODE: yes - - - name: Upload Python ${{matrix.python-version}} coverage report to Codecov - uses: codecov/codecov-action@v3 - with: - directory: .git - files: coverage${{matrix.python-version}}.xml - env_vars: OS,PYTHON - fail_ci_if_error: false - flags: python${{matrix.python-version}} - name: coverage${{matrix.python-version}} - verbose: true - - - uses: dciborow/action-pylint@0.1.0 - if: ${{ matrix.python-version != '2.7' }} - with: - reporter: github-pr-review - level: warning - # To be customized to cover remaining Python scripts: - glob_pattern: "**/*.py" - continue-on-error: true - - - name: Run pytype checks - if: ${{ matrix.python-version != '2.7' }} - run: ./pytype_reporter.py - env: - PR_NUMBER: ${{ github.event.number }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PYTYPE_REPORTER_DEBUG: True - - - name: pyflakes - uses: reviewdog/action-pyflakes@v1 - with: - github_token: ${{ secrets.github_token }} - continue-on-error: true - - ocaml-tests: name: Run OCaml tests runs-on: ubuntu-22.04 @@ -152,26 +49,3 @@ jobs: - name: Check disk space run: df -h || true - - deprecation-test: - name: Deprecation tests - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Generate empty configuration for make to be happy - run: touch config.mk - - - name: quality-gate - run: make quality-gate - - test-sdk-builds: - name: Test SDK builds - uses: ./.github/workflows/generate-and-build-sdks.yml - with: - # Ensure you also update ocaml-tests - # when changing this value, to keep builds - # consistent - xapi_version: "v0.0.0" diff --git a/.github/workflows/other.yml b/.github/workflows/other.yml new file mode 100644 index 00000000000..d65b7abe575 --- /dev/null +++ b/.github/workflows/other.yml @@ -0,0 +1,138 @@ +name: Build and test (other) + +on: + push: + pull_request: + schedule: + # run daily, this refreshes the cache + - cron: "13 2 * * *" + +concurrency: # On new push, cancel old workflows from the same PR, branch or tag: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + python-test: + name: Python tests + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + python-version: ["2.7", "3.11"] + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # To check which files changed: origin/master..HEAD + - uses: LizardByte/setup-python-action@master + with: + python-version: ${{matrix.python-version}} + + - uses: actions/cache@v4 + name: Setup cache for running pre-commit fast + with: + path: ~/.cache/pre-commit + key: pre-commit|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} + + - run: echo "::add-matcher::.github/workflows/python-warning-matcher.json" + name: "Setup GitHub for reporting Python warnings as annotations in pull request code review" + + - uses: pre-commit/action@v3.0.1 + name: Run pre-commit checks (no spaces at end of lines, etc) + if: ${{ matrix.python-version != '2.7' }} + with: + extra_args: --all-files --verbose --hook-stage commit + env: + SKIP: no-commit-to-branch + + - name: Install dependencies only needed for python 2 + if: ${{ matrix.python-version == '2.7' }} + run: pip install enum + + - name: Install dependencies only needed for python 3 + if: ${{ matrix.python-version != '2.7' }} + run: pip install opentelemetry-api opentelemetry-exporter-zipkin-json opentelemetry-sdk pandas pytype toml wrapt + + - name: Install common dependencies for Python ${{matrix.python-version}} + run: pip install future mock pytest-coverage pytest-mock + + - name: Run Pytest for python 2 and get code coverage for Codecov + if: ${{ matrix.python-version == '2.7' }} + run: > + pytest + --cov=scripts --cov=ocaml/xcp-rrdd + scripts/ ocaml/xcp-rrdd -vv -rA + --junitxml=.git/pytest${{matrix.python-version}}.xml + --cov-report term-missing + --cov-report xml:.git/coverage${{matrix.python-version}}.xml + env: + PYTHONDEVMODE: yes + + - name: Run Pytest for python 3 and get code coverage for Codecov + if: ${{ matrix.python-version != '2.7' }} + run: > + pytest + --cov=scripts --cov=ocaml/xcp-rrdd --cov=python3/ + scripts/ ocaml/xcp-rrdd python3/ -vv -rA + --junitxml=.git/pytest${{matrix.python-version}}.xml + --cov-report term-missing + --cov-report xml:.git/coverage${{matrix.python-version}}.xml + env: + PYTHONDEVMODE: yes + + - name: Upload Python ${{matrix.python-version}} coverage report to Codecov + uses: codecov/codecov-action@v3 + with: + directory: .git + files: coverage${{matrix.python-version}}.xml + env_vars: OS,PYTHON + fail_ci_if_error: false + flags: python${{matrix.python-version}} + name: coverage${{matrix.python-version}} + verbose: true + + - uses: dciborow/action-pylint@0.1.0 + if: ${{ matrix.python-version != '2.7' }} + with: + reporter: github-pr-review + level: warning + # To be customized to cover remaining Python scripts: + glob_pattern: "**/*.py" + continue-on-error: true + + - name: Run pytype checks + if: ${{ matrix.python-version != '2.7' }} + run: ./pytype_reporter.py + env: + PR_NUMBER: ${{ github.event.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PYTYPE_REPORTER_DEBUG: True + + - name: pyflakes + uses: reviewdog/action-pyflakes@v1 + with: + github_token: ${{ secrets.github_token }} + continue-on-error: true + + deprecation-test: + name: Deprecation tests + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Generate empty configuration for make to be happy + run: touch config.mk + + - name: quality-gate + run: make quality-gate + + test-sdk-builds: + name: Test SDK builds + uses: ./.github/workflows/generate-and-build-sdks.yml + with: + # Ensure you also update ocaml-tests + # when changing this value, to keep builds + # consistent + xapi_version: "v0.0.0" From 99137b6355342c5c8c116499d32fe39ea41529f1 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 25 Apr 2024 13:27:03 +0100 Subject: [PATCH 21/44] Update README with different build instructions - Removes large package listing from build instructions. - Adds explanation about tags when working from a clone of a fork of the repo. - Includes miscellaneous changes to wording. Signed-off-by: Colin --- README.markdown | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/README.markdown b/README.markdown index a4272105d1b..37174144a3e 100644 --- a/README.markdown +++ b/README.markdown @@ -4,7 +4,7 @@ Xapi Project's XenAPI Management Toolstack ![Build](https://github.com/xapi-project/xen-api/actions/workflows/main.yml/badge.svg?branch=master) Xen API (or xapi) is a management stack that configures and controls -Xen-enabled hosts and resource pools, and co-ordinates resources +Xen-enabled hosts and resource pools, and coordinates resources within the pool. Xapi exposes the Xen API interface for many languages and is a component of the XenServer project. Xen API is written mostly in [OCaml](http://caml.inria.fr/ocaml/) @@ -16,31 +16,31 @@ Xapi is the main component produced by the Linux Foundation's Build and Install ----------------- -To build xen-api from source, we recommend using [opam](https://opam.ocaml.org/doc/Manual.html) with the [xs-opam](https://github.com/xapi-project/xs-opam) repository (farther explanation in its [readme](https://github.com/xapi-project/xs-opam/blob/master/README.md)). +To build xen-api from source, we recommend using [opam](https://opam.ocaml.org/doc/Manual.html) with the [xs-opam](https://github.com/xapi-project/xs-opam) repository (further explanation in its [readme](https://github.com/xapi-project/xs-opam/blob/master/README.md)). 1) Install `opam` and `git` with your package manager. -2) Clone this repo, and work from it's root. +2) Clone this repo and work from its root. ```bash git clone https://github.com/xapi-project/xen-api && cd xen-api ``` -3) Figure out what version of ocaml-base-compiler to use. +3) Figure out which version of ocaml-base-compiler to use. - - Go to [this xs-opam file](https://raw.githubusercontent.com/xapi-project/xs-opam/master/tools/xs-opam-ci.env), and look for "OCAML_VERSION_FULL" - - Run that line, i.e: + - Go to [this xs-opam file](https://raw.githubusercontent.com/xapi-project/xs-opam/master/tools/xs-opam-ci.env), and look for `OCAML_VERSION_FULL`. + - Run that line, e.g.: ```bash - export OCAML_VERSION_FULL="4.10.1" + export OCAML_VERSION_FULL="4.14.1" ``` -4) Setup opam, with your Enviornment (i.e switch). +4) Setup opam with your environment (i.e. switch). ```bash opam init opam switch create xen-api ocaml-base-compiler.$OCAML_VERSION_FULL - # This basically "jumps you into" the enviornment you just created: + # This basically "jumps you into" the environment you just created: eval $(opam env --switch=xen-api --set-switch) ``` @@ -58,12 +58,7 @@ To build xen-api from source, we recommend using [opam](https://opam.ocaml.org/d 6) Install all the Packages. ```bash - PACKAGES="xapi-cli-protocol xapi-client xapi-consts xapi-datamodel xapi-types xapi xe xen-api-sdk xen-api-client xen-api-client-lwt xen-api-client-async xapi-rrdd xapi-rrdd-plugin xapi-rrd-transport xapi-rrd-transport-utils rrd-transport rrdd-plugin rrdd-plugins rrddump gzip http-lib pciutil safe-resources sexpr stunnel uuid xapi-compression xml-light2 zstd vhd-tool xs-toolstack" - - # NOT needed with opam>=2.1.0) Install all the dependencies (Including OS): - opam --yes depext --yes -u $PACKAGES # The first '--yes' is to install depext itself - # Install the Packages finally: - opam install $PACKAGES --yes --deps-only --with-test -v + opam install xs-toolstack # Update the current switch. (You're already on the correct one, just refresh it). eval $(opam env) ``` @@ -78,6 +73,29 @@ To build xen-api from source, we recommend using [opam](https://opam.ocaml.org/d The binaries should now be in `./_build/install/default/bin`! +Working From a Fork +------------------- +If you are working from within a clone of a fork of this repository, you will +need tags from the upstream repository in order to produce a build with the +correct versioning string. + +To fetch these tags, you must ensure that this repository is known to `git` (as a +remote, often called `upstream`) and then you can fetch the tags as follows: + +```bash +git remote add upstream https://github.com/xapi-project/xen-api +git fetch upstream --tags +``` + +You can check if this has been successful by invoking `git describe`. + +You can then push these tags to your remote repository to ensure they are cloned +in future: + +```bash +git push origin --tags +``` + Contributions ------------- From 15391c9f1d86eda4fa5f5d7489ff0256d114627f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Fri, 26 Apr 2024 09:02:45 +0100 Subject: [PATCH 22/44] ci: trim dune cache MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We should eventually separate the opam dependency install into its own job that uploads an artifact/cache that other jobs can reuse (and that should have a bigger dune cache), however for now just trim the size of the cache. The default is 5GiB, which results in ~1.4GiB compressed, which would hit the 10GiB cache size limit in GitHub way too often. We may need to tweak this value in the future. Signed-off-by: Edwin Török --- .github/workflows/generate-and-build-sdks.yml | 3 +++ .github/workflows/main.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/generate-and-build-sdks.yml b/.github/workflows/generate-and-build-sdks.yml index 55ac3f4f09a..ad434d7d9a5 100644 --- a/.github/workflows/generate-and-build-sdks.yml +++ b/.github/workflows/generate-and-build-sdks.yml @@ -42,6 +42,9 @@ jobs: name: SDK_Source_PowerShell path: _build/install/default/xapi/sdk/powershell/* + - name: Trim dune cache + run: opam exec -- dune cache trim --size=2GiB + build-c-sdk: name: Build C SDK runs-on: ubuntu-latest diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5f2dd84a112..d4bf28aaab2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,3 +49,6 @@ jobs: - name: Check disk space run: df -h || true + + - name: Trim dune cache + run: opam exec -- dune cache trim --size=2GiB From 5dad78b12f502a7285afd0a64e87f50ca626eefe Mon Sep 17 00:00:00 2001 From: Konstantina Chremmou Date: Fri, 26 Apr 2024 11:52:31 +0100 Subject: [PATCH 23/44] Removed header because it does not look good on github. Signed-off-by: Konstantina Chremmou --- ocaml/doc/basics.md | 4 ---- ocaml/doc/vm-lifecycle.md | 4 ---- ocaml/doc/wire-protocol.md | 4 ---- ocaml/idl/autogen/api-ref-autogen.md | 4 ---- 4 files changed, 16 deletions(-) diff --git a/ocaml/doc/basics.md b/ocaml/doc/basics.md index b1812da023d..783797051f0 100644 --- a/ocaml/doc/basics.md +++ b/ocaml/doc/basics.md @@ -1,7 +1,3 @@ ---- - layout: doc ---- - # API Basics This document defines the XenServer Management API - an interface for remotely diff --git a/ocaml/doc/vm-lifecycle.md b/ocaml/doc/vm-lifecycle.md index 68664730617..31f31889f36 100644 --- a/ocaml/doc/vm-lifecycle.md +++ b/ocaml/doc/vm-lifecycle.md @@ -1,7 +1,3 @@ ---- - layout: doc ---- - # VM Lifecycle The following diagram shows the states that a VM can be in diff --git a/ocaml/doc/wire-protocol.md b/ocaml/doc/wire-protocol.md index 808d021154d..20e39627cc3 100644 --- a/ocaml/doc/wire-protocol.md +++ b/ocaml/doc/wire-protocol.md @@ -1,7 +1,3 @@ ---- - layout: doc ---- - # Wire Protocol for Remote API Calls API calls are sent over a network to a Xen-enabled host using an RPC protocol. diff --git a/ocaml/idl/autogen/api-ref-autogen.md b/ocaml/idl/autogen/api-ref-autogen.md index 7abf22b6872..1c64c0e8bfb 100644 --- a/ocaml/idl/autogen/api-ref-autogen.md +++ b/ocaml/idl/autogen/api-ref-autogen.md @@ -1,7 +1,3 @@ ---- - layout: doc ---- - # API Reference Version **@xapi-version@** From e87b45943a2e2fc14c313714fc186e6c45f11bea Mon Sep 17 00:00:00 2001 From: Vincent Liu Date: Mon, 29 Apr 2024 10:37:42 +0100 Subject: [PATCH 24/44] Install xapi-tracing-export library xapi-tracing-export is a new library separated from xapi-tracing. This library is needed by xapi-clusterd (and probably other components that require tracing as well). So install it as a library in the Makefile. Signed-off-by: Vincent Liu --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 897862dab52..38c7545cc83 100644 --- a/Makefile +++ b/Makefile @@ -253,7 +253,7 @@ install: build doc sdk doc-json gzip http-lib pciutil sexpr stunnel uuid xml-light2 zstd xapi-compression safe-resources \ message-switch message-switch-async message-switch-cli message-switch-core message-switch-lwt \ message-switch-unix xapi-idl forkexec xapi-forkexecd xapi-storage xapi-storage-script xapi-storage-cli \ - xapi-nbd varstored-guard xapi-log xapi-open-uri xapi-tracing xapi-expiry-alerts cohttp-posix \ + xapi-nbd varstored-guard xapi-log xapi-open-uri xapi-tracing xapi-tracing-export xapi-expiry-alerts cohttp-posix \ xapi-rrd xapi-inventory \ xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck # docs @@ -275,7 +275,7 @@ uninstall: gzip http-lib pciutil sexpr stunnel uuid xml-light2 zstd xapi-compression safe-resources \ message-switch message-switch-async message-switch-cli message-switch-core message-switch-lwt \ message-switch-unix xapi-idl forkexec xapi-forkexecd xapi-storage xapi-storage-script xapi-log \ - xapi-open-uri xapi-tracing xapi-expiry-alerts cohttp-posix \ + xapi-open-uri xapi-tracing xapi-tracing-export xapi-expiry-alerts cohttp-posix \ xapi-rrd xapi-inventory \ xapi-stdext-date xapi-stdext-encodings xapi-stdext-pervasives xapi-stdext-std xapi-stdext-threads xapi-stdext-unix xapi-stdext-zerocheck From 281347b25842c961d856129e13d6b2287a1d5ffb Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Mon, 29 Apr 2024 13:46:28 +0100 Subject: [PATCH 25/44] CA-392163 clear scheduled assignments on startup Clear all (stale) scheduled assignments for: VM, PCI, VGPU objects on startup. We were missing the latter two. Signed-off-by: Christian Lindig --- ocaml/xapi/dbsync_master.ml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/ocaml/xapi/dbsync_master.ml b/ocaml/xapi/dbsync_master.ml index 5d657d2cb09..5cdc4b9106e 100644 --- a/ocaml/xapi/dbsync_master.ml +++ b/ocaml/xapi/dbsync_master.ml @@ -156,12 +156,20 @@ let release_locks ~__context = Xapi_vm_lifecycle.force_state_reset ~__context ~self ~value:`Halted ) vms ; - (* All VMs should have their scheduled_to_be_resident_on field cleared *) - List.iter - (fun self -> - Db.VM.set_scheduled_to_be_resident_on ~__context ~self ~value:Ref.null - ) - (Db.VM.get_all ~__context) + (* Clear all assignments that are only scheduled *) + let value = Ref.null in + Db.VM.get_all ~__context + |> List.iter (fun self -> + Db.VM.set_scheduled_to_be_resident_on ~__context ~self ~value + ) ; + Db.PCI.get_all ~__context + |> List.iter (fun self -> + Db.PCI.set_scheduled_to_be_attached_to ~__context ~self ~value + ) ; + Db.VGPU.get_all ~__context + |> List.iter (fun self -> + Db.VGPU.set_scheduled_to_be_resident_on ~__context ~self ~value + ) let create_tools_sr __context name_label name_description sr_introduce maybe_create_pbd = From f05ac7259b3f902bbbcf1a0820b9ab7bc5b08d37 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Tue, 30 Apr 2024 10:56:29 +0100 Subject: [PATCH 26/44] tests: Allow the alcotest_suite to run Signed-off-by: Pau Ruiz Safont --- ocaml/tests/test_vm_check_operation_error.ml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ocaml/tests/test_vm_check_operation_error.ml b/ocaml/tests/test_vm_check_operation_error.ml index 0423338e630..567ac89f49f 100644 --- a/ocaml/tests/test_vm_check_operation_error.ml +++ b/ocaml/tests/test_vm_check_operation_error.ml @@ -183,7 +183,4 @@ let test = ; ("test_sxm_allowed_when_rum", `Quick, test_sxm_allowed_when_rum) ; ("test_vm_set_nvram when VM is running", `Quick, test_vm_set_nvram_running) ] - -let () = - Alcotest.run "Xapi_vm_lifecycle" - [("is_allowed_concurrently", test_allow_concurrently)] + @ test_allow_concurrently From 0e954368c6d819a4fe0c50fe28f45f63f39723f2 Mon Sep 17 00:00:00 2001 From: Gabriel Buica Date: Wed, 17 Apr 2024 16:36:37 +0100 Subject: [PATCH 27/44] CP-48195: Instrument client side of `forkexecd` Instrument: - `forkhelpers.ml`, - `fecomms.ml` to create spans around functions when a parent span is supplied as `tracing`. Signed-off-by: Gabriel Buica --- ocaml/forkexecd/lib/fecomms.ml | 37 ++++++++++++---- ocaml/forkexecd/lib/forkhelpers.ml | 58 +++++++++++++++---------- ocaml/forkexecd/lib/forkhelpers.mli | 9 ++-- ocaml/libs/tracing/tracing.ml | 31 +++++++++++++ ocaml/libs/tracing/tracing.mli | 31 +++++++++++++ ocaml/xapi/sm_exec.ml | 8 ++-- ocaml/xapi/xapi_observer_components.ml | 17 +++----- ocaml/xapi/xapi_observer_components.mli | 1 - 8 files changed, 140 insertions(+), 52 deletions(-) diff --git a/ocaml/forkexecd/lib/fecomms.ml b/ocaml/forkexecd/lib/fecomms.ml index cc34a3c09f5..ee7c92fb7c6 100644 --- a/ocaml/forkexecd/lib/fecomms.ml +++ b/ocaml/forkexecd/lib/fecomms.ml @@ -1,25 +1,40 @@ module Unixext = Xapi_stdext_unix.Unixext -let open_unix_domain_sock () = Unix.socket Unix.PF_UNIX Unix.SOCK_STREAM 0 +let update_ferpc_env tracing (ferpc : Fe.ferpc) : Fe.ferpc = + match ferpc with + | Setup setup_cmd -> + let env = setup_cmd.env @ Tracing.EnvHelpers.of_span tracing in + Setup {setup_cmd with env} + | Setup_response _ | Exec | Execed _ | Finished _ | Dontwaitpid -> + ferpc -let open_unix_domain_sock_server path = +let with_tracing ~tracing ~name f = Tracing.with_tracing ~parent:tracing ~name f + +let open_unix_domain_sock ?tracing () = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun _ -> + Unix.socket Unix.PF_UNIX Unix.SOCK_STREAM 0 + +let open_unix_domain_sock_server ?tracing path = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> Unixext.mkdir_rec (Filename.dirname path) 0o755 ; Unixext.unlink_safe path ; - let sock = open_unix_domain_sock () in + let sock = open_unix_domain_sock ?tracing () in try Unix.bind sock (Unix.ADDR_UNIX path) ; Unix.listen sock 5 ; sock with e -> Unix.close sock ; raise e -let open_unix_domain_sock_client path = - let sock = open_unix_domain_sock () in +let open_unix_domain_sock_client ?tracing path = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> + let sock = open_unix_domain_sock ?tracing () in try Unix.connect sock (Unix.ADDR_UNIX path) ; sock with e -> Unix.close sock ; raise e -let read_raw_rpc sock = +let read_raw_rpc ?tracing sock = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun _ -> let buffer = Bytes.make 12 '\000' in Unixext.really_read sock buffer 0 12 ; let header = Bytes.unsafe_to_string buffer in @@ -31,7 +46,9 @@ let read_raw_rpc sock = Unix.(shutdown sock SHUTDOWN_ALL) ; Error ("Header is not an integer: " ^ header) -let write_raw_rpc sock ferpc = +let write_raw_rpc ?tracing sock ferpc = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> + let ferpc = update_ferpc_env tracing ferpc in let body = Jsonrpc.to_string (Fe.rpc_of_ferpc ferpc) in let len = String.length body in let buffer = Printf.sprintf "%012d%s" len body in @@ -39,12 +56,14 @@ let write_raw_rpc sock ferpc = exception Connection_closed -let receive_named_fd sock = +let receive_named_fd ?tracing sock = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun _ -> let buffer = Bytes.make 36 '\000' in let len, _from, newfd = Unixext.recv_fd sock buffer 0 36 [] in let buffer = Bytes.unsafe_to_string buffer in if len = 0 then raise Connection_closed ; (newfd, buffer) -let send_named_fd sock uuid fd = +let send_named_fd ?tracing sock uuid fd = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun _ -> ignore (Unixext.send_fd_substring sock uuid 0 (String.length uuid) [] fd) diff --git a/ocaml/forkexecd/lib/forkhelpers.ml b/ocaml/forkexecd/lib/forkhelpers.ml index 2c8041b9535..c3ce2133dc0 100644 --- a/ocaml/forkexecd/lib/forkhelpers.ml +++ b/ocaml/forkexecd/lib/forkhelpers.ml @@ -36,9 +36,7 @@ let test_path = let runtime_path = Option.value ~default:"/var" test_path -let _with_tracing ?tracing ~name f = - let name = Printf.sprintf "forkhelpers.%s" name in - Tracing.with_tracing ?parent:tracing ~name f +let with_tracing ~tracing ~name f = Tracing.with_tracing ~parent:tracing ~name f let finally = Xapi_stdext_pervasives.Pervasiveext.finally @@ -146,7 +144,8 @@ let getpid (_sock, pid) = pid type 'a result = Success of string * 'a | Failure of string * exn -let temp_dir_server = runtime_path ^ "/run/nonpersistent/forkexecd/" +let temp_dir_server = + Filename.concat runtime_path "/run/nonpersistent/forkexecd/" let temp_dir = try @@ -182,11 +181,13 @@ type syslog_stdout = (** Safe function which forks a command, closing all fds except a whitelist and having performed some fd operations in the child *) -let safe_close_and_exec ?env stdin stdout stderr +let safe_close_and_exec ?tracing ?env stdin stdout stderr (fds : (string * Unix.file_descr) list) ?(syslog_stdout = NoSyslogging) ?(redirect_stderr_to_stdout = false) (cmd : string) (args : string list) = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> let sock = - Fecomms.open_unix_domain_sock_client (runtime_path ^ "/xapi/forker/main") + Fecomms.open_unix_domain_sock_client ?tracing + (Filename.concat runtime_path "/xapi/forker/main") in let stdinuuid = Uuidx.(to_string (make ())) in let stdoutuuid = Uuidx.(to_string (make ())) in @@ -233,7 +234,7 @@ let safe_close_and_exec ?env stdin stdout stderr | Syslog_WithKey k -> {Fe.enabled= true; Fe.key= Some k} in - Fecomms.write_raw_rpc sock + Fecomms.write_raw_rpc ?tracing sock (Fe.Setup { Fe.cmdargs= cmd :: args @@ -244,7 +245,7 @@ let safe_close_and_exec ?env stdin stdout stderr } ) ; - let response = Fecomms.read_raw_rpc sock in + let response = Fecomms.read_raw_rpc ?tracing sock in let s = match response with @@ -267,10 +268,14 @@ let safe_close_and_exec ?env stdin stdout stderr failwith msg in - let fd_sock = Fecomms.open_unix_domain_sock_client s.Fe.fd_sock_path in + let fd_sock = + Fecomms.open_unix_domain_sock_client ?tracing s.Fe.fd_sock_path + in add_fd_to_close_list fd_sock ; - let send_named_fd uuid fd = Fecomms.send_named_fd fd_sock uuid fd in + let send_named_fd uuid fd = + Fecomms.send_named_fd ?tracing fd_sock uuid fd + in List.iter (fun (uuid, _, srcfdo) -> @@ -282,8 +287,8 @@ let safe_close_and_exec ?env stdin stdout stderr ) predefined_fds ; List.iter (fun (uuid, srcfd) -> send_named_fd uuid srcfd) fds ; - Fecomms.write_raw_rpc sock Fe.Exec ; - match Fecomms.read_raw_rpc sock with + Fecomms.write_raw_rpc ?tracing sock Fe.Exec ; + match Fecomms.read_raw_rpc ?tracing sock with | Ok (Fe.Execed pid) -> (sock, pid) | Ok status -> @@ -304,8 +309,9 @@ let safe_close_and_exec ?env stdin stdout stderr ) close_fds -let execute_command_get_output_inner ?env ?stdin ?(syslog_stdout = NoSyslogging) - ?(redirect_stderr_to_stdout = false) ?(timeout = -1.0) cmd args = +let execute_command_get_output_inner ?tracing ?env ?stdin + ?(syslog_stdout = NoSyslogging) ?(redirect_stderr_to_stdout = false) + ?(timeout = -1.0) cmd args = let to_close = ref [] in let close fd = if List.mem fd !to_close then ( @@ -325,10 +331,14 @@ let execute_command_get_output_inner ?env ?stdin ?(syslog_stdout = NoSyslogging) finally (fun () -> match + with_tracing ~tracing ~name:"Forkhelpers.with_logfile_out_fd" + @@ fun tracing -> with_logfile_fd "execute_command_get_out" (fun out_fd -> + with_tracing ~tracing ~name:"Forkhelpers.with_logfile_err_fd" + @@ fun tracing -> with_logfile_fd "execute_command_get_err" (fun err_fd -> let sock, pid = - safe_close_and_exec ?env + safe_close_and_exec ?tracing ?env (Option.map (fun (_, fd, _) -> fd) stdinandpipes) (Some out_fd) (Some err_fd) [] ~syslog_stdout ~redirect_stderr_to_stdout cmd args @@ -341,6 +351,7 @@ let execute_command_get_output_inner ?env ?stdin ?(syslog_stdout = NoSyslogging) stdinandpipes ; if timeout > 0. then Unix.setsockopt_float sock Unix.SO_RCVTIMEO timeout ; + with_tracing ~tracing ~name:"Forkhelpers.waitpid" @@ fun _ -> try waitpid (sock, pid) with Unix.(Unix_error ((EAGAIN | EWOULDBLOCK), _, _)) -> Unix.kill pid Sys.sigkill ; @@ -361,12 +372,15 @@ let execute_command_get_output_inner ?env ?stdin ?(syslog_stdout = NoSyslogging) ) (fun () -> List.iter Unix.close !to_close) -let execute_command_get_output ?env ?(syslog_stdout = NoSyslogging) +let execute_command_get_output ?tracing ?env ?(syslog_stdout = NoSyslogging) ?(redirect_stderr_to_stdout = false) ?timeout cmd args = - execute_command_get_output_inner ?env ?stdin:None ?timeout ~syslog_stdout - ~redirect_stderr_to_stdout cmd args - -let execute_command_get_output_send_stdin ?env ?(syslog_stdout = NoSyslogging) - ?(redirect_stderr_to_stdout = false) ?timeout cmd args stdin = - execute_command_get_output_inner ?env ~stdin ~syslog_stdout + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> + execute_command_get_output_inner ?tracing ?env ?stdin:None ?timeout + ~syslog_stdout ~redirect_stderr_to_stdout cmd args + +let execute_command_get_output_send_stdin ?tracing ?env + ?(syslog_stdout = NoSyslogging) ?(redirect_stderr_to_stdout = false) + ?timeout cmd args stdin = + with_tracing ~tracing ~name:__FUNCTION__ @@ fun tracing -> + execute_command_get_output_inner ?tracing ?env ~stdin ~syslog_stdout ~redirect_stderr_to_stdout ?timeout cmd args diff --git a/ocaml/forkexecd/lib/forkhelpers.mli b/ocaml/forkexecd/lib/forkhelpers.mli index 186cbe51872..a91afa52a87 100644 --- a/ocaml/forkexecd/lib/forkhelpers.mli +++ b/ocaml/forkexecd/lib/forkhelpers.mli @@ -44,7 +44,8 @@ val default_path : string list val default_path_env_pair : string array val execute_command_get_output : - ?env:string array + ?tracing:Tracing.Span.t + -> ?env:string array -> ?syslog_stdout:syslog_stdout -> ?redirect_stderr_to_stdout:bool -> ?timeout:float @@ -56,7 +57,8 @@ val execute_command_get_output : [Spawn_internal_error(stderr, stdout, Unix.process_status)] *) val execute_command_get_output_send_stdin : - ?env:string array + ?tracing:Tracing.Span.t + -> ?env:string array -> ?syslog_stdout:syslog_stdout -> ?redirect_stderr_to_stdout:bool -> ?timeout:float @@ -92,7 +94,8 @@ exception Subprocess_killed of int exception Subprocess_timeout val safe_close_and_exec : - ?env:string array + ?tracing:Tracing.Span.t + -> ?env:string array -> Unix.file_descr option -> Unix.file_descr option -> Unix.file_descr option diff --git a/ocaml/libs/tracing/tracing.ml b/ocaml/libs/tracing/tracing.ml index 8327ad3a299..e7a247c1e80 100644 --- a/ocaml/libs/tracing/tracing.ml +++ b/ocaml/libs/tracing/tracing.ml @@ -634,3 +634,34 @@ let with_tracing ?(attributes = []) ?(parent = None) ~name f = | Error e -> warn "Failed to start tracing: %s" (Printexc.to_string e) ; f None + +module EnvHelpers = struct + let traceparent_key = "TRACEPARENT" + + let of_traceparent traceparent = + match traceparent with + | None -> + [] + | Some traceparent -> + [String.concat "=" [traceparent_key; traceparent]] + + let to_traceparent env = + let env_opt = + List.find_opt (String.starts_with ~prefix:traceparent_key) env + in + Option.bind env_opt (fun key_value -> + match String.split_on_char '=' key_value with + | [key; traceparent] when String.equal key traceparent_key -> + Some traceparent + | _ -> + None + ) + + let of_span span = + match span with + | None -> + [] + | Some span -> + Some (span |> Span.get_context |> SpanContext.to_traceparent) + |> of_traceparent +end diff --git a/ocaml/libs/tracing/tracing.mli b/ocaml/libs/tracing/tracing.mli index 0440339c6b9..b7f33b6d051 100644 --- a/ocaml/libs/tracing/tracing.mli +++ b/ocaml/libs/tracing/tracing.mli @@ -177,3 +177,34 @@ val with_tracing : val set_observe : bool -> unit val validate_attribute : string * string -> bool + +(** [EnvHelpers] module is a helper module for the tracing library to easily + transition back and forth between a string list of environment variables to + a traceparent. + *) +module EnvHelpers : sig + val traceparent_key : string + (** [traceparent_key] is a constant the represents the key of the traceparent + environment variable. + *) + + val of_traceparent : string option -> string list + (** [of_traceparent traceparent_opt] returns a singleton list consisting of a + envirentment variable with the key [traceparent_key] and value [v] if + [traceparent_opt] is [Some v]. Otherwise, returns an empty list. *) + + val to_traceparent : string list -> string option + (** [to_traceparent env_var_lst] returns [Some v] where v is the value of the + environmental variable coresponding to the key [traceparent_key] from a + string list of environmental variables [env_var_lst]. If there is no such + evironmental variable in the list, it returns [None]. + *) + + val of_span : Span.t option -> string list + (** [of_span span] returns a singleton list consisting of a + envirentment variable with the key [traceparent_key] and value [v], where + [v] is traceparent representation of span [s] (if [span] is [Some s]). + + If [span] is [None], it returns an empty list. + *) +end diff --git a/ocaml/xapi/sm_exec.ml b/ocaml/xapi/sm_exec.ml index a55b61d72f9..5b449ae0a07 100644 --- a/ocaml/xapi/sm_exec.ml +++ b/ocaml/xapi/sm_exec.ml @@ -341,7 +341,6 @@ let with_session sr f = let exec_xmlrpc ~dbg ?context:_ ?(needs_session = true) (driver : string) (call : call) = with_dbg ~name:call.cmd ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in let do_call call = let xml = xmlrpc_of_call call in let name = Printf.sprintf "sm_exec: %s" call.cmd in @@ -358,12 +357,11 @@ let exec_xmlrpc ~dbg ?context:_ ?(needs_session = true) (driver : string) | false -> (None, exe, args) | true -> - let traceparent = Debuginfo.traceparent_of_dbg dbg in Xapi_observer_components.env_exe_args_of - ~component:Xapi_observer_components.SMApi ~traceparent - ~exe ~args + ~component:Xapi_observer_components.SMApi ~exe ~args in - Forkhelpers.execute_command_get_output ?env exe args + Forkhelpers.execute_command_get_output ?tracing:di.tracing ?env + exe args in try (Xml.parse_string output, stderr) with e -> diff --git a/ocaml/xapi/xapi_observer_components.ml b/ocaml/xapi/xapi_observer_components.ml index e91fd143ec1..9b0ea524db6 100644 --- a/ocaml/xapi/xapi_observer_components.ml +++ b/ocaml/xapi/xapi_observer_components.ml @@ -99,24 +99,17 @@ let ( // ) = Filename.concat let dir_name_of_component component = Xapi_globs.observer_config_dir // to_string component // "enabled" -let env_exe_args_of ~component ~traceparent ~exe ~args = +let env_exe_args_of ~component ~exe ~args = let dir_name_value = Filename.quote (dir_name_of_component component) in let env_vars = Array.concat [ Forkhelpers.default_path_env_pair ; Env_record.to_string_array - ([ - Env_record.pair ("OBSERVER_CONFIG_DIR", dir_name_value) - ; Env_record.pair ("PYTHONPATH", Filename.dirname exe) - ] - @ - match traceparent with - | None -> - [] - | Some traceparent -> - [Env_record.pair ("TRACEPARENT", traceparent)] - ) + [ + Env_record.pair ("OBSERVER_CONFIG_DIR", dir_name_value) + ; Env_record.pair ("PYTHONPATH", Filename.dirname exe) + ] ] in let args = "-m" :: "observer" :: exe :: args in diff --git a/ocaml/xapi/xapi_observer_components.mli b/ocaml/xapi/xapi_observer_components.mli index 9ee531bfe36..55bdf7e7f05 100644 --- a/ocaml/xapi/xapi_observer_components.mli +++ b/ocaml/xapi/xapi_observer_components.mli @@ -64,7 +64,6 @@ val dir_name_of_component : t -> string val env_exe_args_of : component:t - -> traceparent:string option -> exe:string -> args:string list -> string array option * string * string list From 70f81493e872b33d4b9928eaf2b8e9765024e658 Mon Sep 17 00:00:00 2001 From: Gabriel Buica Date: Tue, 30 Apr 2024 13:53:37 +0100 Subject: [PATCH 28/44] CP-48195: Comment out `warn`. Currently the `observe` mode of the `tracing` library do not work corrently resulting in the logs being spammed by this warning. Comment it out so that the logs do not become too big (for the time being). Signed-off-by: Gabriel Buica --- ocaml/libs/tracing/tracing.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocaml/libs/tracing/tracing.ml b/ocaml/libs/tracing/tracing.ml index e7a247c1e80..6e1ed32810a 100644 --- a/ocaml/libs/tracing/tracing.ml +++ b/ocaml/libs/tracing/tracing.ml @@ -608,7 +608,7 @@ let get_tracer ~name = | Some provider -> Tracer.create ~name ~provider | None -> - warn "No provider found for tracing %s" name ; + (* warn "No provider found for tracing %s" name ; *) Tracer.no_op let enable_span_garbage_collector ?(timeout = 86400.) () = From 7d315d0ca0aba64ca5bd8c26ac6cc7477e1e6520 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Tue, 12 Sep 2023 16:00:49 +0100 Subject: [PATCH 29/44] CA-371529 XSI-1329 remove license check for has-vendor-device The API call VM.set-has-vendor-device used to be a lincensed feature but it no longer is. As a first step to simplify when Windows VMs automatically or not update device drivers, remove the license checks in the code. The feature flag still remains in place. Signed-off-by: Christian Lindig --- ocaml/xapi-cli-server/cli_operations.ml | 1 + ocaml/xapi/xapi_vm.ml | 17 ++--------------- ocaml/xapi/xapi_vm.mli | 3 --- ocaml/xapi/xapi_vm_clone.ml | 13 ++----------- ocaml/xapi/xapi_vm_helpers.ml | 12 ++---------- ocaml/xapi/xapi_vm_migrate.ml | 3 --- 6 files changed, 7 insertions(+), 42 deletions(-) diff --git a/ocaml/xapi-cli-server/cli_operations.ml b/ocaml/xapi-cli-server/cli_operations.ml index bc16bfb1286..3303bd920cb 100644 --- a/ocaml/xapi-cli-server/cli_operations.ml +++ b/ocaml/xapi-cli-server/cli_operations.ml @@ -3993,6 +3993,7 @@ let vm_install_real printer rpc session_id template name description params = Client.VM.set_has_vendor_device ~rpc ~session_id ~self:new_vm ~value:want_dev with e when e = licerr -> + (* No longer licensed, this should not happen. CA-371529 *) let msg = Printf.sprintf "Note: the VM template recommends setting has-vendor-device=true \ diff --git a/ocaml/xapi/xapi_vm.ml b/ocaml/xapi/xapi_vm.ml index e0de06045e1..8632cc1ca35 100644 --- a/ocaml/xapi/xapi_vm.ml +++ b/ocaml/xapi/xapi_vm.ml @@ -592,9 +592,6 @@ let create ~__context ~name_label ~name_description ~power_state ~user_version ~shutdown_delay ~order ~suspend_SR ~version ~generation_id ~hardware_platform_version ~has_vendor_device ~reference_label ~domain_type ~nVRAM : API.ref_VM = - if has_vendor_device then - Pool_features.assert_enabled ~__context - ~f:Features.PCI_device_for_auto_update ; (* Add random mac_seed if there isn't one specified already *) let other_config = let gen_mac_seed () = Uuidx.to_string (Uuidx.make ()) in @@ -1571,19 +1568,9 @@ let import ~__context ~url ~sr ~full_restore ~force = let query_services ~__context ~self:_ = raise Api_errors.(Server_error (not_implemented, ["query_services"])) -let assert_can_set_has_vendor_device ~__context ~self ~value = - if - value - (* Do the check even for templates, because snapshots are templates and - * we allow restoration of a VM from a snapshot. *) - then - Pool_features.assert_enabled ~__context - ~f:Features.PCI_device_for_auto_update ; - Xapi_vm_lifecycle.assert_initial_power_state_is ~__context ~self - ~expected:`Halted - let set_has_vendor_device ~__context ~self ~value = - assert_can_set_has_vendor_device ~__context ~self ~value ; + Xapi_vm_lifecycle.assert_initial_power_state_is ~__context ~self + ~expected:`Halted ; Db.VM.set_has_vendor_device ~__context ~self ~value ; update_vm_virtual_hardware_platform_version ~__context ~vm:self diff --git a/ocaml/xapi/xapi_vm.mli b/ocaml/xapi/xapi_vm.mli index c349ff8dcb0..22ee1aeb3b2 100644 --- a/ocaml/xapi/xapi_vm.mli +++ b/ocaml/xapi/xapi_vm.mli @@ -401,9 +401,6 @@ val call_plugin : val set_has_vendor_device : __context:Context.t -> self:API.ref_VM -> value:bool -> unit -val assert_can_set_has_vendor_device : - __context:Context.t -> self:API.ref_VM -> value:bool -> unit - val import : __context:Context.t -> url:string diff --git a/ocaml/xapi/xapi_vm_clone.ml b/ocaml/xapi/xapi_vm_clone.ml index 169d0b3d987..eb3a2b00748 100644 --- a/ocaml/xapi/xapi_vm_clone.ml +++ b/ocaml/xapi/xapi_vm_clone.ml @@ -244,10 +244,8 @@ let snapshot_metadata ~__context ~vm ~is_a_snapshot = else "" -(* return a new VM record, in appropriate power state and having the good metrics. *) -(* N.B. always check VM.has_vendor_device and Features.PCI_device_for_auto_update before calling this, - * as is done before the single existing call to this function. - * If ever we need to expose this function in the .mli file then we should do the check in the function. *) +(* return a new VM record, in appropriate power state and having the + good metrics. *) let copy_vm_record ?snapshot_info_record ~__context ~vm ~disk_op ~new_name ~new_power_state () = let all = Db.VM.get_record_internal ~__context ~self:vm in @@ -448,13 +446,6 @@ let clone ?snapshot_info_record ?(ignore_vdis = []) disk_op ~__context ~vm vbds in - (* Check licence permission before copying disks, since the copy can take - a long time. We always allow snapshotting a VM, but check before - clone/copy of an existing snapshot or template. *) - if Db.VM.get_has_vendor_device ~__context ~self:vm && not is_a_snapshot - then - Pool_features.assert_enabled ~__context - ~f:Features.PCI_device_for_auto_update ; (* driver params to be passed to storage backend clone operations. *) let driver_params = make_driver_params () in (* backend cloning operations first *) diff --git a/ocaml/xapi/xapi_vm_helpers.ml b/ocaml/xapi/xapi_vm_helpers.ml index 538dda7bb01..5ad076c18de 100644 --- a/ocaml/xapi/xapi_vm_helpers.ml +++ b/ocaml/xapi/xapi_vm_helpers.ml @@ -71,9 +71,6 @@ let set_actions_after_crash ~__context ~self ~value = let set_is_a_template ~__context ~self ~value = (* We define a 'set_is_a_template false' as 'install time' *) info "VM.set_is_a_template('%b')" value ; - if Db.VM.get_has_vendor_device ~__context ~self then - Pool_features.assert_enabled ~__context - ~f:Features.PCI_device_for_auto_update ; let m = Db.VM.get_metrics ~__context ~self in ( if not value then try @@ -154,18 +151,13 @@ let update_vm_virtual_hardware_platform_version ~__context ~vm = let create_from_record_without_checking_licence_feature_for_vendor_device ~__context rpc session_id vm_record = + (* vendor device is no longer licensed *) let mk_vm r = Client.Client.VM.create_from_record ~rpc ~session_id ~value:{r with API.vM_suspend_VDI= Ref.null; API.vM_power_state= `Halted} in let has_vendor_device = vm_record.API.vM_has_vendor_device in - if - has_vendor_device - && not - (Pool_features.is_enabled ~__context - Features.PCI_device_for_auto_update - ) - then ( + if has_vendor_device then ( (* Avoid the licence feature check which is enforced in VM.create (and create_from_record). *) let vm = mk_vm {vm_record with API.vM_has_vendor_device= false} in Db.VM.set_has_vendor_device ~__context ~self:vm ~value:true ; diff --git a/ocaml/xapi/xapi_vm_migrate.ml b/ocaml/xapi/xapi_vm_migrate.ml index 13d112fd3ce..ea1cd6e36fa 100644 --- a/ocaml/xapi/xapi_vm_migrate.ml +++ b/ocaml/xapi/xapi_vm_migrate.ml @@ -1720,9 +1720,6 @@ let assert_can_migrate ~__context ~vm ~dest ~live:_ ~vdi_map ~vif_map ~options try bool_of_string (List.assoc "force" options) with _ -> false in let copy = try bool_of_string (List.assoc "copy" options) with _ -> false in - if copy && Db.VM.get_has_vendor_device ~__context ~self:vm then - Pool_features.assert_enabled ~__context - ~f:Features.PCI_device_for_auto_update ; let source_host_ref = let host = Db.VM.get_resident_on ~__context ~self:vm in if host <> Ref.null then From 53dcbc052e6c8faa5c2616ba48383cc7f7a2a495 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Tue, 23 Apr 2024 10:06:56 +0100 Subject: [PATCH 30/44] CA-371529 remote VCustom IDL data type The VCustom value was only used for the has-vendor-device field in a VM and contained code rather than a simple value. We are removing this. Signed-off-by: Christian Lindig --- ocaml/idl/datamodel_types.ml | 3 --- ocaml/idl/datamodel_types.mli | 1 - ocaml/idl/datamodel_values.ml | 19 ++------------ ocaml/idl/datamodel_vm.ml | 30 ++-------------------- ocaml/idl/json_backend/gen_json.ml | 2 -- ocaml/idl/ocaml_backend/gen_api.ml | 3 +-- ocaml/idl/schematest.ml | 2 +- ocaml/sdk-gen/csharp/gen_csharp_binding.ml | 2 -- ocaml/xapi/xapi_vm_clone.ml | 2 +- 9 files changed, 7 insertions(+), 57 deletions(-) diff --git a/ocaml/idl/datamodel_types.ml b/ocaml/idl/datamodel_types.ml index 364eafb42db..05ee08f5370 100644 --- a/ocaml/idl/datamodel_types.ml +++ b/ocaml/idl/datamodel_types.ml @@ -423,7 +423,6 @@ type api_value = | VMap of (api_value * api_value) list | VSet of api_value list | VRef of string - | VCustom of string * api_value [@@deriving rpc] (* For convenience, we use the same value here as is defined in the Ref module in @@ -766,7 +765,5 @@ let rec type_checks v t = all_true (List.map (fun v -> type_checks v t) vl) | VRef _, Ref _ -> true - | VCustom _, _ -> - true (* Type checks defered to phase-2 compile time *) | _, _ -> false diff --git a/ocaml/idl/datamodel_types.mli b/ocaml/idl/datamodel_types.mli index b2f474e927f..ef490cc4a66 100644 --- a/ocaml/idl/datamodel_types.mli +++ b/ocaml/idl/datamodel_types.mli @@ -120,7 +120,6 @@ type api_value = | VMap of (api_value * api_value) list | VSet of api_value list | VRef of string - | VCustom of string * api_value val rpc_of_api_value : api_value -> Rpc.t diff --git a/ocaml/idl/datamodel_values.ml b/ocaml/idl/datamodel_values.ml index c5c68b6b73f..a13330f971d 100644 --- a/ocaml/idl/datamodel_values.ml +++ b/ocaml/idl/datamodel_values.ml @@ -49,12 +49,10 @@ let rec to_rpc v = Rpc.Enum (List.map (fun v -> to_rpc v) vl) | VRef r -> Rpc.String r - | VCustom (_, _) -> - failwith "Can't RPC up a custom value" open Printf -let to_ocaml_string ?(v2 = false) v = +let to_ocaml_string v = let rec aux = function | Rpc.Null -> "Rpc.Null" @@ -80,18 +78,7 @@ let to_ocaml_string ?(v2 = false) v = | Rpc.Base64 t -> sprintf "Rpc.Base64 %s" t in - match v with - | VCustom (s, v') -> - if v2 then - (* s can contain stringified body of ocaml functions, and will break - * the aPI.ml code, we need to use the v' in that case. The version - * switch allows us to use this other version in gen_api.ml without - * having to duplicate lots of code *) - aux (to_rpc v') - else - s - | _ -> - aux (to_rpc v) + aux (to_rpc v) let rec to_db v = let open Schema.Value in @@ -116,8 +103,6 @@ let rec to_db v = Set (List.map to_string vl) | VRef r -> String r - | VCustom (_, y) -> - to_db y (* Generate suitable "empty" database value of specified type *) let gen_empty_db_val t = diff --git a/ocaml/idl/datamodel_vm.ml b/ocaml/idl/datamodel_vm.ml index aa45d93de5b..4984ca072d6 100644 --- a/ocaml/idl/datamodel_vm.ml +++ b/ocaml/idl/datamodel_vm.ml @@ -2093,34 +2093,8 @@ let t = "The host virtual hardware platform version the VM can run on" ; field ~qualifier:StaticRO ~lifecycle:[(Published, rel_dundee, "")] - ~doc_tags:[Windows] - ~default_value: - (Some - (VCustom - ( String.concat "\n" - [ - "(try Rpc.Bool (" - ; "let pool = List.hd \ - (Db_actions.DB_Action.Pool.get_all ~__context) in" - ; "let restrictions = \ - Db_actions.DB_Action.Pool.get_restrictions \ - ~__context ~self:pool in " - ; "let vendor_device_allowed = try List.assoc \ - \"restrict_pci_device_for_auto_update\" \ - restrictions = \"false\" with _ -> false in" - ; "let policy_says_its_ok = not \ - (Db_actions.DB_Action.Pool.get_policy_no_vendor_device \ - ~__context ~self:pool) in" - ; "vendor_device_allowed && policy_says_its_ok) with e \ - -> D.error \"Failure when defaulting \ - has_vendor_device field: %s\" (Printexc.to_string \ - e); Rpc.Bool false)" - ] - , VBool false - ) - ) - ) - ~ty:Bool "has_vendor_device" + ~doc_tags:[Windows] ~default_value:(Some (VBool true)) ~ty:Bool + "has_vendor_device" "When an HVM guest starts, this controls the presence of the \ emulated C000 PCI device which triggers Windows Update to fetch \ or update PV drivers." diff --git a/ocaml/idl/json_backend/gen_json.ml b/ocaml/idl/json_backend/gen_json.ml index d47db08514d..dd24c0f11cf 100644 --- a/ocaml/idl/json_backend/gen_json.ml +++ b/ocaml/idl/json_backend/gen_json.ml @@ -107,8 +107,6 @@ end = struct Printf.sprintf "{%s}" (String.concat ", " (List.map string_of_default x)) | VRef x -> if x = "" then "Null" else x - | VCustom (_, y) -> - string_of_default y let of_lifecycle lc = `Assoc diff --git a/ocaml/idl/ocaml_backend/gen_api.ml b/ocaml/idl/ocaml_backend/gen_api.ml index 734e78d6bb6..c08c9671791 100644 --- a/ocaml/idl/ocaml_backend/gen_api.ml +++ b/ocaml/idl/ocaml_backend/gen_api.ml @@ -188,8 +188,7 @@ let gen_record_type ~with_module highapi tys = | None -> "None" | Some default -> - sprintf "(Some (%s))" - (Datamodel_values.to_ocaml_string ~v2:true default) + sprintf "(Some (%s))" (Datamodel_values.to_ocaml_string default) in let make_to_field fld = let rpc_field = rpc_field fld in diff --git a/ocaml/idl/schematest.ml b/ocaml/idl/schematest.ml index d25bb9e4219..1416ddc2dd4 100644 --- a/ocaml/idl/schematest.ml +++ b/ocaml/idl/schematest.ml @@ -3,7 +3,7 @@ let hash x = Digest.string x |> Digest.to_hex (* BEWARE: if this changes, check that schema has been bumped accordingly in ocaml/idl/datamodel_common.ml, usually schema_minor_vsn *) -let last_known_schema_hash = "7db36ba4b150b06a5098ff9bed87b191" +let last_known_schema_hash = "8a03b539f1c318023775f345faef4d5b" let current_schema_hash : string = let open Datamodel_types in diff --git a/ocaml/sdk-gen/csharp/gen_csharp_binding.ml b/ocaml/sdk-gen/csharp/gen_csharp_binding.ml index 56243c59fcd..21483260f5b 100644 --- a/ocaml/sdk-gen/csharp/gen_csharp_binding.ml +++ b/ocaml/sdk-gen/csharp/gen_csharp_binding.ml @@ -1240,8 +1240,6 @@ and get_default_value_opt field = List.map (fun x -> String.concat ", " (get_default_value x)) y | VRef y -> if y = "" then ["Helper.NullOpaqueRef"] else [sprintf "\"%s\"" y] - | VCustom (_, y) -> - get_default_value y in match field.default_value with | Some y -> diff --git a/ocaml/xapi/xapi_vm_clone.ml b/ocaml/xapi/xapi_vm_clone.ml index eb3a2b00748..997dc5cfdb4 100644 --- a/ocaml/xapi/xapi_vm_clone.ml +++ b/ocaml/xapi/xapi_vm_clone.ml @@ -245,7 +245,7 @@ let snapshot_metadata ~__context ~vm ~is_a_snapshot = "" (* return a new VM record, in appropriate power state and having the - good metrics. *) + good metrics. *) let copy_vm_record ?snapshot_info_record ~__context ~vm ~disk_op ~new_name ~new_power_state () = let all = Db.VM.get_record_internal ~__context ~self:vm in From ebb58a87387de3849e884e809cd4ace2dc83dd38 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Tue, 23 Apr 2024 10:32:49 +0100 Subject: [PATCH 31/44] CA-371529 expunge create_from_record_without_checking_licence ... Remove the function and use VM.create_from_record directly. Signed-off-by: Christian Lindig --- ocaml/xapi/import.ml | 8 +++----- ocaml/xapi/xapi_vm_helpers.ml | 17 ----------------- ocaml/xapi/xapi_vm_snapshot.ml | 11 ++++++++--- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/ocaml/xapi/import.ml b/ocaml/xapi/import.ml index 01e5ca25640..763d043511b 100644 --- a/ocaml/xapi/import.ml +++ b/ocaml/xapi/import.ml @@ -629,17 +629,15 @@ module VM : HandlerTools = struct ~domain_type:vm_record.API.vM_domain_type ~is_a_template:vm_record.API.vM_is_a_template vm_record.API.vM_platform + ; API.vM_suspend_VDI= Ref.null + ; API.vM_power_state= `Halted } in let vm = log_reraise ("failed to create VM with name-label " ^ vm_record.API.vM_name_label) (fun value -> - let vm = - Xapi_vm_helpers - .create_from_record_without_checking_licence_feature_for_vendor_device - ~__context rpc session_id value - in + let vm = Client.VM.create_from_record ~rpc ~session_id ~value in if config.full_restore then Db.VM.set_uuid ~__context ~self:vm ~value:value.API.vM_uuid ; vm diff --git a/ocaml/xapi/xapi_vm_helpers.ml b/ocaml/xapi/xapi_vm_helpers.ml index 5ad076c18de..d8b9855686e 100644 --- a/ocaml/xapi/xapi_vm_helpers.ml +++ b/ocaml/xapi/xapi_vm_helpers.ml @@ -149,23 +149,6 @@ let update_vm_virtual_hardware_platform_version ~__context ~vm = Db.VM.set_hardware_platform_version ~__context ~self:vm ~value:visibly_required_version -let create_from_record_without_checking_licence_feature_for_vendor_device - ~__context rpc session_id vm_record = - (* vendor device is no longer licensed *) - let mk_vm r = - Client.Client.VM.create_from_record ~rpc ~session_id - ~value:{r with API.vM_suspend_VDI= Ref.null; API.vM_power_state= `Halted} - in - let has_vendor_device = vm_record.API.vM_has_vendor_device in - if has_vendor_device then ( - (* Avoid the licence feature check which is enforced in VM.create (and create_from_record). *) - let vm = mk_vm {vm_record with API.vM_has_vendor_device= false} in - Db.VM.set_has_vendor_device ~__context ~self:vm ~value:true ; - update_vm_virtual_hardware_platform_version ~__context ~vm ; - vm - ) else - mk_vm vm_record - let destroy ~__context ~self = (* Used to be a call to hard shutdown here, but this will be redundant *) (* given the call to 'assert_operation_valid' *) diff --git a/ocaml/xapi/xapi_vm_snapshot.ml b/ocaml/xapi/xapi_vm_snapshot.ml index b533aef5da4..7ac67ddba58 100644 --- a/ocaml/xapi/xapi_vm_snapshot.ml +++ b/ocaml/xapi/xapi_vm_snapshot.ml @@ -553,11 +553,16 @@ let create_vm_from_snapshot ~__context ~snapshot = let snap_metadata = Helpers.vm_string_to_assoc snap_metadata in let vm_uuid = List.assoc Db_names.uuid snap_metadata in let snap_record = Db.VM.get_record ~__context ~self:snapshot in + let snap_record = + { + snap_record with + API.vM_suspend_VDI= Ref.null + ; API.vM_power_state= `Halted + } + in Helpers.call_api_functions ~__context (fun rpc session_id -> let new_vm = - Xapi_vm_helpers - .create_from_record_without_checking_licence_feature_for_vendor_device - ~__context rpc session_id snap_record + Client.VM.create_from_record ~rpc ~session_id ~value:snap_record in try Db.VM.set_uuid ~__context ~self:new_vm ~value:vm_uuid ; From c467bda15d6c4e73192885808e649d599647f718 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Tue, 23 Apr 2024 13:29:43 +0100 Subject: [PATCH 32/44] CA-371529 Update quality-gate.sh Signed-off-by: Christian Lindig --- quality-gate.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quality-gate.sh b/quality-gate.sh index 7222e062c82..ed71cb794da 100755 --- a/quality-gate.sh +++ b/quality-gate.sh @@ -3,7 +3,7 @@ set -e list-hd () { - N=315 + N=314 LIST_HD=$(git grep -r --count 'List.hd' -- **/*.ml | cut -d ':' -f 2 | paste -sd+ - | bc) if [ "$LIST_HD" -eq "$N" ]; then echo "OK counted $LIST_HD List.hd usages" From 6182cc23d044ce9b7ff5f8b0c86ce5b7ab738925 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Mon, 29 Apr 2024 10:31:43 +0100 Subject: [PATCH 33/44] CA-371529 document changes in datamodel Signed-off-by: Christian Lindig --- ocaml/idl/datamodel_pool.ml | 15 +++++++++------ ocaml/idl/datamodel_vm.ml | 9 ++++++++- ocaml/idl/schematest.ml | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ocaml/idl/datamodel_pool.ml b/ocaml/idl/datamodel_pool.ml index 1fdc3acf437..f556cf56407 100644 --- a/ocaml/idl/datamodel_pool.ml +++ b/ocaml/idl/datamodel_pool.ml @@ -1374,13 +1374,16 @@ let t = ~default_value:(Some (VMap [])) ~ty:(Map (String, String)) "cpu_info" "Details about the physical CPUs on the pool" - ; field ~qualifier:RW ~in_product_since:rel_dundee - ~default_value:(Some (VBool false)) ~ty:Bool + ; field ~qualifier:RW ~default_value:(Some (VBool false)) ~ty:Bool + ~lifecycle: + [ + (Published, rel_dundee, "") + ; (Deprecated, "24.14.0", "No longer considered by VM.create") + ] "policy_no_vendor_device" - "The pool-wide policy for clients on whether to use the vendor \ - device or not on newly created VMs. This field will also be \ - consulted if the 'has_vendor_device' field is not specified in \ - the VM.create call." + "This field was consulted when VM.create did not specify a value \ + for 'has_vendor_device'; VM.create now uses a simple default and \ + no longer consults this value." ; field ~qualifier:RW ~in_product_since:rel_ely ~default_value:(Some (VBool false)) ~ty:Bool "live_patching_disabled" diff --git a/ocaml/idl/datamodel_vm.ml b/ocaml/idl/datamodel_vm.ml index 4984ca072d6..f6236540bf1 100644 --- a/ocaml/idl/datamodel_vm.ml +++ b/ocaml/idl/datamodel_vm.ml @@ -2092,7 +2092,14 @@ let t = "hardware_platform_version" "The host virtual hardware platform version the VM can run on" ; field ~qualifier:StaticRO - ~lifecycle:[(Published, rel_dundee, "")] + ~lifecycle: + [ + (Published, rel_dundee, "") + ; ( Changed + , "24.14.0" + , "New default and not consulting Pool.policy_no_vendor_device" + ) + ] ~doc_tags:[Windows] ~default_value:(Some (VBool true)) ~ty:Bool "has_vendor_device" "When an HVM guest starts, this controls the presence of the \ diff --git a/ocaml/idl/schematest.ml b/ocaml/idl/schematest.ml index 1416ddc2dd4..60ddad41e91 100644 --- a/ocaml/idl/schematest.ml +++ b/ocaml/idl/schematest.ml @@ -3,7 +3,7 @@ let hash x = Digest.string x |> Digest.to_hex (* BEWARE: if this changes, check that schema has been bumped accordingly in ocaml/idl/datamodel_common.ml, usually schema_minor_vsn *) -let last_known_schema_hash = "8a03b539f1c318023775f345faef4d5b" +let last_known_schema_hash = "8c3cb4546e7dc9e8d9d05c8194d8a3d6" let current_schema_hash : string = let open Datamodel_types in From 741775da4bdf5d6bc740244e79c9ab864585c23a Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 2 May 2024 14:51:12 +0100 Subject: [PATCH 34/44] CA-392453: Misc fixes to Java SDK - Use `Types.checkError` instead of throwing a generic `XenAPIException`. This ensures the `Types.XYZ` family of exceptions are being used - Use `@JsonValue` to ensure base class objects are deserialised as a simple opaque_ref string, as opposed to a mapping of each field. This ensures the API's behaviour is unchanged. - Parse the results of `task.getResult` calls. The jsonrpc method returns value payloads of the form `"value" : "OpaqueRef:XYZ"` so we need to strip the surrounding XML Signed-off-by: Danilo Del Busso --- .../java/com/xensource/xenapi/Connection.java | 6 +-- ocaml/sdk-gen/java/main.ml | 38 +++++++++++++++++-- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/ocaml/sdk-gen/java/autogen/xen-api/src/main/java/com/xensource/xenapi/Connection.java b/ocaml/sdk-gen/java/autogen/xen-api/src/main/java/com/xensource/xenapi/Connection.java index 53bdc1d8b83..bc8b5c644e4 100644 --- a/ocaml/sdk-gen/java/autogen/xen-api/src/main/java/com/xensource/xenapi/Connection.java +++ b/ocaml/sdk-gen/java/autogen/xen-api/src/main/java/com/xensource/xenapi/Connection.java @@ -259,10 +259,8 @@ public String getSessionReference() { public T dispatch(String methodCall, Object[] methodParameters, TypeReference responseTypeReference) throws XenAPIException, IOException { var result = client.sendRequest(methodCall, methodParameters, responseTypeReference); if (result.error != null) { - throw new XenAPIException(String.valueOf(result.error)); - } - - if (methodCall.equals("session.login_with_password")) { + Types.checkError(result.error); + } else if (methodCall.equals("session.login_with_password")) { var session = ((Session) result.result); sessionReference = session.ref; setAPIVersion(); diff --git a/ocaml/sdk-gen/java/main.ml b/ocaml/sdk-gen/java/main.ml index 496de17a075..3edcf1ea3a2 100644 --- a/ocaml/sdk-gen/java/main.ml +++ b/ocaml/sdk-gen/java/main.ml @@ -573,6 +573,7 @@ let gen_class cls folder = fprintf file {|package com.xensource.xenapi; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.core.type.TypeReference; import com.xensource.xenapi.Types.BadServerResponse; import com.xensource.xenapi.Types.XenAPIException; @@ -592,7 +593,10 @@ import java.io.IOException; if class_is_empty cls then fprintf file - "\n public String toWireString() {\n return null;\n }\n\n" + " @JsonValue\n\ + \ public String toWireString() {\n\ + \ return null;\n\ + \ }\n\n" else ( fprintf file " /**\n" ; fprintf file " * The XenAPI reference (OpaqueRef) to this object.\n" ; @@ -608,6 +612,7 @@ import java.io.IOException; fprintf file " * @return The XenAPI reference (OpaqueRef) to this object.\n" ; fprintf file " */\n" ; + fprintf file " @JsonValue\n" ; fprintf file " public String toWireString() {\n" ; fprintf file " return this.ref;\n" ; fprintf file " }\n\n" @@ -719,7 +724,9 @@ let generate_reference_task_result_func file clstr = " public static %s to%s(Task task, Connection connection) throws \ IOException {\n" clstr clstr ; - fprintf file " return Types.to%s(task.getResult(connection));\n" clstr ; + fprintf file + " return Types.to%s(parseResult(task.getResult(connection)));\n" + clstr ; fprintf file " }\n" ; fprintf file "\n" @@ -948,6 +955,8 @@ import java.util.*; import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; import com.fasterxml.jackson.annotation.JsonProperty; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * This class holds enum types and exceptions. @@ -1030,7 +1039,7 @@ public class Types if(errorData.length == 0){ throw new BadServerResponse(response); } - var errorName = errorData[0]; + var errorName = response.message; |} ; Hashtbl.iter (gen_method_error_throw file) Datamodel.errors ; @@ -1052,6 +1061,29 @@ public class Types TypeSet.iter (gen_task_result_func file) !types ; fprintf file {| + + public static class BadAsyncResult extends XenAPIException + { + public final String result; + + public BadAsyncResult(String result) + { + super(result); + this.result = result; + } + } + + private static String parseResult(String result) throws BadAsyncResult + { + Pattern pattern = Pattern.compile("(.*)"); + Matcher matcher = pattern.matcher(result); + if (!matcher.find() || matcher.groupCount() != 1) { + throw new Types.BadAsyncResult("Can't interpret: " + result); + } + + return matcher.group(1); + } + public static EventBatch toEventBatch(Object object) { if (object == null) { return null; From 3a935e79d05a441df42c81c7e6b5eb6dcfee7c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= Date: Mon, 29 Jan 2024 17:45:42 +0000 Subject: [PATCH 35/44] IH-568, fix(dune): avoid "module unavailable" errors when running dune build @check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bytecode builds for `http_lib` are disabled due to '(modes best)', and that means that anything that depends on it must have it disabled too to avoid this warning. Avoids these kinds of warnings: ``` File "_none_", line 1: Error: Module `Buf_io' is unavailable (required by `Http_svr') ``` Signed-off-by: Edwin Török Signed-off-by: Pau Ruiz Safont --- ocaml/database/dune | 1 + ocaml/libs/http-lib/dune | 2 ++ ocaml/tests/common/dune | 1 + ocaml/tests/dune | 3 ++- ocaml/xapi-cli-server/dune | 1 + ocaml/xapi/dune | 1 + ocaml/xcp-rrdd/bin/rrdd/dune | 1 + 7 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ocaml/database/dune b/ocaml/database/dune index 0b0c71425ff..5547df0dd29 100644 --- a/ocaml/database/dune +++ b/ocaml/database/dune @@ -21,6 +21,7 @@ (library (name xapi_database) + (modes best) (modules (:standard \ database_server_main db_cache_test db_names db_exn block_device_io string_marshall_helper string_unmarshall_helper schema diff --git a/ocaml/libs/http-lib/dune b/ocaml/libs/http-lib/dune index dfc10dccb15..efa34f0bddd 100644 --- a/ocaml/libs/http-lib/dune +++ b/ocaml/libs/http-lib/dune @@ -35,6 +35,7 @@ (library (name httpsvr) (wrapped false) + (modes best) (modules http_svr http_proxy server_io) (libraries astring @@ -51,6 +52,7 @@ (tests (names http_test radix_tree_test) (package http-lib) + (modes (best exe)) (modules http_test radix_tree_test) (libraries alcotest diff --git a/ocaml/tests/common/dune b/ocaml/tests/common/dune index fdc6fbd9a6c..c578f5f9785 100644 --- a/ocaml/tests/common/dune +++ b/ocaml/tests/common/dune @@ -1,6 +1,7 @@ (library (name tests_common) (modules :standard) + (modes best) (wrapped false) (libraries alcotest diff --git a/ocaml/tests/dune b/ocaml/tests/dune index 93bf4b66ddf..126b522e151 100644 --- a/ocaml/tests/dune +++ b/ocaml/tests/dune @@ -1,6 +1,6 @@ (test (name suite_alcotest) - (modes exe) + (modes (best exe)) (package xapi) (modules (:standard \ test_daemon_manager test_vdi_cbt test_event test_clustering @@ -121,6 +121,7 @@ (name test_observer) (package xapi) (modules test_observer) +(modes (best exe)) (libraries alcotest tracing xapi_internal tests_common yojson)) (rule diff --git a/ocaml/xapi-cli-server/dune b/ocaml/xapi-cli-server/dune index 6814d74fd56..e10c76ea4c3 100644 --- a/ocaml/xapi-cli-server/dune +++ b/ocaml/xapi-cli-server/dune @@ -1,5 +1,6 @@ (library (name xapi_cli_server) + (modes best) (libraries astring base64 diff --git a/ocaml/xapi/dune b/ocaml/xapi/dune index fe161e0dd5f..6575b66aea5 100644 --- a/ocaml/xapi/dune +++ b/ocaml/xapi/dune @@ -57,6 +57,7 @@ (library (name xapi_internal) (wrapped false) + (modes best) (modules (:standard \ xapi_main)) (libraries angstrom diff --git a/ocaml/xcp-rrdd/bin/rrdd/dune b/ocaml/xcp-rrdd/bin/rrdd/dune index 42b0823d9c2..c38e712f74b 100644 --- a/ocaml/xcp-rrdd/bin/rrdd/dune +++ b/ocaml/xcp-rrdd/bin/rrdd/dune @@ -1,6 +1,7 @@ (library (name rrdd_libs_internal) (wrapped false) + (modes best) (modules (:standard \ xcp_rrdd)) (libraries astring From feeccfaed34b7cddeb0789a8e3dd128de7c5d0ca Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Wed, 6 Mar 2024 14:31:15 +0000 Subject: [PATCH 36/44] IH-568, fix (dune utop): conflicting module names with compiler libraries There were 3 modules with conflicting names with compiler libraries: Watch, Debuginfo and Stats. Debuginfo was renamed, the others's libraries were changed to be wrapped. Signed-off-by: Pau Ruiz Safont --- ocaml/database/block_device_io.ml | 2 + ocaml/database/database_server_main.ml | 8 +- ocaml/database/db_cache_test.ml | 3 +- ocaml/database/dune | 1 - ocaml/database/unit_test_marshall.ml | 6 +- ocaml/db_process/xapi_db_process.ml | 3 +- ocaml/idl/ocaml_backend/gen_db_actions.ml | 11 +- ocaml/libs/ezxenstore/core/dune | 1 - ocaml/libs/ezxenstore/lib_test/main.ml | 2 +- .../ezxenstore/watch/ez_xenstore_watch.ml | 10 +- ocaml/nbd/lib/local_xapi_session.ml | 2 +- ocaml/nbd/src/cleanup.ml | 2 +- ocaml/nbd/src/main.ml | 2 +- ocaml/tests/common/alcotest_comparators.ml | 6 +- ocaml/tests/common/mock.ml | 2 + ocaml/tests/test_db_lowlevel.ml | 1 + ocaml/tests/test_ha_vm_failover.ml | 2 +- ocaml/tests/test_helpers.ml | 2 +- ocaml/xapi-cli-server/cli_util.ml | 1 + ocaml/xapi-cli-server/records.ml | 2 + ocaml/xapi-guard/lib/server_interface.ml | 8 +- ocaml/xapi-guard/src/main.ml | 17 +-- ocaml/xapi-guard/test/xapi_guard_test.ml | 6 +- .../lib/{debuginfo.ml => debug_info.ml} | 0 .../lib/{debuginfo.mli => debug_info.mli} | 0 ocaml/xapi-idl/lib/task_server.ml | 8 +- ocaml/xapi/api_server.ml | 3 +- ocaml/xapi/cancel_tasks.ml | 2 +- ocaml/xapi/certificates.ml | 6 +- ocaml/xapi/cluster_stack_constraints.ml | 2 +- ocaml/xapi/console.ml | 4 +- ocaml/xapi/context.ml | 16 +- ocaml/xapi/context.mli | 4 +- ocaml/xapi/create_misc.ml | 2 +- ocaml/xapi/db.ml | 1 + ocaml/xapi/db_gc.ml | 6 +- ocaml/xapi/db_gc_util.ml | 12 +- ocaml/xapi/eventgen.ml | 4 +- ocaml/xapi/exnHelper.ml | 2 +- ocaml/xapi/helpers.ml | 8 +- ocaml/xapi/import.ml | 2 +- ocaml/xapi/memory_check.ml | 2 +- ocaml/xapi/message_forwarding.ml | 15 +- ocaml/xapi/monitor_dbcalls.ml | 2 +- ocaml/xapi/monitor_master.ml | 12 +- ocaml/xapi/network_event_loop.ml | 4 +- ocaml/xapi/nm.ml | 4 +- ocaml/xapi/pool_db_backup.ml | 3 +- ocaml/xapi/pvs_cache_vdi.ml | 2 +- ocaml/xapi/pvs_proxy_control.ml | 8 +- ocaml/xapi/rbac_audit.ml | 4 +- ocaml/xapi/redo_log_alert.ml | 2 +- ocaml/xapi/redo_log_usage.ml | 2 + ocaml/xapi/redo_log_usage.mli | 7 +- ocaml/xapi/slave_backup.ml | 6 +- ocaml/xapi/sm.ml | 69 ++++----- ocaml/xapi/sm_exec.ml | 8 +- ocaml/xapi/startup.ml | 6 +- ocaml/xapi/static_vdis.ml | 3 +- ocaml/xapi/storage_migrate.ml | 14 +- ocaml/xapi/storage_mux.ml | 105 ++++++------- ocaml/xapi/storage_smapiv1.ml | 62 ++++---- ocaml/xapi/storage_smapiv1_wrapper.ml | 86 +++++------ ocaml/xapi/sync_networking.ml | 1 - ocaml/xapi/vhd_tool_wrapper.ml | 2 +- ocaml/xapi/xapi.ml | 6 +- ocaml/xapi/xapi_bond.ml | 2 +- ocaml/xapi/xapi_cluster_host.ml | 2 +- ocaml/xapi/xapi_clustering.ml | 28 ++-- ocaml/xapi/xapi_db_upgrade.ml | 5 +- ocaml/xapi/xapi_diagnostics.ml | 6 +- ocaml/xapi/xapi_dr.ml | 7 +- ocaml/xapi/xapi_event.ml | 11 +- ocaml/xapi/xapi_fuse.ml | 2 + ocaml/xapi/xapi_globs.ml | 2 + ocaml/xapi/xapi_ha.ml | 14 +- ocaml/xapi/xapi_ha.mli | 2 +- ocaml/xapi/xapi_hooks.ml | 2 +- ocaml/xapi/xapi_host.ml | 8 +- ocaml/xapi/xapi_host_helpers.ml | 2 +- ocaml/xapi/xapi_message.ml | 5 +- ocaml/xapi/xapi_network.ml | 2 +- ocaml/xapi/xapi_network_attach_helpers.ml | 2 +- ocaml/xapi/xapi_network_sriov_helpers.ml | 2 +- ocaml/xapi/xapi_pbd.ml | 11 +- ocaml/xapi/xapi_pci.ml | 4 +- ocaml/xapi/xapi_pgpu_helpers.ml | 4 +- ocaml/xapi/xapi_pif.ml | 16 +- ocaml/xapi/xapi_pool.ml | 17 ++- ocaml/xapi/xapi_pool_patch.ml | 4 +- ocaml/xapi/xapi_pool_transition.ml | 1 + ocaml/xapi/xapi_psr.ml | 6 +- ocaml/xapi/xapi_pusb.ml | 2 +- ocaml/xapi/xapi_pvs_proxy.ml | 4 +- ocaml/xapi/xapi_session.ml | 11 +- ocaml/xapi/xapi_session.mli | 2 +- ocaml/xapi/xapi_sr.ml | 4 +- ocaml/xapi/xapi_sr_operations.ml | 3 +- ocaml/xapi/xapi_subject.ml | 8 +- ocaml/xapi/xapi_tunnel.ml | 2 +- ocaml/xapi/xapi_vdi.ml | 10 +- ocaml/xapi/xapi_vdi_helpers.ml | 21 +-- ocaml/xapi/xapi_vgpu_type.ml | 4 +- ocaml/xapi/xapi_vif_helpers.ml | 6 +- ocaml/xapi/xapi_vlan.ml | 13 +- ocaml/xapi/xapi_vm_migrate.ml | 2 +- ocaml/xapi/xapi_vm_placement.ml | 2 +- ocaml/xapi/xapi_vm_snapshot.ml | 29 ++-- ocaml/xapi/xapi_xenops.ml | 4 +- ocaml/xapi/xha_metadata_vdi.ml | 2 + ocaml/xapi/xha_statefile.ml | 3 +- ocaml/xcp-rrdd/bin/rrdd/xcp_rrdd.ml | 2 +- ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml | 2 +- ocaml/xen-api-client/lwt/dune | 1 - ocaml/xen-api-client/lwt_examples/list_vms.ml | 2 +- .../lwt_examples/upload_disk.ml | 4 +- .../lwt_examples/watch_metrics.ml | 2 +- ocaml/xenopsd/lib/storage.ml | 4 +- ocaml/xenopsd/lib/xenops_task.ml | 8 +- ocaml/xenopsd/pvs/pvs_proxy_setup.ml | 2 +- ocaml/xenopsd/xc/cancel_utils.ml | 12 +- ocaml/xenopsd/xc/cancel_utils_test.ml | 2 +- ocaml/xenopsd/xc/device.ml | 45 +++--- ocaml/xenopsd/xc/device.mli | 144 +++++++++++------- ocaml/xenopsd/xc/device_common.ml | 2 +- ocaml/xenopsd/xc/device_common.mli | 63 +++++--- ocaml/xenopsd/xc/domain.ml | 4 +- ocaml/xenopsd/xc/domain.mli | 48 ++++-- ocaml/xenopsd/xc/hotplug.ml | 2 +- ocaml/xenopsd/xc/memory_breakdown.ml | 2 +- ocaml/xenopsd/xc/service.ml | 8 +- ocaml/xenopsd/xc/service.mli | 43 +++--- ocaml/xenopsd/xc/xenops_helpers.ml | 2 +- ocaml/xenopsd/xc/xenops_server_xen.ml | 2 +- ocaml/xenopsd/xc/xenops_xc_main.ml | 2 +- 135 files changed, 738 insertions(+), 586 deletions(-) rename ocaml/xapi-idl/lib/{debuginfo.ml => debug_info.ml} (100%) rename ocaml/xapi-idl/lib/{debuginfo.mli => debug_info.mli} (100%) diff --git a/ocaml/database/block_device_io.ml b/ocaml/database/block_device_io.ml index 3d4e10288b4..7587a34d5d5 100644 --- a/ocaml/database/block_device_io.ml +++ b/ocaml/database/block_device_io.ml @@ -90,6 +90,8 @@ open Xapi_stdext_pervasives.Pervasiveext open Xapi_stdext_unix +module Db_globs = Xapi_database.Db_globs +module Block_device_io_errors = Xapi_database.Block_device_io_errors let name = "block_device_io" diff --git a/ocaml/database/database_server_main.ml b/ocaml/database/database_server_main.ml index 4809bc7fd16..1dc59284263 100644 --- a/ocaml/database/database_server_main.ml +++ b/ocaml/database/database_server_main.ml @@ -17,7 +17,7 @@ let c = Condition.create () (** Handler for the remote database access URL *) let remote_database_access_handler_v1 req bio = - try Db_remote_cache_access_v1.handler req bio + try Xapi_database.Db_remote_cache_access_v1.handler req bio with e -> Printf.printf "Caught: %s\n" (Printexc.to_string e) ; Printexc.print_backtrace stdout ; @@ -26,14 +26,15 @@ let remote_database_access_handler_v1 req bio = (** Handler for the remote database access URL *) let remote_database_access_handler_v2 req bio = - try Db_remote_cache_access_v2.handler req bio + try Xapi_database.Db_remote_cache_access_v2.handler req bio with e -> Printf.printf "Caught: %s\n" (Printexc.to_string e) ; Printexc.print_backtrace stdout ; flush stdout ; raise e -module Local_tests = Database_test.Tests (Db_cache_impl) +module Local_tests = + Xapi_database.Database_test.Tests (Xapi_database.Db_cache_impl) let schema = Test_schemas.schema @@ -67,6 +68,7 @@ let _ = | Slave _ -> failwith "unimplemented" | Master db_filename -> + let open Xapi_database in Printf.printf "Database path: %s\n%!" db_filename ; let db = Parse_db_conf.make db_filename in Db_conn_store.initialise_db_connections [db] ; diff --git a/ocaml/database/db_cache_test.ml b/ocaml/database/db_cache_test.ml index 7fd7b0a5006..ed2a3296940 100644 --- a/ocaml/database/db_cache_test.ml +++ b/ocaml/database/db_cache_test.ml @@ -12,7 +12,8 @@ * GNU Lesser General Public License for more details. *) -open Db_cache_types +open Xapi_database +open Xapi_database.Db_cache_types let create_test_db () = let schema = Test_schemas.many_to_many in diff --git a/ocaml/database/dune b/ocaml/database/dune index 5547df0dd29..e135f3d7e63 100644 --- a/ocaml/database/dune +++ b/ocaml/database/dune @@ -49,7 +49,6 @@ xml-light2 xmlm ) - (wrapped false) (preprocess (pps ppx_deriving_rpc)) ) diff --git a/ocaml/database/unit_test_marshall.ml b/ocaml/database/unit_test_marshall.ml index c751646097c..a9a77a11560 100644 --- a/ocaml/database/unit_test_marshall.ml +++ b/ocaml/database/unit_test_marshall.ml @@ -11,9 +11,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. *) -open Db_rpc_common_v1 -open Db_cache_types -open Db_filter_types +open Xapi_database.Db_rpc_common_v1 +open Xapi_database.Db_cache_types +open Xapi_database.Db_filter_types (* Check, for randomly chosen x's, that (unmarshall (marshall x)) = x *) diff --git a/ocaml/db_process/xapi_db_process.ml b/ocaml/db_process/xapi_db_process.ml index 633e2c14e30..fe5e509645e 100644 --- a/ocaml/db_process/xapi_db_process.ml +++ b/ocaml/db_process/xapi_db_process.ml @@ -14,7 +14,8 @@ module D = Debug.Make (struct let name = "xapi-db-process" end) open D -open Db_cache_types +open Xapi_database +open Xapi_database.Db_cache_types let compress = ref false diff --git a/ocaml/idl/ocaml_backend/gen_db_actions.ml b/ocaml/idl/ocaml_backend/gen_db_actions.ml index db222970b92..13bc14a1f4b 100644 --- a/ocaml/idl/ocaml_backend/gen_db_actions.ml +++ b/ocaml/idl/ocaml_backend/gen_db_actions.ml @@ -271,13 +271,14 @@ let ocaml_of_tbl_fields xs = let open_db_module = [ "let __t = Context.database_of __context in" - ; "let module DB = (val (Db_cache.get __t) : Db_interface.DB_ACCESS) in" + ; "let module DB = (val (Xapi_database.Db_cache.get __t) : \ + Xapi_database.Db_interface.DB_ACCESS) in" ] let db_action api : O.Module.t = let api = make_db_api api in let expr = "expr" in - let expr_arg = O.Named (expr, "Db_filter_types.expr") in + let expr_arg = O.Named (expr, "Xapi_database.Db_filter_types.expr") in let get_refs_where (obj : obj) = let tbl = Escaping.escape_obj obj.DT.name in let body = @@ -526,13 +527,13 @@ let db_action api : O.Module.t = | FromObject GetAllRecords -> String.concat "\n" [ - "let expr' = Db_filter_types.True in" + "let expr' = Xapi_database.Db_filter_types.True in" ; "get_records_where ~" ^ Gen_common.context ^ " ~expr:expr'" ] | FromObject GetAllRecordsWhere -> String.concat "\n" [ - "let expr' = Db_filter.expr_of_string expr in" + "let expr' = Xapi_database.Db_filter.expr_of_string expr in" ; "get_records_where ~" ^ Gen_common.context ^ " ~expr:expr'" ] | _ -> @@ -577,7 +578,7 @@ let db_action api : O.Module.t = O.Module.make ~name:_db_action ~preamble: [ - "open Db_cache_types" + "open Xapi_database.Db_cache_types" ; "module D=Debug.Make(struct let name=\"db\" end)" ; "open D" ] diff --git a/ocaml/libs/ezxenstore/core/dune b/ocaml/libs/ezxenstore/core/dune index 2eabd6bea12..b1b11e8b6a0 100644 --- a/ocaml/libs/ezxenstore/core/dune +++ b/ocaml/libs/ezxenstore/core/dune @@ -1,7 +1,6 @@ (library (name ezxenstore_core) (public_name ezxenstore.core) - (wrapped false) (libraries cmdliner logs diff --git a/ocaml/libs/ezxenstore/lib_test/main.ml b/ocaml/libs/ezxenstore/lib_test/main.ml index 1605fc2ba08..5226f5240aa 100644 --- a/ocaml/libs/ezxenstore/lib_test/main.ml +++ b/ocaml/libs/ezxenstore/lib_test/main.ml @@ -6,7 +6,7 @@ let set_socket_path path = Xs_transport.xenstored_socket := path let test socket = set_socket_path socket ; - let open Xenstore in + let open Ezxenstore_core.Xenstore in if Unix.geteuid () <> 0 then (* non-root won't have access to xenstore *) `Ok 0 else diff --git a/ocaml/libs/ezxenstore/watch/ez_xenstore_watch.ml b/ocaml/libs/ezxenstore/watch/ez_xenstore_watch.ml index d65bc43d466..e552ecb1e5a 100644 --- a/ocaml/libs/ezxenstore/watch/ez_xenstore_watch.ml +++ b/ocaml/libs/ezxenstore/watch/ez_xenstore_watch.ml @@ -19,7 +19,7 @@ end module Make (Debug : DEBUG) = struct open Debug - open Xenstore + open Ezxenstore_core.Xenstore exception Watch_overflow @@ -46,7 +46,7 @@ module Make (Debug : DEBUG) = struct val watch_fired : Xenctrl.handle - -> Xenstore.Xs.xsh + -> Ezxenstore_core.Xenstore.Xs.xsh -> string -> Xenctrl.domaininfo IntMap.t -> IntSet.t @@ -56,9 +56,11 @@ module Make (Debug : DEBUG) = struct val found_running_domain : int -> string -> unit - val domain_appeared : Xenctrl.handle -> Xenstore.Xs.xsh -> int -> unit + val domain_appeared : + Xenctrl.handle -> Ezxenstore_core.Xenstore.Xs.xsh -> int -> unit - val domain_disappeared : Xenctrl.handle -> Xenstore.Xs.xsh -> int -> unit + val domain_disappeared : + Xenctrl.handle -> Ezxenstore_core.Xenstore.Xs.xsh -> int -> unit end let watch ~xs token path = diff --git a/ocaml/nbd/lib/local_xapi_session.ml b/ocaml/nbd/lib/local_xapi_session.ml index ccc71e2d9c2..08167ad6e1a 100644 --- a/ocaml/nbd/lib/local_xapi_session.ml +++ b/ocaml/nbd/lib/local_xapi_session.ml @@ -13,7 +13,7 @@ *) open Lwt.Infix -module Xen_api = Xen_api_lwt_unix +module Xen_api = Xen_api_client_lwt.Xen_api_lwt_unix let wait_for_xapi_and_login () = let rpc = Xen_api.make Consts.xapi_unix_domain_socket_uri in diff --git a/ocaml/nbd/src/cleanup.ml b/ocaml/nbd/src/cleanup.ml index 213933fa56b..a3c0fd60d35 100644 --- a/ocaml/nbd/src/cleanup.ml +++ b/ocaml/nbd/src/cleanup.ml @@ -13,7 +13,7 @@ *) open Lwt.Infix -module Xen_api = Xen_api_lwt_unix +module Xen_api = Xen_api_client_lwt.Xen_api_lwt_unix let ignore_exn_log_error msg t = Lwt.catch t (fun e -> Lwt_log.error (msg ^ ": " ^ Printexc.to_string e)) diff --git a/ocaml/nbd/src/main.ml b/ocaml/nbd/src/main.ml index 21c48b5acac..d8f67a8c49a 100644 --- a/ocaml/nbd/src/main.ml +++ b/ocaml/nbd/src/main.ml @@ -15,7 +15,7 @@ open Lwt.Infix (* Xapi external interfaces: *) -module Xen_api = Xen_api_lwt_unix +module Xen_api = Xen_api_client_lwt.Xen_api_lwt_unix let ignore_exn_delayed t () = Lwt.catch t (fun _ -> Lwt.return_unit) diff --git a/ocaml/tests/common/alcotest_comparators.ml b/ocaml/tests/common/alcotest_comparators.ml index 7dce3faa85a..21f596875ea 100644 --- a/ocaml/tests/common/alcotest_comparators.ml +++ b/ocaml/tests/common/alcotest_comparators.ml @@ -31,9 +31,11 @@ let vdi_nbd_server_info_set = let vdi_type : API.vdi_type Alcotest.testable = from_rpc_of_t API.rpc_of_vdi_type -let db_cache_structured_op = from_rpc_of_t Db_cache_types.rpc_of_structured_op_t +let db_cache_structured_op = + from_rpc_of_t Xapi_database.Db_cache_types.rpc_of_structured_op_t -let db_rpc_request = from_rpc_of_t Db_rpc_common_v2.Request.rpc_of_t +let db_rpc_request = + from_rpc_of_t Xapi_database.Db_rpc_common_v2.Request.rpc_of_t let ref () = from_to_string Ref.string_of diff --git a/ocaml/tests/common/mock.ml b/ocaml/tests/common/mock.ml index e27f3b78e0e..ec6cb44a8a7 100644 --- a/ocaml/tests/common/mock.ml +++ b/ocaml/tests/common/mock.ml @@ -13,6 +13,8 @@ *) module Database = struct + open Xapi_database + let _schema = Datamodel_schema.of_datamodel () let conn = [Parse_db_conf.make "./xapi-db.xml"] diff --git a/ocaml/tests/test_db_lowlevel.ml b/ocaml/tests/test_db_lowlevel.ml index 7745f8e7cdc..fb3a3ce9da5 100644 --- a/ocaml/tests/test_db_lowlevel.ml +++ b/ocaml/tests/test_db_lowlevel.ml @@ -13,6 +13,7 @@ *) open Test_common +open Xapi_database (* If we delete a record after making a Db.get_all_records call, but before the * call returns, then Db.get_all_records should return successfully (not throw diff --git a/ocaml/tests/test_ha_vm_failover.ml b/ocaml/tests/test_ha_vm_failover.ml index 1c4cf79e6ea..4ab377870ab 100644 --- a/ocaml/tests/test_ha_vm_failover.ml +++ b/ocaml/tests/test_ha_vm_failover.ml @@ -384,7 +384,7 @@ module AssertNewVMPreservesHAPlan = Generic.MakeStateful (struct let load_input __context (pool, _) = setup ~__context pool let extract_output __context (_pool, vm) = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let local_sr = Db.SR.get_refs_where ~__context ~expr:(Eq (Field "shared", Literal "false")) diff --git a/ocaml/tests/test_helpers.ml b/ocaml/tests/test_helpers.ml index c3b86bbff82..42028c0d072 100644 --- a/ocaml/tests/test_helpers.ml +++ b/ocaml/tests/test_helpers.ml @@ -62,7 +62,7 @@ module DetermineGateway = Generic.MakeStateful (struct let management_interface = Option.map (fun device -> - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let pifs = Db.PIF.get_refs_where ~__context ~expr:(Eq (Field "device", Literal device)) diff --git a/ocaml/xapi-cli-server/cli_util.ml b/ocaml/xapi-cli-server/cli_util.ml index 86e3401b57a..be9ad66839c 100644 --- a/ocaml/xapi-cli-server/cli_util.ml +++ b/ocaml/xapi-cli-server/cli_util.ml @@ -242,6 +242,7 @@ let get_default_sr_uuid rpc session_id = (* Given a string that might be a ref, lookup ref in cache and print uuid/name-label where possible *) let ref_convert x = + let module Ref_index = Xapi_database.Ref_index in match Ref_index.lookup x with | None -> x diff --git a/ocaml/xapi-cli-server/records.ml b/ocaml/xapi-cli-server/records.ml index 91374487259..516f4c56763 100644 --- a/ocaml/xapi-cli-server/records.ml +++ b/ocaml/xapi-cli-server/records.ml @@ -139,6 +139,8 @@ let safe_get_field x = | e -> raise e +module Ref_index = Xapi_database.Ref_index + let get_uuid_from_ref r = try match Ref_index.lookup (Ref.string_of r) with diff --git a/ocaml/xapi-guard/lib/server_interface.ml b/ocaml/xapi-guard/lib/server_interface.ml index 0884c2bf1b2..d58a934f5f2 100644 --- a/ocaml/xapi-guard/lib/server_interface.ml +++ b/ocaml/xapi-guard/lib/server_interface.ml @@ -32,7 +32,7 @@ type session = [`session] Ref.t type rpc = call -> response Lwt.t -open Xen_api_lwt_unix +open Xen_api_client_lwt.Xen_api_lwt_unix let shutdown = Lwt_switch.create () @@ -102,10 +102,8 @@ let serve_forever_lwt_callback rpc_fn path _ req body = let with_xapi_vtpm ~cache vm_uuid = let vm_uuid_str = Uuidm.to_string vm_uuid in - let* vm = - with_xapi ~cache @@ Xen_api_lwt_unix.VM.get_by_uuid ~uuid:vm_uuid_str - in - let* vTPMs = with_xapi ~cache @@ Xen_api_lwt_unix.VM.get_VTPMs ~self:vm in + let* vm = with_xapi ~cache @@ VM.get_by_uuid ~uuid:vm_uuid_str in + let* vTPMs = with_xapi ~cache @@ VM.get_VTPMs ~self:vm in match vTPMs with | [] -> D.warn diff --git a/ocaml/xapi-guard/src/main.ml b/ocaml/xapi-guard/src/main.ml index 9fb40aa038b..67e0b7f1d0b 100644 --- a/ocaml/xapi-guard/src/main.ml +++ b/ocaml/xapi-guard/src/main.ml @@ -16,7 +16,7 @@ open Lwt.Syntax open Xapi_guard_server module Types = Xapi_guard.Types -module SessionCache = Xen_api_lwt_unix.SessionCache +module SessionCache = Xen_api_client_lwt.Xen_api_lwt_unix.SessionCache let ( let@ ) f x = f x @@ -87,16 +87,15 @@ let safe_unlink path = ) let cache = - Xen_api_lwt_unix.( - SessionCache.create_uri ~switch:Server_interface.shutdown - ~target:uri_local_json ~uname:"root" ~pwd:"" ~version:Xapi_version.version - ~originator:Server_interface.originator () - ) + let target = Xen_api_client_lwt.Xen_api_lwt_unix.uri_local_json in + SessionCache.create_uri ~switch:Server_interface.shutdown ~target + ~uname:"root" ~pwd:"" ~version:Xapi_version.version + ~originator:Server_interface.originator () let () = Lwt_switch.add_hook (Some Server_interface.shutdown) (fun () -> D.debug "Cleaning up cache at exit" ; - Xen_api_lwt_unix.SessionCache.destroy cache + SessionCache.destroy cache ) let listen_for_vm read_write {Persistent.vm_uuid; path; gid; typ} = @@ -214,7 +213,7 @@ let depriv_swtpm_destroy dbg gid path = it's OK to assume it's available. *) let vtpm_set_contents dbg vtpm_uuid contents = - let open Xen_api_lwt_unix in + let open Xen_api_client_lwt.Xen_api_lwt_unix in let open Lwt.Syntax in let uuid = Uuidm.to_string vtpm_uuid in D.debug "[%s] saving vTPM contents for %s" dbg uuid ; @@ -223,7 +222,7 @@ let vtpm_set_contents dbg vtpm_uuid contents = Server_interface.with_xapi ~cache @@ VTPM.set_contents ~self ~contents let vtpm_get_contents _dbg vtpm_uuid = - let open Xen_api_lwt_unix in + let open Xen_api_client_lwt.Xen_api_lwt_unix in let open Lwt.Syntax in let uuid = Uuidm.to_string vtpm_uuid in ret diff --git a/ocaml/xapi-guard/test/xapi_guard_test.ml b/ocaml/xapi-guard/test/xapi_guard_test.ml index 86efb713d29..b9e6fea2c9b 100644 --- a/ocaml/xapi-guard/test/xapi_guard_test.ml +++ b/ocaml/xapi-guard/test/xapi_guard_test.ml @@ -1,8 +1,8 @@ open Xapi_guard_server -module SessionCache = Xen_api_lwt_unix.SessionCache +module SessionCache = Xen_api_client_lwt.Xen_api_lwt_unix.SessionCache open Alcotest_lwt open Lwt.Syntax -open Xen_api_lwt_unix +open Xen_api_client_lwt.Xen_api_lwt_unix module D = Debug.Make (struct let name = "xapi-guard-test" end) @@ -88,7 +88,7 @@ let with_rpc f switch () = (* rpc simulates what varstored would do *) let uri = Uri.make ~scheme:"file" ~path () |> Uri.to_string in D.debug "Connecting to %s" uri ; - let rpc = Xen_api_lwt_unix.make uri in + let rpc = make uri in Lwt.finalize (fun () -> (* not strictly necessary to login/logout here - since we only get dummy sessions *) diff --git a/ocaml/xapi-idl/lib/debuginfo.ml b/ocaml/xapi-idl/lib/debug_info.ml similarity index 100% rename from ocaml/xapi-idl/lib/debuginfo.ml rename to ocaml/xapi-idl/lib/debug_info.ml diff --git a/ocaml/xapi-idl/lib/debuginfo.mli b/ocaml/xapi-idl/lib/debug_info.mli similarity index 100% rename from ocaml/xapi-idl/lib/debuginfo.mli rename to ocaml/xapi-idl/lib/debug_info.mli diff --git a/ocaml/xapi-idl/lib/task_server.ml b/ocaml/xapi-idl/lib/task_server.ml index e963e42687f..a4c675e7d04 100644 --- a/ocaml/xapi-idl/lib/task_server.ml +++ b/ocaml/xapi-idl/lib/task_server.ml @@ -128,16 +128,16 @@ functor (* [add dbg f] creates a fresh [t], registers and returns it *) let add ?traceparent tasks dbg (f : task_handle -> Interface.Task.async_result option) = - let dbg' = Debuginfo.of_string dbg in + let dbg' = Debug_info.of_string dbg in let tracing = - match (dbg'.Debuginfo.tracing, traceparent) with + match (dbg'.Debug_info.tracing, traceparent) with | Some t, _ -> Some t | None, Some traceparent -> let spancontext = Tracing.SpanContext.of_traceparent traceparent in Option.map (fun tp -> - Tracing.Tracer.span_of_span_context tp dbg'.Debuginfo.log + Tracing.Tracer.span_of_span_context tp dbg'.Debug_info.log ) spancontext | _ -> @@ -148,7 +148,7 @@ functor tasks ; id= next_task_id () ; ctime= Unix.gettimeofday () - ; dbg= dbg'.Debuginfo.log + ; dbg= dbg'.Debug_info.log ; tracing ; state= Interface.Task.Pending 0. ; subtasks= [] diff --git a/ocaml/xapi/api_server.ml b/ocaml/xapi/api_server.ml index b7209ec323e..a6016b5805b 100644 --- a/ocaml/xapi/api_server.ml +++ b/ocaml/xapi/api_server.ml @@ -320,7 +320,8 @@ let jsoncallback req bio _ = let fd = Buf_io.fd_of bio in (* fd only used for writing *) let body = - Http_svr.read_body ~limit:Db_globs.http_limit_max_rpc_size req bio + Http_svr.read_body ~limit:Xapi_database.Db_globs.http_limit_max_rpc_size req + bio in try let json_rpc_version, id, rpc = diff --git a/ocaml/xapi/cancel_tasks.ml b/ocaml/xapi/cancel_tasks.ml index 3a61fa26bca..690cd1026b1 100644 --- a/ocaml/xapi/cancel_tasks.ml +++ b/ocaml/xapi/cancel_tasks.ml @@ -26,7 +26,7 @@ let safe_wrapper n f x = Debug.log_backtrace e (Backtrace.get e) let update_all_allowed_operations ~__context = - let open Stats in + let time_this = Xapi_database.Stats.time_this in let all_vms = Db.VM.get_all ~__context and all_vbds = Db.VBD.get_all ~__context and all_vifs = Db.VIF.get_all ~__context diff --git a/ocaml/xapi/certificates.ml b/ocaml/xapi/certificates.ml index 6b871e686c5..0204b7b064a 100644 --- a/ocaml/xapi/certificates.ml +++ b/ocaml/xapi/certificates.ml @@ -179,7 +179,7 @@ end = struct let get_ca_certs ~__context name = let expr = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let type' = Eq (Field "type", Literal "ca") in let name' = Eq (Field "name", Literal name) in And (type', name') @@ -187,7 +187,7 @@ end = struct Db.Certificate.get_refs_where ~__context ~expr let get_host_certs ~__context ~type' ~host = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let type' = Eq (Field "type", Literal (Record_util.certificate_type_to_string type')) in @@ -251,7 +251,7 @@ end = struct let get_ca_certs ~__context = let expr = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Eq (Field "type", Literal "ca") in Db.Certificate.get_refs_where ~__context ~expr diff --git a/ocaml/xapi/cluster_stack_constraints.ml b/ocaml/xapi/cluster_stack_constraints.ml index d6689085173..8efa8bc4cab 100644 --- a/ocaml/xapi/cluster_stack_constraints.ml +++ b/ocaml/xapi/cluster_stack_constraints.ml @@ -1,4 +1,4 @@ -open Db_filter_types +open Xapi_database.Db_filter_types module Listext = Xapi_stdext_std.Listext.List module D = Debug.Make (struct let name = "cluster_stack_constraints" end) diff --git a/ocaml/xapi/console.ml b/ocaml/xapi/console.ml index f682289163d..03cb4bf9559 100644 --- a/ocaml/xapi/console.ml +++ b/ocaml/xapi/console.ml @@ -184,7 +184,9 @@ let console_of_request __context req = go for that. *) let db = Context.database_of __context in let is_vm, _ = - let module DB = (val Db_cache.get db : Db_interface.DB_ACCESS) in + let module DB = + (val Xapi_database.Db_cache.get db : Xapi_database.Db_interface.DB_ACCESS) + in match DB.get_table_from_ref db _ref with | Some c when c = Db_names.vm -> (true, false) diff --git a/ocaml/xapi/context.ml b/ocaml/xapi/context.ml index dce55ca4d40..080bab8fcad 100644 --- a/ocaml/xapi/context.ml +++ b/ocaml/xapi/context.ml @@ -42,7 +42,7 @@ type t = { ; task_id: API.ref_task ; forwarded_task: bool ; origin: origin - ; database: Db_ref.t + ; database: Xapi_database.Db_ref.t ; dbg: string ; mutable tracing: Tracing.Span.t option ; client: Http_svr.client option @@ -99,9 +99,9 @@ let is_unix_socket s = let default_database () = if Pool_role.is_master () then - Db_backend.make () + Xapi_database.Db_backend.make () else - Db_ref.Remote + Xapi_database.Db_ref.Remote let preauth ~__context = match __context.origin with @@ -154,17 +154,19 @@ let __destroy_task : (__context:t -> API.ref_task -> unit) ref = let string_of_task __context = __context.dbg let string_of_task_and_tracing __context = - Debuginfo.make ~log:__context.dbg ~tracing:__context.tracing - |> Debuginfo.to_string + Debug_info.make ~log:__context.dbg ~tracing:__context.tracing + |> Debug_info.to_string let tracing_of_dbg s = - let dbg = Debuginfo.of_string s in + let dbg = Debug_info.of_string s in (dbg.log, dbg.tracing) let check_for_foreign_database ~__context = match __context.session_id with | Some sid -> ( - match Db_backend.get_registered_database (Ref.string_of sid) with + match + Xapi_database.Db_backend.get_registered_database (Ref.string_of sid) + with | Some database -> {__context with database} | None -> diff --git a/ocaml/xapi/context.mli b/ocaml/xapi/context.mli index 7b2ece18c2c..07e5cb6ea29 100644 --- a/ocaml/xapi/context.mli +++ b/ocaml/xapi/context.mli @@ -25,7 +25,7 @@ val make : -> ?quiet:bool -> ?subtask_of:API.ref_task -> ?session_id:API.ref_session - -> ?database:Db_ref.t + -> ?database:Xapi_database.Db_ref.t -> ?task_in_database:bool -> ?task_description:string -> ?origin:origin @@ -87,7 +87,7 @@ val task_in_database : t -> bool val get_origin : t -> string (** [get_origin __context] returns a string containing the origin of [__context]. *) -val database_of : t -> Db_ref.t +val database_of : t -> Xapi_database.Db_ref.t (** [database_of __context] returns a database handle, which can be used by Db.* *) (** {6 Destructors} *) diff --git a/ocaml/xapi/create_misc.ml b/ocaml/xapi/create_misc.ml index 7a2630ea57f..546b3cc24d1 100644 --- a/ocaml/xapi/create_misc.ml +++ b/ocaml/xapi/create_misc.ml @@ -20,7 +20,7 @@ module Unixext = Xapi_stdext_unix.Unixext module Date = Xapi_stdext_date.Date open Xapi_vm_memory_constraints open Vm_memory_constraints -open Db_filter_types +open Xapi_database.Db_filter_types open Network module XenAPI = Client.Client diff --git a/ocaml/xapi/db.ml b/ocaml/xapi/db.ml index 0ceecb1d459..4b4b6c2deea 100644 --- a/ocaml/xapi/db.ml +++ b/ocaml/xapi/db.ml @@ -16,6 +16,7 @@ *) include Db_actions.DB_Action +open Xapi_database let is_valid_ref __context r = if r = Ref.null then diff --git a/ocaml/xapi/db_gc.ml b/ocaml/xapi/db_gc.ml index e0d79a5bc8e..c7fb5d93373 100644 --- a/ocaml/xapi/db_gc.ml +++ b/ocaml/xapi/db_gc.ml @@ -270,10 +270,10 @@ let tickle_heartbeat ~__context host stuff = let single_pass () = Server_helpers.exec_with_new_task "DB GC" (fun __context -> - Db_lock.with_lock (fun () -> + Xapi_database.Db_lock.with_lock (fun () -> let time_one (name, f) = - Stats.time_this (Printf.sprintf "Db_gc: %s" name) (fun () -> - f ~__context + Xapi_database.Stats.time_this (Printf.sprintf "Db_gc: %s" name) + (fun () -> f ~__context ) in List.iter time_one Db_gc_util.gc_subtask_list diff --git a/ocaml/xapi/db_gc_util.ml b/ocaml/xapi/db_gc_util.ml index 3a9d8f74856..eb86d981291 100644 --- a/ocaml/xapi/db_gc_util.ml +++ b/ocaml/xapi/db_gc_util.ml @@ -27,7 +27,9 @@ let valid_ref x = Db.is_valid_ref x let gc_connector ~__context get_all get_record valid_ref1 valid_ref2 delete_record = let db = Context.database_of __context in - let module DB = (val Db_cache.get db : Db_interface.DB_ACCESS) in + let module DB = + (val Xapi_database.Db_cache.get db : Xapi_database.Db_interface.DB_ACCESS) + in let all_refs = get_all ~__context in let do_gc ref = let print_valid b = if b then "valid" else "INVALID" in @@ -188,7 +190,7 @@ let gc_PGPUs ~__context = let gc_VGPU_types ~__context = (* We delete a VGPU_type iff it does not appear in the supported_VGPU_types of any PGPU _and_ there doesn't exist a VGPU with this VGPU_type *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let garbage = Db.VGPU_type.get_records_where ~__context ~expr: @@ -272,7 +274,8 @@ let probation_pending_tasks = Hashtbl.create 53 let timeout_tasks ~__context = let all_tasks = - Db.Task.get_internal_records_where ~__context ~expr:Db_filter_types.True + Db.Task.get_internal_records_where ~__context + ~expr:Xapi_database.Db_filter_types.True in let oldest_completed_time = Unix.time () -. !Xapi_globs.completed_task_timeout @@ -474,7 +477,8 @@ let last_session_log_time = ref None let timeout_sessions ~__context = let all_sessions = - Db.Session.get_internal_records_where ~__context ~expr:Db_filter_types.True + Db.Session.get_internal_records_where ~__context + ~expr:Xapi_database.Db_filter_types.True in let pool_sessions, nonpool_sessions = List.partition (fun (_, s) -> s.Db_actions.session_pool) all_sessions diff --git a/ocaml/xapi/eventgen.ml b/ocaml/xapi/eventgen.ml index a3ef6e60608..274e74abb78 100644 --- a/ocaml/xapi/eventgen.ml +++ b/ocaml/xapi/eventgen.ml @@ -92,8 +92,8 @@ let events_of_other_tbl_refs other_tbl_refs = other_tbl_refs ) -open Db_cache_types -open Db_action_helper +open Xapi_database.Db_cache_types +open Xapi_database.Db_action_helper let database_callback_inner event db context = let other_tbl_refs tblname = follow_references tblname in diff --git a/ocaml/xapi/exnHelper.ml b/ocaml/xapi/exnHelper.ml index 84dbf269bfc..af5458e7839 100644 --- a/ocaml/xapi/exnHelper.ml +++ b/ocaml/xapi/exnHelper.ml @@ -68,7 +68,7 @@ let error_of_exn e = ) | Invalid_argument x -> (internal_error, [Printf.sprintf "Invalid argument: %s" x]) - | Db_filter.Expression_error (expr, exc) -> + | Xapi_database.Db_filter.Expression_error (expr, exc) -> (invalid_value, [expr; Printexc.to_string exc]) | Forkhelpers.Subprocess_failed n -> ( internal_error diff --git a/ocaml/xapi/helpers.ml b/ocaml/xapi/helpers.ml index bed75da7b0a..d8366e00a9a 100644 --- a/ocaml/xapi/helpers.ml +++ b/ocaml/xapi/helpers.ml @@ -23,7 +23,7 @@ let finally = Xapi_stdext_pervasives.Pervasiveext.finally let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute open Xapi_globs -open Db_filter_types +open Xapi_database.Db_filter_types include Helper_process open Network @@ -1292,7 +1292,9 @@ let vm_to_string __context vm = if not (Db.is_valid_ref __context vm) then raise (Api_errors.Server_error (Api_errors.invalid_value, [str])) ; let t = Context.database_of __context in - let module DB = (val Db_cache.get t : Db_interface.DB_ACCESS) in + let module DB = + (val Xapi_database.Db_cache.get t : Xapi_database.Db_interface.DB_ACCESS) + in let fields = fst (DB.read_record t Db_names.vm str) in let sexpr = SExpr.Node @@ -1966,7 +1968,7 @@ end = struct in Xapi_globs.pool_secrets := [ps] ; Db_globs.pool_secret := - ps |> SecretString.rpc_of_t |> Db_secret_string.t_of_rpc ; + ps |> SecretString.rpc_of_t |> Xapi_database.Db_secret_string.t_of_rpc ; SecretString.write_to_file !Xapi_globs.pool_secret_path ps ; Xapi_psr_util.load_psr_pool_secrets () end diff --git a/ocaml/xapi/import.ml b/ocaml/xapi/import.ml index 763d043511b..372cdb7fa20 100644 --- a/ocaml/xapi/import.ml +++ b/ocaml/xapi/import.ml @@ -287,7 +287,7 @@ let assert_can_live_import_vgpu ~__context vgpu_record = let local_pgpus = Db.PGPU.get_refs_where ~__context ~expr: - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq ( Field "GPU_group" diff --git a/ocaml/xapi/memory_check.ml b/ocaml/xapi/memory_check.ml index 51bc945904a..4d537aec2ca 100644 --- a/ocaml/xapi/memory_check.ml +++ b/ocaml/xapi/memory_check.ml @@ -128,7 +128,7 @@ type host_memory_summary = { (** list of VMs which are in the process of having a domain created here *) } -open Db_filter_types +open Xapi_database.Db_filter_types (** Return a host's memory summary from live database contents. *) let get_host_memory_summary ~__context ~host = diff --git a/ocaml/xapi/message_forwarding.ml b/ocaml/xapi/message_forwarding.ml index 5caa4609ec4..bfaa69592d2 100644 --- a/ocaml/xapi/message_forwarding.ml +++ b/ocaml/xapi/message_forwarding.ml @@ -5351,15 +5351,14 @@ functor let pool_migrate ~__context ~vdi ~sr ~options = let vbds = - Db.VBD.get_records_where ~__context - ~expr: - (Db_filter_types.Eq - ( Db_filter_types.Field "VDI" - , Db_filter_types.Literal (Ref.string_of vdi) - ) - ) + let expr = + Xapi_database.Db_filter_types.( + Eq (Field "VDI", Literal (Ref.string_of vdi)) + ) + in + Db.VBD.get_records_where ~__context ~expr in - if List.length vbds < 1 then + if vbds = [] then raise (Api_errors.Server_error (Api_errors.vdi_needs_vm_for_migrate, [Ref.string_of vdi]) diff --git a/ocaml/xapi/monitor_dbcalls.ml b/ocaml/xapi/monitor_dbcalls.ml index 32cba8c2cd1..ab521155d2c 100644 --- a/ocaml/xapi/monitor_dbcalls.ml +++ b/ocaml/xapi/monitor_dbcalls.ml @@ -12,7 +12,7 @@ * GNU Lesser General Public License for more details. *) -open Db_filter_types +open Xapi_database.Db_filter_types open Monitor_types open Monitor_dbcalls_cache diff --git a/ocaml/xapi/monitor_master.ml b/ocaml/xapi/monitor_master.ml index e65b4b5beca..bb4e6cf2e5b 100644 --- a/ocaml/xapi/monitor_master.ml +++ b/ocaml/xapi/monitor_master.ml @@ -15,7 +15,7 @@ module Rrdd = Rrd_client.Client module Date = Xapi_stdext_date.Date open Monitor_types -open Db_filter_types +open Xapi_database.Db_filter_types open Network module D = Debug.Make (struct let name = "monitor_master" end) @@ -128,12 +128,10 @@ let update_pifs ~__context host pifs = in let set_carrier (domid, devid) = let expr = - Db_filter_types.( - And - ( Eq (Field "resident_on", Literal (Ref.string_of host)) - , Eq (Field "domid", Literal (string_of_int domid)) - ) - ) + And + ( Eq (Field "resident_on", Literal (Ref.string_of host)) + , Eq (Field "domid", Literal (string_of_int domid)) + ) in match Db.VM.get_refs_where ~__context ~expr with | [] -> diff --git a/ocaml/xapi/network_event_loop.ml b/ocaml/xapi/network_event_loop.ml index 8e4b39cdbf7..4967e7f369e 100644 --- a/ocaml/xapi/network_event_loop.ml +++ b/ocaml/xapi/network_event_loop.ml @@ -26,7 +26,9 @@ let _watch_networks_for_nbd_changes __context ~update_firewall let allowed_interfaces = None in let api_timeout = 60. in let timeout = - 30. +. api_timeout +. !Db_globs.master_connection_reset_timeout + 30. + +. api_timeout + +. !Xapi_database.Db_globs.master_connection_reset_timeout in let wait_for_network_change ~token = let from = diff --git a/ocaml/xapi/nm.ml b/ocaml/xapi/nm.ml index 5129b01b389..5db9cb9a29f 100644 --- a/ocaml/xapi/nm.ml +++ b/ocaml/xapi/nm.ml @@ -16,7 +16,7 @@ module D = Debug.Make (struct let name = "nm" end) open D open Xapi_stdext_std.Xstringext module Listext = Xapi_stdext_std.Listext.List -open Db_filter_types +open Xapi_database.Db_filter_types open Network open Network_interface @@ -725,7 +725,7 @@ let bring_pif_up ~__context ?(management_interface = false) (pif : API.ref_PIF) (* The master_connection would otherwise try to take a broken stunnel from the cache *) Stunnel_cache.flush () ; warn "About to forcibly reset the master connection" ; - Master_connection.force_connection_reset () + Xapi_database.Master_connection.force_connection_reset () ) ; if rc.API.pIF_currently_attached = false || management_interface then ( if management_interface then ( diff --git a/ocaml/xapi/pool_db_backup.ml b/ocaml/xapi/pool_db_backup.ml index 3a6207ab63e..2a0ab1eae21 100644 --- a/ocaml/xapi/pool_db_backup.ml +++ b/ocaml/xapi/pool_db_backup.ml @@ -20,7 +20,8 @@ module Unixext = Xapi_stdext_unix.Unixext let finally = Xapi_stdext_pervasives.Pervasiveext.finally open Client -open Db_cache_types +open Xapi_database +open Xapi_database.Db_cache_types module D = Debug.Make (struct let name = "pool_db_sync" end) diff --git a/ocaml/xapi/pvs_cache_vdi.ml b/ocaml/xapi/pvs_cache_vdi.ml index b0b3f42d694..5fe404be616 100644 --- a/ocaml/xapi/pvs_cache_vdi.ml +++ b/ocaml/xapi/pvs_cache_vdi.ml @@ -15,7 +15,7 @@ module D = Debug.Make (struct let name = "pvs_cache_vdi" end) open D -open Db_filter_types +open Xapi_database.Db_filter_types let create_vdi ~__context ~sR ~size = info "Creating new PVS-cache VDI" ; diff --git a/ocaml/xapi/pvs_proxy_control.ml b/ocaml/xapi/pvs_proxy_control.ml index 0b5360a86b8..8597166fe7b 100644 --- a/ocaml/xapi/pvs_proxy_control.ml +++ b/ocaml/xapi/pvs_proxy_control.ml @@ -26,7 +26,7 @@ let proxy_port_name vif = (** [proxies] returns all currently attached proxies *) let get_running_proxies ~__context ~site = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Db.PVS_proxy.get_refs_where ~__context ~expr: (And @@ -39,7 +39,7 @@ let get_running_proxies ~__context ~site = module State = struct type t = Starting | Started | Stopping | Failed - open Xenstore + open Ezxenstore_core.Xenstore let of_string = function | "starting" -> @@ -192,7 +192,7 @@ let remove_site_on_localhost ~__context ~site = exception No_cache_sr_available let find_cache_vdi ~__context ~host ~site = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in (* There should be at most one matching PVS_cache_storage object *) let pcs' = Db.PVS_cache_storage.get_refs_where ~__context @@ -376,7 +376,7 @@ let clear_proxy_state ~__context _vif proxy = Db.PVS_proxy.set_status ~__context ~self:proxy ~value:`stopped let find_proxy_for_vif ~__context ~vif = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let proxies = Db.PVS_proxy.get_refs_where ~__context ~expr:(Eq (Field "VIF", Literal (Ref.string_of vif))) diff --git a/ocaml/xapi/rbac_audit.ml b/ocaml/xapi/rbac_audit.ml index 6c3f99b7341..bbc5a7a6fc9 100644 --- a/ocaml/xapi/rbac_audit.ml +++ b/ocaml/xapi/rbac_audit.ml @@ -111,7 +111,7 @@ let get_obj_names_of_refs (obj_ref_list : SExpr.t list) : SExpr.t list = (function | SExpr.(Node [String name; String ""; String ""; String ref_value]) -> let obj_name, uuid = - match Ref_index.lookup ref_value with + match Xapi_database.Ref_index.lookup ref_value with | None -> ("", "") | Some {name_label= None; uuid; _} -> @@ -312,7 +312,7 @@ let rec sexpr_args_of __context name rpc_value action = else (* heuristic 2: print uuid/refs arguments in the xapi call *) match rpc_value with | Rpc.String value -> ( - match Ref_index.lookup value with + match Xapi_database.Ref_index.lookup value with | None when Ref.(is_real (of_string value)) -> (* it's a ref, just not in the db cache *) Some diff --git a/ocaml/xapi/redo_log_alert.ml b/ocaml/xapi/redo_log_alert.ml index 02ae81f62ef..11e9db4bdfe 100644 --- a/ocaml/xapi/redo_log_alert.ml +++ b/ocaml/xapi/redo_log_alert.ml @@ -52,7 +52,7 @@ let loop () = (fun () -> while true do let name, accessible = - Event.sync (Event.receive Redo_log.redo_log_events) + Event.sync (Event.receive Xapi_database.Redo_log.redo_log_events) in let alert_body = Printf.sprintf "Redo log [%s]" name in if accessible then ( diff --git a/ocaml/xapi/redo_log_usage.ml b/ocaml/xapi/redo_log_usage.ml index 245a0d183cd..630ebf03be5 100644 --- a/ocaml/xapi/redo_log_usage.ml +++ b/ocaml/xapi/redo_log_usage.ml @@ -19,6 +19,8 @@ exception DeltaTooOld exception DatabaseWrongSize of int * int +open Xapi_database + let read_from_redo_log log staging_path db_ref = R.log_and_ignore_exn @@ fun () -> (* 1. Start the process with which we communicate to access the redo log *) diff --git a/ocaml/xapi/redo_log_usage.mli b/ocaml/xapi/redo_log_usage.mli index 1bbd9c8888b..1e1c921820b 100644 --- a/ocaml/xapi/redo_log_usage.mli +++ b/ocaml/xapi/redo_log_usage.mli @@ -16,9 +16,12 @@ *) val read_from_redo_log : - [< `RO | `RW] Redo_log.redo_log -> string -> Db_ref.t -> unit + [< `RO | `RW] Xapi_database.Redo_log.redo_log + -> string + -> Xapi_database.Db_ref.t + -> unit (** Connect to the block device and write the latest version of the database * on it to a file with a given name. *) -val stop_using_redo_log : _ Redo_log.redo_log -> unit +val stop_using_redo_log : _ Xapi_database.Redo_log.redo_log -> unit (** Disconnect from the block device. May be safely called even when not currently connected. *) diff --git a/ocaml/xapi/slave_backup.ml b/ocaml/xapi/slave_backup.ml index bf8cd226031..aeb3e3e1e95 100644 --- a/ocaml/xapi/slave_backup.ml +++ b/ocaml/xapi/slave_backup.ml @@ -21,6 +21,8 @@ *) type write_entry = {period_start_time: float; writes_this_period: int} +module Parse_db_conf = Xapi_database.Parse_db_conf + let backup_write_table : (Parse_db_conf.db_connection, write_entry) Hashtbl.t = Hashtbl.create 20 @@ -93,7 +95,9 @@ let notify_write dbconn = let determine_backup_connections generation_count = tick_backup_write_table () ; (* reset existing write_entries if any periods expire *) - let dbconns_and_gen_counts = Db_connections.get_dbs_and_gen_counts () in + let dbconns_and_gen_counts = + Xapi_database.Db_connections.get_dbs_and_gen_counts () + in (* throw out dbconns that are up-to-date *) let dbconns_and_gen_counts = List.filter (fun (gen, _) -> gen <> generation_count) dbconns_and_gen_counts diff --git a/ocaml/xapi/sm.ml b/ocaml/xapi/sm.ml index 0ae899f63f0..df438a656bd 100644 --- a/ocaml/xapi/sm.ml +++ b/ocaml/xapi/sm.ml @@ -30,7 +30,7 @@ exception Unknown_driver of string exception MasterOnly -let with_dbg ~name ~dbg f = Debuginfo.with_dbg ~module_name:"SM" ~name ~dbg f +let with_dbg ~name ~dbg f = Debug_info.with_dbg ~module_name:"SM" ~name ~dbg f let supported_drivers () = Hashtbl.fold (fun name _ acc -> name :: acc) driver_info_cache [] @@ -39,7 +39,7 @@ let supported_drivers () = let register ~__context () = let dbg = Context.string_of_task_and_tracing __context in with_dbg ~name:"register" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let add_entry driver info = let name = String.lowercase_ascii driver in Hashtbl.replace driver_info_cache name info @@ -77,7 +77,7 @@ let srmaster_only (_, dconf) = let sr_create ~dbg dconf driver sr size = with_dbg ~dbg ~name:"sr_create" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_create" [Int64.to_string size] in @@ -86,7 +86,7 @@ let sr_create ~dbg dconf driver sr size = let sr_delete ~dbg dconf driver sr = with_dbg ~dbg ~name:"sr_delete" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_delete" [] in debug "sr_delete" driver (sprintf "sr=%s" (Ref.string_of sr)) ; Sm_exec.parse_unit (Sm_exec.exec_xmlrpc ~dbg (driver_filename driver) call) @@ -97,7 +97,7 @@ let serialize_attach_detach = let sr_attach ~dbg dconf driver sr = with_dbg ~dbg ~name:"sr_attach" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Locking_helpers.Named_mutex.execute serialize_attach_detach (fun () -> debug "sr_attach" driver (sprintf "sr=%s" (Ref.string_of sr)) ; let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_attach" [] in @@ -106,7 +106,7 @@ let sr_attach ~dbg dconf driver sr = let sr_detach ~dbg dconf driver sr = with_dbg ~dbg ~name:"sr_detach" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Locking_helpers.Named_mutex.execute serialize_attach_detach (fun () -> debug "sr_detach" driver (sprintf "sr=%s" (Ref.string_of sr)) ; let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_detach" [] in @@ -115,7 +115,7 @@ let sr_detach ~dbg dconf driver sr = let sr_probe ~dbg dconf driver sr_sm_config = with_dbg ~dbg ~name:"sr_probe" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in if List.mem_assoc Sr_probe (features_of_driver driver) then Locking_helpers.Named_mutex.execute serialize_attach_detach (fun () -> debug "sr_probe" driver @@ -139,7 +139,7 @@ let sr_probe ~dbg dconf driver sr_sm_config = let sr_scan ~dbg dconf driver sr = with_dbg ~dbg ~name:"sr_scan" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "sr_scan" driver (sprintf "sr=%s" (Ref.string_of sr)) ; srmaster_only dconf ; let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_scan" [] in @@ -147,7 +147,7 @@ let sr_scan ~dbg dconf driver sr = let sr_update ~dbg dconf driver sr = with_dbg ~dbg ~name:"sr_update" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "sr_update" driver (sprintf "sr=%s" (Ref.string_of sr)) ; let call = Sm_exec.make_call ~sr_ref:sr dconf "sr_update" [] in Sm_exec.parse_unit (Sm_exec.exec_xmlrpc ~dbg (driver_filename driver) call) @@ -156,7 +156,7 @@ let vdi_create ~dbg ?vdi_uuid dconf driver sr sm_config vdi_type size name_label name_description metadata_of_pool is_a_snapshot snapshot_time snapshot_of read_only = with_dbg ~dbg ~name:"vdi_create" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_create" driver (sprintf "sr=%s sm_config=[%s] type=[%s] size=%Ld" (Ref.string_of sr) (String.concat "; " (List.map (fun (k, v) -> k ^ "=" ^ v) sm_config)) @@ -181,7 +181,7 @@ let vdi_create ~dbg ?vdi_uuid dconf driver sr sm_config vdi_type size name_label let vdi_update ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_update" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_update" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = Sm_exec.make_call ~sr_ref:sr ~vdi_ref:vdi dconf "vdi_update" [] in @@ -189,7 +189,7 @@ let vdi_update ~dbg dconf driver sr vdi = let vdi_introduce ~dbg dconf driver sr new_uuid sm_config location = with_dbg ~dbg ~name:"vdi_introduce" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_introduce" driver (sprintf "sr=%s new_uuid=%s sm_config=[%s] location=%s" (Ref.string_of sr) new_uuid @@ -204,7 +204,7 @@ let vdi_introduce ~dbg dconf driver sr new_uuid sm_config location = let vdi_delete ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_delete" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_delete" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; srmaster_only dconf ; @@ -213,7 +213,7 @@ let vdi_delete ~dbg dconf driver sr vdi = let vdi_attach ~dbg dconf driver sr vdi writable = with_dbg ~dbg ~name:"vdi_attach" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_attach" driver (sprintf "sr=%s vdi=%s writable=%b" (Ref.string_of sr) (Ref.string_of vdi) writable @@ -227,7 +227,7 @@ let vdi_attach ~dbg dconf driver sr vdi writable = let vdi_detach ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_detach" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_detach" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = Sm_exec.make_call ~sr_ref:sr ~vdi_ref:vdi dconf "vdi_detach" [] in @@ -235,7 +235,7 @@ let vdi_detach ~dbg dconf driver sr vdi = let vdi_activate ~dbg dconf driver sr vdi writable = with_dbg ~dbg ~name:"vdi_activate" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_activate" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = @@ -246,7 +246,7 @@ let vdi_activate ~dbg dconf driver sr vdi writable = let vdi_deactivate ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_deactivate" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_deactivate" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = @@ -256,7 +256,7 @@ let vdi_deactivate ~dbg dconf driver sr vdi = let vdi_snapshot ~dbg dconf driver driver_params sr vdi = with_dbg ~dbg ~name:"vdi_snapshot" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_snapshot" driver (sprintf "sr=%s vdi=%s driver_params=[%s]" (Ref.string_of sr) (Ref.string_of vdi) @@ -271,7 +271,7 @@ let vdi_snapshot ~dbg dconf driver driver_params sr vdi = let vdi_clone ~dbg dconf driver driver_params sr vdi = with_dbg ~dbg ~name:"vdi_clone" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_clone" driver (sprintf "sr=%s vdi=%s driver_params=[%s]" (Ref.string_of sr) (Ref.string_of vdi) @@ -286,7 +286,7 @@ let vdi_clone ~dbg dconf driver driver_params sr vdi = let vdi_resize ~dbg dconf driver sr vdi newsize = with_dbg ~dbg ~name:"vdi_resize" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_resize" driver (sprintf "sr=%s vdi=%s newsize=%Ld" (Ref.string_of sr) (Ref.string_of vdi) newsize @@ -300,7 +300,7 @@ let vdi_resize ~dbg dconf driver sr vdi newsize = let vdi_generate_config ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_generate_config" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_generate_config" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = @@ -310,7 +310,7 @@ let vdi_generate_config ~dbg dconf driver sr vdi = let vdi_compose ~dbg dconf driver sr vdi1 vdi2 = with_dbg ~dbg ~name:"vdi_compose" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_compose" driver (sprintf "sr=%s vdi1=%s vdi2=%s" (Ref.string_of sr) (Ref.string_of vdi1) (Ref.string_of vdi2) @@ -324,7 +324,7 @@ let vdi_compose ~dbg dconf driver sr vdi1 vdi2 = let vdi_epoch_begin ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_epoch_begin" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_epoch_begin" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = @@ -334,7 +334,7 @@ let vdi_epoch_begin ~dbg dconf driver sr vdi = let vdi_epoch_end ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_epoch_end" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_epoch_end" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; let call = @@ -344,7 +344,7 @@ let vdi_epoch_end ~dbg dconf driver sr vdi = let vdi_enable_cbt ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_enable_cbt" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_enable_cbt" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; srmaster_only dconf ; @@ -355,7 +355,7 @@ let vdi_enable_cbt ~dbg dconf driver sr vdi = let vdi_disable_cbt ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_disable_cbt" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_disable_cbt" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; srmaster_only dconf ; @@ -366,7 +366,7 @@ let vdi_disable_cbt ~dbg dconf driver sr vdi = let vdi_data_destroy ~dbg dconf driver sr vdi = with_dbg ~dbg ~name:"vdi_data_destroy" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_data_destroy" driver (sprintf "sr=%s vdi=%s" (Ref.string_of sr) (Ref.string_of vdi)) ; srmaster_only dconf ; @@ -377,7 +377,7 @@ let vdi_data_destroy ~dbg dconf driver sr vdi = let vdi_list_changed_blocks ~dbg dconf driver sr ~vdi_from ~vdi_to = with_dbg ~dbg ~name:"vdi_list_changed_blocks" @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in debug "vdi_list_changed_blocks" driver (sprintf "sr=%s vdi_from=%s vdi_to=%s" (Ref.string_of sr) (Ref.string_of vdi_from) (Ref.string_of vdi_to) @@ -407,17 +407,12 @@ let assert_session_has_internal_sr_access ~__context ~sr = let get_my_pbd_for_sr __context sr_id = let me = Helpers.get_localhost ~__context in let pbd_ref_and_record = + let open Xapi_database.Db_filter_types in Db.PBD.get_records_where ~__context ~expr: - (Db_filter_types.And - ( Db_filter_types.Eq - ( Db_filter_types.Field "host" - , Db_filter_types.Literal (Ref.string_of me) - ) - , Db_filter_types.Eq - ( Db_filter_types.Field "SR" - , Db_filter_types.Literal (Ref.string_of sr_id) - ) + (And + ( Eq (Field "host", Literal (Ref.string_of me)) + , Eq (Field "SR", Literal (Ref.string_of sr_id)) ) ) in diff --git a/ocaml/xapi/sm_exec.ml b/ocaml/xapi/sm_exec.ml index 5b449ae0a07..28cdd11e07b 100644 --- a/ocaml/xapi/sm_exec.ml +++ b/ocaml/xapi/sm_exec.ml @@ -33,7 +33,7 @@ let cmd_name driver = sprintf "%s/%sSR" !Xapi_globs.sm_dir driver let sm_username = "__sm__backend" let with_dbg ~name ~dbg f = - Debuginfo.with_dbg ~module_name:"Sm_exec" ~name ~dbg f + Debug_info.with_dbg ~module_name:"Sm_exec" ~name ~dbg f (*********************************************************************************************) (* Random utility functions *) @@ -345,7 +345,7 @@ let exec_xmlrpc ~dbg ?context:_ ?(needs_session = true) (driver : string) let xml = xmlrpc_of_call call in let name = Printf.sprintf "sm_exec: %s" call.cmd in let xml, stderr = - Stats.time_this name (fun () -> + Xapi_database.Stats.time_this name (fun () -> let exe = cmd_name driver in (* Logging call.cmd is safe, but call.args could contain a password. *) try @@ -579,7 +579,7 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) = let sr_get_driver_info ~dbg driver = with_dbg ~name:"sr_get_driver_info" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let call = make_call (None, []) "sr_get_driver_info" [] in parse_sr_get_driver_info driver (exec_xmlrpc ~dbg ~needs_session:false driver call) @@ -588,7 +588,7 @@ let sr_get_driver_info ~dbg driver = * backend and daemon found. *) let get_supported ~dbg add_fn = with_dbg ~name:"get_supported" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let check_driver entry = if Astring.String.is_suffix ~affix:"SR" entry then let driver = String.sub entry 0 (String.length entry - 2) in diff --git a/ocaml/xapi/startup.ml b/ocaml/xapi/startup.ml index a230fc680db..73b496f327d 100644 --- a/ocaml/xapi/startup.ml +++ b/ocaml/xapi/startup.ml @@ -63,7 +63,7 @@ let run ~__context tasks = List.iter (fun (tsk_name, tsk_flags, tsk_fct) -> (* Wrap the function with a timer *) - let tsk_fct () = Stats.time_this tsk_name tsk_fct in + let tsk_fct () = Xapi_database.Stats.time_this tsk_name tsk_fct in let only_master, only_slave, exnraise, onthread = get_flags_of_list tsk_flags in @@ -105,4 +105,6 @@ let run ~__context tasks = tasks let run ~__context tasks = - Stats.time_this "overall xapi startup" (fun () -> run ~__context tasks) + Xapi_database.Stats.time_this "overall xapi startup" (fun () -> + run ~__context tasks + ) diff --git a/ocaml/xapi/static_vdis.ml b/ocaml/xapi/static_vdis.ml index 5ed45c95e16..049708e9c71 100644 --- a/ocaml/xapi/static_vdis.ml +++ b/ocaml/xapi/static_vdis.ml @@ -18,7 +18,8 @@ module D = Debug.Make (struct let name = "static_vdis" end) open D -include Static_vdis_list (* include the vdi type and the list() function *) +include Xapi_database.Static_vdis_list +(* include the vdi type and the list() function *) (** Generate the static configuration and attach the VDI now *) let permanent_vdi_attach ~__context ~vdi ~reason = diff --git a/ocaml/xapi/storage_migrate.ml b/ocaml/xapi/storage_migrate.ml index fa306e42b61..eff980cfbe6 100644 --- a/ocaml/xapi/storage_migrate.ml +++ b/ocaml/xapi/storage_migrate.ml @@ -654,10 +654,10 @@ let stop ~dbg ~id = raise (Storage_interface.Storage_error (Does_not_exist ("mirror", id))) let dbg_and_tracing_of_task task = - Debuginfo.make + Debug_info.make ~log:(Storage_task.get_dbg task) ~tracing:(Storage_task.tracing task) - |> Debuginfo.to_string + |> Debug_info.to_string let start' ~task ~dbg:_ ~sr ~vdi ~dp ~url ~dest ~verify_dest = debug "Mirror.start sr:%s vdi:%s url:%s dest:%s verify_dest:%B" @@ -1336,8 +1336,8 @@ let copy ~task ~dbg ~sr ~vdi ~dp:_ ~url ~dest ~verify_dest = let with_task_and_thread ~dbg f = let task = - Storage_task.add tasks dbg.Debuginfo.log (fun task -> - Storage_task.set_tracing task dbg.Debuginfo.tracing ; + Storage_task.add tasks dbg.Debug_info.log (fun task -> + Storage_task.set_tracing task dbg.Debug_info.tracing ; try f task with | Storage_error (Backend_error (code, params)) | Api_errors.Server_error (code, params) -> @@ -1360,17 +1360,17 @@ let with_task_and_thread ~dbg f = let start ~dbg ~sr ~vdi ~dp ~url ~dest ~verify_dest = with_task_and_thread ~dbg (fun task -> - start' ~task ~dbg:dbg.Debuginfo.log ~sr ~vdi ~dp ~url ~dest ~verify_dest + start' ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~dp ~url ~dest ~verify_dest ) let copy ~dbg ~sr ~vdi ~dp ~url ~dest ~verify_dest = with_task_and_thread ~dbg (fun task -> - copy ~task ~dbg:dbg.Debuginfo.log ~sr ~vdi ~dp ~url ~dest ~verify_dest + copy ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~dp ~url ~dest ~verify_dest ) let copy_into ~dbg ~sr ~vdi ~url ~dest ~dest_vdi ~verify_dest = with_task_and_thread ~dbg (fun task -> - copy_into ~task ~dbg:dbg.Debuginfo.log ~sr ~vdi ~url ~dest ~dest_vdi + copy_into ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~url ~dest ~dest_vdi ~verify_dest ) diff --git a/ocaml/xapi/storage_mux.ml b/ocaml/xapi/storage_mux.ml index 7e85a2ed324..0931b4b0903 100644 --- a/ocaml/xapi/storage_mux.ml +++ b/ocaml/xapi/storage_mux.ml @@ -21,7 +21,7 @@ open D (* Sets the logging context based on `dbg`. Also adds a new tracing span, linked to the parent span from `dbg`, if available. *) let with_dbg ~name ~dbg f = - let open Debuginfo in + let open Debug_info in let di = of_string dbg in Debug.with_thread_associated di.log (fun () -> @@ -189,7 +189,7 @@ module Mux = struct let rpc = of_sr sr end)) in with_dbg ~name:"Query.diagnostics" ~dbg @@ fun di -> - C.Query.diagnostics (Debuginfo.to_string di) + C.Query.diagnostics (Debug_info.to_string di) ) end @@ -247,7 +247,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.DP.destroy2 (Debuginfo.to_string di) dp sr vdi vm allow_leak ; + C.DP.destroy2 (Debug_info.to_string di) dp sr vdi vm allow_leak ; DP_info.delete dp let destroy _context ~dbg ~dp ~allow_leak = @@ -256,7 +256,7 @@ module Mux = struct let open DP_info in match read dp with | Some {sr; vdi; vm; _} -> - destroy2 _context ~dbg:(Debuginfo.to_string di) ~dp ~sr ~vdi ~vm + destroy2 _context ~dbg:(Debug_info.to_string di) ~dp ~sr ~vdi ~vm ~allow_leak | None -> info @@ -305,7 +305,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.create (Debuginfo.to_string di) sr name_label name_description + C.SR.create (Debug_info.to_string di) sr name_label name_description device_config physical_size let attach () ~dbg ~sr ~device_config = @@ -315,7 +315,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.attach (Debuginfo.to_string di) sr device_config + C.SR.attach (Debug_info.to_string di) sr device_config let set_name_label () ~dbg ~sr ~new_name_label = with_dbg ~name:"SR.set_name_label" ~dbg @@ fun di -> @@ -324,7 +324,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.set_name_label (Debuginfo.to_string di) sr new_name_label + C.SR.set_name_label (Debug_info.to_string di) sr new_name_label let set_name_description () ~dbg ~sr ~new_name_description = with_dbg ~name:"SR.set_name_description" ~dbg @@ fun di -> @@ -333,7 +333,8 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.set_name_description (Debuginfo.to_string di) sr new_name_description + C.SR.set_name_description (Debug_info.to_string di) sr + new_name_description let detach () ~dbg ~sr = with_dbg ~name:"SR.detach" ~dbg @@ fun di -> @@ -341,7 +342,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.detach (Debuginfo.to_string di) sr + C.SR.detach (Debug_info.to_string di) sr let destroy () ~dbg ~sr = with_dbg ~name:"SR.destroy" ~dbg @@ fun di -> @@ -349,7 +350,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.destroy (Debuginfo.to_string di) sr + C.SR.destroy (Debug_info.to_string di) sr let stat () ~dbg ~sr = with_dbg ~name:"SR.stat" ~dbg @@ fun di -> @@ -357,7 +358,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.stat (Debuginfo.to_string di) sr + C.SR.stat (Debug_info.to_string di) sr let scan () ~dbg ~sr = with_dbg ~name:"SR.scan" ~dbg @@ fun di -> @@ -365,7 +366,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.scan (Debuginfo.to_string di) sr + C.SR.scan (Debug_info.to_string di) sr module SRSet = Set.Make (struct type t = Storage_interface.Sr.t @@ -389,7 +390,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.list (Debuginfo.to_string di) + C.SR.list (Debug_info.to_string di) ) ) |> SRSet.elements @@ -400,7 +401,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.SR.reset (Debuginfo.to_string di) sr + C.SR.reset (Debug_info.to_string di) sr let update_snapshot_info_src () ~dbg ~sr ~vdi ~url ~dest ~dest_vdi ~snapshot_pairs = @@ -418,8 +419,8 @@ module Mux = struct |> String.concat "; " |> Printf.sprintf "[%s]" ) ; - Storage_migrate.update_snapshot_info_src ~dbg:(Debuginfo.to_string di) ~sr - ~vdi ~url ~dest ~dest_vdi ~snapshot_pairs + Storage_migrate.update_snapshot_info_src ~dbg:(Debug_info.to_string di) + ~sr ~vdi ~url ~dest ~dest_vdi ~snapshot_pairs let update_snapshot_info_dest () ~dbg ~sr ~vdi ~src_vdi ~snapshot_pairs = with_dbg ~name:"SR.update_snapshot_info_dest" ~dbg @@ fun di -> @@ -439,7 +440,7 @@ module Mux = struct |> String.concat "; " |> Printf.sprintf "[%s]" ) ; - C.SR.update_snapshot_info_dest (Debuginfo.to_string di) sr vdi src_vdi + C.SR.update_snapshot_info_dest (Debug_info.to_string di) sr vdi src_vdi snapshot_pairs end @@ -451,7 +452,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.create (Debuginfo.to_string di) sr vdi_info + C.VDI.create (Debug_info.to_string di) sr vdi_info let set_name_label () ~dbg ~sr ~vdi ~new_name_label = with_dbg ~name:"VDI.set_name_label" ~dbg @@ fun di -> @@ -460,7 +461,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.set_name_label (Debuginfo.to_string di) sr vdi new_name_label + C.VDI.set_name_label (Debug_info.to_string di) sr vdi new_name_label let set_name_description () ~dbg ~sr ~vdi ~new_name_description = with_dbg ~name:"VDI.set_name_description" ~dbg @@ fun di -> @@ -470,7 +471,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.set_name_description (Debuginfo.to_string di) sr vdi + C.VDI.set_name_description (Debug_info.to_string di) sr vdi new_name_description let snapshot () ~dbg ~sr ~vdi_info = @@ -480,7 +481,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - try C.VDI.snapshot (Debuginfo.to_string di) sr vdi_info + try C.VDI.snapshot (Debug_info.to_string di) sr vdi_info with Storage_interface.Storage_error (Activated_on_another_host uuid) -> Server_helpers.exec_with_new_task "smapiv2.snapshot.activated" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -500,7 +501,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.clone (Debuginfo.to_string di) sr vdi_info + C.VDI.clone (Debug_info.to_string di) sr vdi_info let resize () ~dbg ~sr ~vdi ~new_size = with_dbg ~name:"VDI.resize" ~dbg @@ fun di -> @@ -509,7 +510,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.resize (Debuginfo.to_string di) sr vdi new_size + C.VDI.resize (Debug_info.to_string di) sr vdi new_size let destroy () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.destroy" ~dbg @@ fun di -> @@ -517,7 +518,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.destroy (Debuginfo.to_string di) sr vdi + C.VDI.destroy (Debug_info.to_string di) sr vdi let stat () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.stat" ~dbg @@ fun di -> @@ -525,7 +526,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.stat (Debuginfo.to_string di) sr vdi + C.VDI.stat (Debug_info.to_string di) sr vdi let introduce () ~dbg ~sr ~uuid ~sm_config ~location = with_dbg ~name:"VDI.introduce" ~dbg @@ fun di -> @@ -536,7 +537,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.introduce (Debuginfo.to_string di) sr uuid sm_config location + C.VDI.introduce (Debug_info.to_string di) sr uuid sm_config location let set_persistent () ~dbg ~sr ~vdi ~persistent = with_dbg ~name:"VDI.set_persistent" ~dbg @@ fun di -> @@ -545,7 +546,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.set_persistent (Debuginfo.to_string di) sr vdi persistent + C.VDI.set_persistent (Debug_info.to_string di) sr vdi persistent let epoch_begin () ~dbg ~sr ~vdi ~vm ~persistent = with_dbg ~name:"VDI.epoch_begin" ~dbg @@ fun di -> @@ -554,7 +555,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.epoch_begin (Debuginfo.to_string di) sr vdi vm persistent + C.VDI.epoch_begin (Debug_info.to_string di) sr vdi vm persistent let attach () ~dbg ~dp ~sr ~vdi ~read_write = with_dbg ~name:"VDI.attach" ~dbg @@ fun di -> @@ -566,7 +567,7 @@ module Mux = struct let vm = Vm.of_string "0" in DP_info.write dp DP_info.{sr; vdi; vm; read_write} ; let backend = - C.VDI.attach3 (Debuginfo.to_string di) dp sr vdi vm read_write + C.VDI.attach3 (Debug_info.to_string di) dp sr vdi vm read_write in (* VDI.attach2 should be used instead, VDI.attach is only kept for backwards-compatibility, because older xapis call Remote.VDI.attach during SXM. @@ -615,17 +616,17 @@ module Mux = struct end)) in let vm = Vm.of_string "0" in DP_info.write dp DP_info.{sr; vdi; vm; read_write} ; - C.VDI.attach3 (Debuginfo.to_string di) dp sr vdi vm read_write + C.VDI.attach3 (Debug_info.to_string di) dp sr vdi vm read_write let attach3 () ~dbg ~dp ~sr ~vdi ~vm ~read_write = with_dbg ~name:"VDI.attach3" ~dbg @@ fun di -> info "VDI.attach3 dbg:%s dp:%s sr:%s vdi:%s vm:%s read_write:%b" - di.Debuginfo.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) read_write ; + di.Debug_info.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) read_write ; let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in DP_info.write dp DP_info.{sr; vdi; vm; read_write} ; - C.VDI.attach3 (Debuginfo.to_string di) dp sr vdi vm read_write + C.VDI.attach3 (Debug_info.to_string di) dp sr vdi vm read_write let activate () ~dbg ~dp ~sr ~vdi = with_dbg ~name:"VDI.activate" ~dbg @@ fun di -> @@ -634,7 +635,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.activate (Debuginfo.to_string di) dp sr vdi + C.VDI.activate (Debug_info.to_string di) dp sr vdi let activate3 () ~dbg ~dp ~sr ~vdi ~vm = with_dbg ~name:"VDI.activate3" ~dbg @@ fun di -> @@ -654,10 +655,10 @@ module Mux = struct if (not read_write) && sr_has_capability sr Smint.Vdi_activate_readonly then ( info "The VDI was attached read-only: calling activate_readonly" ; - C.VDI.activate_readonly (Debuginfo.to_string di) dp sr vdi vm + C.VDI.activate_readonly (Debug_info.to_string di) dp sr vdi vm ) else ( info "The VDI was attached read/write: calling activate3" ; - C.VDI.activate3 (Debuginfo.to_string di) dp sr vdi vm + C.VDI.activate3 (Debug_info.to_string di) dp sr vdi vm ) let activate_readonly () ~dbg ~dp ~sr ~vdi ~vm = @@ -667,7 +668,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.activate_readonly (Debuginfo.to_string di) dp sr vdi vm + C.VDI.activate_readonly (Debug_info.to_string di) dp sr vdi vm let deactivate () ~dbg ~dp ~sr ~vdi ~vm = with_dbg ~name:"VDI.deativate" ~dbg @@ fun di -> @@ -676,7 +677,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.deactivate (Debuginfo.to_string di) dp sr vdi vm + C.VDI.deactivate (Debug_info.to_string di) dp sr vdi vm let detach () ~dbg ~dp ~sr ~vdi ~vm = with_dbg ~name:"VDI.detach" ~dbg @@ fun di -> @@ -685,7 +686,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.detach (Debuginfo.to_string di) dp sr vdi vm ; + C.VDI.detach (Debug_info.to_string di) dp sr vdi vm ; DP_info.delete dp let epoch_end () ~dbg ~sr ~vdi ~vm = @@ -695,7 +696,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.epoch_end (Debuginfo.to_string di) sr vdi vm + C.VDI.epoch_end (Debug_info.to_string di) sr vdi vm let get_by_name () ~dbg ~sr ~name = with_dbg ~name:"VDI.get_by_name" ~dbg @@ fun di -> @@ -703,7 +704,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.get_by_name (Debuginfo.to_string di) sr name + C.VDI.get_by_name (Debug_info.to_string di) sr name let set_content_id () ~dbg ~sr ~vdi ~content_id = with_dbg ~name:"VDI.set_content_id" ~dbg @@ fun di -> @@ -712,7 +713,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.set_content_id (Debuginfo.to_string di) sr vdi content_id + C.VDI.set_content_id (Debug_info.to_string di) sr vdi content_id let similar_content () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.similar_content" ~dbg @@ fun di -> @@ -721,7 +722,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.similar_content (Debuginfo.to_string di) sr vdi + C.VDI.similar_content (Debug_info.to_string di) sr vdi let compose () ~dbg ~sr ~vdi1 ~vdi2 = with_dbg ~name:"VDI.compose" ~dbg @@ fun di -> @@ -730,7 +731,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.compose (Debuginfo.to_string di) sr vdi1 vdi2 + C.VDI.compose (Debug_info.to_string di) sr vdi1 vdi2 let add_to_sm_config () ~dbg ~sr ~vdi ~key ~value = with_dbg ~name:"VDI.add_to_sm_config" ~dbg @@ fun di -> @@ -739,7 +740,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.add_to_sm_config (Debuginfo.to_string di) sr vdi key value + C.VDI.add_to_sm_config (Debug_info.to_string di) sr vdi key value let remove_from_sm_config () ~dbg ~sr ~vdi ~key = with_dbg ~name:"VDI.remove_from_sm_config" ~dbg @@ fun di -> @@ -748,7 +749,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.remove_from_sm_config (Debuginfo.to_string di) sr vdi key + C.VDI.remove_from_sm_config (Debug_info.to_string di) sr vdi key let get_url () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.get_url" ~dbg @@ fun di -> @@ -756,7 +757,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.get_url (Debuginfo.to_string di) sr vdi + C.VDI.get_url (Debug_info.to_string di) sr vdi let enable_cbt () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.enabled_cbt" ~dbg @@ fun di -> @@ -764,7 +765,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.enable_cbt (Debuginfo.to_string di) sr vdi + C.VDI.enable_cbt (Debug_info.to_string di) sr vdi let disable_cbt () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.disable_cbt" ~dbg @@ fun di -> @@ -772,7 +773,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.disable_cbt (Debuginfo.to_string di) sr vdi + C.VDI.disable_cbt (Debug_info.to_string di) sr vdi let data_destroy () ~dbg ~sr ~vdi = with_dbg ~name:"VDI.data_destroy" ~dbg @@ fun di -> @@ -780,7 +781,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.data_destroy (Debuginfo.to_string di) sr vdi + C.VDI.data_destroy (Debug_info.to_string di) sr vdi let list_changed_blocks () ~dbg ~sr ~vdi_from ~vdi_to = with_dbg ~name:"VDI.list_changed_blocks" ~dbg @@ fun di -> @@ -789,7 +790,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - C.VDI.list_changed_blocks (Debuginfo.to_string di) sr vdi_from vdi_to + C.VDI.list_changed_blocks (Debug_info.to_string di) sr vdi_from vdi_to end let get_by_name () ~dbg ~name = @@ -804,7 +805,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - (sr, C.VDI.get_by_name (Debuginfo.to_string di) sr name) + (sr, C.VDI.get_by_name (Debug_info.to_string di) sr name) | [name] -> ( match success_or choose @@ -812,7 +813,7 @@ module Mux = struct let module C = StorageAPI (Idl.Exn.GenClient (struct let rpc = of_sr sr end)) in - (sr, C.VDI.get_by_name (Debuginfo.to_string di) sr name) + (sr, C.VDI.get_by_name (Debug_info.to_string di) sr name) ) ) with diff --git a/ocaml/xapi/storage_smapiv1.ml b/ocaml/xapi/storage_smapiv1.ml index c7bdd772a28..b6abfdcd2c3 100644 --- a/ocaml/xapi/storage_smapiv1.ml +++ b/ocaml/xapi/storage_smapiv1.ml @@ -28,13 +28,13 @@ let s_of_sr = Sr.string_of let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute let with_dbg ~name ~dbg f = - Debuginfo.with_dbg ~module_name:"SMAPIv1" ~name ~dbg f + Debug_info.with_dbg ~module_name:"SMAPIv1" ~name ~dbg f (* Find a VDI given a storage-layer SR and VDI *) let find_vdi ~__context sr vdi = let sr = s_of_sr sr in let vdi = s_of_vdi vdi in - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let sr = Db.SR.get_by_uuid ~__context ~uuid:sr in match Db.VDI.get_records_where ~__context @@ -53,7 +53,7 @@ let find_vdi ~__context sr vdi = (* Find a VDI reference given a name *) let find_content ~__context ?sr name = (* PR-1255: the backend should do this for us *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let expr = Option.fold ~none:True ~some:(fun sr -> @@ -395,7 +395,7 @@ module SMAPIv1 : Server_impl = struct Sm.call_sm_functions ~__context ~sR:sr (fun device_config _type -> try Sm.sr_scan ~dbg device_config _type sr ; - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let vdis = Db.VDI.get_records_where ~__context ~expr:(Eq (Field "SR", Literal (Ref.string_of sr))) @@ -498,7 +498,7 @@ module SMAPIv1 : Server_impl = struct let epoch_begin _context ~dbg ~sr ~vdi ~vm:_ ~persistent:_ = with_dbg ~name:"VDI.epoch_begin" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi "VDI.epoch_begin" (fun device_config _type sr self -> @@ -509,7 +509,7 @@ module SMAPIv1 : Server_impl = struct let attach2 _context ~dbg ~dp:_ ~sr ~vdi ~read_write = with_dbg ~name:"VDI.attach2" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try let backend = for_vdi ~dbg ~sr ~vdi "VDI.attach2" @@ -575,7 +575,7 @@ module SMAPIv1 : Server_impl = struct let attach3 context ~dbg ~dp ~sr ~vdi ~vm:_ ~read_write = with_dbg ~name:"VDI.attach3" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in (*Throw away vm argument as does nothing in SMAPIv1*) attach2 context ~dbg ~dp ~sr ~vdi ~read_write @@ -586,7 +586,7 @@ module SMAPIv1 : Server_impl = struct let activate _context ~dbg ~dp ~sr ~vdi = with_dbg ~name:"VDI.activate" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try let read_write = with_lock vdi_read_write_m (fun () -> @@ -616,14 +616,14 @@ module SMAPIv1 : Server_impl = struct let activate3 context ~dbg ~dp ~sr ~vdi ~vm:_ = with_dbg ~name:"VDI.activate3" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in activate context ~dbg ~dp ~sr ~vdi let activate_readonly = activate3 let deactivate _context ~dbg ~dp ~sr ~vdi ~vm:_ = with_dbg ~name:"VDI.deactivate" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi "VDI.deactivate" (fun device_config _type sr self -> @@ -647,7 +647,7 @@ module SMAPIv1 : Server_impl = struct let detach _context ~dbg ~dp:_ ~sr ~vdi ~vm:_ = with_dbg ~name:"VDI.detach" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi "VDI.detach" (fun device_config _type sr self -> Sm.vdi_detach ~dbg device_config _type sr self ; @@ -670,7 +670,7 @@ module SMAPIv1 : Server_impl = struct let epoch_end _context ~dbg ~sr ~vdi ~vm:_ = with_dbg ~name:"VDI.epoch_end" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi "VDI.epoch_end" (fun device_config _type sr self -> @@ -693,7 +693,7 @@ module SMAPIv1 : Server_impl = struct let create _context ~dbg ~sr ~(vdi_info : Storage_interface.vdi_info) = with_dbg ~name:"VDI.create" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.create" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -736,7 +736,7 @@ module SMAPIv1 : Server_impl = struct let snapshot_and_clone call_name call_f is_a_snapshot _context ~dbg ~sr ~vdi_info = with_dbg ~name:"VDI.snapshot_and_clone" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task call_name ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -802,7 +802,7 @@ module SMAPIv1 : Server_impl = struct let set_name_label _context ~dbg ~sr ~vdi ~new_name_label = with_dbg ~name:"VDI.set_name_label" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Server_helpers.exec_with_new_task "VDI.set_name_label" ~subtask_of:(Ref.of_string dbg) (fun __context -> let self, _ = find_vdi ~__context sr vdi in @@ -811,7 +811,7 @@ module SMAPIv1 : Server_impl = struct let set_name_description _context ~dbg ~sr ~vdi ~new_name_description = with_dbg ~name:"VDI.set_name_description" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Server_helpers.exec_with_new_task "VDI.set_name_description" ~subtask_of:(Ref.of_string dbg) (fun __context -> let self, _ = find_vdi ~__context sr vdi in @@ -821,7 +821,7 @@ module SMAPIv1 : Server_impl = struct let resize _context ~dbg ~sr ~vdi ~new_size = with_dbg ~name:"VDI.resize" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try let vi = for_vdi ~dbg ~sr ~vdi "VDI.resize" (fun device_config _type sr self -> @@ -846,7 +846,7 @@ module SMAPIv1 : Server_impl = struct let destroy _context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.destroy" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi "VDI.destroy" (fun device_config _type sr self -> Sm.vdi_delete ~dbg device_config _type sr self @@ -864,7 +864,7 @@ module SMAPIv1 : Server_impl = struct let stat _context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.stat" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.stat" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -880,7 +880,7 @@ module SMAPIv1 : Server_impl = struct let introduce _context ~dbg ~sr ~uuid ~sm_config ~location = with_dbg ~name:"VDI.introduce" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.introduce" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -900,7 +900,7 @@ module SMAPIv1 : Server_impl = struct let set_persistent _context ~dbg ~sr ~vdi ~persistent = with_dbg ~name:"VDI.set_persistent" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.set_persistent" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -930,7 +930,7 @@ module SMAPIv1 : Server_impl = struct let get_by_name _context ~dbg ~sr ~name = with_dbg ~name:"VDI.get_by_name" ~dbg @@ fun di -> info "VDI.get_by_name dbg:%s sr:%s name:%s" di.log (s_of_sr sr) name ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in (* PR-1255: the backend should do this for us *) Server_helpers.exec_with_new_task "VDI.get_by_name" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -949,7 +949,7 @@ module SMAPIv1 : Server_impl = struct with_dbg ~name:"VDI.set_content_id" ~dbg @@ fun di -> info "VDI.get_by_content dbg:%s sr:%s vdi:%s content_id:%s" di.log (s_of_sr sr) (s_of_vdi vdi) content_id ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in (* PR-1255: the backend should do this for us *) Server_helpers.exec_with_new_task "VDI.set_content_id" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -963,7 +963,7 @@ module SMAPIv1 : Server_impl = struct with_dbg ~name:"VDI.similar_content" ~dbg @@ fun di -> info "VDI.similar_content dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Server_helpers.exec_with_new_task "VDI.similar_content" ~subtask_of:(Ref.of_string dbg) (fun __context -> (* PR-1255: the backend should do this for us. *) @@ -979,7 +979,7 @@ module SMAPIv1 : Server_impl = struct let compare = compare end) in let _vhdparent = "vhd-parent" in - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let all = Db.VDI.get_records_where ~__context ~expr:(Eq (Field "SR", Literal (Ref.string_of sr_ref))) @@ -1075,7 +1075,7 @@ module SMAPIv1 : Server_impl = struct with_dbg ~name:"VDI.compose" ~dbg @@ fun di -> info "VDI.compose dbg:%s sr:%s vdi1:%s vdi2:%s" di.log (s_of_sr sr) (s_of_vdi vdi1) (s_of_vdi vdi2) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.compose" ~subtask_of:(Ref.of_string dbg) (fun __context -> @@ -1103,7 +1103,7 @@ module SMAPIv1 : Server_impl = struct with_dbg ~name:"VDI.add_to_sm_config" ~dbg @@ fun di -> info "VDI.add_to_sm_config dbg:%s sr:%s vdi:%s key:%s value:%s" di.log (s_of_sr sr) (s_of_vdi vdi) key value ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Server_helpers.exec_with_new_task "VDI.add_to_sm_config" ~subtask_of:(Ref.of_string dbg) (fun __context -> let self = find_vdi ~__context sr vdi |> fst in @@ -1114,7 +1114,7 @@ module SMAPIv1 : Server_impl = struct with_dbg ~name:"VDI.remove_from_sm_config" ~dbg @@ fun di -> info "VDI.remove_from_sm_config dbg:%s sr:%s vdi:%s key:%s" di.log (s_of_sr sr) (s_of_vdi vdi) key ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Server_helpers.exec_with_new_task "VDI.remove_from_sm_config" ~subtask_of:(Ref.of_string dbg) (fun __context -> let self = find_vdi ~__context sr vdi |> fst in @@ -1124,7 +1124,7 @@ module SMAPIv1 : Server_impl = struct let get_url _context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.get_url" ~dbg @@ fun di -> info "VDI.get_url dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in (* XXX: PR-1255: tapdisk shouldn't hardcode xapi urls *) (* peer_ip/session_ref/vdi_ref *) Server_helpers.exec_with_new_task "VDI.get_url" @@ -1145,7 +1145,7 @@ module SMAPIv1 : Server_impl = struct let call_cbt_function _context ~f ~f_name ~dbg ~sr ~vdi = with_dbg ~name:"VDI.call_cbt_function" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try for_vdi ~dbg ~sr ~vdi f_name (fun device_config _type sr self -> f ~dbg device_config _type sr self @@ -1177,7 +1177,7 @@ module SMAPIv1 : Server_impl = struct let list_changed_blocks _context ~dbg ~sr ~vdi_from ~vdi_to = with_dbg ~name:"VDI.list_changed_blocks" ~dbg @@ fun di -> - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in try Server_helpers.exec_with_new_task "VDI.list_changed_blocks" ~subtask_of:(Ref.of_string dbg) (fun __context -> diff --git a/ocaml/xapi/storage_smapiv1_wrapper.ml b/ocaml/xapi/storage_smapiv1_wrapper.ml index b3d748c7ad0..8fde6ec60bd 100644 --- a/ocaml/xapi/storage_smapiv1_wrapper.ml +++ b/ocaml/xapi/storage_smapiv1_wrapper.ml @@ -93,8 +93,8 @@ let indent x = " " ^ x let string_of_date x = Date.to_string (Date.of_float x) let with_dbg ~name ~dbg f = - Debuginfo.with_dbg ~with_thread:true ~module_name:"SMAPIv1-Wrapper" ~name ~dbg - f + Debug_info.with_dbg ~with_thread:true ~module_name:"SMAPIv1-Wrapper" ~name + ~dbg f let rpc_fns keyty valty = let rpc_of hashtbl = @@ -589,7 +589,7 @@ functor with_dbg ~name:"VDI.epoch_begin" ~dbg @@ fun di -> info "VDI.epoch_begin dbg:%s sr:%s vdi:%s vm:%s persistent:%b" di.log (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) persistent ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> @@ -601,7 +601,7 @@ functor with_dbg ~name:"VDI.attach3" ~dbg @@ fun di -> info "VDI.attach3 dbg:%s dp:%s sr:%s vdi:%s vm:%s read_write:%b" di.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) read_write ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> @@ -625,7 +625,7 @@ functor (s_of_sr sr) (s_of_vdi vdi) read_write ; (*Support calls from older XAPI during migrate operation (dom 0 attach )*) let vm = vm_of_s "0" in - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in attach3 context ~dbg ~dp ~sr ~vdi ~vm ~read_write let attach context ~dbg ~dp ~sr ~vdi ~read_write = @@ -633,7 +633,7 @@ functor info "VDI.attach dbg:%s dp:%s sr:%s vdi:%s read_write:%b" di.log dp (s_of_sr sr) (s_of_vdi vdi) read_write ; let vm = vm_of_s "0" in - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let backend = attach3 context ~dbg ~dp ~sr ~vdi ~vm ~read_write in (* VDI.attach2 should be used instead, VDI.attach is only kept for backwards-compatibility, because older xapis call Remote.VDI.attach during SXM. @@ -677,7 +677,7 @@ functor with_dbg ~name:"VDI.activate3" ~dbg @@ fun di -> info "VDI.activate3 dbg:%s dp:%s sr:%s vdi:%s vm:%s" di.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> @@ -696,14 +696,14 @@ functor (s_of_vdi vdi) ; (*Support calls from older XAPI during migrate operation (dom 0 attach )*) let vm = vm_of_s "0" in - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in activate3 context ~dbg ~dp ~sr ~vdi ~vm let deactivate context ~dbg ~dp ~sr ~vdi ~vm = with_dbg ~name:"VDI.deactivate" ~dbg @@ fun di -> info "VDI.deactivate dbg:%s dp:%s sr:%s vdi:%s vm:%s" di.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> @@ -718,7 +718,7 @@ functor with_dbg ~name:"VDI.detach" ~dbg @@ fun di -> info "VDI.detach dbg:%s dp:%s sr:%s vdi:%s vm:%s" di.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> @@ -733,7 +733,7 @@ functor with_dbg ~name:"VDI.epoch_end" ~dbg @@ fun di -> info "VDI.epoch_end dbg:%s sr:%s vdi:%s vm:%s" di.log (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi ~vm Vdi.leaked (fun () -> Impl.VDI.epoch_end context ~dbg ~sr ~vdi ~vm @@ -744,7 +744,7 @@ functor with_dbg ~name:"VDI.create" ~dbg @@ fun di -> info "VDI.create dbg:%s sr:%s vdi_info:%s" di.log (s_of_sr sr) (string_of_vdi_info vdi_info) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in let result = Impl.VDI.create context ~dbg ~sr ~vdi_info in match result with | {virtual_size= virtual_size'; _} @@ -770,7 +770,7 @@ functor with_dbg ~name:call_name ~dbg @@ fun di -> info "%s dbg:%s sr:%s vdi_info:%s" call_name di.log (s_of_sr sr) (string_of_vdi_info vdi_info) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi_info.vdi (fun () -> call_f context ~dbg ~sr ~vdi_info) let snapshot = snapshot_and_clone "VDI.snapshot" Impl.VDI.snapshot @@ -781,7 +781,7 @@ functor with_dbg ~name:"VDI.set_name_label" ~dbg @@ fun di -> info "VDI.set_name_label dbg:%s sr:%s vdi:%s new_name_label:%s" di.log (s_of_sr sr) (s_of_vdi vdi) new_name_label ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.set_name_label context ~dbg ~sr ~vdi ~new_name_label ) @@ -791,7 +791,7 @@ functor info "VDI.set_name_description dbg:%s sr:%s vdi:%s new_name_description:%s" di.log (s_of_sr sr) (s_of_vdi vdi) new_name_description ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.set_name_description context ~dbg ~sr ~vdi ~new_name_description @@ -801,7 +801,7 @@ functor with_dbg ~name:"VDI.resize" ~dbg @@ fun di -> info "VDI.resize dbg:%s sr:%s vdi:%s new_size:%Ld" di.log (s_of_sr sr) (s_of_vdi vdi) new_size ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.resize context ~dbg ~sr ~vdi ~new_size ) @@ -810,7 +810,7 @@ functor with_dbg ~name:call_name ~dbg @@ fun di -> info "%s dbg:%s sr:%s vdi:%s" call_name di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> remove_datapaths_andthen_nolock context ~dbg ~sr ~vdi Vdi.all (fun () -> call_f context ~dbg ~sr ~vdi @@ -825,7 +825,7 @@ functor let stat context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.stat" ~dbg @@ fun di -> info "VDI.stat dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.stat context ~dbg ~sr ~vdi let introduce context ~dbg ~sr ~uuid ~sm_config ~location = @@ -834,14 +834,14 @@ functor di.log (s_of_sr sr) uuid (String.concat ", " (List.map (fun (k, v) -> k ^ ":" ^ v) sm_config)) location ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.introduce context ~dbg ~sr ~uuid ~sm_config ~location let set_persistent context ~dbg ~sr ~vdi ~persistent = with_dbg ~name:"VDI.set_persistent" ~dbg @@ fun di -> info "VDI.set_persistent dbg:%s sr:%s vdi:%s persistent:%b" di.log (s_of_sr sr) (s_of_vdi vdi) persistent ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.set_persistent context ~dbg ~sr ~vdi ~persistent ) @@ -849,62 +849,62 @@ functor let get_by_name context ~dbg ~sr ~name = with_dbg ~name:"VDI.get_by_name" ~dbg @@ fun di -> info "VDI.get_by_name dbg:%s sr:%s name:%s" di.log (s_of_sr sr) name ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.get_by_name context ~dbg ~sr ~name let set_content_id context ~dbg ~sr ~vdi ~content_id = with_dbg ~name:"VDI.set_content_id" ~dbg @@ fun di -> info "VDI.set_content_id dbg:%s sr:%s vdi:%s content_id:%s" di.log (s_of_sr sr) (s_of_vdi vdi) content_id ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.set_content_id context ~dbg ~sr ~vdi ~content_id let similar_content context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.similar_content" ~dbg @@ fun di -> info "VDI.similar_content dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.similar_content context ~dbg ~sr ~vdi let compose context ~dbg ~sr ~vdi1 ~vdi2 = with_dbg ~name:"VDI.compose" ~dbg @@ fun di -> info "VDI.compose dbg:%s sr:%s vdi1:%s vdi2:%s" di.log (s_of_sr sr) (s_of_vdi vdi1) (s_of_vdi vdi2) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.compose context ~dbg ~sr ~vdi1 ~vdi2 let add_to_sm_config context ~dbg ~sr ~vdi ~key ~value = with_dbg ~name:"VDI.add_to_sm_config" ~dbg @@ fun di -> info "VDI.add_to_sm_config dbg:%s sr:%s vdi:%s key:%s value:%s" di.log (s_of_sr sr) (s_of_vdi vdi) key value ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.add_to_sm_config context ~dbg ~sr ~vdi ~key ~value let remove_from_sm_config context ~dbg ~sr ~vdi ~key = with_dbg ~name:"VDI.remove_from_sm_config" ~dbg @@ fun di -> info "VDI.remove_from_sm_config dbg:%s sr:%s vdi:%s key:%s" di.log (s_of_sr sr) (s_of_vdi vdi) key ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.remove_from_sm_config context ~dbg ~sr ~vdi ~key let get_url context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.get_url" ~dbg @@ fun di -> info "VDI.get_url dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.VDI.get_url context ~dbg ~sr ~vdi let enable_cbt context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.enabled_cbt" ~dbg @@ fun di -> info "VDI.enable_cbt dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.enable_cbt context ~dbg ~sr ~vdi) let disable_cbt context ~dbg ~sr ~vdi = with_dbg ~name:"VDI.disable_cbt" ~dbg @@ fun di -> info "VDI.disable_cbt dbg:%s sr:%s vdi:%s" di.log (s_of_sr sr) (s_of_vdi vdi) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi (fun () -> Impl.VDI.disable_cbt context ~dbg ~sr ~vdi) (** The [sr] parameter is the SR of VDI [vdi_to]. *) @@ -912,7 +912,7 @@ functor with_dbg ~name:"VDI.list_changed_blocks" ~dbg @@ fun di -> info "VDI.list_changed_blocks dbg:%s sr:%s vdi_from:%s vdi_to:%s" di.log (s_of_sr sr) (s_of_vdi vdi_from) (s_of_vdi vdi_to) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_vdi sr vdi_to (fun () -> Impl.VDI.list_changed_blocks context ~dbg ~sr ~vdi_from ~vdi_to ) @@ -921,7 +921,7 @@ functor let get_by_name context ~dbg ~name = with_dbg ~name:"get_by_name" ~dbg @@ fun di -> debug "get_by_name dbg:%s name:%s" di.log name ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.get_by_name context ~dbg ~name module DATA = struct @@ -1107,7 +1107,7 @@ functor with_dbg ~name:"DP.destroy2" ~dbg @@ fun di -> info "DP.destroy2 dbg:%s dp:%s sr:%s vdi:%s vm:%s allow_leak:%b" di.log dp (s_of_sr sr) (s_of_vdi vdi) (s_of_vm vm) allow_leak ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in destroy' context ~dbg ~dp ~allow_leak let diagnostics _context () = @@ -1183,7 +1183,7 @@ functor let probe context ~dbg ~queue ~device_config ~sm_config = with_dbg ~name:"SR.probe" ~dbg @@ fun di -> info "SR.probe dbg:%s" di.log ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.SR.probe context ~dbg ~queue ~device_config ~sm_config let list _context ~dbg = @@ -1194,7 +1194,7 @@ functor let stat context ~dbg ~sr = with_dbg ~name:"SR.stat" ~dbg @@ fun di -> info "SR.stat dbg:%s sr:%s" di.log (s_of_sr sr) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_sr sr (fun () -> match Host.find sr !Host.host with | None -> @@ -1206,7 +1206,7 @@ functor let scan context ~dbg ~sr = with_dbg ~name:"SR.scan" ~dbg @@ fun di -> info "SR.scan dbg:%s sr:%s" di.log (s_of_sr sr) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_sr sr (fun () -> match Host.find sr !Host.host with | None -> @@ -1220,7 +1220,7 @@ functor with_dbg ~name:"SR.create" ~dbg @@ fun di -> info "SR.create dbg:%s sr:%s name_label:%s" di.log (s_of_sr sr) name_label ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_sr sr (fun () -> match Host.find sr !Host.host with | None -> @@ -1235,14 +1235,14 @@ functor with_dbg ~name:"SR.set_name_label" ~dbg @@ fun di -> info "SR.set_name_label dbg:%s sr:%s new_name_label:%s" di.log (s_of_sr sr) new_name_label ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.SR.set_name_label context ~dbg ~sr ~new_name_label let set_name_description context ~dbg ~sr ~new_name_description = with_dbg ~name:"SR.set_name_description" ~dbg @@ fun di -> info "SR.set_name_description dbg:%s sr:%s new_name_description:%s" di.log (s_of_sr sr) new_name_description ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.SR.set_name_description context ~dbg ~sr ~new_name_description let attach context ~dbg ~sr ~device_config = @@ -1271,7 +1271,7 @@ functor in info "SR.attach dbg:%s sr:%s device_config:[%s]" di.log (s_of_sr sr) device_config_str ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in with_sr sr (fun () -> match Host.find sr !Host.host with | None -> @@ -1321,7 +1321,7 @@ functor let detach context ~dbg ~sr = with_dbg ~name:"SR.detach" ~dbg @@ fun di -> info "SR.detach dbg:%s sr:%s" di.log (s_of_sr sr) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in detach_destroy_common context ~dbg ~sr Impl.SR.detach let reset _context ~dbg ~sr = @@ -1336,7 +1336,7 @@ functor let destroy context ~dbg ~sr = with_dbg ~name:"SR.destroy" ~dbg @@ fun di -> info "SR.destroy dbg:%s sr:%s" di.log (s_of_sr sr) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in detach_destroy_common context ~dbg ~sr Impl.SR.destroy let update_snapshot_info_src context ~dbg ~sr ~vdi ~url ~dest ~dest_vdi @@ -1356,7 +1356,7 @@ functor |> String.concat "; " |> Printf.sprintf "[%s]" ) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.SR.update_snapshot_info_src context ~dbg ~sr ~vdi ~url ~dest ~dest_vdi ~snapshot_pairs @@ -1376,7 +1376,7 @@ functor |> String.concat "; " |> Printf.sprintf "[%s]" ) ; - let dbg = Debuginfo.to_string di in + let dbg = Debug_info.to_string di in Impl.SR.update_snapshot_info_dest context ~dbg ~sr ~vdi ~src_vdi ~snapshot_pairs end diff --git a/ocaml/xapi/sync_networking.ml b/ocaml/xapi/sync_networking.ml index fb0d9ed9ec6..6046a14782f 100644 --- a/ocaml/xapi/sync_networking.ml +++ b/ocaml/xapi/sync_networking.ml @@ -13,7 +13,6 @@ *) open Client -open Db_filter_types module D = Debug.Make (struct let name = "sync_networking" end) diff --git a/ocaml/xapi/vhd_tool_wrapper.ml b/ocaml/xapi/vhd_tool_wrapper.ml index 6fe4e40d70d..ee1151febb5 100644 --- a/ocaml/xapi/vhd_tool_wrapper.ml +++ b/ocaml/xapi/vhd_tool_wrapper.ml @@ -117,7 +117,7 @@ let receive progress_cb format protocol (s : Unix.file_descr) the driver domain corresponding to the frontend device [path] in this domain. *) let find_backend_device path = try - let open Xenstore in + let open Ezxenstore_core.Xenstore in (* If we're looking at a xen frontend device, see if the backend is in the same domain. If so check if it looks like a .vhd *) let rdev = (Unix.stat path).Unix.st_rdev in diff --git a/ocaml/xapi/xapi.ml b/ocaml/xapi/xapi.ml index ac65142e0c6..105fd9db581 100644 --- a/ocaml/xapi/xapi.ml +++ b/ocaml/xapi/xapi.ml @@ -25,7 +25,9 @@ let finally = Xapi_stdext_pervasives.Pervasiveext.finally open Auth_signature open Extauth -open Db_filter_types +open Xapi_database +open Xapi_database.Db_filter_types +open Xapi_database.Db_cache_types module D = Debug.Make (struct let name = "xapi" end) @@ -62,8 +64,6 @@ let database_ready_for_clients = ref false (* while this is false, client calls will be blocked *) -open Db_cache_types - (** Populate the database from the default connections or the restore db file (if it is present). Perform an initial flush to the database connections which were already setup, then delete the restore file. *) diff --git a/ocaml/xapi/xapi_bond.ml b/ocaml/xapi/xapi_bond.ml index 0a78bef2501..20764394b36 100644 --- a/ocaml/xapi/xapi_bond.ml +++ b/ocaml/xapi/xapi_bond.ml @@ -14,7 +14,7 @@ module D = Debug.Make (struct let name = "xapi_bond" end) open D -open Db_filter_types +open Xapi_database.Db_filter_types (* Returns the name of a new bond device, which is the string "bond" followed * by the smallest integer > 0 that does not yet appear in a bond name on this host. *) diff --git a/ocaml/xapi/xapi_cluster_host.ml b/ocaml/xapi/xapi_cluster_host.ml index f026e782f2e..17c87419bdd 100644 --- a/ocaml/xapi/xapi_cluster_host.ml +++ b/ocaml/xapi/xapi_cluster_host.ml @@ -417,7 +417,7 @@ let sync_required ~__context ~host = None | [(cluster_ref, cluster_rec)] -> ( let expr = - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq (Field "host", Literal (Ref.string_of host)) , Eq (Field "cluster", Literal (Ref.string_of cluster_ref)) diff --git a/ocaml/xapi/xapi_clustering.ml b/ocaml/xapi/xapi_clustering.ml index f9a78fef05f..dca5efdd986 100644 --- a/ocaml/xapi/xapi_clustering.ml +++ b/ocaml/xapi/xapi_clustering.ml @@ -52,7 +52,7 @@ let pif_of_host ~__context (network : API.ref_network) (host : API.ref_host) = let pifs = Db.PIF.get_records_where ~__context ~expr: - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq (Literal (Ref.string_of host), Field "host") , Eq (Literal (Ref.string_of network), Field "network") @@ -118,10 +118,12 @@ let handle_error = function failwith ("Unix Error: " ^ message) let assert_cluster_host_can_be_created ~__context ~host = - match - Db.Cluster_host.get_refs_where ~__context - ~expr:Db_filter_types.(Eq (Literal (Ref.string_of host), Field "host")) - with + let expr = + Xapi_database.Db_filter_types.( + Eq (Literal (Ref.string_of host), Field "host") + ) + in + match Db.Cluster_host.get_refs_where ~__context ~expr with | [] -> () | _ -> @@ -137,10 +139,10 @@ let assert_cluster_host_can_be_created ~__context ~host = [get_required_cluster_stacks context sr_sm_type] should be configured and running for SRs of type [sr_sm_type] to work. *) let get_required_cluster_stacks ~__context ~sr_sm_type = - let sms_matching_sr_type = - Db.SM.get_records_where ~__context - ~expr:Db_filter_types.(Eq (Field "type", Literal sr_sm_type)) + let expr = + Xapi_database.Db_filter_types.(Eq (Field "type", Literal sr_sm_type)) in + let sms_matching_sr_type = Db.SM.get_records_where ~__context ~expr in sms_matching_sr_type |> List.map (fun (_sm_ref, sm_rec) -> sm_rec.API.sM_required_cluster_stack) (* We assume that we only have one SM for each SR type, so this is only to satisfy type checking *) @@ -166,10 +168,12 @@ let with_clustering_lock_if_cluster_exists ~__context where f = with_clustering_lock where f let find_cluster_host ~__context ~host = - match - Db.Cluster_host.get_refs_where ~__context - ~expr:Db_filter_types.(Eq (Field "host", Literal (Ref.string_of host))) - with + let expr = + Xapi_database.Db_filter_types.( + Eq (Field "host", Literal (Ref.string_of host)) + ) + in + match Db.Cluster_host.get_refs_where ~__context ~expr with | [ref] -> Some ref | _ :: _ -> diff --git a/ocaml/xapi/xapi_db_upgrade.ml b/ocaml/xapi/xapi_db_upgrade.ml index 05f20f083e7..b9ecf94ba01 100644 --- a/ocaml/xapi/xapi_db_upgrade.ml +++ b/ocaml/xapi/xapi_db_upgrade.ml @@ -488,7 +488,7 @@ let remove_vmpp = (fun ~__context -> let vmpps = Db.VMPP.get_all ~__context in List.iter (fun self -> Db.VMPP.destroy ~__context ~self) vmpps ; - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let vms = Db.VM.get_refs_where ~__context ~expr: @@ -938,9 +938,10 @@ let rules = (* Maybe upgrade most recent db *) let maybe_upgrade ~__context = let db_ref = Context.database_of __context in + let open Xapi_database in let db = Db_ref.get_database db_ref in let ((previous_major_vsn, previous_minor_vsn) as previous_vsn) = - Db_cache_types.Manifest.schema (Db_cache_types.Database.manifest db) + Db_cache_types.(Manifest.schema (Database.manifest db)) in let ((latest_major_vsn, latest_minor_vsn) as latest_vsn) = (Datamodel_common.schema_major_vsn, Datamodel_common.schema_minor_vsn) diff --git a/ocaml/xapi/xapi_diagnostics.ml b/ocaml/xapi/xapi_diagnostics.ml index 4c709f0d055..c765867a987 100644 --- a/ocaml/xapi/xapi_diagnostics.ml +++ b/ocaml/xapi/xapi_diagnostics.ml @@ -1,11 +1,11 @@ (* Copyright (C) Citrix Systems Inc. - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 2.1 only. with the special exception on linking described in file LICENSE. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -36,7 +36,7 @@ let gc_stats ~__context ~host:_ = let db_stats ~__context = (* Use Printf.sprintf to keep format *) - let n, avgtime, min, max = Db_lock.report () in + let n, avgtime, min, max = Xapi_database.Db_lock.report () in [ ("n", Printf.sprintf "%d" n) ; ("avgtime", Printf.sprintf "%f" avgtime) diff --git a/ocaml/xapi/xapi_dr.ml b/ocaml/xapi/xapi_dr.ml index bdbb4dee6c2..b2f80481324 100644 --- a/ocaml/xapi/xapi_dr.ml +++ b/ocaml/xapi/xapi_dr.ml @@ -12,7 +12,7 @@ * GNU Lesser General Public License for more details. *) -open Db_cache_types +open Xapi_database.Db_cache_types let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute @@ -25,7 +25,8 @@ open D (* Keep track of foreign metadata VDIs and their database generations and pool UUIDs. *) (* The generation count is used to keep track of metadata_latest of all foreign database VDIs. *) (* The pool uuid is cached so that "xe pool-param-get param-name=metadata-of-pool" can be called without opening the database. *) -let db_vdi_cache : (API.ref_VDI, Generation.t * string) Hashtbl.t = +let db_vdi_cache : (API.ref_VDI, Xapi_database.Generation.t * string) Hashtbl.t + = Hashtbl.create 10 let db_vdi_cache_mutex = Mutex.create () @@ -101,7 +102,7 @@ let update_metadata_latest ~__context = vdis_grouped_by_pool let read_database_generation ~db_ref = - let db = Db_ref.get_database db_ref in + let db = Xapi_database.Db_ref.get_database db_ref in let manifest = Database.manifest db in Manifest.generation manifest diff --git a/ocaml/xapi/xapi_event.ml b/ocaml/xapi/xapi_event.ml index 5e10d5590a1..4c6a5eac959 100644 --- a/ocaml/xapi/xapi_event.ml +++ b/ocaml/xapi/xapi_event.ml @@ -338,6 +338,7 @@ module From = struct let calls : (API.ref_session, call list) Hashtbl.t = Hashtbl.create 10 let get_current_event_number () = + let open Xapi_database in Db_cache_types.Manifest.generation (Db_cache_types.Database.manifest (Db_ref.get_database (Db_backend.make ())) @@ -507,6 +508,7 @@ let rec next ~__context = rpc_of_events relevant let from_inner __context session subs from from_t deadline = + let open Xapi_database in let open From in (* The database tables involved in our subscription *) let tables = @@ -730,7 +732,8 @@ let from ~__context ~classes ~token ~timeout = let get_current_id ~__context = with_lock Next.m (fun () -> !Next.id) let inject ~__context ~_class ~_ref = - let open Db_cache_types in + let open Xapi_database in + let open Xapi_database.Db_cache_types in let generation : int64 = Db_lock.with_lock (fun () -> let db_ref = Db_backend.make () in @@ -780,13 +783,13 @@ let event_add ?snapshot ty op reference = From.add ev ; Next.add ev ) -let register_hooks () = Db_action_helper.events_register event_add +let register_hooks () = Xapi_database.Db_action_helper.events_register event_add (* Called whenever a session is being destroyed i.e. by Session.logout and db_gc *) let on_session_deleted session_id = (* Unregister this session if is associated with in imported DB. *) (* FIXME: this doesn't logically belong in the event code *) - Db_backend.unregister_session (Ref.string_of session_id) ; + Xapi_database.Db_backend.unregister_session (Ref.string_of session_id) ; Next.on_session_deleted session_id ; From.on_session_deleted session_id @@ -795,7 +798,7 @@ let on_session_deleted session_id = 2. allow the server to detect when a client has failed *) let heartbeat ~__context = try - Db_lock.with_lock (fun () -> + Xapi_database.Db_lock.with_lock (fun () -> (* We must hold the database lock since we are sending an update for a real object and we don't want to accidentally transmit an older snapshot. *) let pool = try Some (Helpers.get_pool ~__context) with _ -> None in diff --git a/ocaml/xapi/xapi_fuse.ml b/ocaml/xapi/xapi_fuse.ml index bb318848fbd..48d0737a613 100644 --- a/ocaml/xapi/xapi_fuse.ml +++ b/ocaml/xapi/xapi_fuse.ml @@ -55,6 +55,7 @@ let light_fuse_and_run ?(fuse_length = !Constants.fuse_time) () = ignore (Thread.create (fun () -> + let open Xapi_database in Thread.delay new_fuse_length ; debug "light_fuse_and_run: calling flush and exit" ; (* CA-16368: If the database hasn't been initialised *at all* we can exit immediately. @@ -112,6 +113,7 @@ let light_fuse_and_dont_restart ?(fuse_length = !Constants.fuse_time) () = ignore (Thread.create (fun () -> + let open Xapi_database in debug "light_fuse_and_dont_restart: calling Rrdd.backup_rrds to save \ current RRDs locally" ; diff --git a/ocaml/xapi/xapi_globs.ml b/ocaml/xapi/xapi_globs.ml index 37e9f561537..f58cb35757b 100644 --- a/ocaml/xapi/xapi_globs.ml +++ b/ocaml/xapi/xapi_globs.ml @@ -20,6 +20,8 @@ module StringSet = Set.Make (String) module D = Debug.Make (struct let name = "xapi_globs" end) +module Db_globs = Xapi_database.Db_globs + (* set this to true to enable XSM to out-of-pool SRs with matching UUID *) let relax_xsm_sr_check = ref true diff --git a/ocaml/xapi/xapi_ha.ml b/ocaml/xapi/xapi_ha.ml index ee8253e17b6..2295651ed05 100644 --- a/ocaml/xapi/xapi_ha.ml +++ b/ocaml/xapi/xapi_ha.ml @@ -31,8 +31,9 @@ let finally = Xapi_stdext_pervasives.Pervasiveext.finally let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute open Client -open Db_filter_types +open Xapi_database.Db_filter_types open Xha_scripts +module Redo_log = Xapi_database.Redo_log (* Create a redo_log instance to use for HA. *) let ha_redo_log = @@ -926,7 +927,7 @@ let redo_log_ha_enabled_during_runtime __context = ) else ( info "Switching on HA redo log." ; Redo_log.enable_and_flush - (Context.database_of __context |> Db_ref.get_database) + (Context.database_of __context |> Xapi_database.Db_ref.get_database) ha_redo_log Xapi_globs.ha_metadata_vdi_reason (* upon the first attempt to write a delta, it will realise that a DB flush * is necessary as the I/O process will not be running *) @@ -958,8 +959,9 @@ let redo_log_ha_enabled_at_startup () = debug "This node is a master; attempting to extract a database from a metadata \ VDI" ; - let db_ref = Db_backend.make () in - Redo_log_usage.read_from_redo_log ha_redo_log Db_globs.ha_metadata_db db_ref + let db_ref = Xapi_database.Db_backend.make () in + Redo_log_usage.read_from_redo_log ha_redo_log + Xapi_database.Db_globs.ha_metadata_db db_ref (* best effort only: does not raise any exceptions *) ) @@ -1759,8 +1761,6 @@ let disable __context = raise (Api_errors.Server_error (Api_errors.ha_not_enabled, [])) ; disable_internal __context -open Db_cache_types (* for the Manifest. Database. functions below *) - let enable __context heartbeat_srs configuration = debug "Enabling HA on the Pool." ; let pool = Helpers.get_pool ~__context in @@ -1984,6 +1984,8 @@ let enable __context heartbeat_srs configuration = (* ... *) (* Make sure everyone's got a fresh database *) let generation = + let open Xapi_database in + let open Xapi_database.Db_cache_types in Db_lock.with_lock (fun () -> Manifest.generation (Database.manifest (Db_ref.get_database (Db_backend.make ()))) diff --git a/ocaml/xapi/xapi_ha.mli b/ocaml/xapi/xapi_ha.mli index d6967db9807..ddf583d6cb8 100644 --- a/ocaml/xapi/xapi_ha.mli +++ b/ocaml/xapi/xapi_ha.mli @@ -15,7 +15,7 @@ (** Functions for implementing 'High Availability' (HA). @group High Availability (HA) *) -val ha_redo_log : [`RW] Redo_log.redo_log +val ha_redo_log : [`RW] Xapi_database.Redo_log.redo_log (** The redo log instance used for HA *) (******************************************************************************) diff --git a/ocaml/xapi/xapi_hooks.ml b/ocaml/xapi/xapi_hooks.ml index 7a2e2bd3b7e..abb29dd4f52 100644 --- a/ocaml/xapi/xapi_hooks.ml +++ b/ocaml/xapi/xapi_hooks.ml @@ -128,7 +128,7 @@ let internal_host_dead_hook __context host = info "Running host dead hook for %s" (Ref.string_of host) ; (* reverse lookup host from metrics id; don't have backedge here... *) let forwarded_tasks = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Db.Task.get_refs_where ~__context ~expr:(Eq (Field "forwarded_to", Literal (Ref.string_of host))) in diff --git a/ocaml/xapi/xapi_host.ml b/ocaml/xapi/xapi_host.ml index 768f33aba7b..4d5872aa5ca 100644 --- a/ocaml/xapi/xapi_host.ml +++ b/ocaml/xapi/xapi_host.ml @@ -21,7 +21,7 @@ let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute module Unixext = Xapi_stdext_unix.Unixext open Xapi_host_helpers open Xapi_pif_helpers -open Db_filter_types +open Xapi_database.Db_filter_types open Workload_balancing module D = Debug.Make (struct let name = "xapi_host" end) @@ -1196,6 +1196,7 @@ let request_backup ~__context ~host ~generation ~force = if Helpers.get_localhost ~__context <> host then failwith "Forwarded to the wrong host" ; if Pool_role.is_master () then ( + let open Xapi_database in debug "Requesting database backup on master: Using direct sync" ; let connections = Db_conn_store.read_db_connections () in Db_cache_impl.sync connections (Db_ref.get_database (Db_backend.make ())) @@ -1331,7 +1332,8 @@ let get_thread_diagnostics ~__context ~host:_ = let sm_dp_destroy ~__context ~host:_ ~dp ~allow_leak = Storage_access.dp_destroy ~__context dp allow_leak -let get_diagnostic_timing_stats ~__context ~host:_ = Stats.summarise () +let get_diagnostic_timing_stats ~__context ~host:_ = + Xapi_database.Stats.summarise () (* CP-825: Serialize execution of host-enable-extauth and host-disable-extauth *) (* We need to protect against concurrent execution of the extauth-hook script and host.enable/disable extauth, *) @@ -1966,6 +1968,8 @@ let disable_external_auth ~__context ~host ~config = disable_external_auth_common ~during_pool_eject:false ~__context ~host ~config () +module Static_vdis_list = Xapi_database.Static_vdis_list + let attach_static_vdis ~__context ~host:_ ~vdi_reason_map = (* We throw an exception immediately if any of the VDIs in vdi_reason_map is a changed block tracking metadata VDI. *) diff --git a/ocaml/xapi/xapi_host_helpers.ml b/ocaml/xapi/xapi_host_helpers.ml index 00f01d83ed2..dcac8edc5ce 100644 --- a/ocaml/xapi/xapi_host_helpers.ml +++ b/ocaml/xapi/xapi_host_helpers.ml @@ -19,7 +19,7 @@ module D = Debug.Make (struct let name = "xapi_host_helpers" end) open D module Unixext = Xapi_stdext_unix.Unixext -open Db_filter_types +open Xapi_database.Db_filter_types open Record_util (* for host_operation_to_string *) let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute diff --git a/ocaml/xapi/xapi_message.ml b/ocaml/xapi/xapi_message.ml index 2d44962d720..95702a49515 100644 --- a/ocaml/xapi/xapi_message.ml +++ b/ocaml/xapi/xapi_message.ml @@ -331,6 +331,7 @@ let write ~__context ~_ref ~message = gen in let gen = ref 0L in + let open Xapi_database in Db_lock.with_lock (fun () -> let t = Context.database_of __context in Db_ref.update_database t (fun db -> @@ -450,7 +451,8 @@ let create ~__context ~name ~priority ~cls ~obj_uuid ~body = (* Return the message ref, or Ref.null if the message wasn't written *) match gen with Some _ -> _ref | None -> Ref.null -let deleted : (Generation.t * API.ref_message) list ref = ref [(0L, Ref.null)] +let deleted : (Xapi_database.Generation.t * API.ref_message) list ref = + ref [(0L, Ref.null)] let ndeleted = ref 1 @@ -469,6 +471,7 @@ let destroy_real __context basefilename = Unixext.unlink_safe filename ; let rpc = API.rpc_of_message_t message in let gen = ref 0L in + let open Xapi_database in Db_lock.with_lock (fun () -> let t = Context.database_of __context in Db_ref.update_database t (fun db -> diff --git a/ocaml/xapi/xapi_network.ml b/ocaml/xapi/xapi_network.ml index 59686f9fa7d..bb641e980c2 100644 --- a/ocaml/xapi/xapi_network.ml +++ b/ocaml/xapi/xapi_network.ml @@ -327,7 +327,7 @@ let create_new_blob ~__context ~network ~name ~mime_type ~public = let set_default_locking_mode ~__context ~network ~value = (* Get all VIFs which are attached and associated with this network. *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in match Db.VIF.get_records_where ~__context ~expr: diff --git a/ocaml/xapi/xapi_network_attach_helpers.ml b/ocaml/xapi/xapi_network_attach_helpers.ml index b28013d5892..4a3f64b3c38 100644 --- a/ocaml/xapi/xapi_network_attach_helpers.ml +++ b/ocaml/xapi/xapi_network_attach_helpers.ml @@ -15,7 +15,7 @@ module D = Debug.Make (struct let name = "xapi_network_attach_helpers" end) open D -open Db_filter_types +open Xapi_database.Db_filter_types let assert_network_has_no_vifs_in_use_on_me ~__context ~host ~network = (* Check if there are any active VIFs on VMs resident on me *) diff --git a/ocaml/xapi/xapi_network_sriov_helpers.ml b/ocaml/xapi/xapi_network_sriov_helpers.ml index 1e14ff277c1..952a7c35270 100644 --- a/ocaml/xapi/xapi_network_sriov_helpers.ml +++ b/ocaml/xapi/xapi_network_sriov_helpers.ml @@ -13,7 +13,7 @@ *) open Network -open Db_filter_types +open Xapi_database.Db_filter_types open Xapi_stdext_std module D = Debug.Make (struct let name = "xapi_network_sriov" end) diff --git a/ocaml/xapi/xapi_pbd.ml b/ocaml/xapi/xapi_pbd.ml index 552bd6ad5a7..4b6b5c22711 100644 --- a/ocaml/xapi/xapi_pbd.ml +++ b/ocaml/xapi/xapi_pbd.ml @@ -15,7 +15,7 @@ * @group XenAPI functions *) -open Db_filter_types +open Xapi_database.Db_filter_types module D = Debug.Make (struct let name = "xapi_pbd" end) @@ -292,11 +292,10 @@ let get_locally_attached ~__context = let host = Helpers.get_localhost ~__context in Db.PBD.get_refs_where ~__context ~expr: - Db_filter_types.( - And - ( Eq (Field "host", Literal (Ref.string_of host)) - , Eq (Field "currently_attached", Literal "true") - ) + (And + ( Eq (Field "host", Literal (Ref.string_of host)) + , Eq (Field "currently_attached", Literal "true") + ) ) (* Host calls unplug_all_pbds on shutdown, diff --git a/ocaml/xapi/xapi_pci.ml b/ocaml/xapi/xapi_pci.ml index 6da3c4e220e..1ff5620cf58 100644 --- a/ocaml/xapi/xapi_pci.ml +++ b/ocaml/xapi/xapi_pci.ml @@ -63,7 +63,9 @@ let create ~__context ~class_id ~class_name ~vendor_id ~vendor_name ~device_id let get_local ~__context getter = let localhost = Helpers.get_localhost ~__context in let expr = - Db_filter_types.(Eq (Field "host", Literal (Ref.string_of localhost))) + Xapi_database.Db_filter_types.( + Eq (Field "host", Literal (Ref.string_of localhost)) + ) in getter ~__context ~expr diff --git a/ocaml/xapi/xapi_pgpu_helpers.ml b/ocaml/xapi/xapi_pgpu_helpers.ml index efe79d5296d..dc49ec33a83 100644 --- a/ocaml/xapi/xapi_pgpu_helpers.ml +++ b/ocaml/xapi/xapi_pgpu_helpers.ml @@ -40,7 +40,7 @@ let assert_VGPU_type_enabled ~__context ~self ~vgpu_type = ) let get_scheduled_VGPUs ~__context ~self = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Db.VGPU.get_refs_where ~__context ~expr: (Eq (Field "scheduled_to_be_resident_on", Literal (Ref.string_of self))) @@ -85,7 +85,7 @@ let assert_VGPU_type_allowed ~__context ~self ~vgpu_type = ) let assert_no_resident_VGPUs_of_type ~__context ~self ~vgpu_type = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in match Db.VGPU.get_records_where ~__context ~expr: diff --git a/ocaml/xapi/xapi_pif.ml b/ocaml/xapi/xapi_pif.ml index e1cb02c60f0..f7bbd19ae19 100644 --- a/ocaml/xapi/xapi_pif.ml +++ b/ocaml/xapi/xapi_pif.ml @@ -17,7 +17,7 @@ open D module L = Debug.Make (struct let name = "license" end) -open Db_filter_types +open Xapi_database.Db_filter_types module Listext = Xapi_stdext_std.Listext.List open Xapi_stdext_std.Xstringext module Date = Xapi_stdext_date.Date @@ -27,12 +27,10 @@ let get_device_pci ~__context ~host ~device = let dbg = Context.string_of_task __context in let pci_bus_path = Net.Interface.get_pci_bus_path dbg device in let expr = - Db_filter_types.( - And - ( Eq (Field "pci_id", Literal pci_bus_path) - , Eq (Field "host", Literal (Ref.string_of host)) - ) - ) + And + ( Eq (Field "pci_id", Literal pci_bus_path) + , Eq (Field "host", Literal (Ref.string_of host)) + ) in match Db.PCI.get_refs_where ~__context ~expr with | pci :: _ -> @@ -515,9 +513,7 @@ let introduce_internal ?network ?(physical = true) ~t:_ ~__context ~host ~mAC (* Assertion passes if PIF has clusters attached but host has disabled clustering *) let assert_no_clustering_enabled_on ~__context ~self = - let cluster_host_on_pif = - Db_filter_types.(Eq (Field "PIF", Literal (Ref.string_of self))) - in + let cluster_host_on_pif = Eq (Field "PIF", Literal (Ref.string_of self)) in match Db.Cluster_host.get_refs_where ~__context ~expr:cluster_host_on_pif with | [] -> () diff --git a/ocaml/xapi/xapi_pool.ml b/ocaml/xapi/xapi_pool.ml index f4736a1a61f..acb7bdfa7e9 100644 --- a/ocaml/xapi/xapi_pool.ml +++ b/ocaml/xapi/xapi_pool.ml @@ -1719,6 +1719,7 @@ let unplug_pbds ~__context host = (* This means eject me, since will have been forwarded from master *) let eject_self ~__context ~host = + let open Xapi_database in (* If HA is enabled then refuse *) let pool = Helpers.get_pool ~__context in if Db.Pool.get_ha_enabled ~__context ~self:pool then @@ -1998,7 +1999,7 @@ let eject ~__context ~host = (* Prohibit parallel flushes since they're so expensive *) let sync_m = Mutex.create () -open Db_cache_types +open Xapi_database.Db_cache_types let sync_database ~__context = with_lock sync_m (fun () -> @@ -2006,7 +2007,7 @@ let sync_database ~__context = let pool = Helpers.get_pool ~__context in let flushed_to_vdi = Db.Pool.get_ha_enabled ~__context ~self:pool - && Db_lock.with_lock (fun () -> + && Xapi_database.Db_lock.with_lock (fun () -> Xha_metadata_vdi.flush_database ~__context Xapi_ha.ha_redo_log ) in @@ -2015,10 +2016,12 @@ let sync_database ~__context = else ( debug "flushing database to all online nodes" ; let generation = - Db_lock.with_lock (fun () -> + Xapi_database.Db_lock.with_lock (fun () -> Manifest.generation (Database.manifest - (Db_ref.get_database (Context.database_of __context)) + (Xapi_database.Db_ref.get_database + (Context.database_of __context) + ) ) ) in @@ -2133,7 +2136,7 @@ let is_slave ~__context ~host:_ = debug "About to kick the database connection to make sure it's still working..." ; let (_ : bool) = - Scheduler.PipeDelay.signal Master_connection.delay ; + Scheduler.PipeDelay.signal Xapi_database.Master_connection.delay ; Db.is_valid_ref __context (Ref.of_string "Pool.is_slave checking to see if the database connection is up" @@ -2861,6 +2864,8 @@ let detect_nonhomogeneous_external_auth () = let detect_nonhomogeneous_external_auth ~__context ~pool:_ = detect_nonhomogeneous_external_auth () +module Redo_log = Xapi_database.Redo_log + let create_redo_log_vdi ~__context ~sr = Helpers.call_api_functions ~__context (fun rpc session_id -> Client.VDI.create ~rpc ~session_id ~name_label:"Metadata redo-log" @@ -2936,7 +2941,7 @@ let enable_redo_log ~__context ~sr = * is already in use) *) if not (Db.Pool.get_ha_enabled ~__context ~self:pool) then ( Redo_log.enable_and_flush - (Context.database_of __context |> Db_ref.get_database) + (Context.database_of __context |> Xapi_database.Db_ref.get_database) Xapi_ha.ha_redo_log Xapi_globs.gen_metadata_vdi_reason ; Localdb.put Constants.redo_log_enabled "true" ) ; diff --git a/ocaml/xapi/xapi_pool_patch.ml b/ocaml/xapi/xapi_pool_patch.ml index 433cc1e92ac..5988a1abc7c 100644 --- a/ocaml/xapi/xapi_pool_patch.ml +++ b/ocaml/xapi/xapi_pool_patch.ml @@ -35,7 +35,7 @@ let pool_patch_of_update ~__context update_ref = match Db.Pool_patch.get_refs_where ~__context ~expr: - Db_filter_types.( + Xapi_database.Db_filter_types.( Eq (Field "pool_update", Literal (Ref.string_of update_ref)) ) with @@ -124,7 +124,7 @@ let pool_patch_upload_handler (req : Http.Request.t) s _ = returns [Some (ref, false)] if it's on the host but isn't applied yet or the application is in progress. *) let get_patch_applied_to ~__context ~patch ~host = let expr = - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq (Field "pool_patch", Literal (Ref.string_of patch)) , Eq (Field "host", Literal (Ref.string_of host)) diff --git a/ocaml/xapi/xapi_pool_transition.ml b/ocaml/xapi/xapi_pool_transition.ml index a8f00deaa26..6ff8f892bd9 100644 --- a/ocaml/xapi/xapi_pool_transition.ml +++ b/ocaml/xapi/xapi_pool_transition.ml @@ -85,6 +85,7 @@ let become_master () = This code runs on the new master. *) let attempt_two_phase_commit_of_new_master ~__context (manual : bool) (peer_addresses : string list) (my_address : string) = + let open Xapi_database in debug "attempting %s two-phase commit of new master. My address = %s; peer \ addresses = [ %s ]" diff --git a/ocaml/xapi/xapi_psr.ml b/ocaml/xapi/xapi_psr.ml index adc9b7ec7f1..aa2481b3eca 100644 --- a/ocaml/xapi/xapi_psr.ml +++ b/ocaml/xapi/xapi_psr.ml @@ -461,8 +461,10 @@ let notify_send ~__context ~old_ps ~new_ps = ) in Xapi_globs.pool_secrets := [priority_2_ps; priority_1_ps] ; - Db_globs.pool_secret := - priority_2_ps |> SecretString.rpc_of_t |> Db_secret_string.t_of_rpc + Xapi_database.Db_globs.pool_secret := + priority_2_ps + |> SecretString.rpc_of_t + |> Xapi_database.Db_secret_string.t_of_rpc | [priority_1_ps; priority_2_ps] when SecretString.(equal priority_1_ps new_ps && equal priority_2_ps old_ps) -> diff --git a/ocaml/xapi/xapi_pusb.ml b/ocaml/xapi/xapi_pusb.ml index da34329cc4f..e1bf3e82acb 100644 --- a/ocaml/xapi/xapi_pusb.ml +++ b/ocaml/xapi/xapi_pusb.ml @@ -218,7 +218,7 @@ let set_passthrough_enabled ~__context ~self ~value = we want to re-display the vdi records. But in udevSR.py we will handle this, as if passthrough_enabled = true, we will not re-introduce the vdi. *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Db.SR.get_refs_where ~__context ~expr:(Eq (Field "type", Literal "udev")) |> List.iter (fun sr -> diff --git a/ocaml/xapi/xapi_pvs_proxy.ml b/ocaml/xapi/xapi_pvs_proxy.ml index 71334c0d545..136daeef4be 100644 --- a/ocaml/xapi/xapi_pvs_proxy.ml +++ b/ocaml/xapi/xapi_pvs_proxy.ml @@ -21,7 +21,9 @@ open D let create ~__context ~site ~vIF = Pool_features.assert_enabled ~__context ~f:Features.PVS_proxy ; Helpers.assert_using_vswitch ~__context ; - let expr = Db_filter_types.(Eq (Field "VIF", Literal (Ref.string_of vIF))) in + let expr = + Xapi_database.Db_filter_types.(Eq (Field "VIF", Literal (Ref.string_of vIF))) + in let proxies = Db.PVS_proxy.get_refs_where ~__context ~expr in if List.length proxies > 0 then raise diff --git a/ocaml/xapi/xapi_session.ml b/ocaml/xapi/xapi_session.ml index 221498d6f1b..4df3a365a2a 100644 --- a/ocaml/xapi/xapi_session.ml +++ b/ocaml/xapi/xapi_session.ml @@ -431,7 +431,7 @@ let revalidate_external_session ~__context ~session = if not (Db.Session.get_is_local_superuser ~__context ~self:session - || Db_backend.is_session_registered (Ref.string_of session) + || Xapi_database.Db_backend.is_session_registered (Ref.string_of session) ) then ( (* 1. is the external authentication disabled in the pool? *) @@ -653,7 +653,8 @@ let login_no_password_common ~__context ~uname ~originator ~host ~pool Ref.of_string ( match db_ref with | Some db_ref -> - Db_backend.create_registered_session create_session db_ref + Xapi_database.Db_backend.create_registered_session create_session + db_ref | None -> create_session () ) @@ -1347,8 +1348,8 @@ let create_readonly_session ~__context ~uname ~db_ref = (* Create a database reference from a DB dump, and register it with a new readonly session. *) let create_from_db_file ~__context ~filename = let db = - Db_xml.From.file (Datamodel_schema.of_datamodel ()) filename - |> Db_upgrade.generic_database_upgrade + Xapi_database.Db_xml.From.file (Datamodel_schema.of_datamodel ()) filename + |> Xapi_database.Db_upgrade.generic_database_upgrade in - let db_ref = Some (Db_ref.in_memory (ref (ref db))) in + let db_ref = Some (Xapi_database.Db_ref.in_memory (ref (ref db))) in create_readonly_session ~__context ~uname:"db-from-file" ~db_ref diff --git a/ocaml/xapi/xapi_session.mli b/ocaml/xapi/xapi_session.mli index 422afd46cc3..2dc98429f3e 100644 --- a/ocaml/xapi/xapi_session.mli +++ b/ocaml/xapi/xapi_session.mli @@ -78,7 +78,7 @@ val get_top : __context:Context.t -> self:API.ref_session -> API.ref_session val create_readonly_session : __context:Context.t -> uname:string - -> db_ref:Db_ref.t option + -> db_ref:Xapi_database.Db_ref.t option -> API.ref_session val create_from_db_file : diff --git a/ocaml/xapi/xapi_sr.ml b/ocaml/xapi/xapi_sr.ml index 0508f5384c5..f692f524050 100644 --- a/ocaml/xapi/xapi_sr.ml +++ b/ocaml/xapi/xapi_sr.ml @@ -25,7 +25,8 @@ module Unixext = Xapi_stdext_unix.Unixext let finally = Xapi_stdext_pervasives.Pervasiveext.finally -open Db_filter_types +module Redo_log = Xapi_database.Redo_log +open Xapi_database.Db_filter_types open API open Client @@ -461,7 +462,6 @@ let assert_sr_not_local_cache ~__context ~sr = () let find_or_create_rrd_vdi ~__context ~sr = - let open Db_filter_types in match Db.VDI.get_refs_where ~__context ~expr: diff --git a/ocaml/xapi/xapi_sr_operations.ml b/ocaml/xapi/xapi_sr_operations.ml index 8f7a7d8012a..5d4cc834750 100644 --- a/ocaml/xapi/xapi_sr_operations.ml +++ b/ocaml/xapi/xapi_sr_operations.ml @@ -15,7 +15,7 @@ * @group XenAPI functions *) -open Db_filter_types +open Xapi_database.Db_filter_types open API open Client @@ -70,7 +70,6 @@ let sm_cap_table : (API.storage_operations * _) list = type table = (API.storage_operations, (string * string list) option) Hashtbl.t let features_of_sr_internal ~__context ~_type = - let open Db_filter_types in match Db.SM.get_internal_records_where ~__context ~expr:(Eq (Field "type", Literal _type)) diff --git a/ocaml/xapi/xapi_subject.ml b/ocaml/xapi/xapi_subject.ml index f5939b5b5bd..5c1cdd69a5d 100644 --- a/ocaml/xapi/xapi_subject.ml +++ b/ocaml/xapi/xapi_subject.ml @@ -245,14 +245,10 @@ let remove_from_roles ~__context ~self ~role = ) let query_subject_information_from_db ~__context identifier = + let open Xapi_database.Db_filter_types in match Db.Subject.get_records_where ~__context - ~expr: - (Db_filter_types.Eq - ( Db_filter_types.Field "subject_identifier" - , Db_filter_types.Literal identifier - ) - ) + ~expr:(Eq (Field "subject_identifier", Literal identifier)) with | [] -> raise Auth_signature.Subject_cannot_be_resolved diff --git a/ocaml/xapi/xapi_tunnel.ml b/ocaml/xapi/xapi_tunnel.ml index affd5583a2b..1fb8a83b097 100644 --- a/ocaml/xapi/xapi_tunnel.ml +++ b/ocaml/xapi/xapi_tunnel.ml @@ -12,7 +12,7 @@ * GNU Lesser General Public License for more details. *) -open Db_filter_types +open Xapi_database.Db_filter_types let choose_tunnel_device_name ~__context ~host = (* list all the tunnel access PIFs on this host *) diff --git a/ocaml/xapi/xapi_vdi.ml b/ocaml/xapi/xapi_vdi.ml index bc7bafb23d0..6a2fa244c84 100644 --- a/ocaml/xapi/xapi_vdi.ml +++ b/ocaml/xapi/xapi_vdi.ml @@ -104,7 +104,7 @@ let check_operation_error ~__context ?sr_records:_ ?(pbd_records = []) let sr_type = Db.SR.get_type ~__context ~self:sr in let is_tools_sr = Db.SR.get_is_tools_sr ~__context ~self:sr in (* Check to see if any PBDs are attached *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let pbds_attached = match pbd_records with | [] -> @@ -560,7 +560,7 @@ let cancel_tasks ~__context ~self ~all_tasks_in_db ~task_ids = (* This function updates xapi's database for a single VDI. The row will be created if it doesn't exist *) let update_vdi_db ~__context ~sr newvdi = - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let expr = And ( Eq @@ -1031,7 +1031,7 @@ let destroy_and_data_destroy_common ~__context ~self ) vbds ; (* If VDI destroyed is suspend VDI of VM then set the suspend_VDI field as null ref *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in Db.VM.get_refs_where ~__context ~expr:(Eq (Field "suspend_VDI", Literal (Ref.string_of self))) |> List.iter (fun self -> @@ -1441,7 +1441,7 @@ let _get_nbd_info ~__context ~self ~get_server_certificate = let hosts_with_attached_pbds = Db.PBD.get_refs_where ~__context ~expr: - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq (Field "SR", Literal (Ref.string_of sr)) , Eq (Field "currently_attached", Literal "true") @@ -1469,7 +1469,7 @@ let _get_nbd_info ~__context ~self ~get_server_certificate = let attached_pifs = Db.PIF.get_refs_where ~__context ~expr: - Db_filter_types.( + Xapi_database.Db_filter_types.( And ( Eq (Field "host", Literal (Ref.string_of host)) , Eq (Field "currently_attached", Literal "true") diff --git a/ocaml/xapi/xapi_vdi_helpers.ml b/ocaml/xapi/xapi_vdi_helpers.ml index 6b4366a80ce..0fe39c68c26 100644 --- a/ocaml/xapi/xapi_vdi_helpers.ml +++ b/ocaml/xapi/xapi_vdi_helpers.ml @@ -16,7 +16,8 @@ *) open Client -open Db_cache_types +open Xapi_database.Db_cache_types +module Redo_log = Xapi_database.Redo_log let with_lock = Xapi_stdext_threads.Threadext.Mutex.execute @@ -125,7 +126,7 @@ let enable_database_replication ~__context ~get_vdi_callback = let device = Db.VBD.get_device ~__context ~self:vbd in try Redo_log.enable_block_and_flush - (Context.database_of __context |> Db_ref.get_database) + (Context.database_of __context |> Xapi_database.Db_ref.get_database) log ("/dev/" ^ device) ; Hashtbl.add metadata_replication vdi (vbd, log) ; let vbd_uuid = Db.VBD.get_uuid ~__context ~self:vbd in @@ -183,18 +184,20 @@ let database_ref_of_vdi ~__context ~vdi = debug "Enabling redo_log with device reason [%s]" device ; Redo_log.enable_block_existing log device ; let db = Database.make (Datamodel_schema.of_datamodel ()) in - let db_ref = Db_ref.in_memory (ref (ref db)) in + let db_ref = Xapi_database.Db_ref.in_memory (ref (ref db)) in Redo_log_usage.read_from_redo_log log Xapi_globs.foreign_metadata_db db_ref ; Redo_log.delete log ; (* Upgrade database to the local schema. *) (* Reindex database to make sure is_valid_ref works. *) let ( ++ ) f g x = f (g x) in - Db_ref.update_database db_ref - (Db_upgrade.generic_database_upgrade - ++ Database.reindex - ++ Db_backend.blow_away_non_persistent_fields - (Datamodel_schema.of_datamodel ()) - ) ; + Xapi_database.( + Db_ref.update_database db_ref + (Db_upgrade.generic_database_upgrade + ++ Database.reindex + ++ Db_backend.blow_away_non_persistent_fields + (Datamodel_schema.of_datamodel ()) + ) + ) ; db_ref in with_lock database_open_mutex (fun () -> diff --git a/ocaml/xapi/xapi_vgpu_type.ml b/ocaml/xapi/xapi_vgpu_type.ml index 24a7ae29762..9656aa8f959 100644 --- a/ocaml/xapi/xapi_vgpu_type.ml +++ b/ocaml/xapi/xapi_vgpu_type.ml @@ -162,7 +162,7 @@ let find_and_update ~__context vgpu_type = let fail () = failwith "Error: Multiple vGPU types exist with the same configuration." in - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let new_expr = Eq (Field "identifier", Literal identifier_string) in let old_expr = And @@ -1041,7 +1041,7 @@ module Nvidia_compat = struct let create_compat_config_file __context = try - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let host_driver_version = Vendor_nvidia.get_host_driver_version () in let host_driver_supports_multiple = Vendor_nvidia.host_driver_supports_multi_vgpu ~host_driver_version diff --git a/ocaml/xapi/xapi_vif_helpers.ml b/ocaml/xapi/xapi_vif_helpers.ml index 5144ef7ef7a..751f987a6da 100644 --- a/ocaml/xapi/xapi_vif_helpers.ml +++ b/ocaml/xapi/xapi_vif_helpers.ml @@ -366,10 +366,10 @@ let copy ~__context ~vm ~preserve_mac_address vif = ~ipv6_addresses:all.API.vIF_ipv6_addresses ~ipv6_gateway:all.API.vIF_ipv6_gateway in - let proxies = - Db.PVS_proxy.get_records_where ~__context - ~expr:Db_filter_types.(Eq (Field "VIF", Literal (Ref.string_of vif))) + let expr = + Xapi_database.Db_filter_types.(Eq (Field "VIF", Literal (Ref.string_of vif))) in + let proxies = Db.PVS_proxy.get_records_where ~__context ~expr in List.iter (fun (_, proxy) -> try diff --git a/ocaml/xapi/xapi_vlan.ml b/ocaml/xapi/xapi_vlan.ml index 4038cf83793..2e2b13191cf 100644 --- a/ocaml/xapi/xapi_vlan.ml +++ b/ocaml/xapi/xapi_vlan.ml @@ -91,17 +91,12 @@ let create ~__context ~tagged_PIF ~tag ~network = ) ; let device = pif_rec.API.pIF_device in let vlans = + let open Xapi_database.Db_filter_types in Db.VLAN.get_records_where ~__context ~expr: - (Db_filter_types.And - ( Db_filter_types.Eq - ( Db_filter_types.Field "tagged_PIF" - , Db_filter_types.Literal (Ref.string_of tagged_PIF) - ) - , Db_filter_types.Eq - ( Db_filter_types.Field "tag" - , Db_filter_types.Literal (Int64.to_string tag) - ) + (And + ( Eq (Field "tagged_PIF", Literal (Ref.string_of tagged_PIF)) + , Eq (Field "tag", Literal (Int64.to_string tag)) ) ) in diff --git a/ocaml/xapi/xapi_vm_migrate.ml b/ocaml/xapi/xapi_vm_migrate.ml index ea1cd6e36fa..425de03a5a2 100644 --- a/ocaml/xapi/xapi_vm_migrate.ml +++ b/ocaml/xapi/xapi_vm_migrate.ml @@ -1972,7 +1972,7 @@ let vdi_pool_migrate ~__context ~vdi ~sr ~options = let management_if = Xapi_inventory.lookup Xapi_inventory._management_interface in - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let networks = Db.Network.get_records_where ~__context ~expr:(Eq (Field "bridge", Literal management_if)) diff --git a/ocaml/xapi/xapi_vm_placement.ml b/ocaml/xapi/xapi_vm_placement.ml index 90b1b9806a1..ec8c184595b 100644 --- a/ocaml/xapi/xapi_vm_placement.ml +++ b/ocaml/xapi/xapi_vm_placement.ml @@ -15,7 +15,7 @@ * @group Virtual-Machine Management *) -open Db_filter_types +open Xapi_database.Db_filter_types open Vm_placement (* === Snapshot constructors ================================================ *) diff --git a/ocaml/xapi/xapi_vm_snapshot.ml b/ocaml/xapi/xapi_vm_snapshot.ml index 7ac67ddba58..747fd68deb3 100644 --- a/ocaml/xapi/xapi_vm_snapshot.ml +++ b/ocaml/xapi/xapi_vm_snapshot.ml @@ -20,6 +20,7 @@ module Listext = Xapi_stdext_std.Listext.List module D = Debug.Make (struct let name = "xapi_vm_snapshot" end) +module Xs = Ezxenstore_core.Xenstore open D (*************************************************************************************************) @@ -39,21 +40,20 @@ let snapshot ~__context ~vm ~new_name ~ignore_vdis = (* Quiesced snapshot *) (*************************************************************************************************) (* xenstore paths *) -let control_path ~xs ~domid x = - xs.Xenstore.Xs.getdomainpath domid ^ "/control/" ^ x +let control_path ~xs ~domid x = xs.Xs.getdomainpath domid ^ "/control/" ^ x let snapshot_path ~xs ~domid x = - xs.Xenstore.Xs.getdomainpath domid ^ "/control/snapshot/" ^ x + xs.Xs.getdomainpath domid ^ "/control/snapshot/" ^ x let snapshot_cleanup_path ~xs ~domid = - xs.Xenstore.Xs.getdomainpath domid ^ "/control/snapshot" + xs.Xs.getdomainpath domid ^ "/control/snapshot" (* check if [flag] is set in the control_path of the VM [vm]. This looks like this code is a kind *) (* of duplicate of the one in {!xal.ml}, {!events.ml} and {!xapi_guest_agent.ml} which are looking *) (* dynamically if there is a change in this part of the VM's xenstore tree. However, at the moment *) (* always allowing the operation and checking if it is enabled when it is triggered is sufficient. *) let is_flag_set ~xs ~flag ~domid ~vm = - try xs.Xenstore.Xs.read (control_path ~xs ~domid flag) = "1" + try xs.Xs.read (control_path ~xs ~domid flag) = "1" with e -> debug "Exception while reading %s flag of VM %s (domain %i): %s" flag (Ref.string_of vm) domid (Printexc.to_string e) ; @@ -167,7 +167,9 @@ let copy_vm_fields ~__context ~metadata ~dst ~do_not_copy ~overrides = ) ; debug "copying metadata into %s" (Ref.string_of dst) ; let db = Context.database_of __context in - let module DB = (val Db_cache.get db : Db_interface.DB_ACCESS) in + let module DB = + (val Xapi_database.Db_cache.get db : Xapi_database.Db_interface.DB_ACCESS) + in List.iter (fun (key, value) -> let value = Option.value ~default:value (List.assoc_opt key overrides) in @@ -267,7 +269,7 @@ let update_vifs_vbds_vgpus_and_vusbs ~__context ~snapshot ~vm = 2) Find all snapshots with the same snapshot_of 3) Update each of these snapshots so that their snapshot_of points to the new cloned disk. *) - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let snapshot_of = Db.VDI.get_snapshot_of ~__context ~self:snap_disk in let all_snaps_in_tree = Db.VDI.get_refs_where ~__context @@ -541,13 +543,12 @@ let create_vm_from_snapshot ~__context ~snapshot = let old_vm = Db.VM.get_snapshot_of ~__context ~self:snapshot in try let snapshots = - Db.VM.get_records_where ~__context - ~expr: - (Db_filter_types.Eq - ( Db_filter_types.Field "snapshot_of" - , Db_filter_types.Literal (Ref.string_of old_vm) - ) - ) + let expr = + Xapi_database.Db_filter_types.( + Eq (Field "snapshot_of", Literal (Ref.string_of old_vm)) + ) + in + Db.VM.get_records_where ~__context ~expr in let snap_metadata = Db.VM.get_snapshot_metadata ~__context ~self:snapshot in let snap_metadata = Helpers.vm_string_to_assoc snap_metadata in diff --git a/ocaml/xapi/xapi_xenops.ml b/ocaml/xapi/xapi_xenops.ml index ac92853d104..23801ba7ba5 100644 --- a/ocaml/xapi/xapi_xenops.ml +++ b/ocaml/xapi/xapi_xenops.ml @@ -119,7 +119,7 @@ let disk_of_vdi ~__context ~self = let vdi_of_disk ~__context x = match String.split ~limit:2 '/' x with | [sr_uuid; location] -> ( - let open Db_filter_types in + let open Xapi_database.Db_filter_types in let sr = Db.SR.get_by_uuid ~__context ~uuid:sr_uuid in match Db.VDI.get_records_where ~__context @@ -3278,7 +3278,7 @@ let events_from_xapi () = let timeout = 30. +. api_timeout - +. !Db_globs.master_connection_reset_timeout + +. !Xapi_database.Db_globs.master_connection_reset_timeout in let timebox_rpc = Helpers.make_timeboxed_rpc ~__context timeout diff --git a/ocaml/xapi/xha_metadata_vdi.ml b/ocaml/xapi/xha_metadata_vdi.ml index d824bf6a493..d2142c30d6a 100644 --- a/ocaml/xapi/xha_metadata_vdi.ml +++ b/ocaml/xapi/xha_metadata_vdi.ml @@ -19,6 +19,7 @@ module D = Debug.Make (struct let name = "xha_metadata_vdi" end) open D open Client +module Redo_log = Xapi_database.Redo_log let create ~__context ~sr = Helpers.call_api_functions ~__context (fun rpc session_id -> @@ -82,6 +83,7 @@ let deactivate_and_detach_existing ~__context = (** Attempt to flush the database to the metadata VDI *) let flush_database ~__context log = + let open Xapi_database in try Redo_log.flush_db_to_redo_log (Db_ref.get_database (Db_backend.make ())) log with _ -> false diff --git a/ocaml/xapi/xha_statefile.ml b/ocaml/xapi/xha_statefile.ml index 357ad1bd6b2..abcae2d1697 100644 --- a/ocaml/xapi/xha_statefile.ml +++ b/ocaml/xapi/xha_statefile.ml @@ -18,6 +18,7 @@ module D = Debug.Make (struct let name = "xha_statefile" end) open D +module Redo_log = Xapi_database.Redo_log (** Reason associated with the static VDI attach, to help identify these later *) let reason = "HA statefile" @@ -108,7 +109,7 @@ let check_sr_can_host_statefile ~__context ~sr ~cluster_stack = Cluster_stack_constraints.assert_sr_compatible ~__context ~cluster_stack ~sr ; (* Check the exported capabilities of the SR's SM plugin *) let srtype = Db.SR.get_type ~__context ~self:sr in - let open Db_filter_types in + let open Xapi_database.Db_filter_types in match Db.SM.get_internal_records_where ~__context ~expr:(Eq (Field "type", Literal srtype)) diff --git a/ocaml/xcp-rrdd/bin/rrdd/xcp_rrdd.ml b/ocaml/xcp-rrdd/bin/rrdd/xcp_rrdd.ml index 3eb708d7a5c..faa2c7f0076 100644 --- a/ocaml/xcp-rrdd/bin/rrdd/xcp_rrdd.ml +++ b/ocaml/xcp-rrdd/bin/rrdd/xcp_rrdd.ml @@ -795,7 +795,7 @@ let domain_snapshot xc = the original and the final uuid to xenstore *) let uuid_from_key key = let path = Printf.sprintf "/vm/%s/%s" uuid key in - try Xenstore.(with_xs (fun xs -> xs.read path)) + try Ezxenstore_core.Xenstore.(with_xs (fun xs -> xs.read path)) with Xs_protocol.Enoent _hint -> info "Couldn't read path %s; falling back to actual uuid" path ; uuid diff --git a/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml b/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml index 844ad7f8a17..23d8831b9cf 100644 --- a/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml +++ b/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml @@ -20,7 +20,7 @@ open Blktap3_stats module Process = Process (struct let name = "xcp-rrdd-iostat" end) open Process -open Xenstore +open Ezxenstore_core.Xenstore let with_xc_and_xs f = Xenctrl.with_intf (fun xc -> with_xs (fun xs -> f xc xs)) diff --git a/ocaml/xen-api-client/lwt/dune b/ocaml/xen-api-client/lwt/dune index f07183058dc..306a170d0c4 100644 --- a/ocaml/xen-api-client/lwt/dune +++ b/ocaml/xen-api-client/lwt/dune @@ -22,6 +22,5 @@ xen-api-client xmlm ) - (wrapped false) ) diff --git a/ocaml/xen-api-client/lwt_examples/list_vms.ml b/ocaml/xen-api-client/lwt_examples/list_vms.ml index 40730ef4473..1e5bb7e83a6 100644 --- a/ocaml/xen-api-client/lwt_examples/list_vms.ml +++ b/ocaml/xen-api-client/lwt_examples/list_vms.ml @@ -12,7 +12,7 @@ * GNU Lesser General Public License for more details. *) -open Xen_api_lwt_unix +open Xen_api_client_lwt.Xen_api_lwt_unix open Lwt.Syntax let uri = ref "http://127.0.0.1/jsonrpc" diff --git a/ocaml/xen-api-client/lwt_examples/upload_disk.ml b/ocaml/xen-api-client/lwt_examples/upload_disk.ml index e7043e35db9..2ccb62d8eef 100644 --- a/ocaml/xen-api-client/lwt_examples/upload_disk.ml +++ b/ocaml/xen-api-client/lwt_examples/upload_disk.ml @@ -13,8 +13,10 @@ *) open Lwt -open Xen_api_lwt_unix +open Xen_api_client_lwt.Xen_api_lwt_unix open Lwt.Syntax +module Disk = Xen_api_client_lwt.Disk +module Data_channel = Xen_api_client_lwt.Data_channel let uri = ref "http://127.0.0.1/jsonrpc" diff --git a/ocaml/xen-api-client/lwt_examples/watch_metrics.ml b/ocaml/xen-api-client/lwt_examples/watch_metrics.ml index ae881fb296e..11e5dea3b48 100644 --- a/ocaml/xen-api-client/lwt_examples/watch_metrics.ml +++ b/ocaml/xen-api-client/lwt_examples/watch_metrics.ml @@ -12,7 +12,7 @@ * GNU Lesser General Public License for more details. *) -open Xen_api_lwt_unix +open Xen_api_client_lwt.Xen_api_lwt_unix open Lwt.Syntax let uri = ref "http://127.0.0.1/jsonrpc" diff --git a/ocaml/xenopsd/lib/storage.ml b/ocaml/xenopsd/lib/storage.ml index 29692f4051c..72dd3b03322 100644 --- a/ocaml/xenopsd/lib/storage.ml +++ b/ocaml/xenopsd/lib/storage.ml @@ -37,9 +37,9 @@ let transform_exception f x = let id_of frontend vbd = Printf.sprintf "vbd/%s/%s" frontend (snd vbd) let get_dbg task = - Debuginfo.make ~log:(Xenops_task.get_dbg task) + Debug_info.make ~log:(Xenops_task.get_dbg task) ~tracing:(Xenops_task.tracing task) - |> Debuginfo.to_string + |> Debug_info.to_string let epoch_begin task sr vdi domid persistent = transform_exception diff --git a/ocaml/xenopsd/lib/xenops_task.ml b/ocaml/xenopsd/lib/xenops_task.ml index d14a407d754..3fcaffefec0 100644 --- a/ocaml/xenopsd/lib/xenops_task.ml +++ b/ocaml/xenopsd/lib/xenops_task.ml @@ -71,12 +71,12 @@ let is_task task = function None let parallel_id_with_tracing parallel_id t = - Debuginfo.make ~log:parallel_id ~tracing:(Xenops_task.tracing t) - |> Debuginfo.to_string + Debug_info.make ~log:parallel_id ~tracing:(Xenops_task.tracing t) + |> Debug_info.to_string let dbg_with_traceparent_of_task t = - Debuginfo.make ~log:(Xenops_task.get_dbg t) ~tracing:(Xenops_task.tracing t) - |> Debuginfo.to_string + Debug_info.make ~log:(Xenops_task.get_dbg t) ~tracing:(Xenops_task.tracing t) + |> Debug_info.to_string let traceparent_header_of_task t = Option.map diff --git a/ocaml/xenopsd/pvs/pvs_proxy_setup.ml b/ocaml/xenopsd/pvs/pvs_proxy_setup.ml index 7cf25f74b2a..8e73cc91696 100644 --- a/ocaml/xenopsd/pvs/pvs_proxy_setup.ml +++ b/ocaml/xenopsd/pvs/pvs_proxy_setup.ml @@ -27,7 +27,7 @@ module D = Debug.Make (struct end) (* using __MODULE__ leads to a convoluted long name, so avoiding it *) -module XS = Xenstore +module XS = Ezxenstore_core.Xenstore let error fmt = Printf.kprintf diff --git a/ocaml/xenopsd/xc/cancel_utils.ml b/ocaml/xenopsd/xc/cancel_utils.ml index 130233cb577..d0df8e54297 100644 --- a/ocaml/xenopsd/xc/cancel_utils.ml +++ b/ocaml/xenopsd/xc/cancel_utils.ml @@ -11,7 +11,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. *) -open Xenstore +open Ezxenstore_core.Xenstore open Xenops_task open Device_common @@ -88,8 +88,8 @@ let cleanup_for_domain ~xs domid = let watches_of key = [ - Watch.key_to_disappear (cancel_path_of key) - ; Watch.value_to_become (shutdown_path_of key) "" + Ezxenstore_core.Watch.key_to_disappear (cancel_path_of key) + ; Ezxenstore_core.Watch.value_to_become (shutdown_path_of key) "" ] let cancel ~xs key = @@ -144,6 +144,8 @@ let with_path ~xs key f = () ) +module Watch = Ezxenstore_core.Watch + let cancellable_watch key good_watches error_watches (task : Xenops_task.task_handle) ~xs ~timeout () = with_path ~xs key (fun () -> @@ -161,9 +163,7 @@ let cancellable_watch key good_watches error_watches ) ) in - let any_have_fired ws = - List.fold_left ( || ) false (List.map (Watch.has_fired ~xs) ws) - in + let any_have_fired ws = List.exists (Watch.has_fired ~xs) ws in (* If multiple conditions are true simultaneously then we apply the policy: if the success condition is met then any error or cancellation is ignored if the error condition is met then any diff --git a/ocaml/xenopsd/xc/cancel_utils_test.ml b/ocaml/xenopsd/xc/cancel_utils_test.ml index 459c0caa085..cf9a6be9150 100644 --- a/ocaml/xenopsd/xc/cancel_utils_test.ml +++ b/ocaml/xenopsd/xc/cancel_utils_test.ml @@ -43,7 +43,7 @@ let xenstore_test xs = Printf.printf "%s: success: watch cancelled successfully" __MODULE__ let () = - try Xenstore.with_xs xenstore_test + try Ezxenstore_core.Xenstore.with_xs xenstore_test with Xs_transport.Could_not_find_xenstore -> Printf.printf "%s: Xenstore not found, cannot test cancellable watches, are you \ diff --git a/ocaml/xenopsd/xc/device.ml b/ocaml/xenopsd/xc/device.ml index d86caae2d81..a9dabdd9159 100644 --- a/ocaml/xenopsd/xc/device.ml +++ b/ocaml/xenopsd/xc/device.ml @@ -16,7 +16,7 @@ open Printf open Xenops_utils open Xenops_interface open Device_common -open Xenstore +open Ezxenstore_core.Xenstore open Cancel_utils open Xenops_task module Unixext = Xapi_stdext_unix.Unixext @@ -1893,7 +1893,8 @@ module Vusb = struct end module Serial : sig - val update_xenstore : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val update_xenstore : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit end = struct let tty_prefix = "pty:" @@ -2372,35 +2373,40 @@ module Backend = struct profile backends *) module Vbd : sig val qemu_media_change : - xs:Xenstore.Xs.xsh -> device -> string -> string -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -> string -> unit end (** Vcpu functions that use the dispatcher to choose between different profile backends *) module Vcpu : sig - val add : xs:Xenstore.Xs.xsh -> devid:int -> int -> bool -> unit + val add : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> int -> bool -> unit - val set : xs:Xenstore.Xs.xsh -> devid:int -> int -> bool -> unit + val set : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> int -> bool -> unit - val del : xs:Xenstore.Xs.xsh -> devid:int -> int -> unit + val del : xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> int -> unit - val status : xs:Xenstore.Xs.xsh -> devid:int -> int -> bool + val status : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> int -> bool end (** Dm functions that use the dispatcher to choose between different profile backends *) module Dm : sig - val get_vnc_port : xs:Xenstore.Xs.xsh -> int -> Socket.t option + val get_vnc_port : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> int -> Socket.t option (** [get_vnc_port xenstore domid] returns the dom0 tcp port in which the vnc server for [domid] can be found *) - val assert_can_suspend : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val assert_can_suspend : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit (** [assert_can_suspend xenstore xc] checks whether suspending is prevented by QEMU *) val suspend : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> Xenctrl.domid -> unit @@ -2411,7 +2417,7 @@ module Backend = struct -> path:string -> args:string list -> domid:int - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ready_path:Watch.path -> timeout:float -> cancel:Cancel_utils.key @@ -2422,7 +2428,7 @@ module Backend = struct returns a forkhelper pid after starting the qemu daemon in dom0 *) val stop : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> vtpm:Xenops_interface.Vm.tpm option -> int @@ -2430,7 +2436,7 @@ module Backend = struct (** [stop xenstore qemu_domid domid] stops a domain *) val qemu_args : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> Dm_Common.info -> bool @@ -2440,7 +2446,7 @@ module Backend = struct arguments to pass to the qemu wrapper script *) val after_suspend_image : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> vtpm:Xenops_interface.Vm.tpm option -> int @@ -2449,7 +2455,7 @@ module Backend = struct after the suspend image has been created *) val pci_assign_guest : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> index:int -> host:Pci.address -> Pci.address option @@ -2548,7 +2554,7 @@ module Backend = struct module XenPV : sig val addr : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid:int -> Dm_Common.info -> nics:(string * string * int) list @@ -2557,7 +2563,10 @@ module Backend = struct module XenPlatform : sig val device : - xs:Xenstore.Xs.xsh -> domid:int -> info:Dm_Common.info -> string list + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> domid:int + -> info:Dm_Common.info + -> string list end module VGPU : sig @@ -2566,7 +2575,7 @@ module Backend = struct module PCI : sig val assign_guest : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> index:int -> host:Pci.address -> Pci.address option diff --git a/ocaml/xenopsd/xc/device.mli b/ocaml/xenopsd/xc/device.mli index a39a8de5c9c..887c109e256 100644 --- a/ocaml/xenopsd/xc/device.mli +++ b/ocaml/xenopsd/xc/device.mli @@ -59,11 +59,12 @@ module Profile : sig end module Generic : sig - val rm_device_state : xs:Xenstore.Xs.xsh -> device -> unit + val rm_device_state : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit - val exists : xs:Xenstore.Xs.xsh -> device -> bool + val exists : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> bool - val get_private_key : xs:Xenstore.Xs.xsh -> device -> string -> string + val get_private_key : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -> string end module Vbd : sig @@ -104,7 +105,7 @@ module Vbd : sig val add : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> hvm:bool -> t -> Xenctrl.domid @@ -113,39 +114,43 @@ module Vbd : sig val release : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit - val media_eject : xs:Xenstore.Xs.xsh -> dm:Profile.t -> device -> unit + val media_eject : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> device -> unit val media_insert : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> phystype:physty -> params:string -> device -> unit - val media_is_ejected : xs:Xenstore.Xs.xsh -> device -> bool + val media_is_ejected : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> bool - val clean_shutdown_async : xs:Xenstore.Xs.xsh -> device -> unit + val clean_shutdown_async : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit val clean_shutdown_wait : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ignore_transients:bool -> device -> unit (* For migration: *) - val hard_shutdown_request : xs:Xenstore.Xs.xsh -> device -> unit + val hard_shutdown_request : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit - val hard_shutdown_complete : xs:Xenstore.Xs.xsh -> device -> unit Watch.t + val hard_shutdown_complete : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit Ezxenstore_core.Watch.t val hard_shutdown_wait : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> timeout:float -> device -> unit @@ -153,7 +158,7 @@ end module Vif : sig val add : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> mac:string -> ?mtu:int @@ -169,21 +174,21 @@ module Vif : sig -> Xenctrl.domid -> device - val set_carrier : xs:Xenstore.Xs.xsh -> device -> bool -> unit + val set_carrier : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> bool -> unit val release : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> unit - val move : xs:Xenstore.Xs.xsh -> device -> string -> unit + val move : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -> unit end module NetSriovVf : sig val add : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> devid:int -> mac:string -> ?mtu:int @@ -201,23 +206,49 @@ module NetSriovVf : sig end val clean_shutdown : - Xenops_task.task_handle -> xs:Xenstore.Xs.xsh -> device -> unit + Xenops_task.task_handle + -> xs:Ezxenstore_core.Xenstore.Xs.xsh + -> device + -> unit val hard_shutdown : - Xenops_task.task_handle -> xs:Xenstore.Xs.xsh -> device -> unit + Xenops_task.task_handle + -> xs:Ezxenstore_core.Xenstore.Xs.xsh + -> device + -> unit -val can_surprise_remove : xs:Xenstore.Xs.xsh -> device -> bool +val can_surprise_remove : xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> bool module Vcpu : sig val add : - xs:Xenstore.Xs.xsh -> dm:Profile.t -> devid:int -> int -> bool -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> dm:Profile.t + -> devid:int + -> int + -> bool + -> unit - val del : xs:Xenstore.Xs.xsh -> dm:Profile.t -> devid:int -> int -> unit + val del : + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> dm:Profile.t + -> devid:int + -> int + -> unit val set : - xs:Xenstore.Xs.xsh -> dm:Profile.t -> devid:int -> int -> bool -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> dm:Profile.t + -> devid:int + -> int + -> bool + -> unit - val status : xs:Xenstore.Xs.xsh -> dm:Profile.t -> devid:int -> int -> bool + val status : + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> dm:Profile.t + -> devid:int + -> int + -> bool end module PCI : sig @@ -242,7 +273,7 @@ module PCI : sig val add : xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> hvm:bool -> device' list -> Xenctrl.domid @@ -250,11 +281,12 @@ module PCI : sig val release : address list -> Xenctrl.domid -> unit - val reset : xs:Xenstore.Xs.xsh -> address -> unit + val reset : xs:Ezxenstore_core.Xenstore.Xs.xsh -> address -> unit val bind : address list -> supported_driver -> unit - val list : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> (int * address) list + val list : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> (int * address) list val dequarantine : Xenops_interface.Pci.address -> bool end @@ -262,7 +294,7 @@ end module Vfs : sig val add : xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ?backend_domid:int -> Xenctrl.domid -> unit @@ -271,7 +303,7 @@ end module Vfb : sig val add : xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ?backend_domid:int -> ?protocol:protocol -> Xenctrl.domid @@ -281,7 +313,7 @@ end module Vkbd : sig val add : xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ?backend_domid:int -> ?protocol:protocol -> Xenctrl.domid @@ -338,16 +370,17 @@ module Dm : sig } val get_vnc_port : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> Xenctrl.domid -> Xenops_utils.Socket.t option - val get_tc_port : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> int option + val get_tc_port : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> int option val signal : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> domid:Xenctrl.domid -> ?wait_for:string @@ -356,7 +389,7 @@ module Dm : sig -> unit val qemu_args : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> info -> bool (** true = restore *) @@ -367,7 +400,7 @@ module Dm : sig val start : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> ?timeout:float -> info @@ -377,7 +410,7 @@ module Dm : sig val restore : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> ?timeout:float -> info @@ -385,11 +418,11 @@ module Dm : sig -> unit val assert_can_suspend : - xs:Xenstore.Xs.xsh -> dm:Profile.t -> Xenctrl.domid -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> Xenctrl.domid -> unit val suspend : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> dm:Profile.t -> Xenctrl.domid @@ -397,13 +430,13 @@ module Dm : sig val resume : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> Xenctrl.domid -> unit val stop : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> vtpm:Xenops_interface.Vm.tpm option -> dm:Profile.t @@ -413,7 +446,7 @@ module Dm : sig val restore_vgpu : Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> Xenops_interface.Vgpu.t list -> int @@ -422,35 +455,35 @@ module Dm : sig val suspend_varstored : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> vm_uuid:string -> string val restore_varstored : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> efivars:string -> Xenctrl.domid -> unit val suspend_vtpm : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> vtpm:Xenops_interface.Vm.tpm option -> string list val restore_vtpm : Xenops_task.task_handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> contents:string -> vtpm:Xenops_interface.Vm.tpm option -> Xenctrl.domid -> unit val after_suspend_image : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> qemu_domid:int -> vtpm:Xenops_interface.Vm.tpm option @@ -458,7 +491,7 @@ module Dm : sig -> unit val pci_assign_guest : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> index:int -> host:Xenops_interface.Pci.address @@ -470,12 +503,13 @@ module Backend : sig end module Serial : sig - val update_xenstore : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val update_xenstore : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit end module Vusb : sig val vusb_plug : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> privileged:bool -> domid:Xenctrl.domid -> id:string @@ -486,7 +520,7 @@ module Vusb : sig -> unit val vusb_unplug : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> privileged:bool -> domid:Xenctrl.domid -> id:string @@ -494,13 +528,15 @@ module Vusb : sig -> hostport:string -> unit - val qom_list : xs:Xenstore.Xs.xsh -> domid:Xenctrl.domid -> string list + val qom_list : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid:Xenctrl.domid -> string list end val get_vnc_port : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Profile.t -> Xenctrl.domid -> Xenops_utils.Socket.t option -val get_tc_port : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> int option +val get_tc_port : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> int option diff --git a/ocaml/xenopsd/xc/device_common.ml b/ocaml/xenopsd/xc/device_common.ml index acac7d3faf1..871628aeef5 100644 --- a/ocaml/xenopsd/xc/device_common.ml +++ b/ocaml/xenopsd/xc/device_common.ml @@ -11,7 +11,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. *) -open Xenstore +open Ezxenstore_core.Xenstore type kind = Vif | Tap | Pci | Vfs | Vfb | Vkbd | Vbd of string | NetSriovVf [@@deriving rpcty] diff --git a/ocaml/xenopsd/xc/device_common.mli b/ocaml/xenopsd/xc/device_common.mli index f1aa53fc6ba..d2ed8f04932 100644 --- a/ocaml/xenopsd/xc/device_common.mli +++ b/ocaml/xenopsd/xc/device_common.mli @@ -47,36 +47,47 @@ exception QMP_connection_error of int * string val block_device_of_device : device -> string -val backend_path : xs:Xenstore.Xs.xsh -> endpoint -> Xenctrl.domid -> string +val backend_path : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> endpoint -> Xenctrl.domid -> string -val backend_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val backend_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val frontend_rw_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val frontend_rw_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val frontend_ro_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val frontend_ro_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val disconnect_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val disconnect_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val kthread_pid_paths_of_device : xs:Xenstore.Xs.xsh -> device -> string list +val kthread_pid_paths_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string list -val error_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val error_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val backend_error_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val backend_error_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string val backend_shutdown_request_path_of_device : - xs:Xenstore.Xs.xsh -> device -> string + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string val backend_shutdown_done_path_of_device : - xs:Xenstore.Xs.xsh -> device -> string + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string val backend_pause_request_path_of_device : - xs:Xenstore.Xs.xsh -> device -> string + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val backend_pause_token_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val backend_pause_token_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val backend_pause_done_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val backend_pause_done_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -val backend_state_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val backend_state_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string val get_private_path : Xenctrl.domid -> string @@ -84,7 +95,8 @@ val get_private_path_by_uuid : 'a Uuidx.t -> string val get_private_data_path_of_device : device -> string -val extra_xenserver_path_of_device : xs:Xenstore.Xs.xsh -> device -> string +val extra_xenserver_path_of_device : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string val string_of_endpoint : endpoint -> string @@ -94,28 +106,39 @@ val string_of_kind : kind -> string val kind_of_string : string -> kind -val list_backends : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> device list +val list_backends : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> device list (** [list_backends xs domid] returns a list of devices where there is a backend in [domid]. This function only reads data stored in the backend directory.*) val list_frontends : - xs:Xenstore.Xs.xsh -> ?for_devids:int list -> Xenctrl.domid -> device list + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> ?for_devids:int list + -> Xenctrl.domid + -> device list (** [list_frontends xs domid] returns a list of devices where there is a frontend in [domid]. This function only reads data stored in the frontend directory.*) val list_devices_between : - xs:Xenstore.Xs.xsh -> Xenctrl.domid -> Xenctrl.domid -> device list + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> Xenctrl.domid + -> Xenctrl.domid + -> device list (** Return a list of devices connecting two domains. Ignore those whose kind we don't recognise *) val device_of_backend : endpoint -> Xenctrl.domid -> device val add_backend_keys : - xs:Xenstore.Xs.xsh -> device -> string -> (string * string) list -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> device + -> string + -> (string * string) list + -> unit val remove_backend_keys : - xs:Xenstore.Xs.xsh -> device -> string -> string list -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh -> device -> string -> string list -> unit type protocol = Protocol_Native | Protocol_X86_32 | Protocol_X86_64 diff --git a/ocaml/xenopsd/xc/domain.ml b/ocaml/xenopsd/xc/domain.ml index bd17e5d284a..f78e7179e6a 100644 --- a/ocaml/xenopsd/xc/domain.ml +++ b/ocaml/xenopsd/xc/domain.ml @@ -15,7 +15,7 @@ open Printf open Xenops_utils -open Xenstore +open Ezxenstore_core.Xenstore open Cancel_utils open Device_common open Xenops_task @@ -2008,7 +2008,6 @@ let move_xstree ~xs domid olduuid newuuid = in let regexp = Re.Pcre.regexp olduuid in let rec get_tree t path = - let open Xenstore in let subtrees = let path' = String.concat "/" path in try t.Xs.directory path' @@ -2030,7 +2029,6 @@ let move_xstree ~xs domid olduuid newuuid = with Xs_protocol.Enoent _ -> false in let mv_tree path = - let open Xenstore in Xs.transaction xs (fun t -> if exists t path then let tree = get_tree t path in diff --git a/ocaml/xenopsd/xc/domain.mli b/ocaml/xenopsd/xc/domain.mli index b7b275a6efd..598a9efc3d9 100644 --- a/ocaml/xenopsd/xc/domain.mli +++ b/ocaml/xenopsd/xc/domain.mli @@ -142,7 +142,7 @@ val build_info : build_info Rpc.Types.def val make : xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> create_info -> int -> arch_domainconfig @@ -176,7 +176,11 @@ val hard_shutdown : xc:Xenctrl.handle -> domid -> shutdown_reason -> unit exception Domain_does_not_exist val shutdown : - xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> domid -> shutdown_reason -> unit + xc:Xenctrl.handle + -> xs:Ezxenstore_core.Xenstore.Xs.xsh + -> domid + -> shutdown_reason + -> unit (** Tell the domain to shutdown with reason 'shutdown_reason'. Don't wait for an ack *) @@ -184,7 +188,7 @@ val shutdown_wait_for_ack : Xenops_task.Xenops_task.task_handle -> timeout:float -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> [`hvm | `pv | `pvh] -> shutdown_reason @@ -192,13 +196,13 @@ val shutdown_wait_for_ack : (** Tell the domain to shutdown with reason 'shutdown_reason', waiting for an ack *) -val sysrq : xs:Xenstore.Xs.xsh -> domid -> char -> unit +val sysrq : xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> char -> unit (** send a domain a sysrq *) val destroy : Xenops_task.Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> qemu_domid:int -> vtpm:Xenops_interface.Vm.tpm option -> dm:Device.Profile.t @@ -212,16 +216,18 @@ val pause : xc:Xenctrl.handle -> domid -> unit val unpause : xc:Xenctrl.handle -> domid -> unit (** Unpause a domain *) -val set_action_request : xs:Xenstore.Xs.xsh -> domid -> string option -> unit +val set_action_request : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> string option -> unit (** [set_action_request xs domid None] declares this domain is fully intact. Any other string is a hint to the toolstack that the domain is still broken. *) -val get_action_request : xs:Xenstore.Xs.xsh -> domid -> string option +val get_action_request : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> string option val build : Xenops_task.Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> store_domid:int -> console_domid:int -> timeoffset:string @@ -237,7 +243,7 @@ val build : val restore : Xenops_task.Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> dm:Device.Profile.t -> store_domid:int -> console_domid:int @@ -258,7 +264,7 @@ type suspend_flag = Live | Debug val suspend : Xenops_task.Xenops_task.task_handle -> xc:Xenctrl.handle - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> domain_type:[`hvm | `pv | `pvh] -> is_uefi:bool -> dm:Device.Profile.t @@ -281,7 +287,8 @@ val send_s3resume : xc:Xenctrl.handle -> domid -> unit val vcpu_affinity_set : xc:Xenctrl.handle -> domid -> int -> bool array -> unit (** Set cpu affinity of some vcpus of a domain using an boolean array *) -val soft_reset : xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> domid -> unit +val soft_reset : + xc:Xenctrl.handle -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> unit (** Perform soft reset of a domain *) val vcpu_affinity_get : xc:Xenctrl.handle -> domid -> int -> bool array @@ -291,7 +298,12 @@ val get_uuid : xc:Xenctrl.handle -> Xenctrl.domid -> [`Vm] Uuidx.t (** Get the uuid from a specific domain *) val set_memory_dynamic_range : - xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> min:int -> max:int -> domid -> unit + xc:Xenctrl.handle + -> xs:Ezxenstore_core.Xenstore.Xs.xsh + -> min:int + -> max:int + -> domid + -> unit (** Write the min,max values of memory/target to xenstore for use by a memory policy agent *) @@ -313,15 +325,21 @@ val add_irq : xc:Xenctrl.handle -> domid -> int -> unit val del_irq : xc:Xenctrl.handle -> domid -> int -> unit (** Revoke a domain's access to a physical IRQ *) -val set_memory_target : xs:Xenstore.Xs.xsh -> Xenstore.Xs.domid -> int64 -> unit +val set_memory_target : + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> Ezxenstore_core.Xenstore.Xs.domid + -> int64 + -> unit val wait_xen_free_mem : xc:Xenctrl.handle -> ?maximum_wait_time_seconds:int -> int64 -> bool val allowed_xsdata_prefixes : string list -val set_xsdata : xs:Xenstore.Xs.xsh -> domid -> (string * string) list -> unit +val set_xsdata : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> (string * string) list -> unit -val move_xstree : xs:Xenstore.Xs.xsh -> domid -> string -> string -> unit +val move_xstree : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid -> string -> string -> unit val numa_init : unit -> unit diff --git a/ocaml/xenopsd/xc/hotplug.ml b/ocaml/xenopsd/xc/hotplug.ml index 97413350ab6..06a4edec85d 100644 --- a/ocaml/xenopsd/xc/hotplug.ml +++ b/ocaml/xenopsd/xc/hotplug.ml @@ -15,7 +15,7 @@ open Printf open Xenops_task open Device_common -open Xenstore +open Ezxenstore_core.Xenstore open Cancel_utils open Xenops_utils diff --git a/ocaml/xenopsd/xc/memory_breakdown.ml b/ocaml/xenopsd/xc/memory_breakdown.ml index 29a287865c0..f13d76d41c8 100644 --- a/ocaml/xenopsd/xc/memory_breakdown.ml +++ b/ocaml/xenopsd/xc/memory_breakdown.ml @@ -14,7 +14,7 @@ module Unixext = Xapi_stdext_unix.Unixext module Date = Xapi_stdext_date.Date -open Xenstore +open Ezxenstore_core.Xenstore (** Command-line tool for sampling host and guest memory usage. *) diff --git a/ocaml/xenopsd/xc/service.ml b/ocaml/xenopsd/xc/service.ml index 315780cd040..e85ae122067 100644 --- a/ocaml/xenopsd/xc/service.ml +++ b/ocaml/xenopsd/xc/service.ml @@ -18,7 +18,7 @@ module Unixext = Xapi_stdext_unix.Unixext module Xenops_task = Xenops_task.Xenops_task module Chroot = Xenops_sandbox.Chroot module Path = Chroot.Path -module Xs = Xenstore.Xs +module Xs = Ezxenstore_core.Xenstore.Xs module Socket = Xenops_utils.Socket let defer f g = Xapi_stdext_pervasives.Pervasiveext.finally g f @@ -191,14 +191,16 @@ let start_and_wait_for_readyness ~task ~service = an exception is raised *) let wait_path ~pidalive ~task ~name ~domid ~xs ~ready_path ~timeout ~cancel _ = let syslog_key = Printf.sprintf "%s-%d" name domid in - let watch = Watch.value_to_appear ready_path |> Watch.map (fun _ -> ()) in + let watch = + Ezxenstore_core.Watch.(value_to_appear ready_path |> map (fun _ -> ())) + in Xenops_task.check_cancelling task ; ( try let (_ : bool) = Cancel_utils.cancellable_watch cancel [watch] [] task ~xs ~timeout () in () - with Watch.Timeout _ -> + with Ezxenstore_core.Watch.Timeout _ -> if pidalive name then raise (Service_failed (name, "Timeout reached while starting daemon")) ; raise (Service_failed (name, "Daemon exited unexpectedly")) diff --git a/ocaml/xenopsd/xc/service.mli b/ocaml/xenopsd/xc/service.mli index 7b50696abb7..b0cd9178b6f 100644 --- a/ocaml/xenopsd/xc/service.mli +++ b/ocaml/xenopsd/xc/service.mli @@ -43,17 +43,20 @@ module Qemu : sig -> unit -> Forkhelpers.pidty - val pid : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> int option + val pid : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> int option - val is_running : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> bool + val is_running : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> bool val stop : - xs:Xenstore.Xs.xsh -> qemu_domid:Xenctrl.domid -> Xenctrl.domid -> unit + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> qemu_domid:Xenctrl.domid + -> Xenctrl.domid + -> unit end module Vgpu : sig val start : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> vcpus:int -> vgpus:Xenops_interface.Vgpu.t list -> restore:bool @@ -65,11 +68,11 @@ module Vgpu : sig val state_path : Xenctrl.domid -> string - val pid : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> int option + val pid : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> int option - val is_running : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> bool + val is_running : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> bool - val stop : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val stop : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit end module PV_Vnc : sig @@ -79,23 +82,27 @@ module PV_Vnc : sig val tc_port_path : Xenctrl.domid -> string - val save : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val save : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit - val get_statefile : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> string option + val get_statefile : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> string option val start : ?statefile:string - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> ?ip:string -> Xenctrl.domid -> unit - val stop : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val stop : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit val get_vnc_port : - xs:Xenstore.Xs.xsh -> Xenctrl.domid -> Xenops_utils.Socket.t option + xs:Ezxenstore_core.Xenstore.Xs.xsh + -> Xenctrl.domid + -> Xenops_utils.Socket.t option - val get_tc_port : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> int option + val get_tc_port : + xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> int option end module Varstored : sig @@ -104,19 +111,19 @@ module Varstored : sig val efivars_resume_path : Xenops_sandbox.Chroot.Path.t val start : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> nvram:Xenops_types.Nvram_uefi_variables.t -> ?restore:bool -> Xenops_task.Xenops_task.task_handle -> Xenctrl.domid -> unit - val stop : xs:Xenstore.Xs.xsh -> Xenctrl.domid -> unit + val stop : xs:Ezxenstore_core.Xenstore.Xs.xsh -> Xenctrl.domid -> unit end module Swtpm : sig val start : - xs:Xenstore.Xs.xsh + xs:Ezxenstore_core.Xenstore.Xs.xsh -> vtpm_uuid:Xapi_idl_guard_privileged.Interface.Uuidm.t -> index:int -> Xenops_task.Xenops_task.task_handle @@ -132,14 +139,14 @@ module Swtpm : sig val suspend : string - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid:int -> vtpm_uuid:Xapi_idl_guard_privileged.Interface.Uuidm.t -> string val stop : string - -> xs:Xenstore.Xs.xsh + -> xs:Ezxenstore_core.Xenstore.Xs.xsh -> domid:int -> vm_uuid:string -> vtpm_uuid:Xapi_idl_guard_privileged.Interface.Uuidm.t diff --git a/ocaml/xenopsd/xc/xenops_helpers.ml b/ocaml/xenopsd/xc/xenops_helpers.ml index 81e15f09d07..602ef72d40f 100644 --- a/ocaml/xenopsd/xc/xenops_helpers.ml +++ b/ocaml/xenopsd/xc/xenops_helpers.ml @@ -11,7 +11,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. *) -open Xenstore +open Ezxenstore_core.Xenstore (** {2 XC, XS and XAL interface helpers.} *) diff --git a/ocaml/xenopsd/xc/xenops_server_xen.ml b/ocaml/xenopsd/xc/xenops_server_xen.ml index 2f60e3b2716..c94bbd16b3e 100644 --- a/ocaml/xenopsd/xc/xenops_server_xen.ml +++ b/ocaml/xenopsd/xc/xenops_server_xen.ml @@ -15,7 +15,7 @@ open Xenops_interface open Xenops_server_plugin open Xenops_helpers -open Xenstore +open Ezxenstore_core.Xenstore open Xenops_utils open Xenops_task open Cancel_utils diff --git a/ocaml/xenopsd/xc/xenops_xc_main.ml b/ocaml/xenopsd/xc/xenops_xc_main.ml index aeeefb3540f..b7fce8d0b65 100644 --- a/ocaml/xenopsd/xc/xenops_xc_main.ml +++ b/ocaml/xenopsd/xc/xenops_xc_main.ml @@ -36,7 +36,7 @@ let check_domain0_uuid () = ; (Printf.sprintf "/vm/%s/domains/0/create-time" uuid, "0") ] in - let open Xenstore in + let open Ezxenstore_core.Xenstore in with_xs (fun xs -> List.iter (fun (k, v) -> xs.Xs.write k v) kvs) ; if !Xcp_service.daemon then (* before daemonizing we need to forget the xenstore client because the From 1521fa3febbd5762fb4d1856e0615647f1dae870 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Fri, 3 May 2024 13:02:26 +0100 Subject: [PATCH 37/44] IH-568, fix (dune): allow all packages to be pinned Pinning the libraries runs dune subst, which needs a project name, define it Signed-off-by: Pau Ruiz Safont --- dune-project | 1 + 1 file changed, 1 insertion(+) diff --git a/dune-project b/dune-project index 20058ef9e72..0d402cd7a9d 100644 --- a/dune-project +++ b/dune-project @@ -3,6 +3,7 @@ (generate_opam_files true) +(name "xapi") (source (github xapi-project/xen-api)) (license "LGPL-2.1-only WITH OCaml-LGPL-linking-exception") (authors "xen-api@lists.xen.org") From a516e4eb6c2fd166840e0f9c5871930927517741 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Tue, 7 May 2024 16:00:09 +0100 Subject: [PATCH 38/44] CP-48969: Reduce amount of logspam created by iostat Do not output loglines that are part of the normal operation. Use debug for them, they are not usually logged, but can be enabled if need be by changing the loglevel Signed-off-by: Pau Ruiz Safont --- ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml b/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml index 23d8831b9cf..c718a033d0f 100644 --- a/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml +++ b/ocaml/xcp-rrdd/bin/rrdp-iostat/rrdp_iostat.ml @@ -124,7 +124,7 @@ let update_vdi_to_vm_map () = xs.Xs.read (Printf.sprintf "%s/sm-data/vdi-uuid" vbd) in let device = xs.Xs.read (Printf.sprintf "%s/dev" vbd) in - D.info "Found VDI %s at device %s in VM %s, device id %d" + D.debug "Found VDI %s at device %s in VM %s, device id %d" vdi device vm devid ; Some (vdi, (vm, device, devid)) with Xs_protocol.Enoent _ -> @@ -456,7 +456,7 @@ let exec_tap_ctl_list () : ((string * string) * int) list = | None -> () | Some reason -> - D.info "Updating VDI-to-VM map because %s" reason ; + D.debug "Updating VDI-to-VM map because %s" reason ; update_vdi_to_vm_map () ) ; previous_map := pid_and_minor_to_sr_and_vdi ; From 31a5aec0cf14fb245f7adae2f97f8c8b43f9e364 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Tue, 7 May 2024 16:18:24 +0100 Subject: [PATCH 39/44] opam: update dependencies from the code Signed-off-by: Pau Ruiz Safont --- xapi-idl.opam | 2 ++ xapi-idl.opam.template | 2 ++ xapi-xenopsd.opam | 1 + xapi-xenopsd.opam.template | 1 + 4 files changed, 6 insertions(+) diff --git a/xapi-idl.opam b/xapi-idl.opam index 9364d605142..d6e7a390671 100644 --- a/xapi-idl.opam +++ b/xapi-idl.opam @@ -17,7 +17,9 @@ depends: [ "astring" "cmdliner" "cohttp" + "cohttp-posix" "fd-send-recv" + "ipaddr" "logs" "lwt" {>= "5.0.0"} "message-switch-async" {with-test} diff --git a/xapi-idl.opam.template b/xapi-idl.opam.template index 26a26335277..6c879e68b97 100644 --- a/xapi-idl.opam.template +++ b/xapi-idl.opam.template @@ -15,7 +15,9 @@ depends: [ "astring" "cmdliner" "cohttp" + "cohttp-posix" "fd-send-recv" + "ipaddr" "logs" "lwt" {>= "5.0.0"} "message-switch-async" {with-test} diff --git a/xapi-xenopsd.opam b/xapi-xenopsd.opam index 944bf5d1b61..c5f5c34474c 100644 --- a/xapi-xenopsd.opam +++ b/xapi-xenopsd.opam @@ -40,6 +40,7 @@ depends: [ "xapi-stdext-threads" "xapi-stdext-unix" "xapi-tracing" + "xapi-tracing-export" "xenstore_transport" {with-test} "xmlm" "zstd" diff --git a/xapi-xenopsd.opam.template b/xapi-xenopsd.opam.template index 1aaf0524539..39b101a724e 100644 --- a/xapi-xenopsd.opam.template +++ b/xapi-xenopsd.opam.template @@ -38,6 +38,7 @@ depends: [ "xapi-stdext-threads" "xapi-stdext-unix" "xapi-tracing" + "xapi-tracing-export" "xenstore_transport" {with-test} "xmlm" "zstd" From b307724d7f9dea1bccc184b2f2dfe2fd2bdf4446 Mon Sep 17 00:00:00 2001 From: Pau Ruiz Safont Date: Tue, 7 May 2024 16:18:56 +0100 Subject: [PATCH 40/44] idl: bump datamodel_lifecycle New version got released Signed-off-by: Pau Ruiz Safont --- ocaml/idl/datamodel_lifecycle.ml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ocaml/idl/datamodel_lifecycle.ml b/ocaml/idl/datamodel_lifecycle.ml index 94870d262c7..5044adec27b 100644 --- a/ocaml/idl/datamodel_lifecycle.ml +++ b/ocaml/idl/datamodel_lifecycle.ml @@ -110,11 +110,11 @@ let prototyped_of_message = function | "Repository", "set_gpgkey_path" -> Some "22.12.0" | "PCI", "get_dom0_access_status" -> - Some "24.13.0-next" + Some "24.14.0" | "PCI", "enable_dom0_access" -> - Some "24.13.0-next" + Some "24.14.0" | "PCI", "disable_dom0_access" -> - Some "24.13.0-next" + Some "24.14.0" | "message", "destroy_many" -> Some "22.19.0" | "VTPM", "set_contents" -> From 7d5d08b1e072b7a59fd106c5323bc73e01d5a054 Mon Sep 17 00:00:00 2001 From: Ming Lu Date: Wed, 8 May 2024 09:44:46 +0800 Subject: [PATCH 41/44] CA-389319: Wait and retry for GET_UPDATES_IN_PROGRESS The query on HTTP endpoint /updates will return the available updates in JSON format. Prior to the changes in this commit, if a query arrives when another query is being handled, a "GET_UPDATES_IN_PROGRESS" error will be returned immediately. This behaviour is not friendly to GUI client XenCenter. In this commit, the behaviour is changed to wait and retry in handling the query in xapi since the "*_IN_PROGGRESS" error is a transient failure. Tolerating it in xapi (server) side avoids error handling in client side. With the change, the "GET_UPDATES_IN_PROGRESS" will not be an error exposed to users any more. Therefore it is removed. Signed-off-by: Ming Lu --- ocaml/idl/datamodel_errors.ml | 5 ----- ocaml/xapi-consts/api_errors.ml | 2 -- ocaml/xapi/xapi_pool_helpers.ml | 2 +- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/ocaml/idl/datamodel_errors.ml b/ocaml/idl/datamodel_errors.ml index 0bfbaa21039..81dc1e10ed2 100644 --- a/ocaml/idl/datamodel_errors.ml +++ b/ocaml/idl/datamodel_errors.ml @@ -1913,11 +1913,6 @@ let _ = ~doc:"Failed to get available updates from a host." () ; error Api_errors.get_updates_failed [] ~doc:"Failed to get available updates from the pool." () ; - error Api_errors.get_updates_in_progress [] - ~doc: - "The operation could not be performed because getting updates is in \ - progress." - () ; error Api_errors.apply_updates_in_progress [] ~doc: "The operation could not be performed because applying updates is in \ diff --git a/ocaml/xapi-consts/api_errors.ml b/ocaml/xapi-consts/api_errors.ml index 43fff504a3d..dacae2879b6 100644 --- a/ocaml/xapi-consts/api_errors.ml +++ b/ocaml/xapi-consts/api_errors.ml @@ -1261,8 +1261,6 @@ let invalid_repomd_xml = "INVALID_REPOMD_XML" let get_updates_failed = "GET_UPDATES_FAILED" -let get_updates_in_progress = "GET_UPDATES_IN_PROGRESS" - let apply_updates_in_progress = "APPLY_UPDATES_IN_PROGRESS" let apply_updates_failed = "APPLY_UPDATES_FAILED" diff --git a/ocaml/xapi/xapi_pool_helpers.ml b/ocaml/xapi/xapi_pool_helpers.ml index e3a4c76dfc1..d8c31f7071a 100644 --- a/ocaml/xapi/xapi_pool_helpers.ml +++ b/ocaml/xapi/xapi_pool_helpers.ml @@ -36,7 +36,6 @@ let blocking_ops = ; (`tls_verification_enable, Api_errors.tls_verification_enable_in_progress) ; (`configure_repositories, Api_errors.configure_repositories_in_progress) ; (`sync_updates, Api_errors.sync_updates_in_progress) - ; (`get_updates, Api_errors.get_updates_in_progress) ; (`apply_updates, Api_errors.apply_updates_in_progress) ] @@ -52,6 +51,7 @@ let wait_ops = ; `exchange_ca_certificates_on_join ; `copy_primary_host_certs ; `eject + ; `get_updates ] let all_operations = blocking_ops |> List.map fst |> List.append wait_ops From d0879c7f3ea743999a46ed574affa7143ed1b149 Mon Sep 17 00:00:00 2001 From: Christian Lindig Date: Wed, 1 May 2024 09:28:11 +0100 Subject: [PATCH 42/44] CA-392163 on start failure, clear a VM's resource allocations As part of a start, resources are allocated for a VM in "scheduled_to.." fields. These need to be cleared if the start fails. It turned out that this was incomplete for PCI slots and those were leaking. This patch tries to be more systematical about it. Signed-off-by: Christian Lindig --- ocaml/xapi/message_forwarding.ml | 50 +++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/ocaml/xapi/message_forwarding.ml b/ocaml/xapi/message_forwarding.ml index bfaa69592d2..d55d3ee0ed2 100644 --- a/ocaml/xapi/message_forwarding.ml +++ b/ocaml/xapi/message_forwarding.ml @@ -1346,18 +1346,8 @@ functor else local_fn ~__context - (* Clear scheduled_to_be_resident_on for a VM and all its vGPUs. *) - let clear_scheduled_to_be_resident_on ~__context ~vm = - Db.VM.set_scheduled_to_be_resident_on ~__context ~self:vm - ~value:Ref.null ; - List.iter - (fun vgpu -> - Db.VGPU.set_scheduled_to_be_resident_on ~__context ~self:vgpu - ~value:Ref.null - ) - (Db.VM.get_VGPUs ~__context ~self:vm) - - let clear_reserved_netsriov_vfs_on ~__context ~vm = + let clear_vif_reservations ~__context ~vm = + debug "%s VM=%s" __FUNCTION__ (Ref.string_of vm) ; Db.VM.get_VIFs ~__context ~self:vm |> List.iter (fun vif -> let vf = Db.VIF.get_reserved_pci ~__context ~self:vif in @@ -1367,6 +1357,32 @@ functor ~value:Ref.null ) + let clear_reservations ~__context ~vm = + debug "%s VM=%s" __FUNCTION__ (Ref.string_of vm) ; + (* host *) + Db.VM.set_scheduled_to_be_resident_on ~__context ~self:vm + ~value:Ref.null ; + (* vgpu *) + Db.VM.get_VGPUs ~__context ~self:vm + |> List.iter (fun vgpu -> + Db.VGPU.set_scheduled_to_be_resident_on ~__context ~self:vgpu + ~value:Ref.null + ) ; + (* pcis *) + Db.PCI.get_refs_where ~__context + ~expr: + (Eq (Field "scheduled_to_be_attached_to", Literal (Ref.string_of vm)) + ) + |> List.iter (function + | pci when pci <> Ref.null -> + debug "%s: clearing reservation of PCI %s for VM %s" + __FUNCTION__ (Ref.string_of pci) (Ref.string_of vm) ; + Db.PCI.set_scheduled_to_be_attached_to ~__context ~self:pci + ~value:Ref.null + | _ -> + () + ) + (* Notes on memory checking/reservation logic: When computing the hosts free memory we consider all VMs resident_on (ie running and consuming resources NOW) and scheduled_to_be_resident_on (ie those which are @@ -1399,8 +1415,8 @@ functor (Helpers.will_have_qemu ~__context ~self:vm) ; Xapi_network_sriov_helpers.reserve_sriov_vfs ~__context ~host ~vm with e -> - clear_scheduled_to_be_resident_on ~__context ~vm ; - clear_reserved_netsriov_vfs_on ~__context ~vm ; + clear_vif_reservations ~__context ~vm ; + clear_reservations ~__context ~vm ; raise e (* For start/start_on/resume/resume_on/migrate *) @@ -1469,7 +1485,7 @@ functor ?host_op () ; (* In certain cases, VM might have been destroyed as a consequence of operation *) if Db.is_valid_ref __context vm then - clear_scheduled_to_be_resident_on ~__context ~vm + clear_reservations ~__context ~vm ) ) @@ -1488,7 +1504,7 @@ functor finally f (fun () -> Helpers.with_global_lock (fun () -> finally_clear_host_operation ~__context ~host ?host_op () ; - clear_scheduled_to_be_resident_on ~__context ~vm + clear_reservations ~__context ~vm ) ) @@ -2544,7 +2560,7 @@ functor Helpers.with_global_lock (fun () -> finally_clear_host_operation ~__context ~host ~host_op:`vm_migrate () ; - clear_scheduled_to_be_resident_on ~__context ~vm + clear_reservations ~__context ~vm ) in finally From 34624a69f0d26ca073e6eb82defe5898c2019022 Mon Sep 17 00:00:00 2001 From: Rob Hoes Date: Mon, 25 Mar 2024 17:01:47 +0000 Subject: [PATCH 43/44] API docs in Hugo This is mostly copied from the jekyll version at xapi-project.github.io and amended for Hugo. The main difference is that all XenAPI pages have now been integrated with the main menu in the left side bar, including the menu of the XenAPI classes. Some automation is left to do in order to take the `doc/data` files from a build of `ocaml/idl` and update the class pages using the script `doc/make-class-pages.py`. Also the overview of xapi releases is still missing, as well as some of the API guides. Finally, there is some overlap with markdown files in `ocaml/doc`, which needs to be sorted out. Signed-off-by: Rob Hoes --- .gitignore | 2 + doc/assets/css/xenapi.css | 115 +++++ doc/content/xen-api/_index.md | 5 + doc/content/xen-api/basics.md | 118 +++++ doc/content/xen-api/classes/_index.html | 59 +++ doc/content/xen-api/classes/auth.md | 6 + doc/content/xen-api/classes/blob.md | 6 + doc/content/xen-api/classes/bond.md | 6 + doc/content/xen-api/classes/certificate.md | 6 + doc/content/xen-api/classes/classes.png | Bin 0 -> 47788 bytes doc/content/xen-api/classes/cluster.md | 6 + doc/content/xen-api/classes/cluster_host.md | 6 + doc/content/xen-api/classes/console.md | 6 + doc/content/xen-api/classes/crashdump.md | 6 + doc/content/xen-api/classes/data_source.md | 6 + doc/content/xen-api/classes/dr_task.md | 6 + doc/content/xen-api/classes/event.md | 6 + doc/content/xen-api/classes/feature.md | 6 + doc/content/xen-api/classes/gpu_group.md | 6 + doc/content/xen-api/classes/host.md | 6 + doc/content/xen-api/classes/host_cpu.md | 6 + doc/content/xen-api/classes/host_crashdump.md | 6 + doc/content/xen-api/classes/host_metrics.md | 6 + doc/content/xen-api/classes/host_patch.md | 6 + doc/content/xen-api/classes/lvhd.md | 6 + doc/content/xen-api/classes/message.md | 6 + doc/content/xen-api/classes/network.md | 6 + doc/content/xen-api/classes/network_sriov.md | 6 + doc/content/xen-api/classes/observer.md | 6 + doc/content/xen-api/classes/pbd.md | 6 + doc/content/xen-api/classes/pci.md | 6 + doc/content/xen-api/classes/pgpu.md | 6 + doc/content/xen-api/classes/pif.md | 6 + doc/content/xen-api/classes/pif_metrics.md | 6 + doc/content/xen-api/classes/pool.md | 6 + doc/content/xen-api/classes/pool_patch.md | 6 + doc/content/xen-api/classes/pool_update.md | 6 + doc/content/xen-api/classes/probe_result.md | 6 + doc/content/xen-api/classes/pusb.md | 6 + .../xen-api/classes/pvs_cache_storage.md | 6 + doc/content/xen-api/classes/pvs_proxy.md | 6 + doc/content/xen-api/classes/pvs_server.md | 6 + doc/content/xen-api/classes/pvs_site.md | 6 + doc/content/xen-api/classes/repository.md | 6 + doc/content/xen-api/classes/role.md | 6 + doc/content/xen-api/classes/sdn_controller.md | 6 + doc/content/xen-api/classes/secret.md | 6 + doc/content/xen-api/classes/session.md | 6 + doc/content/xen-api/classes/sm.md | 6 + doc/content/xen-api/classes/sr.md | 6 + doc/content/xen-api/classes/sr_stat.md | 6 + doc/content/xen-api/classes/subject.md | 6 + doc/content/xen-api/classes/task.md | 6 + doc/content/xen-api/classes/tunnel.md | 6 + doc/content/xen-api/classes/usb_group.md | 6 + doc/content/xen-api/classes/user.md | 6 + doc/content/xen-api/classes/vbd.md | 6 + doc/content/xen-api/classes/vbd_metrics.md | 6 + doc/content/xen-api/classes/vdi.md | 6 + .../xen-api/classes/vdi_nbd_server_info.md | 6 + doc/content/xen-api/classes/vgpu.md | 6 + doc/content/xen-api/classes/vgpu_type.md | 6 + doc/content/xen-api/classes/vif.md | 6 + doc/content/xen-api/classes/vif_metrics.md | 6 + doc/content/xen-api/classes/vlan.md | 6 + doc/content/xen-api/classes/vm.md | 6 + doc/content/xen-api/classes/vm_appliance.md | 6 + .../xen-api/classes/vm_guest_metrics.md | 6 + doc/content/xen-api/classes/vm_metrics.md | 6 + doc/content/xen-api/classes/vmpp.md | 6 + doc/content/xen-api/classes/vmss.md | 6 + doc/content/xen-api/classes/vtpm.md | 6 + doc/content/xen-api/classes/vusb.md | 6 + doc/content/xen-api/evolution.md | 93 ++++ .../xen-api/overview/dia_class_overview.svg | 448 ++++++++++++++++++ doc/content/xen-api/overview/dia_vm_sr.svg | 212 +++++++++ doc/content/xen-api/overview/index.md | 240 ++++++++++ doc/content/xen-api/wire-protocol.md | 299 ++++++++++++ doc/data/releases.yml | 66 +++ doc/data/xenapi.json | 1 + doc/hugo.toml | 1 + doc/layouts/xenapi/class.html | 201 ++++++++ doc/make-class-pages.py | 24 + 83 files changed, 2286 insertions(+) create mode 100644 doc/assets/css/xenapi.css create mode 100644 doc/content/xen-api/_index.md create mode 100644 doc/content/xen-api/basics.md create mode 100644 doc/content/xen-api/classes/_index.html create mode 100644 doc/content/xen-api/classes/auth.md create mode 100644 doc/content/xen-api/classes/blob.md create mode 100644 doc/content/xen-api/classes/bond.md create mode 100644 doc/content/xen-api/classes/certificate.md create mode 100644 doc/content/xen-api/classes/classes.png create mode 100644 doc/content/xen-api/classes/cluster.md create mode 100644 doc/content/xen-api/classes/cluster_host.md create mode 100644 doc/content/xen-api/classes/console.md create mode 100644 doc/content/xen-api/classes/crashdump.md create mode 100644 doc/content/xen-api/classes/data_source.md create mode 100644 doc/content/xen-api/classes/dr_task.md create mode 100644 doc/content/xen-api/classes/event.md create mode 100644 doc/content/xen-api/classes/feature.md create mode 100644 doc/content/xen-api/classes/gpu_group.md create mode 100644 doc/content/xen-api/classes/host.md create mode 100644 doc/content/xen-api/classes/host_cpu.md create mode 100644 doc/content/xen-api/classes/host_crashdump.md create mode 100644 doc/content/xen-api/classes/host_metrics.md create mode 100644 doc/content/xen-api/classes/host_patch.md create mode 100644 doc/content/xen-api/classes/lvhd.md create mode 100644 doc/content/xen-api/classes/message.md create mode 100644 doc/content/xen-api/classes/network.md create mode 100644 doc/content/xen-api/classes/network_sriov.md create mode 100644 doc/content/xen-api/classes/observer.md create mode 100644 doc/content/xen-api/classes/pbd.md create mode 100644 doc/content/xen-api/classes/pci.md create mode 100644 doc/content/xen-api/classes/pgpu.md create mode 100644 doc/content/xen-api/classes/pif.md create mode 100644 doc/content/xen-api/classes/pif_metrics.md create mode 100644 doc/content/xen-api/classes/pool.md create mode 100644 doc/content/xen-api/classes/pool_patch.md create mode 100644 doc/content/xen-api/classes/pool_update.md create mode 100644 doc/content/xen-api/classes/probe_result.md create mode 100644 doc/content/xen-api/classes/pusb.md create mode 100644 doc/content/xen-api/classes/pvs_cache_storage.md create mode 100644 doc/content/xen-api/classes/pvs_proxy.md create mode 100644 doc/content/xen-api/classes/pvs_server.md create mode 100644 doc/content/xen-api/classes/pvs_site.md create mode 100644 doc/content/xen-api/classes/repository.md create mode 100644 doc/content/xen-api/classes/role.md create mode 100644 doc/content/xen-api/classes/sdn_controller.md create mode 100644 doc/content/xen-api/classes/secret.md create mode 100644 doc/content/xen-api/classes/session.md create mode 100644 doc/content/xen-api/classes/sm.md create mode 100644 doc/content/xen-api/classes/sr.md create mode 100644 doc/content/xen-api/classes/sr_stat.md create mode 100644 doc/content/xen-api/classes/subject.md create mode 100644 doc/content/xen-api/classes/task.md create mode 100644 doc/content/xen-api/classes/tunnel.md create mode 100644 doc/content/xen-api/classes/usb_group.md create mode 100644 doc/content/xen-api/classes/user.md create mode 100644 doc/content/xen-api/classes/vbd.md create mode 100644 doc/content/xen-api/classes/vbd_metrics.md create mode 100644 doc/content/xen-api/classes/vdi.md create mode 100644 doc/content/xen-api/classes/vdi_nbd_server_info.md create mode 100644 doc/content/xen-api/classes/vgpu.md create mode 100644 doc/content/xen-api/classes/vgpu_type.md create mode 100644 doc/content/xen-api/classes/vif.md create mode 100644 doc/content/xen-api/classes/vif_metrics.md create mode 100644 doc/content/xen-api/classes/vlan.md create mode 100644 doc/content/xen-api/classes/vm.md create mode 100644 doc/content/xen-api/classes/vm_appliance.md create mode 100644 doc/content/xen-api/classes/vm_guest_metrics.md create mode 100644 doc/content/xen-api/classes/vm_metrics.md create mode 100644 doc/content/xen-api/classes/vmpp.md create mode 100644 doc/content/xen-api/classes/vmss.md create mode 100644 doc/content/xen-api/classes/vtpm.md create mode 100644 doc/content/xen-api/classes/vusb.md create mode 100644 doc/content/xen-api/evolution.md create mode 100644 doc/content/xen-api/overview/dia_class_overview.svg create mode 100644 doc/content/xen-api/overview/dia_vm_sr.svg create mode 100644 doc/content/xen-api/overview/index.md create mode 100644 doc/content/xen-api/wire-protocol.md create mode 100644 doc/data/releases.yml create mode 100644 doc/data/xenapi.json create mode 100644 doc/layouts/xenapi/class.html create mode 100755 doc/make-class-pages.py diff --git a/.gitignore b/.gitignore index 3e23706e3a9..352e9bbc008 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,9 @@ ocaml/xenopsd/xentoollog_flags ocaml/idl/gen_lifecycle.exe +# hugo .hugo_build.lock go.sum +doc/public .DS_Store diff --git a/doc/assets/css/xenapi.css b/doc/assets/css/xenapi.css new file mode 100644 index 00000000000..d75b1b6d089 --- /dev/null +++ b/doc/assets/css/xenapi.css @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2006-2011 Citrix Systems Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. with the special + * exception on linking described in file LICENSE. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#content a { + color: #35383d +} + +table { + font-size: 100%; + width: 100%; + border-collapse: collapse; +} + +tr { + background-color: inherit; +} + +td { + vertical-align: top; + padding: 3px 1em 3px 0; +} + +th { text-align: left; + border-bottom: 1px solid black; +} + +.description { + margin-bottom: 1em; +} + +.field, .field2 { + margin: 0em 0; + padding: .5em .7em .7em; + background-color: #dddddd; + cursor: pointer; + font-size: 15px; +} + +.field2 { + background-color: #e8e8e8; +} + +.field-type { + font-size: 80%; +} + +.field-name { + font-weight: bold; +} + +.field-head { + font-style: italic; +} + +.field-description { + margin: .7em 0; +} + +.field-table { + border: 0; + background-color: transparent; +} + +.field-table td { + padding: .3em 1.5em .3em 0; + border: 0; +} + +.inline-type { + margin-right: .5em; +} + +.inline-qualifier { + font-size: 70%; + vertical-align: top; + margin-left: .5em; +} + +.inline-params { + margin-left: .5em; +} + +.lifecycle { + font-size: 12px; + float: right; + font-variant:small-caps; + color: #306580; + margin: auto 0.5em; +} + +.button { + float: right; + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; + display: inline-block; + font-weight: 400; + margin: 0; + vertical-align: middle; +} diff --git a/doc/content/xen-api/_index.md b/doc/content/xen-api/_index.md new file mode 100644 index 00000000000..a5a5673d0ef --- /dev/null +++ b/doc/content/xen-api/_index.md @@ -0,0 +1,5 @@ ++++ +title = "XenAPI" ++++ + +{{% children %}} diff --git a/doc/content/xen-api/basics.md b/doc/content/xen-api/basics.md new file mode 100644 index 00000000000..ce4394c6afa --- /dev/null +++ b/doc/content/xen-api/basics.md @@ -0,0 +1,118 @@ ++++ +title = "XenAPI Basics" +weight = 10 ++++ + +This document contains a description of the Xen Management API – an interface for +remotely configuring and controlling virtualised guests running on a +Xen-enabled host. + +The XenAPI is presented here as a set of Remote Procedure Calls, with a wire +format based upon [XML-RPC](http://xmlrpc.scripting.com). +No specific language bindings are prescribed, +although examples will be given in the python programming language. + +Although we adopt some terminology from object-oriented programming, +future client language bindings may or may not be object oriented. +The API reference uses the terminology _classes_ and _objects_. +For our purposes a _class_ is simply a hierarchical namespace; +an _object_ is an instance of a class with its fields set to +specific values. Objects are persistent and exist on the server-side. +Clients may obtain opaque references to these server-side objects and then +access their fields via get/set RPCs. + +For each class we specify a list of fields along with their _types_ and _qualifiers_. A +qualifier is one of: + +- _RO/runtime_: the field is Read +Only. Furthermore, its value is automatically computed at runtime. +For example: current CPU load and disk IO throughput. +- _RO/constructor_: the field must be manually set +when a new object is created, but is then Read Only for +the duration of the object's life. +For example, the maximum memory addressable by a guest is set +before the guest boots. +- _RW_: the field is Read/Write. For example, the name of a VM. + +Types +----- + +The following types are used to specify methods and fields in the API Reference: + +- `string`: Text strings. +- `int`: 64-bit integers. +- `float`: IEEE double-precision floating-point numbers. +- `bool`: Boolean. +- `datetime`: Date and timestamp. +- `c ref`: Reference to an object of class `c`. +- `t set`: Arbitrary-length set of values of type `t`. +- `(k → v) map`: Mapping from values of type `k` to values of type `v`. +- `e enum`: Enumeration type with name `e`. Enums are defined in the API Reference together with classes that use them. + +Note that there are a number of cases where `ref`s are _doubly +linked_ – e.g. a VM has a field called `VIFs` of type +`VIF ref set`; this field lists +the network interfaces attached to a particular VM. Similarly, the VIF +class has a field called `VM` of type `VM ref` which references the VM to which the interface is connected. +These two fields are _bound together_, in the sense that +creating a new VIF causes the `VIFs` field of the corresponding +VM object to be updated automatically. + +The API reference explicitly lists the fields that are +bound together in this way. It also contains a diagram that shows +relationships between classes. In this diagram an edge signifies the +existance of a pair of fields that are bound together, using standard +crows-foot notation to signify the type of relationship (e.g. +one-many, many-many). + +RPCs associated with fields +--------------------------- + +Each field, `f`, has an RPC accessor associated with it +that returns `f`'s value: + +- `get_f (r)`: Takes a `ref`, `r`, that refers to an object and returns the value of `f`. + +Each field, `f`, with attribute `RW` and whose outermost type is `set` has the following +additional RPCs associated with it: + +- `add_f (r, v)`: Adds a new element `v` to the set. Since sets cannot contain duplicate values this operation has no action in the case +that `v` was already in the set. + +- `remove_f (r, v)`: Removes element `v` from the set. + +Each field, `f`, with attribute RW and whose outermost type is `map` has the following +additional RPCs associated with it: + +- `add_to_f (r, k, v)`: Adds new pair `(k → v)` to the mapping stored in `f` in object `r`. Attempting to add a new pair for duplicate +key, `k`, fails with an `MAP_DUPLICATE_KEY` error. +- `remove_from_f (r, k)`: Removes the pair with key `k` from the mapping stored in `f` in object `r`. + +Each field whose outermost type is neither `set` nor `map`, +but whose attribute is RW has an RPC accessor associated with it +that sets its value: + +- `set_f (r, v)`: Sets field `f` on object `r` to value `v`. + +RPCs associated with classes +---------------------------- + +- Most classes have a _constructor_ RPC named `create` that +takes as parameters all fields marked RW and +RO/constructor. The result of this RPC is that a new _persistent_ object is +created on the server-side with the specified field values. +- Each class has a `get_by_uuid (uuid)` RPC that returns the object +of that class that has the specified UUID. +- Each class that has a `name_label` field has a `get_by_name_label (name_label)` RPC that returns a set of objects of that +class that have the specified `name_label`. +- Most classes have a `destroy (r)` RPC that explicitly deletes the persistent object specified by `r` from the system. This is a +non-cascading delete – if the object being removed is referenced by another +object then the `destroy` call will fail. + +Additional RPCs +--------------- + +As well as the RPCs enumerated above, most classes have additional RPCs +associated with them. For example, the VM class has RPCs for cloning, +suspending, starting etc. Such additional RPCs are described explicitly +in the API reference. diff --git a/doc/content/xen-api/classes/_index.html b/doc/content/xen-api/classes/_index.html new file mode 100644 index 00000000000..d466e62368c --- /dev/null +++ b/doc/content/xen-api/classes/_index.html @@ -0,0 +1,59 @@ ++++ +title = "XenAPI Reference" +layout = "class" +type = "xenapi" ++++ + +
+

XenAPI Classes

+

Click on a class to view the associated fields and messages.

+ + Xen-api class diagram + + + + + + + + + + + + + + + + + + + + + + + + + + +

Classes, Fields and Messages

+

Classes have both fields and messages. Messages are either implicit or explicit where an implicit message is one of:

+
    +
  • a constructor (usually called "create");
  • +
  • a destructor (usually called "destroy");
  • +
  • "get_by_name_label";
  • +
  • "get_by_uuid";
  • +
  • "get_record";
  • +
  • "get_all"; and
  • +
  • "get_all_records".
  • +
+

Explicit messages include all the rest, more class-specific messages (e.g. "VM.start", "VM.clone")

+

Every field has at least one accessor depending both on its type and whether it is read-only or read-write. Accessors for a field named "X" would be a proper subset of:

+
    +
  • set_X: change the value of field X (only if it is read-write);
  • +
  • get_X: retrieve the value of field X;
  • +
  • add_X: add a key/value pair (for fields of type set);
  • +
  • remove_X: remove a key (for fields of type set);
  • +
  • add_to_X: add a key/value pair (for fields of type map); and
  • +
  • remove_from_X: remove a key (for fields of type map).
  • +
+
diff --git a/doc/content/xen-api/classes/auth.md b/doc/content/xen-api/classes/auth.md new file mode 100644 index 00000000000..a060dd1d283 --- /dev/null +++ b/doc/content/xen-api/classes/auth.md @@ -0,0 +1,6 @@ ++++ +title = "auth" +layout = "class" +type = "xenapi" +class = "auth" ++++ diff --git a/doc/content/xen-api/classes/blob.md b/doc/content/xen-api/classes/blob.md new file mode 100644 index 00000000000..ce2b8e49ddb --- /dev/null +++ b/doc/content/xen-api/classes/blob.md @@ -0,0 +1,6 @@ ++++ +title = "blob" +layout = "class" +type = "xenapi" +class = "blob" ++++ diff --git a/doc/content/xen-api/classes/bond.md b/doc/content/xen-api/classes/bond.md new file mode 100644 index 00000000000..f3dd3616299 --- /dev/null +++ b/doc/content/xen-api/classes/bond.md @@ -0,0 +1,6 @@ ++++ +title = "Bond" +layout = "class" +type = "xenapi" +class = "Bond" ++++ diff --git a/doc/content/xen-api/classes/certificate.md b/doc/content/xen-api/classes/certificate.md new file mode 100644 index 00000000000..48a1cd7cb95 --- /dev/null +++ b/doc/content/xen-api/classes/certificate.md @@ -0,0 +1,6 @@ ++++ +title = "Certificate" +layout = "class" +type = "xenapi" +class = "Certificate" ++++ diff --git a/doc/content/xen-api/classes/classes.png b/doc/content/xen-api/classes/classes.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4e2a0449f79db354dd655486a56a60f0a24e10 GIT binary patch literal 47788 zcmZ^~byQSs)ILljE#07if=DUd2A$H~(p@ujh;%t1-7Vc6Lr9k}gv8L@-SIp4yzl$Z zx4vO5)`B@R=iK|=aqVkgcjy-dNgPZHOauf39BC;rWdsDId;|nU_%k%%Kck>#;5P!A zv8<#R!sF9VW@|w#0>TRfX|a#0ZmD~4up5!uZO`%H$c21X!k1jB*w>kUsL!8Q@`~-D z5@Utke7iq4@6fNP*Z8uhw}<*swIYj253+#4`qK4wRN@MUx?JJ1RNKX*~YYyD4&exIRCL11d&tGDf#T_9BGwq^VWP+ zj`f4&XvX^WZ$~+(-gZ@9jTqpbb-J(e^D?elYtM-4Vh_v zGdv_j)qz<~Tnxkp5!D)Rg zBhh-Pwia1lKw($E3pZqPBCME?=b)pL&VBl*&OMUIX!!8%beZtZ$;XEW^!jSSQFU1- z-XmXjZ!-7IIm`S|cXO6_GE}j>kymue`l^XxA(~zy<+qN=y@7bx{KLX$Ya+N^O79lw zd{di4!fAZoG&p%bti*h|A~MW^Cy9v-eD3y|CdQX8?I9N#{mv8VeBt>R_4ZDFXR=Cg z)K1*Q(T?m?|11d)8YymE`BAg@N?eSYy8w{y%$~E8e!3@lX5An_dmNc$~mC-Bgx)#W&0X07=Wb69n#S78q zEmM39m=##O+epY+!EnyAOy=AlVW3l1k2}=U6wCFRz`SbVv=_c@xZ%z4*3El-bzgry zxW#?f@x_wqJ;GJzfe;;?sgdF#AwGVJDY}<^y7Sk10kte9RK8zogd!B~aqLUyEf{Nm z(Gu@RH9@fj9xA@j@g?e=rcCqZ&Bc)a9X`Ig}JB7=A>&|zZ z4IZ&2p)aNTjrgc^UF7iW+jmjfH}^tw3RvyFltbzh2^IA&M!mCN7pYrR9@t8%6+7~JM#E+oare`Bs@zX1*DQ}}9j zQ%FF?cH&FyDgYV^EPAHB5PY!#annd9mw+aHxu;cHK=o73Zj+%Mm7S zJ6-l}8>{vW7d2~a$>k8@c2hEpOdn0j3(bW4ovGg(RC^lrX5&saknK~kQ`v8mu|6;HAx=+0IUY2}5r!%I%{A8b z!TFG~YkxE2w~wne5W`k0p}#?+?z>a6v98zqM8WiInH;91MEEn3Kr&$PCMy{oX8$Xy zRUq2tDXDOENXVjJoxZ{EN+x{w?W>+ueOQ1|c4Y&WrnSy9z$yMqokb1Us}C=GFDZ_P zxHna=4F;e|@1kQL4!60xJH8+{SBHe`y9#=!ai z&nF0{ZRUR_*1F}v`C|sSkNa?z__^t>!V|G9KYh6pwQ1 zXTLu}M_0uQWCkg1j3D~UHhxPhm$995kfbywjH_{DyB;va=V_#TxcmR!iuZa7%JO){mWdDv{_Zp^Zamc?&|k@Bh@+50Sv(~CNV7f7q>?&7b6jxG|8B^OhEIPgcj>##U`o%!cLmyT{- z{HaV{6nVl&Ajc>P)bLu{l{#m|GgoWaP#s4xuiZ*vbXz5+a>22QBZn6&M_1hkpjiB? zGn+e}@Uj#+vhfxl+tXyk`}b%U0wJ@L?_+(IrC55tFFq_aDz;&HU++>SjP5_=^AWY- zT=8#{lHyl}0yzf)KSee-L%-Ab`Mp!Gsn(K2sMI`RNS|6~tg+jtA$7evbRlLQM=q(= zZ?s?p*Y^Y_7i>hf`)RpPwo+`x-B7$yS4=DyN#$wHU@K%s^Xpc|?$uCzj6RFW2K`^w zgZXV2!xT+G!WF+yp5ZFd3t)lb)elPNFUm5IxEq>8L+%SM@teh zaPE@EVU$ounnyqrTV)6%a6AeBoYk!<=)j7$fiPH+uMr}J`jieBTzN8eu1(hwaXGPb z!10S<8%w_VF)n%VX{taTE5(#E&tT!ct!8m@wL0i^P}j#=Y*B<1nQw{t{XLz=>b6WF z>{`_#Ee_{RS1a7R$hg7u6h|Ir#Hd{c3>zgK#v1_m-8JN8q(1?!JN_OJ*NoZS_!0Uml*62%IObAkL3oz7|KD3@w`Gi z+cI{snBpiTO{;Z#wc3`E?zSBMCMy!Pd)b2S!GoAWs^IWz&^ z^ouHE&f8N6(y+B}|90LP*Wr!Bci>CN5{$^E1#o)x7^%j`-ko&Dw(h6A2D`W@4(nHi>Gb+MzgbD( z|4q2zOBni_@WT)g*=lkB_LiT(4b8$9`~x#rK4|pzqe7{bynf5UC*M(A*8P#{&x^y! zquqE=s-fYxn(73Y8Ax}g;Mb5MsV7Izc&QNEv@K2jX?(PV{`&r0 zVZ^ZN>-Dc?wWKV0eQ4Q#cr2vK3iDm(%_%#r zx71xc;4?kxt(rV*Jy`x?Bz;wB$lz2Bl#rsZFz-bm6B`7rky=juF3$D7<|l-sVWVH^NiYJvYuqm9f}A^2Us$+I;b9ZK$+231O<0GZF2 zNA6C19q*dHZq>j1{6XXC*--yIn>Fi~>4WDy&%R!@(6+hU2R?+2V-^VkF7e}C*XX6` zRVyu`$kWxJ|GnD%&?rHveY0`->VUdRao6=roX(tsM220I39g+6>(c2wP)Z>K3jcz7 zJ;o={QV+Q|L@5Ce6M$)2G>t0}2(Nh&YWGIyl#~8BXKC#R;pWe|F@vVMPP&&-BVhvN z6Jz#$A{i#oCT{*Z9rWNqj*I)Rbe8|+iPD$D5^~;lqkje!_txtLC9Cv6pUVA4cgd~5 zxR8PWxrVWoM3fsxGUpuEezEg_N*eszzx0`SHvb2D04J#a=gQXH+mmcXp221~pJ@_` z=M}cLc)zFgv?%r*Ym7VgQL|{)+U-_~7f-|Pi#(61ocV*Xn-g9&Qi87C+)o;GYpjzA zk#N~BW5aVX{yB9m?h$el2wfV|12h_MphYg68NI_jcr>ePT>|g+`l0nDv^T$Z&qRN* z2GWZ5L(=dJw^qv!PmWKfgbK}l#7lHZms z<`141R$Y7I%%y$Kt$M2PF&^8hiFSR%>=8dNrD-X7Ar4$U^oR19=E3ngw1+cUlcG`H z;^k4LPs`Ma)gbH8UV2Sun)&4Z=TkpK>QBsv0boC`ND(Gh=sv*hb#(8N-mp_r8Z9ck zXVZ3Nikrl!+y8y>acR4FbOCrS+n(%oTtfwA1-2NpqWLKYI=Z-ai;~If`Z;O_RHUF~ zCf)0)&m*bHlLPDDqkKMdFh;Q@IL8%myQ6Z6oCawMLHdwB0RX5l;tBW0cvwqi#4F_` z`5gYfY)dhlrDm8}c-SE2gdHaNg(*Yc|EnDyyHYu?Zv$UtF=pI3D2H0cE81$~OUlZ_ z*81^Y#}WPfPE#)!E@hhkZ%t0p<+jqI2GBycnTErHxiosqg_OILBn{Oj6f*lKNB-wg zJGKn19(u_sGBWJVC!y1_Jj4mJX?gSOq;XE`vGzahnBTO{AF$BHrTyE&!B>%X>-HC) zE%{Ckp3+c_pp^T2`Pfrhx5^qWB5$m#F(6$3=i0evUxD}v$W>Od+!{EBZEP%@tTg72s$qm#eCUfesbIY;?q7)1qm+{ zI8$E6YNW4Qk5w2??qaEzt`;#G;Cb^p`*2Z3>fy9}efq47GfD)qvub{^_lNoY-p@AwC)QyuF4^%XfCdXhM^}y=V`TtR z;LpC3z~VD;Ixv!~GQkIi;iuGA*~{II-;U56p!&rXr;BXwvY{NU`l3G={2u*6=&vV` zlb8-66On=4UcA;KhhBoLcm0Z-)VRSWdK?7a?;%nVs8b2M-C|!8p7@CNj`niIgi0PY zQn^I8mHcfGWmJr+o^!ZV=Mazl$!h)#$K*6yjsja3AM4U(sy-EVy@h%?sKUHAK3(DV zaMN080Zh8OSed?}nd_K~D$j{!#k>k#e z4&sLQ>*{T#SP|1xhWmq@cybq7x;FwLsGg2L8mgJha_c;sOUuKqs(kQt9UeJym1Wo> z!CpbJ?(U%;s%pg6j0^xfl*!hzn5o*ki?TXth!l%|uftCi!hE>WK=$)1s;icYuPMXv zJ4EPR=ivd%0-B}Ii|u{92!FIUy~?0eWSAmFua%CK5`Ur+#EQP1TZsIU$}2#-r2}5d zFQ4!vK0XBVBT%27FyynRbO{vNPfvXY@FM;OgfQ?beEwwgkPxZBOc7x5bjoUEAG|X$ z{*e8`nn18JyAnFrQ_uhb>B)sMXxeBgq(>eKTMnT>tJD<22lGY5e76ju8~Z!!z}1A? zht7j!?YG|kKJ#z7J*)7)Cx8s};7~oQ0U)Jb{NfyUItLyTPO!C!@kAf?cZ%s^;$jWq zxnDZ;Fui(@x&jF^zvLNmKAc@MM^Jk-tO8`ljwAU@(gXo$GS-OWD=L36w6Q^%s0wBNURzYz$!UyY>Ze9}7Oz)`^v4#-TXO2mgCjWbau(H<~ku5;b3JIFIu47+2>2Cx_;kZM*q z>7|Iqm)dcfEQhI>v1*a))p&Tf?>Z6#U3x<2_#cKPoh9CqeFsza|G8TaBGu0Oh*cz? zQNI|&T(!A;{=EC98XPL856+t}(YeflVh=CGjiWw-wOM|i<+bfA6c#|fLNMT?FuCbm z=Pr0?TuVGOXWzO%KNEd}Be|kq@2PBLd1SIgUt@Ye$UhvOVLx&EQ zieG<#;Iczw|F%1GDca&ljgCU?yGp5nuZWvwH?8z?u@dH&`(~+=^(oC7z3Muf0qPRe z$=tc0tAhX>;JX1(xjo*Gw=dZvA1k{KvEqf-U7JOiFvMw)eX0b_#s8sIRIgem%}bcM zSojGd)7367=EIF`^JY>dQ=_QY(1W=_#!d)bp?dGC6Wq{Pe-Z>u{e1+xMMtA{u79W##agMxr?)QzgV?Lk9hDJ=*QL6rNUgq_QFmCZI(QHij&;-s_699 zOo+WogTw2N+QI&eQ$qJ@-@ga$xCtpY!5L!xMdCcUMAD%<`t`eY-z{eFM5Kml z>lpaT2PFRCLh#??wb5&cxV;GWop3Kv=GS$k4G|xlES%!ln9t5~-LG+%bfLZXVwcFt zw-S0HebagCJ|OcdJthLvGxONt$F?gY2BYM~`0t$wM(48fvT@*(Ab_POWF0bDJzT6< zsU}TyUld8;` zT?)eEl~=X5Ede)F^S%2{59=-h?3IEEdjE{|;nq4MS9>>rV_sj^pJnHqFZ3vXzqwZo zlZWH5F~tIO!`)DA_4kKr?mYGKWy7Pu!w+0IX`4s6y z{kh*^zu)vJ+mDH6K4Qod{vgu49~R`Ic6b#m%o%tP9Z_J`OLKQU6h+D>j>%Kuv650F z^cYW6K=cM&0Ce}|=@cN)dA)t>Pzv$UOj<$bF02s8x6LKta7kTWq3_5u-_W)&nTM+v zK!D=Ta&Iw*-^Hmq2&9>NruO_*JRslTuR28p^%lASyK_8XPq;r)GiTnn zr*bNm+v0lJkZST;gzJ;IC3&Ns!a~!z@}YDv^R!`tW9;SQD>o9uhYJHT@H6w{x5g`OksguUT}KQrn;Lg+9k7T;tH{m zW-M^BEV=NNp;OGJG0sdF8i3K?6~) zZywxLh?*$|eURyB!`$1_SKzpmv>rG1Kd&*Q?>xx*i&(bIjH4qlg0Lfm^cMW$DS z$8$5B|G`y&gr%G)8aX$o+NC~Uxa!3U3qS@xh7HI*Ehx8Bx_uWEEcL3O3qr{|Ox5iC z)aPJ}tRIa?>{}&y-p|J3?fwoHmD{W$j6zrnI4p1;SWc^_;bn|^ZImpRED{YnaEo`o zrLH$7@v`;vJqF#?>3*X&Wt=2H!^R)J$PRJp47=$Yy1RM)}*Y-+NIp%81dMch$Ebb``~6 zh{8<{r&z0XB>9Jm*OBN!du|RD`jI8JZDlH~;ppttQkTUC@O5sg`yhwz&{p^DV%mns z7+7MP1HZlR?c4ecFadA6J2paW{^;sAbc0+5BD1q2EIxn(gG$=)K4NeH2ukR38!Xo5 zWtWoe3M6*jyQ4t>eZ;uY`SUw+f!j_n6ur4ZaZtNW*^B{-dj)X9F46nSErzAI_i4EV zf2aTl=UQ{&>->OnMRY~jfci&WsER#e96$1f}8{w{t8Bl+5jsB7qSWjUuz7kiT8z z#>y1g(HRKm{TXk5BM~r4zU6!O3nVt5tGxZF^4TAw>2fdm z+C0&zaM6#&jCVJ8vBK(TGN4YZ_x4^tzgr%h2mz%d3ij8>>oD51nB2)rvE=|NTQWvJ zvKflkwgI_(eRTf0t1zzhQiU3UV!Cj7=*TmL6t&CL!`n0yK>Uz160`->DD-3`LjM#$ zZq51|yjs>IRi18yS6Nl0^2i>b<@-0#*eE=z7x-+tJ{p`;ReoESM$4u7$dRk*quYMxDZB=?NHOvMB1$o;{w&Z z>QH8liF3{?>%L$k`uKgvfK!+`njhw)%qL5$6BEY=>3b~?9(w9>W*ST#WTXi_>Iy@} znY9I8!J>Uxvbm^O(eh{0UL`#hroQx>&C-X1_S*LE!@b{Z*gk+yn%H$F&Tzc8er;He zu`x$_R|xSQW|ij;5AXOo2+n;{y`XcEwDWqn&z52UaaQcAX~m`bm=XiiheXWOz*qSIxTI+tJ$<*Yl|nPT=%^SN6TwEm^Aw+hEb?aP$EnS5kdKN2neR}0W| zv?)r;-m>IRO3$n?Xt$9~dp)+12U;Ot3Pig$ze^=HaPBYD&wn@ zZBCQINA-iwJl0oEJ?aC%AC;OtDsG3;-|5di|hNN_Z$=rcoy-ba>d@m^wN9<81uL+ zoj0E62&2gNer^P1jKp(6z|8rNz4;L3;`K>0?w!S2+=F`L&P-ZiC#QU@WUsv3ypV@3 zi(PU;4`Har-pEfGpub^&^Z5(<7yE@*+&Chw&BXuOaYrr2f8=e4v?F+~hD2h92SCzg zr%IrY?Xrhd7r)ia-PuIy(0gz}x&%*hftNY@xW2reAN3hX1W~WL59A8-`GKLRf)!$h z5wT405mn!mf>f7$lJ6|k-T}4h;oPn6+)aWTfZQL;D>=80?^JOq zu5tNW(E;P?o0$IubIqu;09`z3n3!V2#df_DUfasS(plhomA_^jerUJbQ7QXyJn0?p z4ZH+(_1m(P&UghAD$tL{hux*#o({ux`SL`xEr!G*4%THR}u(Z1HUG07&1ACKe_v25`5+fjdoMt_)!Kfrl92 zXDs+RFG=?W@-OPBl=TNr^GS{JSQz*@A5X@t(GS?Bi@NuD56>v4i4rD>ocV(+cr5df ze4YC9g)Rp{IGiG~_wvzYr$hs{#pUZ+jbH}GBL_GO-l$wu!PUn}>nj^uZI7*gK9Mr0 zVgHv4D69MkR|^L=AQ(^%3*}lq*p}oUXnjZg58%t#F~%wtmq7`{u?LHFBcgVl0{EB;giRRSL& zY`8(@h`zQDiIKH)5vn-inmL&E_76=W4orUtttY`cB^Q$Vb@#rn!(4au#Vv{Jwnq&t zeR`f*xgJCoXtVO%zjG}Z9kyHWH$12!%8wN$Lepnu!D++fx-;8of%zCT*c`pe(LeZ8 zC#`U_)+LC3Lpw3GHQV%txRrJXC}me>JwhV)?&=nI<<3K2xJaDIqN2ZL^;x%1Z<)h@ zVOX516Cxa^Yb%5L=;AGoq#!wNu;*i{z;c~DWdqPbFIfZKyK9jtM5UO*wb*?5(v1Tf z9ner90L%#>R-mgS1E2%a?nyXO<27oedfDjVS?>uqc|1Oc%56@SAo3f-(`j@B-@9G@k4w@ejd{x5rO8JEwrtJO;^lB?*DBEV zm6+{YxObG6P(50O!TR;JQH7Mg5O^W|;`i(?5(!r?6+IriWTYa*l-#YEDff{+j4Hhk zuA5t&tdqvIrPy4$oK-0)TWAOcNCqPyD|-n#`)n&ZlM3*}p}>=T79+9^w*tiIj)|wT zW#L7OpPA)e&D^#3&mb;dXGxWS&xicnZ7wg$^r^Kyn(8e_5apdXsG@{@B>T@ETXT$n z)^9lJkJo zQ&_ioi=HFqm7Mrp%F;tvAIB($^qQJ(4c#nHhkJ#QsPsjdf^8ETT$6=cAHxEF@0E@Z(Y#wTJGbs- z6Umoc%Iy;5pXDmEmrb0c6aWCb?wYML%WjNbpN-g5y@~O73AsEWem@mX z`!(0W14-zb-C{Yyxr9qqQv>GwGdg7e`ElXnYNf}&dOasxaIs|rPIsCH)D}bJ&cRSX z!Q%biYk}538Dt)#xAV*^q?Xx0tSFt)->e;>sET^iBzLY+HS z%BfmG#c@D9b~Mwf;i)LJ*G@t%a;W%WotB`iDLKbIk4|k;zCBb^hrs&n4i_*SyGUHz z_o)yM5NItB0_8v@)Y}jEq&K;+7aFb!4l#mV=Gg(B1A7+~qbih;677O#)t==TUs1h4=F;TBT^(m+PZ|V+ZYZb9?7;CqPaAZ-yrwJs204O^_Fps5(e=ZgS))Ga zwfFLvLx_O+SaaO+`Mi%+G#k0FU`>r+nC;GFA7FL#n<7)Rp1**)E*BFEA;VC9%)M`e z#TXf|j$o1_jLKuKk#X-_Bmp2jVj#Udq}0w0Mjse6cWUXL<5w=m*L`u<++SqC0g4iw zzt}UyER;me4fP=%n3U?e%NQsIjXIY;3G<3FZ!18KDmuTo@>!)#6RMEgR22DJob%Jj z0ZPG8fy&nWdui0})WY?arvbG+I7)RJNTmp7bRV~i0$JRy?J!A)XE(_F$fK2-Jl@GJ z_{Ov(snpTPiglqlCscZj3zl48v`+XU(xcX6^qr}E@@0z>fr>?aXhTf0Py?Z;F6ddK zib(FHIM@bkbF!px=WuPra(|>Xi`{5GH;uF3(W!BmGd8vv1G}vuVkCvgWV0V}a6H$v za3-ltl8`giNbQiS(asUz9`O2R((Jkvv+6N^*`zcNS_nnZy&alsak~#p5%mpUZ2}`K zb<{)GW~@io=Y4{0yj%Gl&+H`S{!tUuuz*2DA*Ax#!^b@IbCJZ4t$1d?oe$q{g#--V z3E#!SH~=pDnLQJe-7^;UgjjVXpk~eY)Bd>|!f*D{uVL~{DIeDS`3)78^f<0p!?!6h z<#p@x-b4nq{teM(37br`U`=s29fOqH-iQ)L4Z;FC8~W?HRB>hmz-itl`O(8RSx+&d z4i^vscg|lKFO6o^s`k&pwF++NB|F)sy*Y$6R`9jX)$UW zrfj&&9sjUOp_6DfQ?Fe{a>NKwHVLiT<=?5;c+Wl4WH`WcrCX2gf}%9I?{Aj}!B;og zubhvj?PDe)l#ff$U~qnf-PG2L_<$AkB7aUC=U}ttjoYQDlQw4gT68?N^ z5>DT}v^lC2z(){*dSwGd0xWortjrdCE2-b*t$3Q8N~)>RUJ>jn43K}|Xv2dd6d*FH zziUEinAu=a_6Jgho-|6!!Cl<$sWo?*O7*7Rpd1K_Z5` zs|jfiD7P74&JG8c;QBKIKplf7$`$`8bjy=(Y3Dtnvv}9paOk@kxcku7YP) z5gxs-l)txZ5%F#OM=;kcjlJw~ehtG~xkxiUe6nk_@9!7D_QIQ2Fgu~szcS~KGF9p)zMLjBjQ5MM z;_!g1pmm=U?|Ryby=E*tmU_Yq3PF>Cz-`fJavFAiNo z3u^K|Ogg2RG}SS5W`ZA4TBD`A3EF36s)ZfsjuKiOnRA`}3M%WUCyg0rf`AZ82n$$t zJoMt-Pox|bn!0FI7StBc*x^ymcn}gKQ2Z?_wJrX(0y-z%{YL+R)Hm|skf)cR@>vJB ztQP+RH>+2Si&9u^)1BRtif*Y220-e;Z;co{z6mh%(a6+-j^Fr0*p%U!j|S*WUGPz z=6g?_frRpWbv|%c^vQj;WW=04X_0ptnHY9&POV*8pAs7;nB}t z3c6y$=fE(v_|app;>D9(;$k9tOlq$u$IgwR;WfK=-8)?I>{PEgm5xbDOc6ZE9K|PP zI5R7u8v-9q10fmSL>0G^6&21rA~wR*UrKT2r()8Z4M@4%1H0M5)EiP_+m)l!xY&%`ltKfrUS%=^$4I0FiQ6S4ms8&2yH%l$uw(7gaMl zWy@^*M{hI`J<6*rmyb+@oh(uxLu?;7kf1gduy;keNVYV0w@Gqdi8+D#qdwbwO zB$Ip!S8>)(^&$+wLZmR6E=YWJLWxJw;5t}5SmfBF<~>^kGmfO&QYrh;#^wUi_1@-; zfp~T$NqaMBlK{e8j?#c=J#m)7V|*^;YGV7Ma($H!Kqg((E&17eq-02`D5`C=&x{54 z6Y191{ji~z9TqG;XMbXE$fi?0a;q)x!&;ZPpuc{;%TVMw^xX}2;3LT}Ai&1!wR+Ii zvfN~Z4D@0Q^->tIAcj?dq>z3E)P5+c+QOClt?e(`0pv94Z5+J;odmyWXKTPF$6ICl z#-A1URt0x5>l*YFnw@RWPcy>Zmrvh}X}o@jm|njrWg=@rznVDET{n!zf_=BFYU7e= z#a28~c?HOC3qM66_aL$@F_uW&Y1oT^*uPk)l(jA+N+78C9bTT)jwEo`%wfMHSfbxn@|Is4iGM`BRF5jgYPSQbf} zLjhXWjV%CH)E39tJE~G)pU!H$25HI^bfCIOcq;Bg*!<0@@GvGG4qU_Eg8?a)8R=aj8nsFE_9dphT?r zD4NkMxJ*aBJwS&IK;H*V&zLZSQp`}jAnG`~;&a^AOK{PGr~;p1tBK-t`LvxR;MhhL z=N(@p)H+(e`y*hcT^`~pAC-63r&wA|pwC_-F=`#xZ>Pz3d5O`myPl!99AJod98GJU zN)(UxZHZ7`Zld8@r|K1AsX&-Fz)Ql0hIWn&wwNjqUjUjG))BZ>auK*YIuG7NbjBE_ zSe_=-rSkY%S_53o?5-1!T;fD{FJW!=al;~FlmizD0#J-!b}dWsQAbq_uFtP=P&FRA z8LL@xv@jw18hHOQG=@mw{sCW}|UR z8t!R+zP#Fr7jzIr7EvVK=n z?II0v9vxkbF~HeSivcsH=86rq{OYz3OSA?ln)LaL$Z)^Yzw=cRV!-JLV1-R&=qyNO z)q)|zxR1S?9}QnRVE&;@w3B=R=y+Ix_XWtK)Dn3r1ViL05Nj(Wq)z>c{dn3FKtTk+ zxrtAKg}Jc?eu|ZL+XXq4Jdf^p>W~|{Iri_so0XC3>#|La7{%KUtGSY}dsb~kQeS6+{L(9ARPDX>>tp8RqhSwPr zp|xiO;RQYp;gDX>j`U&0#@wayZKTvJu(8`_Z;rUOVJ@^KzMJI;kDtX0rL;rhh$?($ zQFbnc0^?Q<;5Tmf=><>!Fn)!KAV)KgfzY*{CDGeu$+<@3(^51&wF!{d7{P<`pz4d7 zrY%tW*Wr2(O32z+sh70mfv;fGxJ+*1msE79)4?XGrXkAd);6Kh-+SnM9Mw-u?&n4b{#4>fj z8$*-cp&cheMrPt1|Ml1e-U%hG{YD@y`~M|)Yle?Y>raIBDbC2ns{J)MPancEpUpIfUI570~Nc%PgOVK2$6Cg#U7O|cs)BHAN%U-U?a-BwBj(*oNc^4A2G z0Uf`Kz@ONer&O%fwz)Cc!Ochr`L1=k@5x2YXH&2_@E;lbRh$?RZCa%svE;|C?s@s=0m};40pLC59&lxY^z^{eR`I)fNMKAqca;5S-9@>wk~ zR1LSJ=UNmg=gBdN{m8>lZujTP^B3PkUCcpXT?Xu3;9foke1trKamv zM=GDAHpa8HYTUY)pVYI2{v4v^#GM?TkKbW1c&pDm?1REqszbG%l|s!j&$j z91IDFq1z8qFRIF-_4PZJBeN7OmrJ3@crSeh-7}fz``fINp(gOkwy4g(X`r?kUE&mPek|NMr zTGhV8Hu(_0D45AWBvJvYEs?698r~Xrf_`Yu$Fa~YcpbSjk*ObPqpQ%>nnMV1@g?&= z4z;QsRl0z}$&=b>VOqYp!HzYe+0wZSq6owdepkpx=0SQzB^7QdNvG@xXgg*q^V(H3 z!Ih@I>yy3REa7?C#AaOdNqhs+MVTg9wRLWIXF>I*)xndgNY^b@b@!!m`v> zn^SWtFn#yMwQYv3K8^^!bOzAA{@qEiNyfFsI3&x0rJRANjc_+1Tk3rodz@q^N|zBB zv#@BQSM}>Aj}a?}M`GBR3zX7<(&6wA=g4luLN?HEr~+z`fDD|^qwZQ>8WPdtU;Yu* zHfM12>ok^DJ{iK%$V?M$UFQ5sjUaN>m7?L|sO|15(4CJ)^%FQL`)gsfR6Ixf3*PZ zR!xth%5yG{2utslR1Ix0%ik7`4X%Q`9Y?#7y&m~X4f2vt7lF{(XyY57KD<#10F*{H znm{)gO(L<+nE*Q;{@#79gsfb}Dc$+|b}l*lfTq9%(#xT4>)ygZAu42~%sRMwNA-e8 zwgx$wWtJ?tg+Wx+4jeVFAZf;B7au=;oqHlHZ8Y1UfYT#?od&RbOUvN4*^R%Z(QN~) z=Cr+WjF-TP;Cw32(^V>1tuSvid9TUm(Of>Fm5q0+Zu=Xu%J^zUWw@Ho;)Be%cYfTP zE?*lNW`)_0-XF33z@w^3D1XGd&8O)*px!%efRcIMFSRFmHvvZ(%M`T-%U2GjaCNzVHNot!id;_dMp}!7P%Tx#`t() zYb26ENd^-JD4>jigDr%i-3>l}#^$I50kxFJ{pLq?+rPhoXyowteSNk+5hP3N9T;S; zFL_Tf*>JgnSQt_`Gp{zs;+O2Bkwh89C$^pY%45{+bXHklxlY#tNTiW z`*ZY;#*m!u4KWf6Q|Pv^ZL*VM%4vWwyXYV8+uM(N+MK^+cV*K#FVBtm(`EGpUOggD z>>;oGp(r+o;~E@!3mG%Ku$hq$s$R7#*Ut7y3VGIQ(jT}>v%UY$+FYWFk%`m4^PE$R z-^Mwkp*Zb6E2^F-B#!~NIPleKy5ofRS}o!>+vq1l|AluL)1{QNEV6or=tqVd_gMbP ze(0?4h`;-ddmpPjYb4%Zq$l|mb6sn@F^!qjtNX@L_~Q?&Zzvz18JJZYIn*X9pD%hf zNFF7}pnWXdqPx4AHHoq-_qvg98q_1NOtWlo%!>SJhd^bqzl}ig)yFj_juRt6gX&jM zJn!%1;T~q5>b!3svm=U%UVRmR!+cAef)cZ*G2|ou4mnX?BKl*@T~U}74>_lt#OD|W z2-9sG%r5${p@b=zFTPs9$|fbi_f>vtPWuV0X`Q*1k^v8d>lDYZouO2}DyZX1jLKbpQWAj;?M zn(j_%q&uZcK)SoTk?t-D2|?*j>6BU;Bt*KTyFp^yCMZ+Yi756lJTU7km=exo$RYbb< zVUyqZjeO}=+PXKA1qOB9TC4OXW*Q7-tOlwG+upW{;_`nCxew$m`~sA3z#MClcSl_% z$jw6L!b>P#S6Vj%_q>wDW^ILbZXYw+f_onADXiBX$>pX$555aER@yP7d}IG3Grwmc zWzzJLv!wSiO`35EN2~Eoz36mWxQSuP*VKM#u!_z8LhxWZ`_Dgzkh!bqzj{Hcs`uEW zQ0Kdx*`N4!N03PZekwuP6w`RCZK*S5wzJ@Xr_tj$e-amydHVZPjT@RVFxf zDc0OM`F>r)&X0G$2;-V42^9%Tbh`hJUa<#KsT0^VZd{@)svw@rRSQfgD%+S>y5Js{ zcl|W?YxumrBCx(+x!7QcxVT=M^P#!UOv_Q1l_+P3{Kh0i@q^54oxAf2UmfO3DAic| zJI0T`6cw$OV;f6C)%@ab3NoGCm&U8Lc-Q8_g(3}n(<1~j2(qo4dBVjQK3!((y~BDu z5-Agf;7lT>7~IaF*K7u(gjwL*UA%`7eV>Fzq7FP=93gKS-wI`PN{ltc@*XWUb5vf7 z7X|MMV?g|V$s|FnCES~aFOM&JL?Ms&?ay{Nky5o;^VSJ2CcV)c?g(qNd4@6sKUOK{ zMX=s3;)Nj#Ze}bd?$i*L8FFz8>S3E%)_Wx37B9)HU%CPn9dN6A^E> zp+M1nCMPb!c1H^^>H)pT@_zasi)k6NCRx>{kVIyK)T#V{uPy=t2p;(=BOVO&UqsAa zBg+F?%3V8&{1a<+UjBXuZsh3xBs2GNaYJTEwI36Xf)-+FxMt0T!JCsnJDSeq=zn*P zl?YkkFY%h8De5LP!U7CtM5}w{TD$%ZH!zWrD|qCoQ~br-U$56JR?RnXL-r#!QDbNZ z4L7ER&{-Ux)t^4r^91kq!#ywP?e8Zq`*&~Db!L94;?(IyuFrP)=Pd;Vrf6lTj<~a! znFu4w=ooYdOTcdwq~~S++vS5K|A?Fu-Cb)Xi9Kr(i8Js_K z*mTG{hibleinffLzGaInEf15-+GIQ;k%y7VR*pWT`%dgyXQV?h5326An(KJHgVl6x zVNJIgrxnAjzw4ai4?cc!w6bG=z8PHh1b2w`5Ql+bWWaBrO3M2&4R5J}V@B+^E-69W zE*IU;t)_v&Q!6AV#@Q*rMEu-N_4I-#_s^$hJ3>?##!cde8F@n{Emz)EkaU@8p`!#&_F+lU}lCk~jTVzkN19MVyzMP$G?ds?L0xEG=BcWGB2!+6gx_R;}y1@hk z<=Gl=BsszT+4Tc-7I0F?xJA<`vf*Ef)zDbnIh^#lI(-;3(K+z{Y-Lr&r$yK?IO@UG1J($A*21A8ju)T4=k zO5BG^P3<)w*q2hrcFjj3rO5f>Vij2QZD($EyxP@qi#)3l&NN!51y^!i&v<59%GTSq z(r+7=2wxnr&t2vQUq`0Ks=GvQ4+-&Rp=;uso{{oki*K3H4P$3cREZc{oW!usoA~t5Fon_pvEp!yb~4AlJCS!(mR;14{bkM z0`_gVqQ~T4=z3R8sC4*^3V!HRv{x}1Euq& zvZUW7*q$#ZO8l?ia}Xcel@*L(ioX>2m4opX2(M z|9G*wiB2)%Oa0_2%-fLMOIvpG1A@X7^eIY?rZ?bxTPi2jw8HRFvnKl@;w+XDq|=(M zVidM|lcI+pE5vNwtm&Q;#< zA@t*ZYw$h%w@2^EAMkNxdhb|CGThV9SB7J<&A}B@erAU~oVT&0bO{jEH&x z*J-0UKPmD`%>n2&`yshjwbUaZ2EXxXZ2=>G*&YnJOWhO`f3!7^r*!{Z86@e7+Gl7k z%tcyT>4{!QppJ2r&?>WG+KjvKvu~=8qC*dS1Zr+r4VfTq^D%I)##J2pm#LY;VD_{3Q~5<;r3E z>0om}uSV`_dtxnET(R{0Q^kfWfygfj)rlB0o8e)#C#D8}AB*s>%rLUI$j-p{Cj5HRxTZO6zQ34OOWODkx z37k~79JyZ59kz3g13EHtA?C3hYJr{FG-(a?{nR;D^ zTfOr?Wml$%vA#!57sl8bQM0o+zR|yP*Nl-|>crShF-y1Gy#EEdX7;}4U7qTk-o>{w z2lFHd^yU-jp9(u6d9Wa-vI4xHfXSkBY4* zLtI%j)?=;*Mlsu;1S%-CvS(%DnflnxuZI|eX{ly1nC$yUBjFe zK&N*vACckFZxZEDDhTaOw4_3~E7xr+b!f}H>h59Ap|9^K&;8Iz&>2j$ul=oR^^JSg zCSMIqgrhK1%q&jFH=DqLP>4*>!&2}=Mv(uAzlcEn)JiPp<&4^4CsU8`8L@4*=;uIJ z=YWYzZwHNn7JRv@Q#%Pa-;=VMJi%n_P~)H(?)#SRZw8#$J1zB|W(Ha<#>|AZ!B*1* z2|{#|C~uK_0%KOBe`!{(QqLxxTHYVh!pciDrbN@0TQKXA-XHItLJV_8lgxNh$cCRI ze_GNu<3A3*5B+bC&*V=0 zW(o95JlXWDxk;@Q_qV|gi!=Bbe^*GWA9vnW0`=q@%$3ZIBi94&?ebC}_Q?|`jH{Ad z;^2px{(2Bn(&s-nQ2da$sa5hZ{z*RhgU8dO4Z9rPq(|UfhjE>OoT`avM3~Y z`*#yBqu}JUQE; z7rC+I`MliFPXzsv9v!QzKEvN0TtD82mO`-W#cWTezb9^Ro20Ft>;lI4*kb|=bve?F zQ(J_V!uMWDN|Zb8#Suuc3C0r8=%qJhZ2A*c>n`0)LVP4sYVUfXFEk55&v>Q=2M61S zN=;9#A0@%96ZVi(!E~1u72s_nRf-1_`)78e2%DTcV~Lb|uQr3sIpw z{NLhsPRq%9PdfES${yKN@}sw?9+JxY=n>RMV=3ErcdFk0(cTn%Gh*gz?_4bvJAm0P zP?7m)HbGhIvc{kre=kP_sFP>=4>+5hOQj8?SA(~Hj|>_w{#FjIlh7i5iRvC}Apa-> z`_B&93j#7+iOjl)l>c&}Xbr!uU}<&@y2Z}^*Wm@b22b9Hz6Q>`OsxS|7KuJ`#0#8{ z&x5%Fha}eS7Y@6Yd*$l#vE2mUY9J;aJR!8JZ#^AFwe@_d)_ZcAJFJhMsQcj0?fJMV z%I$v8>UlgF9WZPuK!P{CZrbwUg$Fkv29H3@_H11K?swkw#)rrY4WWM97pY`>kq$F~ zvFUT?QuXB?ud$!I3D29x_g5-`1O^)UdIbBPAL?iOD}*jYR&HFFzy$6}$Hf{-suPdX zMZVMlzmq~L-0dbc_J4jeT?TWawOuhbR^!u_MNp#@?b=7L&M~j=AHV+cy#{4~U%DV? zB!4hxI9J-3T`xdcpv$ zzD(s01PtT0h8VYK#5QDQ;0=B!82s$eaEoZ$C34}?y^9hD?1OFS^D#oka5V&J$P&oc zTD~7voH>DB->9?Mek=IsF6S&SXK}z{;?{EaW8=LaoJ8$LMab(ai=L%N_G0;iM23wG zoEu9aF;V}JhdIMV8Zdh7vbkTE_or+y2gLlt-h2`f$KKTgP#9j5*lF<^Cbw&-G<+UX z`{_OI!UyH^S?Jg9hDSw`(V!uaS^n-z9)a`gRo=H93c~{J30WNoby>eI9NVq-`1r{% zU&N(`YzF8{NOkJ{Mn<>D|mN?CptJ2f7QGyIb;x9C#76UFV=Adl%z~Bm&T%|E;`T?0B zOCEQ-PwKgBhFCf8nQ_s|a9+81vlhc%a8+%$y$-Ex?enrMDd}{Jm9Y+!e5XbV< zzJ1`lhvZoRL2HOn@0Sg$9(j+B?v`-gpFKVD%2861KoJS6i&TOAhwlxB4sFc=3(}{e zVme%A2qCgO1I(vLe1$7gI@R{>D-F=1@0%s$Qv@IUL3ZS*2I4OZQWc^W>Khi^S*C0z zHNTI%@#R)nQ(4M<1>ZW)w+63W&LSkOo}8f6%+expr*Wc0;B2VcY^1ZqNo6bTWk~gv z!mQ4$$i93B;^ThW{{19Fc}DMkr7v<*c|Lf2_oIzt0r%%vVI z>7}SBSu;wEAc=#p{bVzr6^)oNb+2uyxMGKi)O&8w^EhjJ2fbZPgqQrx;uZ9K%~Lw3 zgx@9JdxgU#H>Llx>Oq3O{mU=UCh>)`APYA${s?8e+bJC|Rz5#WX_$U<_MF?DpgMtDRn?P5_EL$0oxi!tHL*K7{6KAC@{OeJqEKkQ_MQTuNTvv`3kLX zFnrUEU+J)5-%szDC%>&8RPS}fAXFm6_A3mL*?#}*&`J?!1=$wVby+WXo!S`CMa^YM zIj(w7<>^BggjM|*2K38|XSXj=t+zKleJ|Gt8UMThpGCnTy{8XiUobo8ohSo%x5pFA z6b$5ZSji3SMa9S8QcO>YvAMt~2A%i-_XFgKQc^ap5LnI6v z0v+b_w3ivm0`khLzl0|vK%ec@@@7sM$*Pf#WRfKg`XPI)iL6$82c<#ax|)MGAc7h} zPN})OAm)hTHzJ+65SJ?WJz)2B)I=9JwqNczFYpbY|MG2!BT^z%9b5$d*tP0@EQu7L1M1X}y+1gkCX-Za=_=@zv)60QuinIb}DOpL4 z0!us!EEId%l>EO>8#iY^xZw>wMry-i!9w9FWpk2&*oIQ&Ca)+NcqxjyR_#j-jFEB4 zc2T_{X&fWlXJL*!jrn;&fLsy>tTeJp43KYEPUl zm>DIau-Z)t_^BUe;R~}LfVl7{GYq4!4oITm@R`vIo7en#R=5a~F#WvD6Poa~Z-9!X zln9~7+%S3p{T;zPOe;)v*qi_V5fSEzD>y@yRGt5x&+9JcmJzU0Ni}McTF&OBXcL^s zuj)9-n$xD*0&XGIqLMg~>h2;dqj&0WVQFVfA%Vx_@op6TMd}7PS2TZoyhf{K`$)GK z%sVH4pghIDKk+r%bmEzBGE#2AM3PR>yUR#>3F)k=VkkHTDJFl{SC$nh)SoD$8==no zY6G3Y0Qr(N;5*a37UuVU#<`=Jk!4_ozZ4#}gztefgkKM@eTt?v#{QOxhG-zEq}Y@I zD_lIE^8{EH3J2}D(Ga{D|(nEOfurN*)LPPV*5 zae|EnN0%c&s+}w=^WNDv1j|IX0hn^g4iW zs@%Quj&FUTq4jYAiH})}jb)1Qo)s+zo80R5?q%Ez#QyJ9H)f(sVtqfaifMGwzBUYD z+mWF#*pIYs?p6sdemZ$3aN1`Qzdr#;?GY8!jHL#K#oaIhQp!Jxw292$N3K5=Yb1|i zpU(dJ12XZn0?3T7-}`#J%7snX^n3HBLXGx~J3V`cEP0?iH+~y%t%x`MQhk}22?8Wv zRFv^Z!aJh%G)6~5Mn%S>Rl+-dr3nTrYQ1;Q#5C%T!#n;q|E8aoEjTc*~{*|EY zJ3;dh(rVZ}6M3(z#WWjGJa>HXvQE29TDR-1*0I8XrKITAMO9$#;=T5Lyx!EULQ=>E zcD3ZKTZyaGD~lz!bMRBy6(*X8Wk6B*^+puN5WO1sZ&)DTQt4nB2nS9 z?(I#U+hwn-s`}}|4JoFj*uc}kRZJbIBc&Swib71Ecp1ct(GZ?B%ICP9sSCgFKnakV zeEzPyb4{1fO@DlZC|+o?z5;pf2`)SBe_DXtIurYK^j3HXj6uDbaI@(n!dqW7E6r>h z)C<}Rp=p^z;HV5Ukp+m2O|Q%TQ^DpN+d5*h6|%WM@n0;~8EMbJ6Q%^$PXgBq5FPK# zO)#`z!yQ#BlND~wDNJ_;H!+cfQcYTC$e6DzwaH*YU+FB)ruK)85}r{jg3f6Acdr>H zW!X<8TxQ@XZJm8D57J>(MnW+k;mV_Lk%Iw{T{Z6)Uoh_dxfLo=y&6A2BHh{ebtwfm zJ~K98IkPSn;>1?soTGUH(?u|(8h!0s?2x4~u8#w9vrW0}?P%!z&im^1fORl;2bVk^ zEg0<7)*`6_K-l;U?cJL6^=wHCA{>$^ye;7_Gq`sf4jjHEXr*zT!tW}b9khDOO8w7R z{(NTsG-A(`yh)r!7t1qL%%sH@XWL@gbk6_H0L_hVn+1p;Cl=I>fS~8BDCD#-0pHooB4%Ol z>RG6_f;`&OrnUBTDyXOF_-obFAjAml7nvJNI`>s$#GFfXuOS;5LRdO}rtAqfYx$G1b2Nko-iHSoO-}m^MqfF^ZN#ZCtsP;&& zqRKn<54 zHDle>tSM3DK}+pB!$z@uey+x84HNC0NChv zt$ZP#I&KBb;G4p>bz5dD9#W-G+Q!L$P+;m$litZANiX0N>gbF!NJk^ERPAYMOg+6g z7SElis1wkmI*WAT_i0dLIp=hu$9{ijH#D>IAc{G@AVjo{M&s044-lT-P)=9zbCfil zd;gXfH&FqxOW+!_%MFy%1rf?^OB(L^DAXgscX}*9*-GNRu5zn|b+WN5rFn4x|_ zJWYDf1D#Do!b!QptYdMZ5p1lx(?kachClse2;i8}?9u)-Wlvz9@_Sl=hV|yoZV7)F zjrTMTm53245tn;p?WE7jl&}raP!J@=73y0f*rt3tLJ7Q!jgwtb7;!7I^;uK)?6@4| zIh@VSRhrrYXfECnhaRi)6j3=<`sA;vj_v_nMDfe1+YS0y{=rwa<%^vZZz5Zl4okM6 zo{?RFVN+qkpVtGVbYcLj3t1PtWgm_*iY7uRfVOJ-Z^sKE168LmLIaXYTL{1pc63tk zpCHp0(~Ndq|2DbXaL%#dC-Fw3zeso87#PzE^>G$=Q@(plTO^Rl!tnF-t1W%EVm^@ z`~t4->)HlA8S`AG;QO9V#A1N5P{b`}!1CCFi&Pk5-TuHXpnc!$YAn)dP^+K4SSK~} zdzx%s!Lwtz4ax*P7weCk2+U;#o$E?e3+Y9RuFkG2(Wv}&gU)+*{Cp9b$ z`cupAFfo`xQy*gQx6%Mcah6LE$=SY2XUw2wkb1?Bb=V^L@=NYZ^3Cxl5Qr-wv<9@_ zPcqQ|;f^)vV%O5zA(p87(Xaq# zeZ7Q>g>-v~+h$N&U~R6fa-+!j+aC*@zq4!g7F7~Qx6KqWyT~vS`)1lwrhvYoaGbx| zzj4CpT)^(eYT@q73Bq=Akt@)_26XX{c%ORBG5~~I%11U%U{%|itB(Abh?KF+I?AL= zm1!kb6ydY7P#yRiwQ$%gq zN|6ZjV!uCrZWjPZ%L787fe@1N)j<4}odZ@D(J1UFqcQm$@2DZ`wT)_(l(%CNejHa@ zAn=ET)78@V45ctY4!JlL12w%=FVend-87yRt-7AufwC6~f2{Juax=#sW3FIux2$_i9ZX*<4RGM1x{sNsXDUW#kC?-U$JGRS*v z55rG)zhiy!`}pKaaCS*&bMBvB0A0xq4qaHR0oO0qVmj_z1-MFf4Wl6D(9hbMEH&%y z+n$J%&?nE53)T>Y1l@9<6i(KT2|F!#+n3tv(V4zOYt5lKZSAGd9lI(I@V3W?z95%n z(IOkTwijh@xFhP6I1)bYWQ81PNhE^0p5JFM02!$rh|(N|B^y5wm-x4|nz4{9eLmRn z$Cuhv2h3mnVYFQuBoUqNL9D!%u;_0P7lrPV2edf$XQ1oaP+bqXvL4TOpbo`5VeVl5Xl)X@CjHR&3@+06pL`xDS7#Q?B(mYG^ z!%JTI>2~AC98(6-jo};n!*rVx@;gLh8#0}5nMBI_r~G4H@ypGBqaf#PmwQQ6`oBbH z=hS&R`szS!3^L^Wrl)fT!jA(ntstbEin9j81G%M|UU;3GME0-^m{HhIw^-jBnzFwT zj%NH`efM_?b4S(do4S1H63RIBaIGy~*)m zrS`^gJ+h=c`HEmQ3M2VLY=t~0PKqldp;RI>O?D1rUEdzlRRN@=8A4kOYtQS9UTWyo zag?daE)39~>4ihtn}C|P8`ozH{(2Y#BvND1D<`Y2{AOWzts)>Q8`tL~P*0en89gs@ zt!>qkKX|>}KG< zfsH?&-^~J$bTpA-9HtcG`rHmK?@g~+Y5XSkkVUiOXDf0#$sc^VG`V}RF}mLykEZ`k z!n}O1b1t6A3uQynfgO3je{S(&u7bfeps@4vhZ!tamz@Y8-RK{d;M^bS zTrs0s63g60LDG$eAzM?sFfWnx!g_G`jA?c^S`X>iPYlE7h@1 zM=i~919vC`)Qc!)pj@_nmh-1|!x-e2HnblDFj5zey&|@JF9Hr0TkP3`SdNJmx9K1+ z?m#Helej?Z@hhWp;1J*r&fi_I`{jP9f(d)H+{g`}T!P;+rKZxq)CD}xi~fJP!D4&? z%w(BuW_YA=!Fv?+y2z3?Rmw8IPr5Lv_DiITBeZRJiN;=QMO5O&9``@xk!aI8u>o?- zqSL*=nxCW~v{LQxgp#FJ!0jD?g4jZX{u;B~A|)=Uu2|pzx{X zR_iOIyrTJu#$|tiwQf)0IyBWe&lSqf&EuOk>oMsF8iwzI@HD=$1syW40{TmB-=!KT zTYM8z(DIJLmxT8e`+jeiC{NMgUp15++89eQu^qSWM$~OFVghemYS3Zn-64)nm7qJVetOOO*WVYd%EQuOafx0%(L++V$i1*oY=i6*M=3&xnmIw=pnD z#q3|R<$pe!NY7XCiC~ky#7Rj)jZE5|sc`wne(iZ>m;vN&pVGz)r%qr};fLK;{bHrB zT_<4jB$4L@kvo`rBTC=kOg5jO-{cv(>Xl(P8%o8xRG)~LJ7MWx3CLI2 z?RrFin@(>YMaU%6F-SaymHJPxv=o!KCINm@z%EC|H(?1+6D|-gZO^$=T&un1Bp{#r zu)7He0C3&RUV4PZgw}7fHr!Eu;`dr3{nIOiTqcZBrr?4K=HXrGXkYtml2GAsfmFQb zNN5G9o`iD0%4-@T0XdXh%sZWdZ&FXEd%6?9;I%PgPwCB2*JCUZ) zfqV(V$wWAv7AXsA1n!<=C+Yqgr+dQ7dcA=Ez}Hqph;{4&en9oi=vgh5d4XH)biV(Q z;w0v0EaN0+Sdsf0h|5huwRiIr6%Yd#HbTwZ=X4c%SdLv|>lwc$-oC1WnFRpxRaLWR z2k{?!s)tj{G>>=QVBjq_`nCT@(ngwTH1KbH$V2R+pnf`Om%^Y%{kO*{eTt56)PL` zLe!sD@{n(_=*?w=F0DF>c}U%kDdKTNt4^)vjy9OCN(m(a)yC*HNk*^4;1HF9{J6JL zxM^+9KU;rp4!{S5lI?q!%k>zx2NfR!LsK}I7{3C9ZG}M*MsL@nV2^~jT)TPXoD+}7 zl>|Ds$}gq4pFk&(*=Wv3S&$oSw&}yJe|@P$@WaTU!{MH9C@TfuE=5CoUmw`O!FQsB zKu^?7+1XTEXQYC_BLv*^OIGOGd4QBLyomAJz2hy$*=|r{1DW6_{x7}Ae#rJo{Ap%* znHXO1E;7pCLq>q^Abagws^`hgkI5aO*CPqn~5^?wY{d-sB!Lfq%b>xRx6Be$xvs$a^vlE#r7X56rM2o-fN5 z#*)fg62n>0s%yZ1e4 z30a5Hzqse8B)R8%r#p3WiP#(Z~6-Pxf4_1rXT5-vl`)pDeZ*nZo`$ zJpNE*#cT-ILEc93J0P47F3wbvkY9%Ut^n*Z-*(+hjHG{?NZ(5iH0&wE8y=9bl<>v*5 zst!#qb`JJO zeit%%3Ds}mzRb%)M;olVm@{R|9}EFX)=!PnVSw(I9^@wA zd&{7Vv>W09K;CR2XiB+Bbsm|ba}l1~mT z!*J8bTQp@_0&qp$6t2CuqL65POJ$G>m9|g*i1~Px)tXKx-TgXFNUforlf*c z)d4%M3dg9``tBuowWZK^)wVg4;n)*H}hEPCaQ5!&@iJWv9nTwjgZ zthx4j?c5jOR_Labxv`-fvcp-PuP=%lceWS}vsg{WJ)ifp@#ZY~&o+NMCNr7sJ#`30 zMqJ6T$rC5tL^r{!*4N+WY)(LU#knhwB7w8w+Y5KjfZn7zG^C4FXh3NF>=JWEgi;bE zd5)!P5#SX$>!8-!k;|zkpdG2h5jESu+1$zbzR@uXeAD^}sq~V6rvR=Y-*>4xlVUb= zM#JuV4@!!md|KMf&(`e`o z^(KdDwW?XGI3NAM%T`(2<1n{8MGF9Xti%br zy*}1}ke-(}xB=QoJw8(Eb&81p|HI!rEwWM{3aL9@?q58KjA-gpYKr7IwP`s3Tb z8_bsE<(RdLAOGfHr-dBykTGk;r-JF@Ef% z8aR^?)qj>Sch>$`y$Kb*y?|(S6W>7yCdr_4c=Wu?XTNolHF5aLEdK57^CRcs^G3CI z%5QYy*Q26BLc34=hEIFtO|vGZn<)eh%%ey)Gz~d}cC$EqoBNl#>+TPOzkO)MgX(0~ zS-LjrJ6~F5TfE35RTRg}0h|9T!W(-3q~i@*Jqbk92hjKkoPeD?7qzAWUDxN})t_xE z|9Yu^wW(}r{jcLo9zcOJ_3UkwA|`G|Y(Cc_s@5eERX?u^vU~J2dw!FeP8c;2*hKu8 zl&7$=dk+bn7D<2B<)4*mRtaLjwBV>`>pe)@&-CuZO6RNzwQos< zCkU*^fNOn!4RCgbnDsiB0P>D0K88|iS>=J1cCW*}%J_xT3O)L=y{~o7gE0v~Jg#TD z8`-Z$9RQ79;>#vgDv0TStu ziOgKVobf7Wh`|lm2fQ|)qtjbe_Vn^fV!8~?(z^qXWyGUM{oJ20MtGQ;OR)>(^`6PD zP*4*$chxLO2Ec&%A9D(Tp4$$L9qMv17I&3f%v9i>*OUkVeXe%7E^0C5;(0BTbP9=b zoy}Mi^LQ548$d%$c^x%;c6$qlb{>5oC3p!d0TAO7Fft&DgwE^f*g+R7J5DFS!G}Jk za-O*uRyUSf%*UlGmd0!KSZjpHF*}Z`yGHvlyEzp?K;L@I%}9D;K`WGZP+4k5JCmTdj96zQ3cix;e$ozOKhaQ z$HO{n5Q8%+fUo?Td@^~x$snv6vClkA+qVmATgz1fIvdx{VMb8sb4r$yDqX3dsefTL zx3=DObO&dsQ6*NvyVc#>k?!f%Q-VnK6bxlG-}Z95S7Z0ZA1MOo!ai5gW~VthWM6*i z7o2h)-aW-V64DPJ#1W;8I5cJA(SP#lKf83fet6CaKkF;o!zgFf@BK_oV15iB>#z^@ zKcCL5LQI-kHl4qG9OJy}8OUEGiY~GR*nyyjIZN;j{RyUSibI-Sx}2ZQRWpwf&~grJ zQWmTQoz_H+>AI}y1szmKwgP?W5rx*0ym!Z&cdtfMU3^A)rUh#xKT3;n#1ri{LR39X zG+kT}$-^)&3crNpUyt&b8q`n{MN$hM-#t+xnwtJ_xZkY?odq^}{b1VtT31T}fC>gx z+8u2hm;0jtcP>%4()SP2aT0lB$4`pM8`Kz@t9A#TOuCLAY~EVhz4AM$S@m~wJbSJ8 z%DdTvZ-uP#EsB(V1s!cth(2u#)TMeY27sm(kp*jgl_S2YiDn5%;@qTBvyN6b>XCS! z{#oV#EF-|_M&R1D+Klhl+~I;Pu8FH7^*WA`Dfmr26A-9FpmrjjdafQEt6jr84Th~{ z!X{>L5)aR>d(U0znb+)@=S@cA1p-yNGyKPu$fsYbiR*SwKDtxCz8hei@Tgzvk^`{k zLqI|jaZyv=d5#3xu7MF)B946T@rIsxgBo{Tlwq{ejv8(28bV(^lgU{RvRfCoLd|(h zc8*&lSBr(Aq;9~xyDk=-ZUHdyq~XKfZhPFAl_GZv=~dYlr`o?d?t{$rDC==C7`7Nb{ha0>wKzNSg1EeULuZwzXw$9oanO)#vBJ8}w1)s_ zmo$O8A?RdqTaRD|KSe0{>+f*0XCq&g%^$!roNCq z99$BriDrnGj?oO`b1?82S4_V#AJ!QbRO$IA3$_CBkHGr@8r;N#s;WO;0bTpgAw$MB zp9geUIzIOT77VCCxYL;_ZDKu^67cY3Xeo&EnAS_ZcisGh{#JTc=4%~l?gQ1IBcROW z=B8gSE3U$-rk}BYM?UHn_?m8G!@6Smo8m|tjm}XSy(fjT;F*ByV5$~^1nq`g;PW?C z9!;Nv44ztDT`IIHb2ly#$G0Ot*m6SUUc5HY^gJA+hpQiYzrKvpE!Xc=MafvSIKHRF zU_jq@>5R!v>Y9ws2;BEe0K^$3;unNCh|RG4f5|3gtj)!ylb;ooQ^H;Pa_m>-BoM~O zVy^!xNGdh>vR+6l{*sv|wn?7N{h{D6$rHG%N{Fmzy-`fTA1@78QiaD(LZ_fH{|^4a z*ri@CoQ@jN+3V5iVA1M*P{)|30&`^k2TMc0Tn&Q#GYpWO6QHrQ=wG9k-h_l$lxHRn zJ--OA?X>}XbR{76>sV;si!qT?yEw^a|Ld!?Xm^?Hyo8i1VI?n|*Dq zuO7gt>cjT#o=Bgc7Z0#lTThRVy&&177|B0?11=lDe=`Y_>eib7W2ArsX9F&L$YSdC zY)zc!1f5Cw)~nls{~A3KvO5aCz~IKc1_Ka~`mPCN4B(t@9`?Rwr=$2fmpRWkDyvai zZZ->eh|1CxM-=A#wWp0_57!IloF)>EYV>|@Q%LT{Q!v$yZ;v!CMV56Y#ooc z>uo%m6Jjevd8asC(*y8dGM^^+!4eCzj@*2nfx+|LjS`K@KbY+1Jxc$u>?`V5rLj6! zs#m??rjOGUWr?u-h80IR)03?tc+gt3$F)`Ba#R!z~|0Gd+%LIvesyp&h#o+0Y z4^!bO<)x8L%ven$M~y~o$lc=pDRU<;=nu$CS;^ZNx5V2G49TjJC<;T+Au13w^!>eRe&hK)H+AtN8S>af&pSzTkh%3N6^%L?P`Wez5&f!=290a zO~rWt5!7xq7>5-ZJ{_P{JP48y5cf)|~CCnQ-g}CO`AQFzG z<$4yDu(7iiTSAzu1f+r?CuISW1m==_2=i<-a~}&q{2{K;maCmqkaCPz(q@L^Q6#EP?0nmf za091%M5?jzjF^DY?=23KSa>TGjGIXw`4P>Z8rVdfE@RvILLAdNpoP5EZzy{zsga!( z4H0eB#CE=QXR6~TitHLyeD4ZFTFCdi9?SZc#U*;-m3d7sms9RU!Z5qf6;TYicJfBA zki{@`QT^zcW$*nz1!LrwZ2Hq0@oY;uG6z?A`+8BLNLFU#X5?)68GERNo?K3qZ}FEn z(V4bY~^Gx1sAWH}6*;D^gbv$~O)_VTuc);fH$vSJ zXk1h)sZSILz58isT}b3otOg`VLBxA+BFX>n$C9^iefOW6&3Fv)N(x(;0}@XtUUl(Xyz*Az{Nae^r_S+{=zgw8Pku&Jj1}j-Slnhi4Sgs*2gU(C-tGEmZz9 z0>aLbwtjkuFYKq8fW3%TEfV{=2%T`1K9qmO_3WY3urG32g zxm5KC#C43Ab|vOqZMy8(RO%#+31z#l?~(aM?iPbi9;?Kge7f^wNVWN#?1#N~IidHL zG93I^Kx1ejqwyIg9ZmwC+rH#GM>8%KiL=F@Vf)wvC+&pGc9|uLgYL$4|xjUc`Q*Jk^zlIH`W|v;y}}!TmOpnZ-##e%O)cLI;#R zzUi9|zy$Tm_fNee0}cY#8>VpCg?vX;5qGl9Wcm>c{Rd{vm12@8M6`xHH%S}e2wCX* ziTrs~EI@<{)^$ZVfMJ~>lF>o31hk83C^;?BlF63ZI?Vf*BSWI%LU?@^O@1`a{GpK( z#Q>xELFkl#74L1<7bH)w@6vqoc!i1#B{Q0XMf+6_ssfFhU_=ES?X*;{^1W+FFd!>& zteTVQ7?X}({V4C-`9&49hz1;No~^Z=6H?&G)zA(#j$Q?sX{6Hj;Wn?V)7rOlN z9;22_@%R?rHCQ&jdSVYqyOCYwKALEeIlIsIh7FWgXi~%DA~b6Z^uLP=Ekd++E)oAD zl$iV;zOZ%P$;lq1PZk)|L&{NKUoqggjH7i0JzMwnBiJWGy6|0Ty@~u9Nh!q$E5+Tc z4o@RPaEb^kiNoeKWXcJrr;ekpu8xC%2usKzpHem3nF@nSAN4iAwu#phx`gu{j@jC` zvGed=6hfD^p5;%B8TfFJbB(z2S617GbOB>dE?Un*8vX@`XfLUOIy4gLp;$4D$}f=} zEb60zDgh63nw*fZ7WDu6ddsM|qHbI8;BLVkf(3^F!QDxKKnPHH@Zj!F1qcKuxCIj2 z-6d#nhu{*N!d>6tyZ3d!+daDZ!KhIbwQcRS=bUSuwN3y1yUVlKzA+g7Q=SqVzj7)y z&v$eF%jN85s(4`2T9B-II&a(>N>NIa&bLq!T9V^}81?(tvWbI7q=A?>0qVe{~ z%t)LSkcH&c7IQ~h%Vrx~6rmoETRVgrkAL@wl9h1)UIrmNJ`iAJ7xd_qjei5H=pd*v z=GO?Oq|e{>H@@96QPfJP8PW?j$p5oS;%1onr-d?#RpBn%pt(%<{U;?<+MdDCjngGJ zprzxrePMbiu4*EtymvjKfRLp?Firrr$e`QV^#1L?l;KFaAOv<;nv5eXb!NKuGs)LE zFTS ziILEeVe%ZS>@0bLA7)^iIVLWmF5k*RD-kI9P4$QW^j*^B=hjn*OgnTvZsc-WnC|;iX}v@bS;%pAJYSq+le_gkB+F zrHi}Cos+fhqY1<ol{5PUL}6GE_kKCrrqYuXlJ+=kE?}eQ}tVQ*$J*oNAA7ao~Vq#OzBbZ1aV%c z$Y9h94?7HD3V$+&)y)*9 z2pVd`Cj8AHnJ6^HIV19K<6cPFU6N7cR%j$7e#n;%Rom|*9`ifosJZiDEvnhmJWprL zMmJ{k`Ff3XH)cMdb3JPxs1kuq44VZP1d;En^x14X9DwR4xpO^jhy@^^3!!V4eMa#+50u^ zaOYyhgqrf+kMbHZWj}qxEE>f|Yv==Y0<)MM^sJim)a*+hja-b@*Q2paP%b5=CB!W( z&UL^sb6v(#y?cJUSe%4%uI=*@KVsC|Y4rPd0z~)?7SFr7%o?7Cs^)%K)I^ZVKN|M6 z`zSyA5FbChZr1w}OYgy%(ye_CZrd+8DnxpPwF%m8qJROK8@wlRR9C*HbigOIT77D+ z7UYi$7s&a10asW7f)6kEMDLKRRPVnoak@!d{%Kb``pa)8*iPH>2D|MJ(G4>a39tgtdCON+c?+o9&*78QW!ZDC%lUl%?*7K5|ow8iTok@i9*##FsM z1Q~oCp21_tbC7YDmnZGg8mkl7-d}Yv*wB}#!#kyn+GvMK;rzC|h_ZW0{~ku(pF=o{ zZ6mosY=8b1C)_TSrL^hCS_KXzdBVccQOuCsT-C&qiA0KJqonJ37vjSKo+L z5yFE4kl9a0TNGntSvl;rzt!>hwQrJaYYjn7TgP{Q{r!2PU~tD!6?Nz|Le9~y>F_P) zvMVx8zYae6H`mB#Qd9n|mnKh)&^~eKAbApjEl#vQD(M}6r`=GiEp_VCzB)6Y0%FL$ ze1Fl|Dfwaur5Zy)??F=L*p(GN?AGPq8}=M4(V&e8!jHh}lS!-nwEovxRn6zKABRFUPa{9hpWY zBOoW_jNYCIMH(ZH3gRV-60W%U?R<~8DkvZ~l)g1^^cGL_5<~CNmpQv1=z5v6pDQ4C zW@eF@n6T_6z_CqCn8!BQHc&lO!ySFTx=emf)938cSzom~%}AC{=0* ziv`3wEE?svex~kF1C9VL0trz?wRBC-9Ph|W6dmE})Y zo8DxSu1&6hX6H#XiEKIH*7Y3;^3(lcMCzq-u11vHq1>vVkI4C_GF3gE!?mlecfqPZoX@l1B@q5aej0mycf{|Gb`Qr7#n!?mi2aI;qr?f5QSWaJW~sOil4fpK z6fJv<|KTeFh}7-j3IOaj`^)~zEhmUfX5_fRA&X27(s>BUrP-x_ym4~+x;-*ik5-Z` zTmALS(PiF2yKJeI@Q0+)6HA36&i6IgO_y3WGJ#(yS~gJt8Q}H1^4w%j{}Lx?qgNOR z_^5thCg7f;zubVx=Zzyd6H8ez^MIyzyHfA&!%mpP0bc%ep=eE=VQ!=SUgC+8hiSK1 zt1!mfIt-)6p6ttm^U8!fmGHw&v7l$5Ttw;ApwQ&IPg4D_fUZ?-;!J|0i;-G{<=bp) z%5rT6^WDl~ZMTEH`PW2wzwoeEKLVVc++=RPm53M=Z`Ix4Vvw^&ow!`hswiNa?ZNwrK=0upE+2307kA#uFN@vH{-~S|p zcJ7YI@)R}26DiF5bNH@tZ!N!!+G7jv-55QVR0}zV5nBMM6$-5ZEmnuAfSd{w&;Z}Z z;KLr!1YpBkt`>1=yN`@G_;0VvmR(VCT*KIJZ_=J%L6%80^9(-iH|5?V-kj+WibNM1vorYojJu`~zAkRF z9Y8-IdaeDJrzl|_)T5r;;hf!d&qqw^Py+dwhhkDe2>$w)!<|nAJ;sPwqcO4L@lqe{ zf^EG``^|*tFy}{E{N|ri@BvrEPvO4#@dG{qaFn|1TRCpiBM2m8C%rbmpox(ulTi=X zj(2|NZJc@C8xIw(ocFh_P{|L(M1Fg?H6OrQ$9{Ff~fs25;2cB9|?aT^bs{v z$8+6B$&p2r zi~LI#&*V=O7hm<`xQ-t@UvVYbDqd=0S#5x*+H{jV_Pf1|lNY1TO!>$2`=5Q@YY}`4 zTvti9Bs^R{x;I+ymUQl~FBL@oUbMY1yqh>MySAHnZ`OW@|Xf@-;WR~4IC&yvByO7&{h^vu-_*LQt zPG%kI=!Ff=Mw6gyIXj2F=WZ>$*9vhLK=OXVdbi9+s%4f0h*;ebS5z=_qym*k9Y2#i z2=Bcg2f1kOVGSzoiHsN4%8XSK0957B&@oZxTCn%Hmt(O{I^NdWMj2jG1m?WjnLV7@ zjl3w*k}WOjG=hM4Yau6jl>9qqbFu$h(7?x?eQ&*yGPt{QGykstX}-r<>-l?e*ddSt+P|XH4qUE>C zVCe_SA7|sAb0Ucr^bO_dK)cIF1)|}S!GlaHybBnJAOASc_Zl}xV~;4T8)43jA;F?C zCyV_J-r&<*=y&16Wl&x~?ym1H%0Q{G+Lpu&Yj54{Kdm?DsNz?0Pib<~=BlF*`BECH zLTHO|JihUMT^0nxWT^K3rt$y_~cwyz|!@^#TWv_paBwwR1kly~d>QqqKbc zht?mso^%Q}Rt{Z8)}!J9X>TsY42NB%zf$tn=*g9J-m)HQj$ z%G!_a6T5#A!4G3*Iq1bc2)r!!30lEPZ`iEG=*9Wn;K^#2QjR9D<$NkCFQFE2Sjm5Q zL=NKXoXiX#RcFB?myro7?=@(rcEcy)^H%w#*VMHQEt{^d1*eVc=Ayoz3*Fi>b>Ho* zX~%A>0saN#J+|+uKg>EQQcn&9-6k(H5=sb+R#v=y4M>#Z8CAb+C|9F*^Lw*f_jbIj z%KVD9pm2DpCQ4yfp2!^x@70u03w@;4w8JF7 zMwN_EsI)+%#xKBpS%iCwzh3vArxbY{D*^nOd$5FfV*V`j6Ye*S8*^j=T zq#n*|RyEe@#2^JJI*wl{#dUFu-C>s9Y0qd%2;nCxt4n69I{_WqFgHVY^EuQ+*~zLv z6}9l25V4=HVchpW$Qg1?k1|q&y$TQG*-n#nw1HgydhP%>atFG=p$7vLx0VY4!@H@H=n0QxfwLeKjnw(n z*%WL6h9~y46HWfU2o-MTwMQN2kX&tC$gG}|dG@*befTHst$o}l#or4kiGo6fYC3q( zY{wfkp*+h;v-q$V%a3lQye6ARZim84w2%#fv=sGz@?gyEX3_+T)I4}3r^EBW05dH$PCs8eD>Cs`SGN0B>uDXoz zD{ofCwQJ7+o%U-ye;w+Pp;a_QK`GM%_ z1e*@-0Nz0XMssN8?Nl~eWui45wFX{dsQ-n2V|j*}{$Gd$)~G6c0(a@&Y;Sj;_wHSt zt(&ge-$qXanGoUp@5L%~+4c+OI}3HBV&oTyiM9{q;K_w#pqNA;pN=1%y1ppMF& z3e%^>MZ!d1i#QpzIHtj>dqTkbtMD=$-yBo-*=K;hle^v}7rX~-Mp`H{ji#dEt|^e} zcUgyFLPD(@S2iBw2prERyhv_m779@4A2fV0|lKRXAHp)QH-bV8ui?k4JJkFhI!{W zV>qt+Sgb{gc%sN+!8IC`YHJRxgml!VK{F7Zf6nivKzF=?b2x6m<9xmm)J))+^t$SJ zaY|MJ{Ql9S)-cA};zG(o^?sg|%EzOPYp(~DNosi&Yb>wf5uaQ$jsQNOJ6w$V*(cZC z!TI2169Lr&5LD*UD8Q|VQVPlLDTS@#K-*w7pUwXa2^I`XE2hjJGL`N0Pb}>l`kq#C zx)iGd(I24H1NZ03qfj{E!X@cd`nxGom(*$`^M(25522xancOP`5s@=HkPUc9!f2okq;vt= zfW;K{I-}0rPL1$mx+sJiAEFOqBedGxYCoQzEv|6hvJU&^P@aeO_lA)^Pp{|CKZ0}x zB{l5KR!gDS^q}(tk>F^Rv|fq7Y4&x8Kt=oUCw0NsKoe^gt|}qiDgtH~h%GF2=i#G}$BhmPH8St~wbU{_3+5)JSc;FT5Q6AgVqx}oD8 z!@=u>L&Z9mwhUOIOncNK80Vm+E?o2aX)^VZdne$ zQRCX-h3G_y>l#&3;WF%!1jGYTgvsoGRj@p9EV~nMN6%>kGy$(-N+>SB3sr{^AgnQ> zwhOMi`(1a>yZaMZEY*VZ49mQl{TMk?5>J&Od<L3HYcB43VibHbrcuVcBuitFn9%UeN5g-E@~~S^bx6(ka-WG@u7h_zRk##X%v9)QFL35qf32kY0Kq%M9Z5fh}+A zjm2_(o}Jp%y+*mSC7l#SU;>@`XS(GlZ7C599HW;3&!>BL2*jZ)Px}_YwFo#SUVyI%YJ&e+T@VTw|!2S7u3tMC}u1v zQ4pOPS=)Vv_RbZ6L8wWM2FF@0G)6cVZ!)gdUb8+A(v{>ZxB85`dCyxK#>F+ z(7w7-gNnY!{uKSK>$W`_&OtATTGW~u1W{|j4DCd)r^j_eJRt|0@wQn)_it&oqAuus zS?SQ#P{SS&at@|9n?1}|e2o*QX#MduevIOSlt^E&!%&274v1eD)A2Nt6MyQ!DvW-J z2xEiTUE15VyWcP42O))7e{v&hg~R&l@1vw#cRfsCHSo@utHfQTN%@-KNMr#A;Ii#O z9wI-(%v7}W9&|i%`L=J6+KRcNOcpL-h=ANCPK>ZIIHMd5KB|6wr!!f7R@CL#C+rCS zYzh?da6afAdCy(Y6Fc;o<#j|Yd$Foj_WS(5&^ITG65OiP9^bj;G-5csooRy7x2&T`TwMP`Xl+}(c-b$2)^Y~$%yUhAM9j3Jy36|qVQVjnvr>YA{ z=^NyLMm^zp^&cP-6X`Mqs@Iaqc>a=k%3ILpDNjo)a&&rtgt_^e8J zj>O*5$0FW^#%1CNZLun_8 zeyr$L!)5ES|ExOw1|M+#`ba@3lI#F~{qYc?0!e}$`0kb>D7Dxh0o(#R#cnZ5C9W~i zeik$H5Q7gLS#SSHY|z>-$S9t|y)PR#R)5`;pc;0UhG|4q@QUGQPV)PxSP4$&Im_C$ zbB3c`hW3Y@&m`xm2-!JPg*)nEw0mb?OwgKRexs~v&mZ0n@MsE%y;8g8!;mmv%jFKZ zgZt+6QCq4d0JSN>@I|vG-Tn2$R(sZ?gMz;bjH~Q;_*NgO5owEa8r%ra-!{SoSfbJ( zOGr~^yGPvP#AtSIrhb=zM?{|JQARW6%OFJ;0>&i0xweHLYE#ctAZ+qb97tFk7V* zFgh|g_+;I1gYB*AvZqdFEbsH)sPgMaNq%v`?-oy4GGRh{@H-%4)2|g-DeN#V%_a0G zRD@a0B=_$%6e(D!H z(y~|g6-E?p(QR|mv4iyxX3-(=eUyLrQvFdX$UDRYSb{p*C`gHfHpjG%u1RXhYBw|rs`^r9%^|&@Txs77WIfU*{U05ZeseC#ycKpe<(;VsEFgeSj-L zrYX#b#{JHRP(j!M)1OzYyvJ;EEhU>eY&wbO_QE)Yo=D8VZ?nSTKE897iUD^5*MMZ zzTDxd5?s>sQOZ<-%O$99-cu;BowRqcN- z4L8~BzHT)9py(PRoo`0q2cSI{y4He zlH=ntUk*w9eD$XyaQ;)Pa8A_{$@dhkfas*MdjCqd;@^%3^+d%2a8XZ}G7RU1Zxv`; z<#?2f*9>kpyOL^8xTo5V&5_JmGjINZH=R5%m8X`}xdCMb8DDXkKCC8Ndnv+bsIs#p z^B;!fSv9=xQrhNeTZLY?dAZJVJ`;d^aof19k|h=lk^1Hi8(-26$B)u@0Ju2tz}V+& z)u4MH!yD^M)7Ij&wPp-iH7>V9^t+%Zm=X`9#8$G0`NYOeK-00gzzr9t6WBSj9&6(a zSKr8Q>SOMr3Y)F5RVOZMdhOb(yu4`m$Yn2h9W9qn_=aS7#vP8rK@m`A0UIi3a#$QQ z^6w%Bb>qC{rQ6t|weN!BVJmivzHe4cBaw_g2;jI##sDG?|F2i6O3 z$#i_*Kki(k_c`&97^FRcGRlEgOY#?-lr&d6|-YvFbirOco7M<*@PfrQkDBV#9 z3yr6xv^rnSwg|I3SL?q)JbOKW(5VsWFnoFh53&vpa02iQ0Y|_X40sd4_tjS@8uLX= zQ_--ZvmU4GuL>$Mp;plkmb_A|m_G=jA7tyR%u&Iu@{D?0H}{_`1=OhaH0%y;_TUCI zmUmzI_X!E{ZYNWEsP870uFUwK>R|)chEFZR`5gr1ZbVY)GaQjLZ+88l%QXT z!%fOH6k0Exmk$Zm4tnr8+@)djw*T-PA0WB7Q6~W}$t;=H&pzp%`{z=Sra$PACIdf$eUg7YBhhwSs(rh_u8{m?EqsddBnSZYPZ@?l+G z`>fNlMTiDYlxeuzT6MAD>i>a62ey!mUWBZ;EzV%=cZlqr=+)#c2{i)W zMmNTvPCQ+XNdn;LL3nhc$*fgoHfR+J09$!!<;lW}VblMIDr}#M1K@gK7eeYeHin(+ zpOpCjFC070y;*4IIQMX~e>`dZtT=6sWX7dn1a6ci-T_bz1I@8jELsjw#XQl>A2nzk zNaBTuK-fscQ8%_q8_Y6y!rC(ME)M>^*#63q&P9U3e-PAmRiL|-`@hxQ$ia+#8K-cY zq)oa_F@W}a5>iL2vJ?|Eft1gl-e6F^TzTdCPjV4u>dXh>@CB>Wd*PcW`h0Bo3ON`X zRHNdHL(R)uP|bpR;5WUKY)Q;{g|YQiXQCIHcabh8U)7+dY*Fv*RJWn1<-pDU0lwl# zH!=RY-!lUy91CMUF@N+b-8x+>Up@h0_&XSz9n+`vZ$XrOs_h)%rxdl-xa){Kz$>8l znJ3#zIfMIhFy3qv7I-wwGk;K%-~?e?tk7Nd-jm9EHE=dPA{7=-BI&+~zwY$xJNUZyXT>{cN2yg z&FSGKFP;sYV?$ykA|<84 z?y=nnHvbHvEQ`8u96+GJjZsSPr*MEEKvwvlnF29ikGBHTF~&w3-`J?vuA+W!>YCNI zBXinP)ZgNI7JGIb6N^qZzP~mmz!=x-6Glfs6RzL~$l_Yip3iGYj0)?!@ARI>)o8XS zovWeHy^rwIBmXqw*i3d4+qpkKswTo$v;VQIj6$r?hv`8JvY7)!v&pkj9hslO7(_H! zlV{pIiOT1vGwbK|+$(F{netz5dFbCQUT>sbG$-te+t&Oe8~)1}Vf!**6ELl<#>ele5rP)&^!GO8?AoiyqfboU?Z|ywAHP& zrKWRO9QUaj6~F}Z&cqFj>gsGXcorx2+bpH?laXygcV0oSix+HrIsORv9KLj;eA}Ie zz@)qomA(Z@{8P8EIjyOthh>Ce>5>p5%#C1)yjt>1V2MCWRd<93TxQYr+%x3jW9+M@ zB2dwI`{brgb@)nb!@iaT%JFrnF^M3G3E6(h)Q&ULYfKD2D0TSLcYGI(*7pT zl$^Ig();T8{!k?T#vMq5OD`FV$6s&rfzyD)RllBYcSw7GeUAxL1N4NC=?Ls8%QkLSz>M=Eik6s{W-;5A!1>g(ohTuXA6RxQRLR+?BZibD}Ae+0Jqc)SmI)4f6r zdTs|cj3~1;`!P76B!`l*7z+S9P1D=~wQjt*tSJ%U=3~`r^5Bd3)Bk6d^*uqbruTP~ zzZ;EmlZHT4=eYZMy3$cr%s>Z_jTW#aGTM7>>8ec7@5=VZn=j4sYE4`7a@N{5&`<2r z$e$Y2HqraIeF8eO=VXLI4%cH@%dM%FKtS3*#A#G@7O7V@{&McXEz<$;;rUJnIQ%#S@`rfw_{NQCVpb#NnPV^f^XN@-_@OXe5%I+jG!5Bia1P7eUA zis5prBoX@R^dX^)Yg{+LH?gTIAONs)vLDSI&ibdrGkbwz zUe+$Au7%273eu(?sJcuo=pebtHn+ru_r=;2i|t{2$-sl6_&G&EsXgRp%{vM~|GzFf z2eO+3wKl<;tIm8u75uZ7x0D@r0Lp4|y%K8UGi#!SHt>iBlnIq`1(?h|#<8K)SiN7E z7p<#Q?c4EsXVa=v@M870aTx?sphG>L72iJTTbta1$*a(f+I+guS&J6QHDdr-;?G7A z658+2J_nR#uuy0^v!^lf843*}StQpxR7%eu=HG10^OvGznoN&qm2|Ueo$MRRS2*=` z2DRpo>|^P`)<7#_1;jhK{lDXuKZnSmxbAoZX9t#nn+BIWJLh2iaqBGDc$8}&LvZzJ zq;}&50N#7?NyOuxL2yk5Cuh)W%35u)!clxy@@6iJN-DE~8Uxlh)RehVc z4IS4v3m+(hL1Xx+|FX@~t$#B?;0E?~8oPbRxMVPH`37nGG}wO;HNw)4R@OfQ{e4X} zi7Q@B<$2FMg-1|XB@oT3h~O@jmuJiQs;=~qgoo=h^Pm?hh@)Uz41aH5ViR@2L@)uxdvu6dJI9=zRPjWil2iIUtflAAD+$V6_evJNnLI2Av2PDozf04F6 z#nH1rQwPFQCyr<^_}5Kd0cM(Vno#e4&d#ZE*@K1}btQm&yN?5SuL=`^YVd-gS5#UV zLW(}o*&3DZ>bEN-c^0BSA#JQ07--Ot?Z2)0@u@npj$c7~P^iFb{QO}ovS7_*q3z9l zU%^DN@PWPQz$L+q5POvDjClz7q4Rn;(5U#%qrVm8L|aop@-lKlTO-a7T5_^Lfe{x> zWdVSAt`*ioh-AjyYG=ut~-V2)I?b8 z)eqsnMRBqD`cW8%=%K}G8xC`4u4+;6{}UjG8&v<_*(0?(i?b0EY4T=tUXd-E zo`67t2Ohh;A8OlnSPtyJb4!*d`>ix;-|z6k1H9~4ARaaS?>?9pvp47{7^PfUPiMaY zbth@fHay6U96h+aW)JIHVJxs;_sfplb3E3sdx!7vKyvp9%;2~_&tHki^#6SM+K2!1 zt2e6T(cpeSUF{9q8K$c$C7%iOd{|tF68D&YDKc9v`fY!Upw(?Y9P8TUpGnM{Va~Ix z&f(v|53;~CNC%)AFI(o}P-&qalyYhWDs%})bOnYBTi0fzc(1~P{9vgoC$7I*)0h88 zvPDFuxU(Ros9_o!MD5TkJ-?~vM+14I3S+*JN0x`By;u8lLcue!Fxh0ZNfE=QeKgCQ z1^`@vC^(5hQ@m(N5Ef?s4fygShAgvfur#?fj|swbg|;9!vx}D#$ zE3S0Dzqin=r5)z#p}QI0x|~2Q0Z_+5vX2e zzZ`@_@IR$E80IRp*~t{l$FgKhmFS%(^LF{X7Idv2H-=$!7_6&68)*OIe+yJJ6MWw^ zyZH6g`TEudb=29D^$^S+ER(|o9kDZd-_`y!+j=mqn$HA4=>wm3M5_G)G$59EBCk?& z{Rl6ou!8V(a<=HwY;xEQr+d;H}&I$22u-QHSa8l|eAI}inLugHGJ*MXpjOAFP|bQJS~ z>0$Np-GEX!>c4NjT_MauQP9DP1H`wTOX2yhi)| z=aGi)r73eTfnSmpQ;R^ux50$%w%+~+Y`h2!-sjxPqM1%Hu@Vf{-d|p+eFmpI5nP)P zi#clLHw#igvxKiA+B4IU3e&Y7uC@^mHaII7x3M0}F;M;xt*PuQBqv`m9xKmoz_GFv7Y2Xc9MG;XBf z(^CqOEM9XKO#J)ZzRC`{0;}T$U6`Bpzs)X_1(0wC#)Trsl$cQ2ZR4~TOz{wqGUI;- zBd~S)wJA+Y7`|caH$=raojs<&Xq5|2J9VEB@>g4{T>g-LRY{ru2|ehj}>SG`+rQZ$;T1d~G$ z<_=Qg86GSy(kzzgPq33eba#(P+p3cj@!99{)eTGIySa(WMvp`zoIR P@JCTrMW#&3DCmCy0F9;J literal 0 HcmV?d00001 diff --git a/doc/content/xen-api/classes/cluster.md b/doc/content/xen-api/classes/cluster.md new file mode 100644 index 00000000000..6e32b167835 --- /dev/null +++ b/doc/content/xen-api/classes/cluster.md @@ -0,0 +1,6 @@ ++++ +title = "Cluster" +layout = "class" +type = "xenapi" +class = "Cluster" ++++ diff --git a/doc/content/xen-api/classes/cluster_host.md b/doc/content/xen-api/classes/cluster_host.md new file mode 100644 index 00000000000..6adb361945f --- /dev/null +++ b/doc/content/xen-api/classes/cluster_host.md @@ -0,0 +1,6 @@ ++++ +title = "Cluster_host" +layout = "class" +type = "xenapi" +class = "Cluster_host" ++++ diff --git a/doc/content/xen-api/classes/console.md b/doc/content/xen-api/classes/console.md new file mode 100644 index 00000000000..6e8128740f4 --- /dev/null +++ b/doc/content/xen-api/classes/console.md @@ -0,0 +1,6 @@ ++++ +title = "console" +layout = "class" +type = "xenapi" +class = "console" ++++ diff --git a/doc/content/xen-api/classes/crashdump.md b/doc/content/xen-api/classes/crashdump.md new file mode 100644 index 00000000000..254004162c2 --- /dev/null +++ b/doc/content/xen-api/classes/crashdump.md @@ -0,0 +1,6 @@ ++++ +title = "crashdump" +layout = "class" +type = "xenapi" +class = "crashdump" ++++ diff --git a/doc/content/xen-api/classes/data_source.md b/doc/content/xen-api/classes/data_source.md new file mode 100644 index 00000000000..34385021861 --- /dev/null +++ b/doc/content/xen-api/classes/data_source.md @@ -0,0 +1,6 @@ ++++ +title = "data_source" +layout = "class" +type = "xenapi" +class = "data_source" ++++ diff --git a/doc/content/xen-api/classes/dr_task.md b/doc/content/xen-api/classes/dr_task.md new file mode 100644 index 00000000000..f7f9d440396 --- /dev/null +++ b/doc/content/xen-api/classes/dr_task.md @@ -0,0 +1,6 @@ ++++ +title = "DR_task" +layout = "class" +type = "xenapi" +class = "DR_task" ++++ diff --git a/doc/content/xen-api/classes/event.md b/doc/content/xen-api/classes/event.md new file mode 100644 index 00000000000..6db19e81829 --- /dev/null +++ b/doc/content/xen-api/classes/event.md @@ -0,0 +1,6 @@ ++++ +title = "event" +layout = "class" +type = "xenapi" +class = "event" ++++ diff --git a/doc/content/xen-api/classes/feature.md b/doc/content/xen-api/classes/feature.md new file mode 100644 index 00000000000..806a2bc79e6 --- /dev/null +++ b/doc/content/xen-api/classes/feature.md @@ -0,0 +1,6 @@ ++++ +title = "Feature" +layout = "class" +type = "xenapi" +class = "Feature" ++++ diff --git a/doc/content/xen-api/classes/gpu_group.md b/doc/content/xen-api/classes/gpu_group.md new file mode 100644 index 00000000000..31fe2e0b4a6 --- /dev/null +++ b/doc/content/xen-api/classes/gpu_group.md @@ -0,0 +1,6 @@ ++++ +title = "GPU_group" +layout = "class" +type = "xenapi" +class = "GPU_group" ++++ diff --git a/doc/content/xen-api/classes/host.md b/doc/content/xen-api/classes/host.md new file mode 100644 index 00000000000..b09bb8a4be4 --- /dev/null +++ b/doc/content/xen-api/classes/host.md @@ -0,0 +1,6 @@ ++++ +title = "host" +layout = "class" +type = "xenapi" +class = "host" ++++ diff --git a/doc/content/xen-api/classes/host_cpu.md b/doc/content/xen-api/classes/host_cpu.md new file mode 100644 index 00000000000..da8378ab7f2 --- /dev/null +++ b/doc/content/xen-api/classes/host_cpu.md @@ -0,0 +1,6 @@ ++++ +title = "host_cpu" +layout = "class" +type = "xenapi" +class = "host_cpu" ++++ diff --git a/doc/content/xen-api/classes/host_crashdump.md b/doc/content/xen-api/classes/host_crashdump.md new file mode 100644 index 00000000000..a2f27859d2d --- /dev/null +++ b/doc/content/xen-api/classes/host_crashdump.md @@ -0,0 +1,6 @@ ++++ +title = "host_crashdump" +layout = "class" +type = "xenapi" +class = "host_crashdump" ++++ diff --git a/doc/content/xen-api/classes/host_metrics.md b/doc/content/xen-api/classes/host_metrics.md new file mode 100644 index 00000000000..ab37f618e75 --- /dev/null +++ b/doc/content/xen-api/classes/host_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "host_metrics" +layout = "class" +type = "xenapi" +class = "host_metrics" ++++ diff --git a/doc/content/xen-api/classes/host_patch.md b/doc/content/xen-api/classes/host_patch.md new file mode 100644 index 00000000000..20bc1227762 --- /dev/null +++ b/doc/content/xen-api/classes/host_patch.md @@ -0,0 +1,6 @@ ++++ +title = "host_patch" +layout = "class" +type = "xenapi" +class = "host_patch" ++++ diff --git a/doc/content/xen-api/classes/lvhd.md b/doc/content/xen-api/classes/lvhd.md new file mode 100644 index 00000000000..d3958d33560 --- /dev/null +++ b/doc/content/xen-api/classes/lvhd.md @@ -0,0 +1,6 @@ ++++ +title = "LVHD" +layout = "class" +type = "xenapi" +class = "LVHD" ++++ diff --git a/doc/content/xen-api/classes/message.md b/doc/content/xen-api/classes/message.md new file mode 100644 index 00000000000..1ef5d1e8a32 --- /dev/null +++ b/doc/content/xen-api/classes/message.md @@ -0,0 +1,6 @@ ++++ +title = "message" +layout = "class" +type = "xenapi" +class = "message" ++++ diff --git a/doc/content/xen-api/classes/network.md b/doc/content/xen-api/classes/network.md new file mode 100644 index 00000000000..3e167722de5 --- /dev/null +++ b/doc/content/xen-api/classes/network.md @@ -0,0 +1,6 @@ ++++ +title = "network" +layout = "class" +type = "xenapi" +class = "network" ++++ diff --git a/doc/content/xen-api/classes/network_sriov.md b/doc/content/xen-api/classes/network_sriov.md new file mode 100644 index 00000000000..847608bdf52 --- /dev/null +++ b/doc/content/xen-api/classes/network_sriov.md @@ -0,0 +1,6 @@ ++++ +title = "network_sriov" +layout = "class" +type = "xenapi" +class = "network_sriov" ++++ diff --git a/doc/content/xen-api/classes/observer.md b/doc/content/xen-api/classes/observer.md new file mode 100644 index 00000000000..47f90c9277f --- /dev/null +++ b/doc/content/xen-api/classes/observer.md @@ -0,0 +1,6 @@ ++++ +title = "Observer" +layout = "class" +type = "xenapi" +class = "Observer" ++++ diff --git a/doc/content/xen-api/classes/pbd.md b/doc/content/xen-api/classes/pbd.md new file mode 100644 index 00000000000..288accce471 --- /dev/null +++ b/doc/content/xen-api/classes/pbd.md @@ -0,0 +1,6 @@ ++++ +title = "PBD" +layout = "class" +type = "xenapi" +class = "PBD" ++++ diff --git a/doc/content/xen-api/classes/pci.md b/doc/content/xen-api/classes/pci.md new file mode 100644 index 00000000000..b6acc9804d7 --- /dev/null +++ b/doc/content/xen-api/classes/pci.md @@ -0,0 +1,6 @@ ++++ +title = "PCI" +layout = "class" +type = "xenapi" +class = "PCI" ++++ diff --git a/doc/content/xen-api/classes/pgpu.md b/doc/content/xen-api/classes/pgpu.md new file mode 100644 index 00000000000..324dce2c379 --- /dev/null +++ b/doc/content/xen-api/classes/pgpu.md @@ -0,0 +1,6 @@ ++++ +title = "PGPU" +layout = "class" +type = "xenapi" +class = "PGPU" ++++ diff --git a/doc/content/xen-api/classes/pif.md b/doc/content/xen-api/classes/pif.md new file mode 100644 index 00000000000..19f5750424f --- /dev/null +++ b/doc/content/xen-api/classes/pif.md @@ -0,0 +1,6 @@ ++++ +title = "PIF" +layout = "class" +type = "xenapi" +class = "PIF" ++++ diff --git a/doc/content/xen-api/classes/pif_metrics.md b/doc/content/xen-api/classes/pif_metrics.md new file mode 100644 index 00000000000..aab7773a008 --- /dev/null +++ b/doc/content/xen-api/classes/pif_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "PIF_metrics" +layout = "class" +type = "xenapi" +class = "PIF_metrics" ++++ diff --git a/doc/content/xen-api/classes/pool.md b/doc/content/xen-api/classes/pool.md new file mode 100644 index 00000000000..5f6d1576bc9 --- /dev/null +++ b/doc/content/xen-api/classes/pool.md @@ -0,0 +1,6 @@ ++++ +title = "pool" +layout = "class" +type = "xenapi" +class = "pool" ++++ diff --git a/doc/content/xen-api/classes/pool_patch.md b/doc/content/xen-api/classes/pool_patch.md new file mode 100644 index 00000000000..709bbf85b18 --- /dev/null +++ b/doc/content/xen-api/classes/pool_patch.md @@ -0,0 +1,6 @@ ++++ +title = "pool_patch" +layout = "class" +type = "xenapi" +class = "pool_patch" ++++ diff --git a/doc/content/xen-api/classes/pool_update.md b/doc/content/xen-api/classes/pool_update.md new file mode 100644 index 00000000000..77bb73c3fa2 --- /dev/null +++ b/doc/content/xen-api/classes/pool_update.md @@ -0,0 +1,6 @@ ++++ +title = "pool_update" +layout = "class" +type = "xenapi" +class = "pool_update" ++++ diff --git a/doc/content/xen-api/classes/probe_result.md b/doc/content/xen-api/classes/probe_result.md new file mode 100644 index 00000000000..3d33aac858d --- /dev/null +++ b/doc/content/xen-api/classes/probe_result.md @@ -0,0 +1,6 @@ ++++ +title = "probe_result" +layout = "class" +type = "xenapi" +class = "probe_result" ++++ diff --git a/doc/content/xen-api/classes/pusb.md b/doc/content/xen-api/classes/pusb.md new file mode 100644 index 00000000000..773e0a9a9c0 --- /dev/null +++ b/doc/content/xen-api/classes/pusb.md @@ -0,0 +1,6 @@ ++++ +title = "PUSB" +layout = "class" +type = "xenapi" +class = "PUSB" ++++ diff --git a/doc/content/xen-api/classes/pvs_cache_storage.md b/doc/content/xen-api/classes/pvs_cache_storage.md new file mode 100644 index 00000000000..0042b0a34cf --- /dev/null +++ b/doc/content/xen-api/classes/pvs_cache_storage.md @@ -0,0 +1,6 @@ ++++ +title = "PVS_cache_storage" +layout = "class" +type = "xenapi" +class = "PVS_cache_storage" ++++ diff --git a/doc/content/xen-api/classes/pvs_proxy.md b/doc/content/xen-api/classes/pvs_proxy.md new file mode 100644 index 00000000000..862a9c178d7 --- /dev/null +++ b/doc/content/xen-api/classes/pvs_proxy.md @@ -0,0 +1,6 @@ ++++ +title = "PVS_proxy" +layout = "class" +type = "xenapi" +class = "PVS_proxy" ++++ diff --git a/doc/content/xen-api/classes/pvs_server.md b/doc/content/xen-api/classes/pvs_server.md new file mode 100644 index 00000000000..2c5ee2a2094 --- /dev/null +++ b/doc/content/xen-api/classes/pvs_server.md @@ -0,0 +1,6 @@ ++++ +title = "PVS_server" +layout = "class" +type = "xenapi" +class = "PVS_server" ++++ diff --git a/doc/content/xen-api/classes/pvs_site.md b/doc/content/xen-api/classes/pvs_site.md new file mode 100644 index 00000000000..bae8e112494 --- /dev/null +++ b/doc/content/xen-api/classes/pvs_site.md @@ -0,0 +1,6 @@ ++++ +title = "PVS_site" +layout = "class" +type = "xenapi" +class = "PVS_site" ++++ diff --git a/doc/content/xen-api/classes/repository.md b/doc/content/xen-api/classes/repository.md new file mode 100644 index 00000000000..acde83ee5a2 --- /dev/null +++ b/doc/content/xen-api/classes/repository.md @@ -0,0 +1,6 @@ ++++ +title = "Repository" +layout = "class" +type = "xenapi" +class = "Repository" ++++ diff --git a/doc/content/xen-api/classes/role.md b/doc/content/xen-api/classes/role.md new file mode 100644 index 00000000000..a56e2afae58 --- /dev/null +++ b/doc/content/xen-api/classes/role.md @@ -0,0 +1,6 @@ ++++ +title = "role" +layout = "class" +type = "xenapi" +class = "role" ++++ diff --git a/doc/content/xen-api/classes/sdn_controller.md b/doc/content/xen-api/classes/sdn_controller.md new file mode 100644 index 00000000000..af9de2fe360 --- /dev/null +++ b/doc/content/xen-api/classes/sdn_controller.md @@ -0,0 +1,6 @@ ++++ +title = "SDN_controller" +layout = "class" +type = "xenapi" +class = "SDN_controller" ++++ diff --git a/doc/content/xen-api/classes/secret.md b/doc/content/xen-api/classes/secret.md new file mode 100644 index 00000000000..3616ab5db39 --- /dev/null +++ b/doc/content/xen-api/classes/secret.md @@ -0,0 +1,6 @@ ++++ +title = "secret" +layout = "class" +type = "xenapi" +class = "secret" ++++ diff --git a/doc/content/xen-api/classes/session.md b/doc/content/xen-api/classes/session.md new file mode 100644 index 00000000000..80d8097a967 --- /dev/null +++ b/doc/content/xen-api/classes/session.md @@ -0,0 +1,6 @@ ++++ +title = "session" +layout = "class" +type = "xenapi" +class = "session" ++++ diff --git a/doc/content/xen-api/classes/sm.md b/doc/content/xen-api/classes/sm.md new file mode 100644 index 00000000000..a97241e19fd --- /dev/null +++ b/doc/content/xen-api/classes/sm.md @@ -0,0 +1,6 @@ ++++ +title = "SM" +layout = "class" +type = "xenapi" +class = "SM" ++++ diff --git a/doc/content/xen-api/classes/sr.md b/doc/content/xen-api/classes/sr.md new file mode 100644 index 00000000000..8fff1ac99a8 --- /dev/null +++ b/doc/content/xen-api/classes/sr.md @@ -0,0 +1,6 @@ ++++ +title = "SR" +layout = "class" +type = "xenapi" +class = "SR" ++++ diff --git a/doc/content/xen-api/classes/sr_stat.md b/doc/content/xen-api/classes/sr_stat.md new file mode 100644 index 00000000000..53dcfc43b60 --- /dev/null +++ b/doc/content/xen-api/classes/sr_stat.md @@ -0,0 +1,6 @@ ++++ +title = "sr_stat" +layout = "class" +type = "xenapi" +class = "sr_stat" ++++ diff --git a/doc/content/xen-api/classes/subject.md b/doc/content/xen-api/classes/subject.md new file mode 100644 index 00000000000..437272b411a --- /dev/null +++ b/doc/content/xen-api/classes/subject.md @@ -0,0 +1,6 @@ ++++ +title = "subject" +layout = "class" +type = "xenapi" +class = "subject" ++++ diff --git a/doc/content/xen-api/classes/task.md b/doc/content/xen-api/classes/task.md new file mode 100644 index 00000000000..298f1b36a25 --- /dev/null +++ b/doc/content/xen-api/classes/task.md @@ -0,0 +1,6 @@ ++++ +title = "task" +layout = "class" +type = "xenapi" +class = "task" ++++ diff --git a/doc/content/xen-api/classes/tunnel.md b/doc/content/xen-api/classes/tunnel.md new file mode 100644 index 00000000000..b82846cc41d --- /dev/null +++ b/doc/content/xen-api/classes/tunnel.md @@ -0,0 +1,6 @@ ++++ +title = "tunnel" +layout = "class" +type = "xenapi" +class = "tunnel" ++++ diff --git a/doc/content/xen-api/classes/usb_group.md b/doc/content/xen-api/classes/usb_group.md new file mode 100644 index 00000000000..e28f2583c32 --- /dev/null +++ b/doc/content/xen-api/classes/usb_group.md @@ -0,0 +1,6 @@ ++++ +title = "USB_group" +layout = "class" +type = "xenapi" +class = "USB_group" ++++ diff --git a/doc/content/xen-api/classes/user.md b/doc/content/xen-api/classes/user.md new file mode 100644 index 00000000000..556c4345d4c --- /dev/null +++ b/doc/content/xen-api/classes/user.md @@ -0,0 +1,6 @@ ++++ +title = "user" +layout = "class" +type = "xenapi" +class = "user" ++++ diff --git a/doc/content/xen-api/classes/vbd.md b/doc/content/xen-api/classes/vbd.md new file mode 100644 index 00000000000..a10380558a1 --- /dev/null +++ b/doc/content/xen-api/classes/vbd.md @@ -0,0 +1,6 @@ ++++ +title = "VBD" +layout = "class" +type = "xenapi" +class = "VBD" ++++ diff --git a/doc/content/xen-api/classes/vbd_metrics.md b/doc/content/xen-api/classes/vbd_metrics.md new file mode 100644 index 00000000000..20e29144e60 --- /dev/null +++ b/doc/content/xen-api/classes/vbd_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "VBD_metrics" +layout = "class" +type = "xenapi" +class = "VBD_metrics" ++++ diff --git a/doc/content/xen-api/classes/vdi.md b/doc/content/xen-api/classes/vdi.md new file mode 100644 index 00000000000..8cc6c820029 --- /dev/null +++ b/doc/content/xen-api/classes/vdi.md @@ -0,0 +1,6 @@ ++++ +title = "VDI" +layout = "class" +type = "xenapi" +class = "VDI" ++++ diff --git a/doc/content/xen-api/classes/vdi_nbd_server_info.md b/doc/content/xen-api/classes/vdi_nbd_server_info.md new file mode 100644 index 00000000000..8f173cc191c --- /dev/null +++ b/doc/content/xen-api/classes/vdi_nbd_server_info.md @@ -0,0 +1,6 @@ ++++ +title = "vdi_nbd_server_info" +layout = "class" +type = "xenapi" +class = "vdi_nbd_server_info" ++++ diff --git a/doc/content/xen-api/classes/vgpu.md b/doc/content/xen-api/classes/vgpu.md new file mode 100644 index 00000000000..beb2dfca11d --- /dev/null +++ b/doc/content/xen-api/classes/vgpu.md @@ -0,0 +1,6 @@ ++++ +title = "VGPU" +layout = "class" +type = "xenapi" +class = "VGPU" ++++ diff --git a/doc/content/xen-api/classes/vgpu_type.md b/doc/content/xen-api/classes/vgpu_type.md new file mode 100644 index 00000000000..a1bc3b2cdbe --- /dev/null +++ b/doc/content/xen-api/classes/vgpu_type.md @@ -0,0 +1,6 @@ ++++ +title = "VGPU_type" +layout = "class" +type = "xenapi" +class = "VGPU_type" ++++ diff --git a/doc/content/xen-api/classes/vif.md b/doc/content/xen-api/classes/vif.md new file mode 100644 index 00000000000..b8e3fce73b2 --- /dev/null +++ b/doc/content/xen-api/classes/vif.md @@ -0,0 +1,6 @@ ++++ +title = "VIF" +layout = "class" +type = "xenapi" +class = "VIF" ++++ diff --git a/doc/content/xen-api/classes/vif_metrics.md b/doc/content/xen-api/classes/vif_metrics.md new file mode 100644 index 00000000000..d6819cc23f4 --- /dev/null +++ b/doc/content/xen-api/classes/vif_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "VIF_metrics" +layout = "class" +type = "xenapi" +class = "VIF_metrics" ++++ diff --git a/doc/content/xen-api/classes/vlan.md b/doc/content/xen-api/classes/vlan.md new file mode 100644 index 00000000000..ee1107f1546 --- /dev/null +++ b/doc/content/xen-api/classes/vlan.md @@ -0,0 +1,6 @@ ++++ +title = "VLAN" +layout = "class" +type = "xenapi" +class = "VLAN" ++++ diff --git a/doc/content/xen-api/classes/vm.md b/doc/content/xen-api/classes/vm.md new file mode 100644 index 00000000000..275f9d2eeb9 --- /dev/null +++ b/doc/content/xen-api/classes/vm.md @@ -0,0 +1,6 @@ ++++ +title = "VM" +layout = "class" +type = "xenapi" +class = "VM" ++++ diff --git a/doc/content/xen-api/classes/vm_appliance.md b/doc/content/xen-api/classes/vm_appliance.md new file mode 100644 index 00000000000..437ff3d4720 --- /dev/null +++ b/doc/content/xen-api/classes/vm_appliance.md @@ -0,0 +1,6 @@ ++++ +title = "VM_appliance" +layout = "class" +type = "xenapi" +class = "VM_appliance" ++++ diff --git a/doc/content/xen-api/classes/vm_guest_metrics.md b/doc/content/xen-api/classes/vm_guest_metrics.md new file mode 100644 index 00000000000..03515aee30e --- /dev/null +++ b/doc/content/xen-api/classes/vm_guest_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "VM_guest_metrics" +layout = "class" +type = "xenapi" +class = "VM_guest_metrics" ++++ diff --git a/doc/content/xen-api/classes/vm_metrics.md b/doc/content/xen-api/classes/vm_metrics.md new file mode 100644 index 00000000000..2cd77d89d0e --- /dev/null +++ b/doc/content/xen-api/classes/vm_metrics.md @@ -0,0 +1,6 @@ ++++ +title = "VM_metrics" +layout = "class" +type = "xenapi" +class = "VM_metrics" ++++ diff --git a/doc/content/xen-api/classes/vmpp.md b/doc/content/xen-api/classes/vmpp.md new file mode 100644 index 00000000000..2857e423b6c --- /dev/null +++ b/doc/content/xen-api/classes/vmpp.md @@ -0,0 +1,6 @@ ++++ +title = "VMPP" +layout = "class" +type = "xenapi" +class = "VMPP" ++++ diff --git a/doc/content/xen-api/classes/vmss.md b/doc/content/xen-api/classes/vmss.md new file mode 100644 index 00000000000..c3469401bc0 --- /dev/null +++ b/doc/content/xen-api/classes/vmss.md @@ -0,0 +1,6 @@ ++++ +title = "VMSS" +layout = "class" +type = "xenapi" +class = "VMSS" ++++ diff --git a/doc/content/xen-api/classes/vtpm.md b/doc/content/xen-api/classes/vtpm.md new file mode 100644 index 00000000000..d550a8b1508 --- /dev/null +++ b/doc/content/xen-api/classes/vtpm.md @@ -0,0 +1,6 @@ ++++ +title = "VTPM" +layout = "class" +type = "xenapi" +class = "VTPM" ++++ diff --git a/doc/content/xen-api/classes/vusb.md b/doc/content/xen-api/classes/vusb.md new file mode 100644 index 00000000000..68f3d7572a9 --- /dev/null +++ b/doc/content/xen-api/classes/vusb.md @@ -0,0 +1,6 @@ ++++ +title = "VUSB" +layout = "class" +type = "xenapi" +class = "VUSB" ++++ diff --git a/doc/content/xen-api/evolution.md b/doc/content/xen-api/evolution.md new file mode 100644 index 00000000000..124a2b77f6f --- /dev/null +++ b/doc/content/xen-api/evolution.md @@ -0,0 +1,93 @@ ++++ +title = "API evolution" +weight = 40 ++++ + +All APIs evolve as bugs are fixed, new features added and features are removed +- the XenAPI is no exception. This document lists policies describing how the +XenAPI evolves over time. + +The goals of XenAPI evolution are: + +- to allow bugs to be fixed efficiently; +- to allow new, innovative features to be added easily; +- to keep old, unmodified clients working as much as possible; and +- where backwards-incompatible changes are to be made, publish this + information early to enable affected parties to give timely feedback. + +## Background + +In this document, the term *XenAPI* refers to the XMLRPC-derived wire protocol +used by xapi. The XenAPI has *objects* which each have *fields* and +*messages*. The XenAPI is described in detail elsewhere. + +## XenAPI Lifecycle + +```mermaid +graph LR + Prototype -->|1| Published -->|4| Deprecated -->|5| Removed + Published -->|2,3| Published +``` + +Each element of the XenAPI (objects, messages and fields) follows the lifecycle +diagram above. When an element is newly created and being still in development, +it is in the *Prototype* state. Elements in this state may be stubs: the +interface is there and can be used by clients for prototyping their new +features, but the actual implementation is not yet ready. + +When the element subsequently becomes ready for use (the stub is replaced by a +real implementation), it transitions to the *Published* state. This is the only +state in which the object, message or field should be used. From this point +onwards, the element needs to have clearly defined semantics that are available +for reference in the XenAPI documentation. + +If the XenAPI element becomes *Deprecated*, it will still function as it did +before, but its use is discouraged. The final stage of the lifecycle is the +*Removed* state, in which the element is not available anymore. + +The numbered state changes in the diagram have the following meaning: + +1. Publish: declare that the XenAPI element is ready for people to use. +2. Extend: a *backwards-compatible* extension of the XenAPI, for example an + additional parameter in a message with an appropriate default value. If the + API is used as before, it still has the same effect. +3. Change: a *backwards-incompatible* change. That is, the message now behaves + differently, or the field has different semantics. Such changes are + discouraged and should only be considered in special cases (always consider + whether deprecation is a better solution). The use of a message can for + example be restricted for security or efficiency reasons, or the behaviour + can be changed simply to fix a bug. +4. Deprecate: declare that the use of this XenAPI element should be avoided from + now on. Reasons for doing this include: the element is redundant (it + duplicates functionality elsewhere), it is inconsistent with other parts of + the XenAPI, it is insecure or inefficient (for examples of deprecation + policies of other projects, see + [symbian](http://developer.symbian.org/wiki/index.php/Public_API_Change_Control_Process) + [eclipse](http://wiki.eclipse.org/Eclipse/API_Central/Deprecation_Policy) + [oval](http://oval.mitre.org/language/about/deprecation.html). +5. Remove: the element is taken out of the public API and can no longer be used. + +Each lifecycle transition must be accompanied by an explanation describing the +change and the reason for the change. This message should be enough to +understand the semantics of the XenAPI element after the change, and in the case +of backwards-incompatible changes or deprecation, it should give directions +about how to modify a client to deal with the change (for example, how to avoid +using the deprecated field or message). + +## Releases + +Every release must be accompanied by *release notes* listing all objects, fields +and messages that are newly prototyped, published, extended, changed, deprecated +or removed in the release. Each item should have an explanation as implied +above, documenting the new or changed XenAPI element. The release notes for +every release shall be prominently displayed in the XenAPI HTML documentation. + +## Documentation + +The XenAPI documentation will contain its complete lifecycle history for each +XenAPI element. Only the elements described in the documentation are +"official" and supported. + +Each object, message and field in `datamodel.ml` will have lifecycle +metadata attached to it, which is a list of transitions (transition type * +release * explanation string) as described above. Release notes are automatically generated from this data. diff --git a/doc/content/xen-api/overview/dia_class_overview.svg b/doc/content/xen-api/overview/dia_class_overview.svg new file mode 100644 index 00000000000..4459f2e6748 --- /dev/null +++ b/doc/content/xen-api/overview/dia_class_overview.svg @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Host Configuration + + + + Virtual Configuration + + + VM + + + + VBD + + + + + VIF + + + + Host + + + + PIF + + + + PBD + + + + + + SR + + + + + + Network + + + + + + VDI + + + + Network Config + + Disk Config + + diff --git a/doc/content/xen-api/overview/dia_vm_sr.svg b/doc/content/xen-api/overview/dia_vm_sr.svg new file mode 100644 index 00000000000..1848c99bfca --- /dev/null +++ b/doc/content/xen-api/overview/dia_vm_sr.svg @@ -0,0 +1,212 @@ + + + + + + + + + image/svg+xml + + + + + + + + VDI + + VDI + + Storage Repository (SR) + + + VBD + + VBD + VM + + + + + + diff --git a/doc/content/xen-api/overview/index.md b/doc/content/xen-api/overview/index.md new file mode 100644 index 00000000000..18acc9e1e9b --- /dev/null +++ b/doc/content/xen-api/overview/index.md @@ -0,0 +1,240 @@ ++++ +title = "Overview of the XenAPI" +weight = 30 ++++ + +This chapter introduces the XenAPI and its associated object model. The API has the following key features: + +- *Management of all aspects of the XenServer Host*. + The API allows you to manage VMs, storage, networking, host configuration and pools. Performance and status metrics can also be queried from the API. + +- *Persistent Object Model*. + The results of all side-effecting operations (e.g. object creation, deletion and parameter modifications) are persisted in a server-side database that is managed by the XenServer installation. + +- *An event mechanism*. + Through the API, clients can register to be notified when persistent (server-side) objects are modified. This enables applications to keep track of datamodel modifications performed by concurrently executing clients. + +- *Synchronous and asynchronous invocation*. + All API calls can be invoked synchronously (that is, block until completion); any API call that may be long-running can also be invoked *asynchronously*. Asynchronous calls return immediately with a reference to a *task* object. This task object can be queried (through the API) for progress and status information. When an asynchronously invoked operation completes, the result (or error code) is available from the task object. + +- *Remotable and Cross-Platform*. + The client issuing the API calls does not have to be resident on the host being managed; nor does it have to be connected to the host over ssh in order to execute the API. API calls make use of the XML-RPC protocol to transmit requests and responses over the network. + +- *Secure and Authenticated Access*. + The XML-RPC API server executing on the host accepts secure socket connections. This allows a client to execute the APIs over the https protocol. Further, all the API calls execute in the context of a login session generated through username and password validation at the server. This provides secure and authenticated access to the XenServer installation. + +Getting Started with the API +---------------------------- + +We will start our tour of the API by describing the calls required to create a new VM on a XenServer installation, and take it through a start/suspend/resume/stop cycle. This is done without reference to code in any specific language; at this stage we just describe the informal sequence of RPC invocations that accomplish our "install and start" task. + +### Authentication: acquiring a session reference + +The first step is to call `Session.login_with_password(, , , )`. The API is session based, so before you can make other calls you will need to authenticate with the server. Assuming the username and password are authenticated correctly, the result of this call is a *session reference*. Subsequent API calls take the session reference as a parameter. In this way we ensure that only API users who are suitably authorized can perform operations on a XenServer installation. You can continue to use the same session for any number of API calls. When you have finished the session, Citrix recommends that you call `Session.logout(session)` to clean up: see later. + +### Acquiring a list of templates to base a new VM installation on + +The next step is to query the list of "templates" on the host. Templates are specially-marked VM objects that specify suitable default parameters for a variety of supported guest types. (If you want to see a quick enumeration of the templates on a XenServer installation for yourself then you can execute the `xe template-list` CLI command.) To get a list of templates from the API, we need to find the VM objects on the server that have their `is_a_template` field set to true. One way to do this by calling `VM.get_all_records(session)` where the session parameter is the reference we acquired from our `Session.login_with_password` call earlier. This call queries the server, returning a snapshot (taken at the time of the call) containing all the VM object references and their field values. + +(Remember that at this stage we are not concerned about the particular mechanisms by which the returned object references and field values can be manipulated in any particular client language: that detail is dealt with by our language-specific API bindings and described concretely in the following chapter. For now it suffices just to assume the existence of an abstract mechanism for reading and manipulating objects and field values returned by API calls.) + +Now that we have a snapshot of all the VM objects' field values in the memory of our client application we can simply iterate through them and find the ones that have their "`is_a_template`" set to true. At this stage let's assume that our example application further iterates through the template objects and remembers the reference corresponding to the one that has its "`name_label`" set to "Debian Etch 4.0" (one of the default Linux templates supplied with XenServer). + +### Installing the VM based on a template + +Continuing through our example, we must now install a new VM based on the template we selected. The installation process requires 4 API calls: + +- First we must now invoke the API call `VM.clone(session, t_ref, "my first VM")`. This tells the server to clone the VM object referenced by `t_ref` in order to make a new VM object. The return value of this call is the VM reference corresponding to the newly-created VM. Let's call this `new_vm_ref`. + +- Next, we need to specify the UUID of the Storage Repository where the VM's + disks will be instantiated. We have to put this in the `sr` attribute in + the disk provisioning XML stored under the "`disks`" key in the + `other_config` map of the newly-created VM. This field can be updated by + calling its getter (`other_config <- VM.get_other_config(session, + new_vm_ref)`) and then its setter (`VM.set_other_config(session, + new_vm_ref, other_config)`) with the modified `other_config` map. + +- At this stage the object referred to by `new_vm_ref` is still a template (just like the VM object referred to by `t_ref`, from which it was cloned). To make `new_vm_ref` into a VM object we need to call `VM.provision(session, new_vm_ref)`. When this call returns the `new_vm_ref` object will have had its `is_a_template` field set to false, indicating that `new_vm_ref` now refers to a regular VM ready for starting. + +> **Note** +> +> The provision operation may take a few minutes, as it is as during this call that the template's disk images are created. In the case of the Debian template, the newly created disks are also at this stage populated with a Debian root filesystem. + +### Taking the VM through a start/suspend/resume/stop cycle + +Now we have an object reference representing our newly-installed VM, it is trivial to take it through a few lifecycle operations: + +- To start our VM we can just call `VM.start(session, new_vm_ref)` + +- After it's running, we can suspend it by calling `VM.suspend(session, new_vm_ref)`, + +- and then resume it by calling `VM.resume(session, new_vm_ref)`. + +- We can call `VM.shutdown(session, new_vm_ref)` to shutdown the VM cleanly. + +### Logging out + +Once an application is finished interacting with a XenServer Host it is good practice to call `Session.logout(session)`. This invalidates the session reference (so it cannot be used in subsequent API calls) and simultaneously deallocates server-side memory used to store the session object. + +Although inactive sessions will eventually timeout, the server has a hardcoded limit of 500 concurrent sessions for each `username` or `originator`. Once this limit has been reached fresh logins will evict the session objects that have been used least recently, causing their associated session references to become invalid. For successful interoperability with other applications, concurrently accessing the server, the best policy is: + +- Choose a string that identifies your application and its version. + +- Create a single session at start-of-day, using that identifying string for the `originator` parameter to `Session.login_with_password`. + +- Use this session throughout the application (note that sessions can be used across multiple separate client-server *network connections*) and then explicitly logout when possible. + +If a poorly written client leaks sessions or otherwise exceeds the limit, then as long as the client uses an appropriate `originator` argument, it will be easily identifiable from the XenServer logs and XenServer will destroy the longest-idle sessions of the rogue client only; this may cause problems for that client but not for other clients. If the misbehaving client did not specify an `originator`, it would be harder to identify and would cause the premature destruction of sessions of any clients that also did not specify an `originator` + +### Install and start example: summary + +We have seen how the API can be used to install a VM from a XenServer template and perform a number of lifecycle operations on it. You will note that the number of calls we had to make in order to affect these operations was small: + +- One call to acquire a session: `Session.login_with_password()` + +- One call to query the VM (and template) objects present on the XenServer installation: `VM.get_all_records()`. Recall that we used the information returned from this call to select a suitable template to install from. + +- Four calls to install a VM from our chosen template: `VM.clone()`, followed + by the getter and setter of the `other_config` field to specify where to + create the disk images of the template, and then `VM.provision()`. + +- One call to start the resultant VM: `VM.start()` (and similarly other single calls to suspend, resume and shutdown accordingly) + +- And then one call to logout `Session.logout()` + +The take-home message here is that, although the API as a whole is complex and fully featured, common tasks (such as creating and performing lifecycle operations on VMs) are very straightforward to perform, requiring only a small number of simple API calls. Keep this in mind while you study the next section which may, on first reading, appear a little daunting! + +Object Model Overview +--------------------- + +This section gives a high-level overview of the object model of the API. A more detailed description of the parameters and methods of each class outlined here can be found in the XenServer API Reference document. + +We start by giving a brief outline of some of the core classes that make up the API. (Don't worry if these definitions seem somewhat abstract in their initial presentation; the textual description in subsequent sections, and the code-sample walk through in the next Chapter will help make these concepts concrete.) + +| Class | Description | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VM | A VM object represents a particular virtual machine instance on a XenServer Host or Resource Pool. Example methods include `start`, `suspend`, `pool_migrate`; example parameters include `power_state`, `memory_static_max`, and `name_label`. (In the previous section we saw how the VM class is used to represent both templates and regular VMs) | +| Host | A host object represents a physical host in a XenServer pool. Example methods include `reboot` and `shutdown`. Example parameters include `software_version`, `hostname`, and [IP] `address`. | +| VDI | A VDI object represents a _Virtual Disk Image_. Virtual Disk Images can be attached to VMs, in which case a block device appears inside the VM through which the bits encapsulated by the Virtual Disk Image can be read and written. Example methods of the VDI class include "resize" and "clone". Example fields include "virtual_size" and "sharable". (When we called `VM.provision` on the VM template in our previous example, some VDI objects were automatically created to represent the newly created disks, and attached to the VM object.) | +| SR | An SR (_Storage Repository_) aggregates a collection of VDIs and encapsulates the properties of physical storage on which the VDIs' bits reside. Example parameters include `type` (which determines the storage-specific driver a XenServer installation uses to read/write the SR's VDIs) and `physical_utilisation`; example methods include `scan` (which invokes the storage-specific driver to acquire a list of the VDIs contained with the SR and the properties of these VDIs) and `create` (which initializes a block of physical storage so it is ready to store VDIs). | +| Network | A network object represents a layer-2 network that exists in the environment in which the XenServer Host instance lives. Since XenServer does not manage networks directly this is a lightweight class that serves merely to model physical and virtual network topology. VM and Host objects that are _attached_ to a particular Network object (by virtue of VIF and PIF instances -- see below) can send network packets to each other. | + +At this point, readers who are finding this enumeration of classes rather terse may wish to skip to the code walk-throughs of the next chapter: there are plenty of useful applications that can be written using only a subset of the classes already described! For those who wish to continue this description of classes in the abstract, read on. + +On top of the classes listed above, there are 4 more that act as *connectors*, specifying relationships between VMs and Hosts, and Storage and Networks. The first 2 of these classes that we will consider, *VBD* and *VIF*, determine how VMs are attached to virtual disks and network objects respectively: + +| Class | Description | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VBD | A VBD (_Virtual Block Device_) object represents an attachment between a VM and a VDI. When a VM is booted its VBD objects are queried to determine which disk images (VDIs) should be attached. Example methods of the VBD class include "plug" (which _hot plugs_ a disk device into a running VM, making the specified VDI accessible therein) and "unplug" (which _hot unplugs_ a disk device from a running guest); example fields include "device" (which determines the device name inside the guest under which the specified VDI will be made accessible). | +| VIF | A VIF (_Virtual network InterFace_) object represents an attachment between a VM and a Network object. When a VM is booted its VIF objects are queried to determine which network devices should be created. Example methods of the VIF class include "plug" (which _hot plugs_ a network device into a running VM) and "unplug" (which _hot unplugs_ a network device from a running guest).

| + +The second set of "connector classes" that we will consider determine how Hosts are attached to Networks and Storage. + +| Class | Description | +| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PIF | A PIF (_Physical InterFace_) object represents an attachment between a Host and a Network object. If a host is connected to a Network (over a PIF) then packets from the specified host can be transmitted/received by the corresponding host. Example fields of the PIF class include "device" (which specifies the device name to which the PIF corresponds -- e.g. _eth0_) and "MAC" (which specifies the MAC address of the underlying NIC that a PIF represents). Note that PIFs abstract both physical interfaces and VLANs (the latter distinguished by the existence of a positive integer in the "VLAN" field). | +| PBD | A PBD (_Physical Block Device_) object represents an attachment between a Host and a SR (Storage Repository) object. Fields include "currently-attached" (which specifies whether the chunk of storage represented by the specified SR object) is currently available to the host; and "device_config" (which specifies storage-driver specific parameters that determines how the low-level storage devices are configured on the specified host -- e.g. in the case of an SR rendered on an NFS filer, device_config may specify the host-name of the filer and the path on the filer in which the SR files live.). | + +![Graphical overview of API classes for managing VMs, Hosts, Storage and Networking](dia_class_overview.svg) + +The figure above presents a graphical overview of the API classes involved in managing VMs, Hosts, Storage and Networking. From this diagram, the symmetry between storage and network configuration, and also the symmetry between virtual machine and host configuration is plain to see. + +Working with VIFs and VBDs +-------------------------- + +In this section we walk through a few more complex scenarios, describing informally how various tasks involving virtual storage and network devices can be accomplished using the API. + +### Creating disks and attaching them to VMs + +Let's start by considering how to make a new blank disk image and attach it to a running VM. We will assume that we already have ourselves a running VM, and we know its corresponding API object reference (e.g. we may have created this VM using the procedure described in the previous section, and had the server return its reference to us.) We will also assume that we have authenticated with the XenServer installation and have a corresponding `session reference`. Indeed in the rest of this chapter, for the sake of brevity, we will stop mentioning sessions altogether. + +#### Creating a new blank disk image + +The first step is to instantiate the disk image on physical storage. We do this by calling `VDI.create()`. The `VDI.create` call takes a number of parameters, including: + +- `name_label` and `name_description`: a human-readable name/description for the disk (e.g. for convenient display in the UI etc.). These fields can be left blank if desired. + +- `SR`: the object reference of the Storage Repository representing the physical storage in which the VDI's bits will be placed. + +- `read_only`: setting this field to true indicates that the VDI can *only* be attached to VMs in a read-only fashion. (Attempting to attach a VDI with its `read_only` field set to true in a read/write fashion results in error.) + +Invoking the `VDI.create` call causes the XenServer installation to create a blank disk image on physical storage, create an associated VDI object (the datamodel instance that refers to the disk image on physical storage) and return a reference to this newly created VDI object. + +The way in which the disk image is represented on physical storage depends on the type of the SR in which the created VDI resides. For example, if the SR is of type "lvm" then the new disk image will be rendered as an LVM volume; if the SR is of type "nfs" then the new disk image will be a sparse VHD file created on an NFS filer. (You can query the SR type through the API using the `SR.get_type()` call.) + +> **Note** +> +> Some SR types might round up the `virtual-size` value to make it divisible by a configured block size. + +#### Attaching the disk image to a VM + +So far we have a running VM (that we assumed the existence of at the start of this example) and a fresh VDI that we just created. Right now, these are both independent objects that exist on the XenServer Host, but there is nothing linking them together. So our next step is to create such a link, associating the VDI with our VM. + +The attachment is formed by creating a new "connector" object called a VBD (*Virtual Block Device*). To create our VBD we invoke the `VBD.create()` call. The `VBD.create()` call takes a number of parameters including: + +- `VM` - the object reference of the VM to which the VDI is to be attached + +- `VDI` - the object reference of the VDI that is to be attached + +- `mode` - specifies whether the VDI is to be attached in a read-only or a read-write fashion + +- `userdevice` - specifies the block device inside the guest through which applications running inside the VM will be able to read/write the VDI's bits. + +- `type` - specifies whether the VDI should be presented inside the VM as a regular disk or as a CD. (Note that this particular field has more meaning for Windows VMs than it does for Linux VMs, but we will not explore this level of detail in this chapter.) + +Invoking `VBD.create` makes a VBD object on the XenServer installation and returns its object reference. However, this call in itself does not have any side-effects on the running VM (that is, if you go and look inside the running VM you will see that the block device has not been created). The fact that the VBD object exists but that the block device in the guest is not active, is reflected by the fact that the VBD object's `currently_attached` field is set to false. + +![A VM object with 2 associated VDIs](dia_vm_sr.svg) + +For expository purposes, the figure above presents a graphical example that shows the relationship between VMs, VBDs, VDIs and SRs. In this instance a VM object has 2 attached VDIs: there are 2 VBD objects that form the connections between the VM object and its VDIs; and the VDIs reside within the same SR. + +#### Hotplugging the VBD + +If we rebooted the VM at this stage then, after rebooting, the block device corresponding to the VBD would appear: on boot, XenServer queries all VBDs of a VM and actively attaches each of the corresponding VDIs. + +Rebooting the VM is all very well, but recall that we wanted to attach a newly created blank disk to a *running* VM. This can be achieved by invoking the `plug` method on the newly created VBD object. When the `plug` call returns successfully, the block device to which the VBD relates will have appeared inside the running VM -- i.e. from the perspective of the running VM, the guest operating system is led to believe that a new disk device has just been *hot plugged*. Mirroring this fact in the managed world of the API, the `currently_attached` field of the VBD is set to true. + +Unsurprisingly, the VBD `plug` method has a dual called "`unplug`". Invoking the `unplug` method on a VBD object causes the associated block device to be *hot unplugged* from a running VM, setting the `currently_attached` field of the VBD object to false accordingly. + +### Creating and attaching Network Devices to VMs + +The API calls involved in configuring virtual network interfaces in VMs are similar in many respects to the calls involved in configuring virtual disk devices. For this reason we will not run through a full example of how one can create network interfaces using the API object-model; instead we will use this section just to outline briefly the symmetry between virtual *networking device* and virtual *storage device* configuration. + +The networking analogue of the VBD class is the VIF class. Just as a VBD is the API representation of a block device inside a VM, a VIF (*Virtual network InterFace*) is the API representation of a network device inside a VM. Whereas VBDs associate VM objects with VDI objects, VIFs associate VM objects with Network objects. Just like VBDs, VIFs have a `currently_attached` field that determines whether or not the network device (inside the guest) associated with the VIF is currently active or not. And as we saw with VBDs, at VM boot-time the VIFs of the VM are queried and a corresponding network device for each created inside the booting VM. Similarly, VIFs also have `plug` and `unplug` methods for hot plugging/unplugging network devices in/out of running VMs. + +### Host configuration for networking and storage + +We have seen that the VBD and VIF classes are used to manage configuration of block devices and network devices (respectively) inside VMs. To manage host configuration of storage and networking there are two analogous classes: PBD (*Physical Block Device*) and PIF (*Physical [network] InterFace*). + +#### Host storage configuration: PBDs + +Let us start by considering the PBD class. A `PBD_create()` call takes a number of parameters including: + +| Parameter | Description | +| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| host | physical machine on which the PBD is available | +| SR | the Storage Repository that the PBD connects to | +| device_config | a string-to-string map that is provided to the host's SR-backend-driver, containing the low-level parameters required to configure the physical storage device(s) on which the SR is to be realized. The specific contents of the `device_config` field depend on the type of the SR to which the PBD is connected. (Executing `xe sm-list` will show a list of possible SR types; the _configuration_ field in this enumeration specifies the `device_config` parameters that each SR type expects.) | + + +For example, imagine we have an SR object *s* of type "nfs" (representing a directory on an NFS filer within which VDIs are stored as VHD files); and let's say that we want a host, *h*, to be able to access *s*. In this case we invoke `PBD.create()` specifying host *h*, SR *s*, and a value for the *device\_config* parameter that is the following map: + +`("server", "my_nfs_server.example.com"), ("serverpath", "/scratch/mysrs/sr1")` + +This tells the XenServer Host that SR *s* is accessible on host *h*, and further that to access SR *s*, the host needs to mount the directory `/scratch/mysrs/sr1` on the NFS server named `my_nfs_server.example.com`. + +Like VBD objects, PBD objects also have a field called `currently_attached`. Storage repositories can be attached and detached from a given host by invoking `PBD.plug` and `PBD.unplug` methods respectively. + +#### Host networking configuration: PIFs + +Host network configuration is specified by virtue of PIF objects. If a PIF object connects a network object, *n*, to a host object *h*, then the network corresponding to *n* is bridged onto a physical interface (or a physical interface plus a VLAN tag) specified by the fields of the PIF object. + +For example, imagine a PIF object exists connecting host *h* to a network *n*, and that `device` field of the PIF object is set to `eth0`. This means that all packets on network *n* are bridged to the NIC in the host corresponding to host network device `eth0`. + + +XML-RPC notes +------------- + +### Datetimes + +The API deviates from the XML-RPC specification in handling of datetimes. The API appends a "Z" to the end of datetime strings, which is meant to indicate that the time is expressed in UTC. diff --git a/doc/content/xen-api/wire-protocol.md b/doc/content/xen-api/wire-protocol.md new file mode 100644 index 00000000000..689819a88a9 --- /dev/null +++ b/doc/content/xen-api/wire-protocol.md @@ -0,0 +1,299 @@ ++++ +title = "Wire Protocol" +weight = 20 ++++ + +API calls are sent over a network to a Xen-enabled host using the +[XML-RPC](http://xmlrpc.scripting.com/spec.html) protocol. On this page, we describe how the higher-level types +used in our API Reference are mapped to primitive XML-RPC types. + +We specify the signatures of API functions in the following style: + + (VM ref set) VM.get_all () + +This specifies that the function with name `VM.get_all` +takes no parameters and returns a `set` of `VM ref`s. These +types are mapped onto XML-RPC types in a straight-forward manner: + +- `float`s, `bool`s, `datetime`s and `string`s map directly to the XML-RPC + ``, ``, ``, and `` elements. + +- all `ref` types are opaque references, encoded as the + XML-RPC’s `` type. Users of the API should not make + assumptions about the concrete form of these strings and should not + expect them to remain valid after the client’s session with the + server has terminated. + +- fields named `uuid` of type `string` are + mapped to the XML-RPC `` type. The string itself is + the OSF DCE UUID presentation format (as output by + `uuidgen`, etc). + +- `int`s are all assumed to be 64-bit in our API and are encoded as a + string of decimal digits (rather than using XML-RPC’s built-in + 32-bit `` type). + +- values of `enum` types are encoded as strings. For example, a value of + `destroy` of type `enum on_normal_exit`, would be + conveyed as: + + destroy + +- for all our types, `t`, our type `t set` + simply maps to XML-RPC’s `` type, so for example a + value of type `string set` would be transmitted like + this: + + + + + CX8 + PSE36 + FPU + + + + +- for types `k` and `v`, our type `(k → v) map` maps onto an XML-RPC ``, with the key as the name of + the struct. Note that the `(k → v) map` type is only valid + when `k` is a `string`, `ref`, or `int`, and in each case the keys of the maps are + stringified as above. For example, the `(string → double) map` containing a the mappings `"Mike" → 2.3` and + `"John" → 1.2` would be represented as: + + + + + Mike + 2.3 + + + John + 1.2 + + + + + +- our `void` type is transmitted as an empty string. + +Note on References vs UUIDs +--------------------------- + +References are opaque types — encoded as XML-RPC strings on the wire — +understood only by the particular server which generated them. Servers +are free to choose any concrete representation they find convenient; +clients should not make any assumptions or attempt to parse the string +contents. References are not guaranteed to be permanent identifiers for +objects; clients should not assume that references generated during one +session are valid for any future session. References do not allow +objects to be compared for equality. Two references to the same object +are not guaranteed to be textually identical. + +UUIDs are intended to be permanent names for objects. They are +guaranteed to be in the OSF DCE UUID presentation format (as output by +`uuidgen`. Clients may store UUIDs on disk and use them to +lookup objects in subsequent sessions with the server. Clients may also +test equality on objects by comparing UUID strings. + +The API provides mechanisms for translating between UUIDs and opaque +references. Each class that contains a UUID field provides: + +- A `get_by_uuid` method that takes a UUID, and + returns an opaque reference to the server-side object that has that + UUID; + +- A `get_uuid` function (a regular “field getter” RPC) + that takes an opaque reference and returns the UUID of the + server-side object that is referenced by it. + +Return Values/Status Codes +-------------------------- + +The return value of an RPC call is an XML-RPC ``. + +- The first element of the struct is named `"Status"`; it + contains a string value indicating whether the result of the call + was a `"Success"` or a `"Failure"`. + +If `"Status"` was set to `"Success"` then the Struct +contains a second element named `"Value"`: + +- The element of the struct named `"Value"` contains the + function’s return value. + +In the case where `"Status"` is set to `"Failure"` +then the struct contains a second element named +`"ErrorDescription"`: + +- The element of the struct named `"ErrorDescription"` + contains an array of string values. The first element of the array + is an error code; the remainder of the array are strings + representing error parameters relating to that code. + +For example, an XML-RPC return value from the +`host.get_resident_VMs` function above may look like this: + + + + Status + Success + + + Value + + + + 81547a35-205c-a551-c577-00b982c5fe00 + 61c85a22-05da-b8a2-2e55-06b0847da503 + 1d401ec4-3c17-35a6-fc79-cee6bd9811fe + + + + + + +Making XML-RPC Calls +==================== + +Transport Layer +--------------- + +The following transport layers are currently supported: + +- HTTPS for remote administration + +- HTTP over Unix domain sockets for local administration + +Session Layer +------------- + +The XML-RPC interface is session-based; before you can make arbitrary +RPC calls you must login and initiate a session. For example: + + (session ref) session.login_with_password(string uname, string pwd, string version, string originator) + +Where `uname` and `password` refer to your +username and password respectively, as defined by the Xen administrator. +The `session ref` returned by `session.login_with_password` is passed to subequent RPC +calls as an authentication token. + +A session can be terminated with the `session.logout` function: + + (void) session.logout (session ref) + +Synchronous and Asynchronous invocation +--------------------------------------- + +Each method call (apart from methods on `session` and `task` objects and +“getters” and “setters” derived from fields) can be made either +synchronously or asynchronously. A synchronous RPC call blocks until the +return value is received; the return value of a synchronous RPC call is +exactly as specified above. + +Only synchronous API calls are listed explicitly in this document. All +asynchronous versions are in the special `Async` namespace. +For example, synchronous call `VM.clone (...)` has an asynchronous counterpart, +`Async.VM.clone (...)`, that is non-blocking. + +Instead of returning its result directly, an asynchronous RPC call +returns a task ID (of type `task ref`); this identifier is subsequently used to +track the status of a running asynchronous RPC. Note that an asychronous +call may fail immediately, before a task has even been +created. To represent this eventuality, the returned `task ref` +is wrapped in an XML-RPC struct with a `Status`, +`ErrorDescription` and `Value` fields, exactly as +specified above. + +The `task ref` is provided in the `Value` field if +`Status` is set to `Success`. + +The RPC call + + (task ref set) task.get_all (session ref) + +returns a set of all task IDs known to the system. The status (including +any returned result and error codes) of these tasks can then be queried +by accessing the fields of the Task object in the usual way. Note that, +in order to get a consistent snapshot of a task’s state, it is advisable +to call the `get_record` function. + +Example interactive session +=========================== + +This section describes how an interactive session might look, using the +python XML-RPC client library. + +First, initialise python and import the library `xmlrpc.client`: + + $ python + ... + >>> import xmlrpc.client + +Create a python object referencing the remote server: + + >>> xen = xmlrpc.client.Server("https://localhost:443") + +Acquire a session reference by logging in with a username and password +(error-handling ommitted for brevity; the session reference is returned +under the key `'Value'` in the resulting dictionary) + + >>> session = xen.session.login_with_password("user", "passwd")['Value'] + +When serialised, this call looks like the following: + + + + session.login_with_password + + + user + + + passwd + + + + +Next, the user may acquire a list of all the VMs known to the system: +(Note the call takes the session reference as the only parameter) + + >>> all_vms = xen.VM.get_all(session)['Value'] + >>> all_vms + ['OpaqueRef:1', 'OpaqueRef:2', 'OpaqueRef:3', 'OpaqueRef:4'] + +The VM references here have the form `OpaqueRef:X`, though +they may not be that simple in the future, and you should treat them as +opaque strings. _Templates_ are VMs with the +`is_a_template` field set to `true`. We can find the subset +of template VMs using a command like the following: + + >>> all_templates = filter(lambda x: xen.VM.get_is_a_template(session, x)['Value'], all_vms) + +Once a reference to a VM has been acquired a lifecycle operation may be +invoked: + + >>> xen.VM.start(session, all_templates[0], False, False) + {'Status': 'Failure', 'ErrorDescription': ['VM_IS_TEMPLATE', 'OpaqueRef:X']} + +In this case the `start` message has been rejected, because +the VM is a template, and so an error response has been returned. These +high-level errors are returned as structured data (rather than as +XML-RPC faults), allowing them to be internationalised. + +Rather than querying fields individually, whole _records_ +may be returned at once. To retrieve the record of a single object as a +python dictionary: + + >>> record = xen.VM.get_record(session, all_templates[0])['Value'] + >>> record['power_state'] + 'Halted' + >>> record['name_label'] + 'XenSource P2V Server' + +To retrieve all the VM records in a single call: + + >>> records = xen.VM.get_all_records(session)['Value'] + >>> records.keys() + ['OpaqueRef:1', 'OpaqueRef:2', 'OpaqueRef:3', 'OpaqueRef:4' ] + >>> records['OpaqueRef:1']['name_label'] + 'RHEL 4.1 Autoinstall Template' diff --git a/doc/data/releases.yml b/doc/data/releases.yml new file mode 100644 index 00000000000..b624bf3ce98 --- /dev/null +++ b/doc/data/releases.yml @@ -0,0 +1,66 @@ +24.10.0: XAPI 24.10.0 +24.3.0: XAPI 24.3.0 +24.0.0: XAPI 24.0.0 +23.30.0: XAPI 23.30.0 +23.27.0: XAPI 23.27.0 +23.25.0: XAPI 23.25.0 +23.18.0: XAPI 23.18.0 +23.14.0: XAPI 23.14.0 +23.9.0: XAPI 23.9.0 +23.1.0: XAPI 23.1.0 +22.37.0: XAPI 22.37.0 +22.33.0: XAPI 22.33.0 +22.27.0: XAPI 22.27.0 +22.26.0: XAPI 22.26.0 +22.20.0: XAPI 22.20.0 +22.19.0: XAPI 22.19.0 +22.16.0: XAPI 22.16.0 +22.12.0: XAPI 22.12.0 +22.5.0: XAPI 22.5.0 +21.4.0: XAPI 21.4.0 +21.3.0: XAPI 21.3.0 +21.2.0: XAPI 21.2.0 +1.329.0: XAPI 1.329.0 +1.318.0: XAPI 1.318.0 +1.313.0: XAPI 1.313.0 +1.307.0: XAPI 1.307.0 +1.304.0: XAPI 1.304.0 +1.303.0: XAPI 1.303.0 +1.301.0: XAPI 1.301.0 +1.298.0: XAPI 1.298.0 +1.297.0: XAPI 1.297.0 +1.294.0: XAPI 1.294.0 +1.290.0: XAPI 1.290.0 +1.271.0: XAPI 1.271.0 +1.257.0: XAPI 1.257.0 +1.250.0: XAPI 1.250.0 +nile-preview: XenServer 8 Preview +stockholm_psr: Citrix Hypervisor 8.2 Hotfix 2 +stockholm: Citrix Hypervisor 8.2 +quebec: Citrix Hypervisor 8.1 +naples: Citrix Hypervisor 8.0 +lima: XenServer 7.6 +kolkata: XenServer 7.5 +jura: XenServer 7.4 +inverness: XenServer 7.3 +falcon: XenServer 7.2 +ely: XenServer 7.1 +dundee: XenServer 7.0 +indigo: XenServer 6.5 SP1 Hotfix 31 +cream: XenServer 6.5 SP1 +creedence: XenServer 6.5 +clearwater-whetstone: XenServer 6.2 SP1 Hotfix 11 +clearwater-felton: XenServer 6.2 SP1 Hotfix 4 +vgpu-productisation: XenServer 6.2 SP1 +vgpu-tech-preview: XenServer 6.2 SP1 Tech-Preview +clearwater: XenServer 6.2 +tampa: XenServer 6.1 +boston: XenServer 6.0 +cowley: XenServer 5.6 FP1 +midnight-ride: XenServer 5.6 +george: XenServer 5.5 +orlando-update-1: XenServer 5.0 Update 1 +orlando: XenServer 5.0 +symc: XenServer 4.1.1 +miami: XenServer 4.1 +rio: XenServer 4.0 diff --git a/doc/data/xenapi.json b/doc/data/xenapi.json new file mode 100644 index 00000000000..1af78e53424 --- /dev/null +++ b/doc/data/xenapi.json @@ -0,0 +1 @@ +[{"name":"session","description":"A session","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"this_host","description":"Currently connected host","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Currently connected host"}]}},{"name":"this_user","description":"Currently connected user","type":"user ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Currently connected user"}]}},{"name":"last_active","description":"Timestamp for last time session was active","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Timestamp for last time session was active"}]}},{"name":"pool","description":"True if this session relates to a intra-pool login, false otherwise","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if this session relates to a intra-pool login, false otherwise"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"},{"name":"is_local_superuser","description":"true iff this session was created using local superuser credentials","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true iff this session was created using local superuser credentials"}]},"default":"false"},{"name":"subject","description":"references the subject instance that created the session. If a session instance has is_local_superuser set, then the value of this field is undefined.","type":"subject ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"references the subject instance that created the session. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"default":"OpaqueRef:NULL"},{"name":"validation_time","description":"time when session was last validated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"time when session was last validated"}]},"default":"19700101T00:00:00Z"},{"name":"auth_user_sid","description":"the subject identifier of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"the subject identifier of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"default":"\"\""},{"name":"auth_user_name","description":"the subject name of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the subject name of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"default":"\"\""},{"name":"rbac_permissions","description":"list with all RBAC permissions for this session","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"list with all RBAC permissions for this session"}]},"default":"{}"},{"name":"tasks","description":"list of tasks created using the current session","type":"task ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"list of tasks created using the current session"}]}},{"name":"parent","description":"references the parent session that created this session","type":"session ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"references the parent session that created this session"}]},"default":"OpaqueRef:NULL"},{"name":"originator","description":"a key string provided by a API user to distinguish itself from other users sharing the same login name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"a key string provided by a API user to distinguish itself from other users sharing the same login name"}]},"default":"\"\""},{"name":"client_certificate","description":"indicates whether this session was authenticated using a client certificate","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.2.0","description":"indicates whether this session was authenticated using a client certificate"}]},"default":"false"}],"messages":[{"name":"logout_subject_identifier","description":"Log out all sessions associated to a user subject-identifier, except the session associated with the context calling this function","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"subject_identifier","doc":"User subject-identifier of the sessions to be destroyed"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Log out all sessions associated to a user subject-identifier, except the session associated with the context calling this function"}]},"implicit":false},{"name":"get_all_subject_identifiers","description":"Return a list of all the user subject-identifiers of all existing sessions","result":["string set","The list of user subject-identifiers of all existing sessions"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Return a list of all the user subject-identifiers of all existing sessions"}]},"implicit":false},{"name":"local_logout","description":"Log out of local session.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Log out of local session."}]},"implicit":false},{"name":"create_from_db_file","description":"","result":["session ref","ID of newly created session"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"filename","doc":"Database dump filename."}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":false},{"name":"slave_local_login_with_password","description":"Authenticate locally against a slave in emergency mode. Note the resulting sessions are only good for use on this host.","result":["session ref","ID of newly created session"],"params":[{"type":"string","name":"uname","doc":"Username for login."},{"type":"string","name":"pwd","doc":"Password for login."}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Authenticate locally against a slave in emergency mode. Note the resulting sessions are only good for use on this host."}]},"implicit":false},{"name":"change_password","description":"Change the account password; if your session is authenticated with root privileges then the old_pwd is validated and the new_pwd is set regardless","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"old_pwd","doc":"Old password for account"},{"type":"string","name":"new_pwd","doc":"New password for account"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Change the account password; if your session is authenticated with root privileges then the old_pwd is validated and the new_pwd is set regardless"}]},"implicit":false},{"name":"logout","description":"Log out of a session","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Log out of a session"}]},"implicit":false},{"name":"login_with_password","description":"Attempt to authenticate the user, returning a session reference if successful","result":["session ref","reference of newly created session"],"params":[{"type":"string","name":"uname","doc":"Username for login."},{"type":"string","name":"pwd","doc":"Password for login."},{"type":"string","name":"version","doc":"Client API version."},{"type":"string","name":"originator","doc":"Key string for distinguishing different API users sharing the same login name."}],"errors":[{"name":"SESSION_AUTHENTICATION_FAILED","doc":"The credentials given by the user are incorrect, so access has been denied, and you have not been issued a session handle."},{"name":"HOST_IS_SLAVE","doc":"You cannot make regular API calls directly on a supporter. Please pass API calls via the coordinator host."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Attempt to authenticate the user, returning a session reference if successful"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given session. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given session.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given session.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_client_certificate","description":"Get the client_certificate field of the given session.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.2.0","description":"indicates whether this session was authenticated using a client certificate"}]},"implicit":true},{"name":"get_originator","description":"Get the originator field of the given session.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"a key string provided by a API user to distinguish itself from other users sharing the same login name"}]},"implicit":true},{"name":"get_parent","description":"Get the parent field of the given session.","result":["session ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"references the parent session that created this session"}]},"implicit":true},{"name":"get_tasks","description":"Get the tasks field of the given session.","result":["task ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"list of tasks created using the current session"}]},"implicit":true},{"name":"get_rbac_permissions","description":"Get the rbac_permissions field of the given session.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"list with all RBAC permissions for this session"}]},"implicit":true},{"name":"get_auth_user_name","description":"Get the auth_user_name field of the given session.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the subject name of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"implicit":true},{"name":"get_auth_user_sid","description":"Get the auth_user_sid field of the given session.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"the subject identifier of the user that was externally authenticated. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"implicit":true},{"name":"get_validation_time","description":"Get the validation_time field of the given session.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"time when session was last validated"}]},"implicit":true},{"name":"get_subject","description":"Get the subject field of the given session.","result":["subject ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"references the subject instance that created the session. If a session instance has is_local_superuser set, then the value of this field is undefined."}]},"implicit":true},{"name":"get_is_local_superuser","description":"Get the is_local_superuser field of the given session.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true iff this session was created using local superuser credentials"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given session.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_pool","description":"Get the pool field of the given session.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if this session relates to a intra-pool login, false otherwise"}]},"implicit":true},{"name":"get_last_active","description":"Get the last_active field of the given session.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Timestamp for last time session was active"}]},"implicit":true},{"name":"get_this_user","description":"Get the this_user field of the given session.","result":["user ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Currently connected user"}]},"implicit":true},{"name":"get_this_host","description":"Get the this_host field of the given session.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Currently connected host"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given session.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the session instance with the specified UUID.","result":["session ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A session"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given session.","result":["session record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"session ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A session"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A session"}]},"tag":""},{"name":"auth","description":"Management of remote authentication services","fields":[],"messages":[{"name":"get_group_membership","description":"This calls queries the external directory service to obtain the transitively-closed set of groups that the the subject_identifier is member of.","result":["string set","set of subject_identifiers that provides the group membership of subject_identifier passed as argument, it contains, recursively, all groups a subject_identifier is member of."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"subject_identifier","doc":"A string containing the subject_identifier, unique in the external directory service"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This calls queries the external directory service to obtain the transitively-closed set of groups that the the subject_identifier is member of."}]},"implicit":false},{"name":"get_subject_information_from_identifier","description":"This call queries the external directory service to obtain the user information (e.g. username, organization etc) from the specified subject_identifier","result":["(string -> string) map","key-value pairs containing at least a key called subject_name"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"subject_identifier","doc":"A string containing the subject_identifier, unique in the external directory service"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call queries the external directory service to obtain the user information (e.g. username, organization etc) from the specified subject_identifier"}]},"implicit":false},{"name":"get_subject_identifier","description":"This call queries the external directory service to obtain the subject_identifier as a string from the human-readable subject_name","result":["string","the subject_identifier obtained from the external directory service"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"subject_name","doc":"The human-readable subject_name, such as a username or a groupname"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call queries the external directory service to obtain the subject_identifier as a string from the human-readable subject_name"}]},"implicit":false}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Management of remote authentication services"}]},"tag":""},{"name":"subject","description":"A user or group that can log in xapi","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"subject_identifier","description":"the subject identifier, unique in the external directory service","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"the subject identifier, unique in the external directory service"}]},"default":"\"\""},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"additional configuration"}]},"default":"{}"},{"name":"roles","description":"the roles associated with this subject","type":"role ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the roles associated with this subject"}]},"default":"{OpaqueRef:0165f154-ba3e-034e-6b27-5d271af109ba}"}],"messages":[{"name":"get_all_records","description":"Return a map of subject references to subject records for all subjects known to the system.","result":["(subject ref -> subject record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the subjects known to the system.","result":["subject ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true},{"name":"get_permissions_name_label","description":"This call returns a list of permission names given a subject","result":["string set","a list of permission names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"The subject whose permissions will be retrieved"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call returns a list of permission names given a subject"}]},"implicit":false},{"name":"remove_from_roles","description":"This call removes a role from a subject","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"The subject from whom we want to remove the role"},{"type":"role ref","name":"role","doc":"The unique role reference in the subject's roles field"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call removes a role from a subject"}]},"implicit":false},{"name":"add_to_roles","description":"This call adds a new role to a subject","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"The subject who we want to add the role to"},{"type":"role ref","name":"role","doc":"The unique role reference"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call adds a new role to a subject"}]},"implicit":false},{"name":"get_roles","description":"Get the roles field of the given subject.","result":["role ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the roles associated with this subject"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given subject.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"additional configuration"}]},"implicit":true},{"name":"get_subject_identifier","description":"Get the subject_identifier field of the given subject.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"the subject identifier, unique in the external directory service"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given subject.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified subject instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true},{"name":"create","description":"Create a new subject instance, and return its handle.\nThe constructor args are: subject_identifier, other_config (* = non-optional).","result":["subject ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the subject instance with the specified UUID.","result":["subject ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given subject.","result":["subject record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"subject ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"A user or group that can log in xapi"}]},"tag":""},{"name":"role","description":"A set of permissions associated with a subject","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a short user-friendly name for the role","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"a short user-friendly name for the role"}]},"default":"\"\""},{"name":"name_description","description":"what this role is for","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"what this role is for"}]},"default":"\"\""},{"name":"subroles","description":"a list of pointers to other roles or permissions","type":"role ref set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"a list of pointers to other roles or permissions"}]},"default":"{}"},{"name":"is_internal","description":"Indicates whether the role is only to be assigned internally by xapi, or can be used by clients","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"22.5.0","description":"Indicates whether the role is only to be assigned internally by xapi, or can be used by clients"}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of role references to role records for all roles known to the system.","result":["(role ref -> role record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the roles known to the system.","result":["role ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"implicit":true},{"name":"get_by_permission_name_label","description":"This call returns a list of roles given a permission name","result":["role ref set","a list of references to roles"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"The short friendly name of the role"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call returns a list of roles given a permission name"}]},"implicit":false},{"name":"get_by_permission","description":"This call returns a list of roles given a permission","result":["role ref set","a list of references to roles"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"permission","doc":"a reference to a permission"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call returns a list of roles given a permission"}]},"implicit":false},{"name":"get_permissions_name_label","description":"This call returns a list of permission names given a role","result":["string set","a list of permission names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"a reference to a role"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call returns a list of permission names given a role"}]},"implicit":false},{"name":"get_permissions","description":"This call returns a list of permissions given a role","result":["role ref set","a list of permissions"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"a reference to a role"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"This call returns a list of permissions given a role"}]},"implicit":false},{"name":"get_is_internal","description":"Get the is_internal field of the given role.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"22.5.0","description":"Indicates whether the role is only to be assigned internally by xapi, or can be used by clients"}]},"implicit":true},{"name":"get_subroles","description":"Get the subroles field of the given role.","result":["role ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"a list of pointers to other roles or permissions"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given role.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"what this role is for"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given role.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"a short user-friendly name for the role"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given role.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the role instances with the given label.","result":["role ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the role instance with the specified UUID.","result":["role ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given role.","result":["role record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"role ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A set of permissions associated with a subject"}]},"tag":""},{"name":"task","description":"A long-running asynchronous task","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum task_allowed_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum task_allowed_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"created","description":"Time task was created","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time task was created"}]}},{"name":"finished","description":"Time task finished (i.e. succeeded or failed). If task-status is pending, then the value of this field has no meaning","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time task finished (i.e. succeeded or failed). If task-status is pending, then the value of this field has no meaning"}]}},{"name":"status","description":"current status of the task","type":"enum task_status_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"current status of the task"}]}},{"name":"resident_on","description":"the host on which the task is running","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host on which the task is running"}]}},{"name":"progress","description":"This field contains the estimated fraction of the task which is complete. This field should not be used to determine whether the task is complete - for this the status field of the task should be used.","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"This field contains the estimated fraction of the task which is complete. This field should not be used to determine whether the task is complete - for this the status field of the task should be used."}]}},{"name":"type","description":"if the task has completed successfully, this field contains the type of the encoded result (i.e. name of the class whose reference is in the result field). Undefined otherwise.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has completed successfully, this field contains the type of the encoded result (i.e. name of the class whose reference is in the result field). Undefined otherwise."}]}},{"name":"result","description":"if the task has completed successfully, this field contains the result value (either Void or an object reference). Undefined otherwise.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has completed successfully, this field contains the result value (either Void or an object reference). Undefined otherwise."}]}},{"name":"error_info","description":"if the task has failed, this field contains the set of associated error strings. Undefined otherwise.","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has failed, this field contains the set of associated error strings. Undefined otherwise."}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"},{"name":"subtask_of","description":"Ref pointing to the task this is a substask of.","type":"task ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the task this is a substask of."}]},"default":"Null"},{"name":"subtasks","description":"List pointing to all the substasks.","type":"task ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the substasks."}]}},{"name":"backtrace","description":"Function call trace for debugging.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Function call trace for debugging."}]},"default":"\"()\""}],"messages":[{"name":"get_all_records","description":"Return a map of task references to task records for all tasks known to the system.","result":["(task ref -> task record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the tasks known to the system.","result":["task ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"implicit":true},{"name":"set_error_info","description":"Set the task error info","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"Reference to the task object"},{"type":"string set","name":"value","doc":"Task error info to be set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Set the task error info"}]},"implicit":false},{"name":"set_result","description":"Set the task result","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"Reference to the task object"},{"type":"string","name":"value","doc":"Task result to be set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Set the task result"}]},"implicit":false},{"name":"set_progress","description":"Set the task progress","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"Reference to the task object"},{"type":"float","name":"value","doc":"Task progress value to be set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":"Set the task progress"}]},"implicit":false},{"name":"set_status","description":"Set the task status","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"Reference to the task object"},{"type":"enum task_status_type","name":"value","doc":"task status value to be set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Set the task status"}]},"implicit":false},{"name":"cancel","description":"Request that a task be cancelled. Note that a task may fail to be cancelled and may complete or fail normally and note that, even when a task does cancel, it might take an arbitrary amount of time.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"task","doc":"The task"}],"errors":[{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Request that a task be cancelled. Note that a task may fail to be cancelled and may complete or fail normally and note that, even when a task does cancel, it might take an arbitrary amount of time."}]},"implicit":false},{"name":"destroy","description":"Destroy the task object","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"Reference to the task object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Destroy the task object"}]},"implicit":false},{"name":"create","description":"Create a new task object which must be manually destroyed.","result":["task ref","The reference of the created task object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"short label for the new task"},{"type":"string","name":"description","doc":"longer description for the new task"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Create a new task object which must be manually destroyed."}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given task. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given task.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given task.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_backtrace","description":"Get the backtrace field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Function call trace for debugging."}]},"implicit":true},{"name":"get_subtasks","description":"Get the subtasks field of the given task.","result":["task ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the substasks."}]},"implicit":true},{"name":"get_subtask_of","description":"Get the subtask_of field of the given task.","result":["task ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the task this is a substask of."}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given task.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_error_info","description":"Get the error_info field of the given task.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has failed, this field contains the set of associated error strings. Undefined otherwise."}]},"implicit":true},{"name":"get_result","description":"Get the result field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has completed successfully, this field contains the result value (either Void or an object reference). Undefined otherwise."}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if the task has completed successfully, this field contains the type of the encoded result (i.e. name of the class whose reference is in the result field). Undefined otherwise."}]},"implicit":true},{"name":"get_progress","description":"Get the progress field of the given task.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"This field contains the estimated fraction of the task which is complete. This field should not be used to determine whether the task is complete - for this the status field of the task should be used."}]},"implicit":true},{"name":"get_resident_on","description":"Get the resident_on field of the given task.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host on which the task is running"}]},"implicit":true},{"name":"get_status","description":"Get the status field of the given task.","result":["enum task_status_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"current status of the task"}]},"implicit":true},{"name":"get_finished","description":"Get the finished field of the given task.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time task finished (i.e. succeeded or failed). If task-status is pending, then the value of this field has no meaning"}]},"implicit":true},{"name":"get_created","description":"Get the created field of the given task.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time task was created"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given task.","result":["(string -> enum task_allowed_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given task.","result":["enum task_allowed_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the task instances with the given label.","result":["task ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the task instance with the specified UUID.","result":["task ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given task.","result":["task record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"implicit":true}],"enums":[{"name":"task_allowed_operations","values":[{"name":"cancel","doc":"refers to the operation \"cancel\""},{"name":"destroy","doc":"refers to the operation \"destroy\""}]},{"name":"task_status_type","values":[{"name":"pending","doc":"task is in progress"},{"name":"success","doc":"task was completed successfully"},{"name":"failure","doc":"task has failed"},{"name":"cancelling","doc":"task is being cancelled"},{"name":"cancelled","doc":"task has been cancelled"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A long-running asynchronous task"}]},"tag":""},{"name":"event","description":"Asynchronous event registration and handling","fields":[{"name":"snapshot","description":"The record of the database object that was added, changed or deleted","type":" record","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"id","description":"An ID, monotonically increasing, and local to the current session","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"An ID, monotonically increasing, and local to the current session"}]}},{"name":"timestamp","description":"The time at which the event occurred","type":"datetime","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"The time at which the event occurred"},{"transition":"deprecated","release":"boston","description":""}]}},{"name":"class","description":"The name of the class of the object that changed","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The name of the class of the object that changed"}]}},{"name":"operation","description":"The operation that was performed","type":"enum event_operation","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The operation that was performed"}]}},{"name":"ref","description":"A reference to the object that changed","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A reference to the object that changed"}]}},{"name":"obj_uuid","description":"The uuid of the object that changed","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"The uuid of the object that changed"},{"transition":"deprecated","release":"boston","description":""}]}}],"messages":[{"name":"inject","description":"Injects an artificial event on the given object and returns the corresponding ID in the form of a token, which can be used as a point of reference for database events. For example, to check whether an object has reached the right state before attempting an operation, one can inject an artificial event on the object and wait until the token returned by consecutive event.from calls is lexicographically greater than the one returned by event.inject.","result":["string","the event ID in the form of a token"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"class","doc":"class of the object"},{"type":"string","name":"ref","doc":"A reference to the object that will be changed."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Injects an artificial event on the given object and returns the corresponding ID in the form of a token, which can be used as a point of reference for database events. For example, to check whether an object has reached the right state before attempting an operation, one can inject an artificial event on the object and wait until the token returned by consecutive event.from calls is lexicographically greater than the one returned by event.inject."}]},"implicit":false},{"name":"get_current_id","description":"Return the ID of the next event to be generated by the system","result":["int","the event ID"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Return the ID of the next event to be generated by the system"}]},"implicit":false},{"name":"from","description":"Blocking call which returns a new token and a (possibly empty) batch of events. The returned token can be used in subsequent calls to this function.","result":["an event batch","a structure consisting of a token ('token'), a map of valid references per object type ('valid_ref_counts'), and a set of event records ('events')."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string set","name":"classes","doc":"register for events for the indicated classes"},{"type":"string","name":"token","doc":"A token representing the point from which to generate database events. The empty string represents the beginning."},{"type":"float","name":"timeout","doc":"Return after this many seconds if no events match"}],"errors":[{"name":"SESSION_NOT_REGISTERED","doc":"This session is not registered to receive events. You must call event.register before event.next. The session handle you are using is echoed."},{"name":"EVENTS_LOST","doc":"Some events have been lost from the queue and cannot be retrieved."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Blocking call which returns a new token and a (possibly empty) batch of events. The returned token can be used in subsequent calls to this function."}]},"implicit":false},{"name":"next","description":"Blocking call which returns a (possibly empty) batch of events. This method is only recommended for legacy use. New development should use event.from which supercedes this method.","result":["event record set","A set of events"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[{"name":"SESSION_NOT_REGISTERED","doc":"This session is not registered to receive events. You must call event.register before event.next. The session handle you are using is echoed."},{"name":"EVENTS_LOST","doc":"Some events have been lost from the queue and cannot be retrieved."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Blocking call which returns a (possibly empty) batch of events. This method is only recommended for legacy use. New development should use event.from which supercedes this method."},{"transition":"deprecated","release":"boston","description":""}]},"implicit":false},{"name":"unregister","description":"Removes this session's registration with the event system for a set of given classes. This method is only recommended for legacy use in conjunction with event.next.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string set","name":"classes","doc":"the classes for which the session's registration with the event system will be removed"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Removes this session's registration with the event system for a set of given classes. This method is only recommended for legacy use in conjunction with event.next."},{"transition":"deprecated","release":"boston","description":""}]},"implicit":false},{"name":"register","description":"Registers this session with the event system for a set of given classes. This method is only recommended for legacy use in conjunction with event.next.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string set","name":"classes","doc":"the classes for which the session will register with the event system; specifying * as the desired class will register for all classes"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Registers this session with the event system for a set of given classes. This method is only recommended for legacy use in conjunction with event.next."},{"transition":"deprecated","release":"boston","description":""}]},"implicit":false}],"enums":[{"name":"event_operation","values":[{"name":"add","doc":"An object has been created"},{"name":"del","doc":"An object has been deleted"},{"name":"mod","doc":"An object has been modified"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""}]},"tag":""},{"name":"pool","description":"Pool-wide information","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"Short name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Short name"}]}},{"name":"name_description","description":"Description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Description"}]}},{"name":"master","description":"The host that is pool master","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The host that is pool master"}]}},{"name":"default_SR","description":"Default SR for VDIs","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Default SR for VDIs"}]}},{"name":"suspend_image_SR","description":"The SR in which VDIs for suspend images are created","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]}},{"name":"crash_dump_SR","description":"The SR in which VDIs for crash dumps are created","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"ha_enabled","description":"true if HA is enabled on the pool, false otherwise","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if HA is enabled on the pool, false otherwise"}]},"default":"false"},{"name":"ha_configuration","description":"The current HA configuration","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The current HA configuration"}]},"default":"{}"},{"name":"ha_statefiles","description":"HA statefile VDIs in use","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"HA statefile VDIs in use"}]},"default":"{}"},{"name":"ha_host_failures_to_tolerate","description":"Number of host failures to tolerate before the Pool is declared to be overcommitted","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Number of host failures to tolerate before the Pool is declared to be overcommitted"}]},"default":"0"},{"name":"ha_plan_exists_for","description":"Number of future host failures we have managed to find a plan for. Once this reaches zero any future host failures will cause the failure of protected VMs.","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Number of future host failures we have managed to find a plan for. Once this reaches zero any future host failures will cause the failure of protected VMs."}]},"default":"0"},{"name":"ha_allow_overcommit","description":"If set to false then operations which would cause the Pool to become overcommitted will be blocked.","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"If set to false then operations which would cause the Pool to become overcommitted will be blocked."}]},"default":"false"},{"name":"ha_overcommitted","description":"True if the Pool is considered to be overcommitted i.e. if there exist insufficient physical resources to tolerate the configured number of host failures","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"True if the Pool is considered to be overcommitted i.e. if there exist insufficient physical resources to tolerate the configured number of host failures"}]},"default":"false"},{"name":"blobs","description":"Binary blobs associated with this pool","type":"(string -> blob ref) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this pool"}]},"default":"{}"},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"gui_config","description":"gui-specific configuration for pool","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"gui-specific configuration for pool"}]},"default":"{}"},{"name":"health_check_config","description":"Configuration for the automatic health check feature","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configuration for the automatic health check feature"}]},"default":"{}"},{"name":"wlb_url","description":"Url for the configured workload balancing host","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Url for the configured workload balancing host"}]},"default":"\"\""},{"name":"wlb_username","description":"Username for accessing the workload balancing host","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Username for accessing the workload balancing host"}]},"default":"\"\""},{"name":"wlb_enabled","description":"true if workload balancing is enabled on the pool, false otherwise","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true if workload balancing is enabled on the pool, false otherwise"}]},"default":"false"},{"name":"wlb_verify_cert","description":"true if communication with the WLB server should enforce TLS certificate verification.","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":""},{"transition":"deprecated","release":"1.290.0","description":"Deprecated: to enable TLS verification use Pool.enable_tls_verification instead"}]},"default":"false"},{"name":"redo_log_enabled","description":"true a redo-log is to be used other than when HA is enabled, false otherwise","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"true a redo-log is to be used other than when HA is enabled, false otherwise"}]},"default":"false"},{"name":"redo_log_vdi","description":"indicates the VDI to use for the redo-log other than when HA is enabled","type":"VDI ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"indicates the VDI to use for the redo-log other than when HA is enabled"}]},"default":"OpaqueRef:NULL"},{"name":"vswitch_controller","description":"address of the vswitch controller","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the IP address of the vswitch controller."},{"transition":"deprecated","release":"falcon","description":"Deprecated: set the IP address of the vswitch controller in SDN_controller instead."}]},"default":"\"\""},{"name":"restrictions","description":"Pool-wide restrictions currently in effect","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Pool-wide restrictions currently in effect"}]},"default":"{}"},{"name":"metadata_VDIs","description":"The set of currently known metadata VDIs for this pool","type":"VDI ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The set of currently known metadata VDIs for this pool"}]}},{"name":"ha_cluster_stack","description":"The HA cluster stack that is currently in use. Only valid when HA is enabled.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The HA cluster stack that is currently in use. Only valid when HA is enabled."}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum pool_allowed_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum pool_allowed_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"guest_agent_config","description":"Pool-wide guest agent configuration information","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Pool-wide guest agent configuration information"}]},"default":"{}"},{"name":"cpu_info","description":"Details about the physical CPUs on the pool","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Details about the physical CPUs on the pool"}]},"default":"{}"},{"name":"policy_no_vendor_device","description":"The pool-wide policy for clients on whether to use the vendor device or not on newly created VMs. This field will also be consulted if the 'has_vendor_device' field is not specified in the VM.create call.","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The pool-wide policy for clients on whether to use the vendor device or not on newly created VMs. This field will also be consulted if the 'has_vendor_device' field is not specified in the VM.create call."}]},"default":"false"},{"name":"live_patching_disabled","description":"The pool-wide flag to show if the live patching feauture is disabled or not.","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The pool-wide flag to show if the live patching feauture is disabled or not."}]},"default":"false"},{"name":"igmp_snooping_enabled","description":"true if IGMP snooping is enabled in the pool, false otherwise.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"true if IGMP snooping is enabled in the pool, false otherwise."}]},"default":"false"},{"name":"uefi_certificates","description":"The UEFI certificates allowing Secure Boot","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":"The UEFI certificates allowing Secure Boot"},{"transition":"changed","release":"22.16.0","description":"Became StaticRO to be editable through new method"}]},"default":"\"\""},{"name":"custom_uefi_certificates","description":"Custom UEFI certificates allowing Secure Boot","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"default":"\"\""},{"name":"is_psr_pending","description":"True if either a PSR is running or we are waiting for a PSR to be re-run","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm_psr","description":"True if either a PSR is running or we are waiting for a PSR to be re-run"}]},"default":"false"},{"name":"tls_verification_enabled","description":"True iff TLS certificate verification is enabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":""}]},"default":"false"},{"name":"repositories","description":"The set of currently enabled repositories","type":"Repository ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"The set of currently enabled repositories"}]},"default":"{}"},{"name":"client_certificate_auth_enabled","description":"True if authentication by TLS client certificates is enabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"default":"false"},{"name":"client_certificate_auth_name","description":"The name (CN/SAN) that an incoming client certificate must have to allow authentication","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"default":"\"\""},{"name":"repository_proxy_url","description":"Url of the proxy used in syncing with the enabled repositories","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Url of the proxy used in syncing with the enabled repositories"}]},"default":"\"\""},{"name":"repository_proxy_username","description":"Username for the authentication of the proxy used in syncing with the enabled repositories","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Username for the authentication of the proxy used in syncing with the enabled repositories"}]},"default":"\"\""},{"name":"repository_proxy_password","description":"Password for the authentication of the proxy used in syncing with the enabled repositories","type":"secret ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":""},{"transition":"changed","release":"23.9.0","description":"Changed internal_only to false"}]},"default":"OpaqueRef:NULL"},{"name":"migration_compression","description":"Default behaviour during migration, True if stream compression should be used","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.33.0","description":""}]},"default":"false"},{"name":"coordinator_bias","description":"true if bias against pool master when scheduling vms is enabled, false otherwise","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"22.37.0","description":""},{"transition":"published","release":"rio","description":"true if bias against pool master when scheduling vms is enabled, false otherwise"}]},"default":"true"},{"name":"local_auth_max_threads","description":"Maximum number of threads to use for PAM authentication","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"default":"8"},{"name":"ext_auth_max_threads","description":"Maximum number of threads to use for external (AD) authentication","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"default":"1"},{"name":"telemetry_uuid","description":"The UUID of the pool for identification of telemetry data","type":"secret ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"default":"OpaqueRef:NULL"},{"name":"telemetry_frequency","description":"How often the telemetry collection will be carried out","type":"enum telemetry_frequency","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"default":"weekly"},{"name":"telemetry_next_collection","description":"The earliest timestamp (in UTC) when the next round of telemetry collection can be carried out","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"default":"19700101T00:00:00Z"},{"name":"last_update_sync","description":"time of the last update sychronization","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"default":"19700101T00:00:00Z"},{"name":"update_sync_frequency","description":"The frequency at which updates are synchronized from a remote CDN: daily or weekly.","type":"enum update_sync_frequency","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"default":"weekly"},{"name":"update_sync_day","description":"The day of the week the update synchronizations will be scheduled, based on pool's local timezone. Ignored when update_sync_frequency is daily","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"default":"0"},{"name":"update_sync_enabled","description":"Whether periodic update synchronization is enabled or not","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of pool references to pool records for all pools known to the system.","result":["(pool ref -> pool record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool-wide information"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the pools known to the system.","result":["pool ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool-wide information"}]},"implicit":true},{"name":"set_ext_auth_max_threads","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"int","name":"value","doc":"The new maximum"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"implicit":false},{"name":"set_local_auth_max_threads","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"int","name":"value","doc":"The new maximum"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"implicit":false},{"name":"set_update_sync_enabled","description":"enable or disable periodic update synchronization depending on the value","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"bool","name":"value","doc":"true - enable periodic update synchronization, false - disable it"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":false},{"name":"configure_update_sync","description":"Configure periodic update synchronization to sync updates from a remote CDN","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"enum update_sync_frequency","name":"update_sync_frequency","doc":"The frequency at which updates are synchronized from a remote CDN: daily or weekly."},{"type":"int","name":"update_sync_day","doc":"The day of the week the update synchronization will happen, based on pool's local timezone. Valid values are 0 to 6, 0 being Sunday. For 'daily' schedule, the value is ignored."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":false},{"name":"reset_telemetry_uuid","description":"Assign a new UUID to telemetry data.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"implicit":false},{"name":"set_telemetry_next_collection","description":"Set the timestamp for the next telemetry data collection.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"datetime","name":"value","doc":"The earliest timestamp (in UTC) when the next round of telemetry collection can be carried out."}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"implicit":false},{"name":"set_https_only","description":"updates all the host firewalls in the pool to open or close port 80 depending on the value","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"bool","name":"value","doc":"true - http port 80 will be blocked, false - http port 80 will be open for the hosts in the pool"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.27.0","description":""}]},"implicit":false},{"name":"set_custom_uefi_certificates","description":"Set custom UEFI certificates for a pool and all its hosts. Need `allow-custom-uefi-certs` set to true in conf. If empty: default back to Pool.uefi_certificates","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"value","doc":"The certificates to apply to the pool and its hosts"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"implicit":false},{"name":"set_uefi_certificates","description":"Set the UEFI certificates for a pool and all its hosts. Deprecated: use set_custom_uefi_certificates instead","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"value","doc":"The certificates to apply to the pool and its hosts"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"22.16.0","description":""},{"transition":"deprecated","release":"24.0.0","description":"use set_custom_uefi_certificates instead"}]},"implicit":false},{"name":"disable_repository_proxy","description":"Disable the proxy for RPM package repositories.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.4.0","description":"Disable the proxy for RPM package repositories."}]},"implicit":false},{"name":"configure_repository_proxy","description":"Configure proxy for RPM package repositories.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"url","doc":"The URL of the proxy server"},{"type":"string","name":"username","doc":"The username used to authenticate with the proxy server"},{"type":"string","name":"password","doc":"The password used to authenticate with the proxy server"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Configure proxy for RPM package repositories."}]},"implicit":false},{"name":"disable_client_certificate_auth","description":"Disable client certificate authentication on the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"implicit":false},{"name":"enable_client_certificate_auth","description":"Enable client certificate authentication on the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"name","doc":"The name (CN/SAN) that an incoming client certificate must have to allow authentication"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"implicit":false},{"name":"check_update_readiness","description":"Check if the pool is ready to be updated. If not, report the reasons.","result":["string set set","A set of error codes with arguments, if the pool is\n not ready to update. An empty list means the pool can be updated."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"bool","name":"requires_reboot","doc":"Assume that the update will require host reboots"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.304.0","description":""}]},"implicit":false},{"name":"sync_updates","description":"Sync with the enabled repository","result":["string","The SHA256 hash of updateinfo.xml.gz"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"bool","name":"force","doc":"If true local mirroring repo will be removed before syncing"},{"type":"string","name":"token","doc":"The token for repository client authentication"},{"type":"string","name":"token_id","doc":"The ID of the token"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.329.0","description":"Sync with the enabled repository"}]},"implicit":false},{"name":"remove_repository","description":"Remove a repository from the enabled set","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"Repository ref","name":"value","doc":"The repository to be removed"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"Remove a repository from the enabled set"}]},"implicit":false},{"name":"add_repository","description":"Add a repository to the enabled set","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"Repository ref","name":"value","doc":"The repository to be added to the enabled set"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"Add a repository to the enabled set"}]},"implicit":false},{"name":"set_repositories","description":"Set enabled set of repositories","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"Repository ref set","name":"value","doc":"The set of repositories to be enabled"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"Set enabled set of repositories"}]},"implicit":false},{"name":"rotate_secret","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[{"name":"INTERNAL_ERROR","doc":"The server failed to handle your request, due to an internal error. The given message may give details useful for debugging the problem."},{"name":"HOST_IS_SLAVE","doc":"You cannot make regular API calls directly on a supporter. Please pass API calls via the coordinator host."},{"name":"CANNOT_CONTACT_HOST","doc":"Cannot forward messages because the server cannot be contacted. The server may be switched off or there may be network connectivity problems."},{"name":"HA_IS_ENABLED","doc":"The operation could not be performed because HA is enabled on the Pool"},{"name":"NOT_SUPPORTED_DURING_UPGRADE","doc":"This operation is not supported during an upgrade."}],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm_psr","description":""}]},"implicit":false},{"name":"remove_from_guest_agent_config","description":"Remove a key-value pair from the pool-wide guest agent configuration","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"key","doc":"The key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Remove a key-value pair from the pool-wide guest agent configuration"}]},"implicit":false},{"name":"add_to_guest_agent_config","description":"Add a key-value pair to the pool-wide guest agent configuration","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"key","doc":"The key to add"},{"type":"string","name":"value","doc":"The value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Add a key-value pair to the pool-wide guest agent configuration"}]},"implicit":false},{"name":"has_extension","description":"Return true if the extension is available on the pool","result":["bool","True if the extension exists, false otherwise"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"string","name":"name","doc":"The name of the API call"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Return true if the extension is available on the pool"}]},"implicit":false},{"name":"set_igmp_snooping_enabled","description":"Enable or disable IGMP Snooping on the pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"bool","name":"value","doc":"Enable or disable IGMP Snooping on the pool"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Enable or disable IGMP Snooping on the pool."}]},"implicit":false},{"name":"disable_ssl_legacy","description":"Sets ssl_legacy false on each host, pool-master last. See Host.ssl_legacy and Host.set_ssl_legacy.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"(ignored)"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"dundee","description":""},{"transition":"deprecated","release":"stockholm","description":"Legacy SSL no longer supported"}]},"implicit":false},{"name":"enable_ssl_legacy","description":"Sets ssl_legacy true on each host, pool-master last. See Host.ssl_legacy and Host.set_ssl_legacy.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"(ignored)"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"dundee","description":""},{"transition":"deprecated","release":"dundee","description":"Legacy SSL will soon cease to be supported"},{"transition":"removed","release":"stockholm","description":"Legacy SSL no longer supported"}]},"implicit":false},{"name":"apply_edition","description":"Apply an edition to all hosts in the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"Reference to the pool"},{"type":"string","name":"edition","doc":"The requested edition"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"Apply an edition to all hosts in the pool"}]},"implicit":false},{"name":"get_license_state","description":"This call returns the license state for the pool","result":["(string -> string) map","The pool's license state"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"Reference to the pool"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"This call returns the license state for the pool"}]},"implicit":false},{"name":"disable_local_storage_caching","description":"This call disables pool-wide local storage caching","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"Reference to the pool"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"This call disables pool-wide local storage caching"}]},"implicit":false},{"name":"enable_local_storage_caching","description":"This call attempts to enable pool-wide local storage caching","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"Reference to the pool"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"This call attempts to enable pool-wide local storage caching"}]},"implicit":false},{"name":"test_archive_target","description":"This call tests if a location is valid","result":["string","An XMLRPC result"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"Reference to the pool"},{"type":"(string -> string) map","name":"config","doc":"Location config settings to test"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"This call tests if a location is valid"}]},"implicit":false},{"name":"set_vswitch_controller","description":"Set the IP address of the vswitch controller.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"address","doc":"IP address of the vswitch controller."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the IP address of the vswitch controller."},{"transition":"extended","release":"cowley","description":"Allow to be set to the empty string (no controller is used)."},{"transition":"deprecated","release":"falcon","description":"Deprecated: use 'SDN_controller.introduce' and 'SDN_controller.forget' instead."}]},"implicit":false},{"name":"disable_redo_log","description":"Disable the redo log if in use, unless HA is enabled.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Disable the redo log if in use, unless HA is enabled."}]},"implicit":false},{"name":"enable_redo_log","description":"Enable the redo log on the given SR and start using it, unless HA is enabled.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"SR to hold the redo log."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Enable the redo log on the given SR and start using it, unless HA is enabled."}]},"implicit":false},{"name":"enable_tls_verification","description":"Enable TLS server certificate verification","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":""}]},"implicit":false},{"name":"certificate_sync","description":"Copy the TLS CA certificates and CRLs of the master to all slaves.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Copy the TLS CA certificates and CRLs of the master to all slaves."}]},"implicit":false},{"name":"crl_list","description":"List the names of all installed TLS CA-issued Certificate Revocation Lists.","result":["string set","The names of all installed CRLs"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"List the names of all installed TLS CA-issued Certificate Revocation Lists."}]},"implicit":false},{"name":"crl_uninstall","description":"Remove a pool-wide TLS CA-issued Certificate Revocation List.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"The CRL name"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Remove a pool-wide TLS CA-issued Certificate Revocation List."}]},"implicit":false},{"name":"crl_install","description":"Install a TLS CA-issued Certificate Revocation List, pool-wide.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"A name to give the CRL"},{"type":"string","name":"cert","doc":"The CRL"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Install a TLS CA-issued Certificate Revocation List, pool-wide."}]},"implicit":false},{"name":"uninstall_ca_certificate","description":"Remove a pool-wide TLS CA certificate.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"The certificate name"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":"Uninstall TLS CA certificate"}]},"implicit":false},{"name":"install_ca_certificate","description":"Install a TLS CA certificate, pool-wide.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"A name to give the certificate"},{"type":"string","name":"cert","doc":"The certificate in PEM format"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":"Install TLS CA certificate"}]},"implicit":false},{"name":"certificate_list","description":"List the names of all installed TLS CA certificates.","result":["string set","All installed certificates"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":"List installed TLS CA certificate"},{"transition":"deprecated","release":"1.290.0","description":"Use openssl to inspect certificate"}]},"implicit":false},{"name":"certificate_uninstall","description":"Remove a pool-wide TLS CA certificate.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"The certificate name"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":"Install TLS CA certificate"},{"transition":"deprecated","release":"1.290.0","description":"Use Pool.uninstall_ca_certificate instead"}]},"implicit":false},{"name":"certificate_install","description":"Install a TLS CA certificate, pool-wide.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"A name to give the certificate"},{"type":"string","name":"cert","doc":"The certificate in PEM format"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":"Install TLS CA certificate"},{"transition":"deprecated","release":"1.290.0","description":"Use Pool.install_ca_certificate instead"}]},"implicit":false},{"name":"send_test_post","description":"Send the given body to the given host and port, using HTTPS, and print the response. This is used for debugging the SSL layer.","result":["string","The response"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"host","doc":""},{"type":"int","name":"port","doc":""},{"type":"string","name":"body","doc":""}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Send the given body to the given host and port, using HTTPS, and print the response. This is used for debugging the SSL layer."}]},"implicit":false},{"name":"retrieve_wlb_recommendations","description":"Retrieves vm migrate recommendations for the pool from the workload balancing server","result":["(VM ref -> string set) map","The list of vm migration recommendations"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Retrieves vm migrate recommendations for the pool from the workload balancing server"}]},"implicit":false},{"name":"retrieve_wlb_configuration","description":"Retrieves the pool optimization criteria from the workload balancing server","result":["(string -> string) map","The configuration used in optimizing this pool"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Retrieves the pool optimization criteria from the workload balancing server"}]},"implicit":false},{"name":"send_wlb_configuration","description":"Sets the pool optimization criteria for the workload balancing server","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"(string -> string) map","name":"config","doc":"The configuration to use in optimizing this pool"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Sets the pool optimization criteria for the workload balancing server"}]},"implicit":false},{"name":"deconfigure_wlb","description":"Permanently deconfigures workload balancing monitoring on this pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Permanently deconfigures workload balancing monitoring on this pool"}]},"implicit":false},{"name":"initialize_wlb","description":"Initializes workload balancing monitoring on this pool with the specified wlb server","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"wlb_url","doc":"The ip address and port to use when accessing the wlb server"},{"type":"string","name":"wlb_username","doc":"The username used to authenticate with the wlb server"},{"type":"string","name":"wlb_password","doc":"The password used to authenticate with the wlb server"},{"type":"string","name":"xenserver_username","doc":"The username used by the wlb server to authenticate with the xenserver"},{"type":"string","name":"xenserver_password","doc":"The password used by the wlb server to authenticate with the xenserver"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Initializes workload balancing monitoring on this pool with the specified wlb server"}]},"implicit":false},{"name":"detect_nonhomogeneous_external_auth","description":"This call asynchronously detects if the external authentication configuration in any slave is different from that in the master and raises appropriate alerts","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"pool","doc":"The pool where to detect non-homogeneous external authentication configuration"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call asynchronously detects if the external authentication configuration in any slave is different from that in the master and raises appropriate alerts"}]},"implicit":false},{"name":"disable_external_auth","description":"This call disables external authentication on all the hosts of the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"pool","doc":"The pool whose external authentication should be disabled"},{"type":"(string -> string) map","name":"config","doc":"Optional parameters as a list of key-values containing the configuration data"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call disables external authentication on all the hosts of the pool"}]},"implicit":false},{"name":"enable_external_auth","description":"This call enables external authentication on all the hosts of the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"pool","doc":"The pool whose external authentication should be enabled"},{"type":"(string -> string) map","name":"config","doc":"A list of key-values containing the configuration data"},{"type":"string","name":"service_name","doc":"The name of the service"},{"type":"string","name":"auth_type","doc":"The type of authentication (e.g. AD for Active Directory)"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call enables external authentication on all the hosts of the pool"}]},"implicit":false},{"name":"create_new_blob","description":"Create a placeholder for a named binary blob of data that is associated with this pool","result":["blob ref","The reference of the blob, needed for populating its data"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"pool","doc":"The pool"},{"type":"string","name":"name","doc":"The name associated with the blob"},{"type":"string","name":"mime_type","doc":"The mime type for the data. Empty string translates to application/octet-stream"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a named binary blob of data that is associated with this pool"}]},"implicit":false},{"name":"set_ha_host_failures_to_tolerate","description":"Set the maximum number of host failures to consider in the HA VM restart planner","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"The pool"},{"type":"int","name":"value","doc":"New number of host failures to consider"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Set the maximum number of host failures to consider in the HA VM restart planner"}]},"implicit":false},{"name":"ha_compute_vm_failover_plan","description":"Return a VM failover plan assuming a given subset of hosts fail","result":["(VM ref -> (string -> string) map) map","VM failover plan: a map of VM to host to restart the host on"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref set","name":"failed_hosts","doc":"The set of hosts to assume have failed"},{"type":"VM ref set","name":"failed_vms","doc":"The set of VMs to restart"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Return a VM failover plan assuming a given subset of hosts fail"}]},"implicit":false},{"name":"ha_compute_hypothetical_max_host_failures_to_tolerate","description":"Returns the maximum number of host failures we could tolerate before we would be unable to restart the provided VMs","result":["int","maximum value for ha_host_failures_to_tolerate given provided configuration"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"(VM ref -> string) map","name":"configuration","doc":"Map of protected VM reference to restart priority"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Returns the maximum number of host failures we could tolerate before we would be unable to restart the provided VMs"}]},"implicit":false},{"name":"ha_compute_max_host_failures_to_tolerate","description":"Returns the maximum number of host failures we could tolerate before we would be unable to restart configured VMs","result":["int","maximum value for ha_host_failures_to_tolerate given current configuration"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Returns the maximum number of host failures we could tolerate before we would be unable to restart configured VMs"}]},"implicit":false},{"name":"ha_failover_plan_exists","description":"Returns true if a VM failover plan exists for up to 'n' host failures","result":["bool","true if a failover plan exists for the supplied number of host failures"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"int","name":"n","doc":"The number of host failures to plan for"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Returns true if a VM failover plan exists for up to 'n' host failures"}]},"implicit":false},{"name":"ha_prevent_restarts_for","description":"When this call returns the VM restart logic will not run for the requested number of seconds. If the argument is zero then the restart thread is immediately unblocked","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"int","name":"seconds","doc":"The number of seconds to block the restart thread for"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando-update-1","description":"When this call returns the VM restart logic will not run for the requested number of seconds. If the argument is zero then the restart thread is immediately unblocked"}]},"implicit":false},{"name":"designate_new_master","description":"Perform an orderly handover of the role of master to the referenced host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host who should become the new master"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Perform an orderly handover of the role of master to the referenced host."}]},"implicit":false},{"name":"sync_database","description":"Forcibly synchronise the database now","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Forcibly synchronise the database now"}]},"implicit":false},{"name":"disable_ha","description":"Turn off High Availability mode","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Turn off High Availability mode"}]},"implicit":false},{"name":"enable_ha","description":"Turn on High Availability mode","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref set","name":"heartbeat_srs","doc":"Set of SRs to use for storage heartbeating"},{"type":"(string -> string) map","name":"configuration","doc":"Detailed HA configuration to apply"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Turn on High Availability mode"}]},"implicit":false},{"name":"create_VLAN_from_PIF","description":"Create a pool-wide VLAN by taking the PIF.","result":["PIF ref set","The references of the created PIF objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"pif","doc":"physical interface on any particular host, that identifies the PIF on which to create the (pool-wide) VLAN interface"},{"type":"network ref","name":"network","doc":"network to which this interface should be connected"},{"type":"int","name":"VLAN","doc":"VLAN tag for the new interface"}],"errors":[{"name":"VLAN_TAG_INVALID","doc":"You tried to create a VLAN, but the tag you gave was invalid -- it must be between 0 and 4094. The parameter echoes the VLAN tag you gave."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Create a pool-wide VLAN by taking the PIF."}]},"implicit":false},{"name":"management_reconfigure","description":"Reconfigure the management network interface for all Hosts in the Pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"network","doc":"The network"}],"errors":[{"name":"HA_IS_ENABLED","doc":"The operation could not be performed because HA is enabled on the Pool"},{"name":"PIF_NOT_PRESENT","doc":"This host has no PIF on the given network."},{"name":"CANNOT_PLUG_BOND_SLAVE","doc":"This PIF is a bond member and cannot be plugged."},{"name":"PIF_INCOMPATIBLE_PRIMARY_ADDRESS_TYPE","doc":"The primary address types are not compatible"},{"name":"PIF_HAS_NO_NETWORK_CONFIGURATION","doc":"PIF has no IP configuration (mode currently set to 'none')"},{"name":"PIF_HAS_NO_V6_NETWORK_CONFIGURATION","doc":"PIF has no IPv6 configuration (mode currently set to 'none')"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Reconfigure the management network interface for all Hosts in the Pool"}]},"implicit":false},{"name":"create_VLAN","description":"Create PIFs, mapping a network to the same physical interface/VLAN on each host. This call is deprecated: use Pool.create_VLAN_from_PIF instead.","result":["PIF ref set","The references of the created PIF objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"device","doc":"physical interface on which to create the VLAN interface"},{"type":"network ref","name":"network","doc":"network to which this interface should be connected"},{"type":"int","name":"VLAN","doc":"VLAN tag for the new interface"}],"errors":[{"name":"VLAN_TAG_INVALID","doc":"You tried to create a VLAN, but the tag you gave was invalid -- it must be between 0 and 4094. The parameter echoes the VLAN tag you gave."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Create PIFs, mapping a network to the same physical interface/VLAN on each host. This call is deprecated: use Pool.create_VLAN_from_PIF instead."}]},"implicit":false},{"name":"recover_slaves","description":"Instruct a pool master, M, to try and contact its slaves and, if slaves are in emergency mode, reset their master address to M.","result":["host ref set","list of hosts whose master address were successfully reset"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct a pool master, M, to try and contact its slaves and, if slaves are in emergency mode, reset their master address to M."}]},"implicit":false},{"name":"emergency_reset_master","description":"Instruct a slave already in a pool that the master has changed","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"master_address","doc":"The hostname of the master"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct a slave already in a pool that the master has changed"}]},"implicit":false},{"name":"emergency_transition_to_master","description":"Instruct host that's currently a slave to transition to being master","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct host that's currently a slave to transition to being master"}]},"implicit":false},{"name":"eject","description":"Instruct a pool master to eject a host from the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to eject"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct a pool master to eject a host from the pool"}]},"implicit":false},{"name":"join_force","description":"Instruct host to join a new pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"master_address","doc":"The hostname of the master of the pool to join"},{"type":"string","name":"master_username","doc":"The username of the master (for initial authentication)"},{"type":"string","name":"master_password","doc":"The password for the master (for initial authentication)"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct host to join a new pool"}]},"implicit":false},{"name":"join","description":"Instruct host to join a new pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"master_address","doc":"The hostname of the master of the pool to join"},{"type":"string","name":"master_username","doc":"The username of the master (for initial authentication)"},{"type":"string","name":"master_password","doc":"The password for the master (for initial authentication)"}],"errors":[{"name":"JOINING_HOST_CANNOT_CONTAIN_SHARED_SRS","doc":"The server joining the pool cannot contain any shared storage."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Instruct host to join a new pool"}]},"implicit":false},{"name":"set_coordinator_bias","description":"Set the coordinator_bias field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"22.37.0","description":""},{"transition":"published","release":"rio","description":"true if bias against pool master when scheduling vms is enabled, false otherwise"}]},"implicit":true},{"name":"set_migration_compression","description":"Set the migration_compression field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.33.0","description":""}]},"implicit":true},{"name":"set_is_psr_pending","description":"Set the is_psr_pending field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm_psr","description":"True if either a PSR is running or we are waiting for a PSR to be re-run"}]},"implicit":true},{"name":"set_live_patching_disabled","description":"Set the live_patching_disabled field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The pool-wide flag to show if the live patching feauture is disabled or not."}]},"implicit":true},{"name":"set_policy_no_vendor_device","description":"Set the policy_no_vendor_device field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The pool-wide policy for clients on whether to use the vendor device or not on newly created VMs. This field will also be consulted if the 'has_vendor_device' field is not specified in the VM.create call."}]},"implicit":true},{"name":"set_wlb_verify_cert","description":"Set the wlb_verify_cert field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":""},{"transition":"deprecated","release":"1.290.0","description":"Deprecated: to enable TLS verification use Pool.enable_tls_verification instead"}]},"implicit":true},{"name":"set_wlb_enabled","description":"Set the wlb_enabled field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true if workload balancing is enabled on the pool, false otherwise"}]},"implicit":true},{"name":"remove_from_health_check_config","description":"Remove the given key and its corresponding value from the health_check_config field of the given pool. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configuration for the automatic health check feature"}]},"implicit":true},{"name":"add_to_health_check_config","description":"Add the given key-value pair to the health_check_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configuration for the automatic health check feature"}]},"implicit":true},{"name":"set_health_check_config","description":"Set the health_check_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configuration for the automatic health check feature"}]},"implicit":true},{"name":"remove_from_gui_config","description":"Remove the given key and its corresponding value from the gui_config field of the given pool. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"gui-specific configuration for pool"}]},"implicit":true},{"name":"add_to_gui_config","description":"Add the given key-value pair to the gui_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"gui-specific configuration for pool"}]},"implicit":true},{"name":"set_gui_config","description":"Set the gui_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"gui-specific configuration for pool"}]},"implicit":true},{"name":"remove_tags","description":"Remove the given value from the tags field of the given pool. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given pool. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_ha_allow_overcommit","description":"Set the ha_allow_overcommit field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"If set to false then operations which would cause the Pool to become overcommitted will be blocked."}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given pool. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_crash_dump_SR","description":"Set the crash_dump_SR field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]},"implicit":true},{"name":"set_suspend_image_SR","description":"Set the suspend_image_SR field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]},"implicit":true},{"name":"set_default_SR","description":"Set the default_SR field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Default SR for VDIs"}]},"implicit":true},{"name":"set_name_description","description":"Set the name_description field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name_label field of the given pool.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Short name"}]},"implicit":true},{"name":"get_update_sync_enabled","description":"Get the update_sync_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":true},{"name":"get_update_sync_day","description":"Get the update_sync_day field of the given pool.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":true},{"name":"get_update_sync_frequency","description":"Get the update_sync_frequency field of the given pool.","result":["enum update_sync_frequency","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":true},{"name":"get_last_update_sync","description":"Get the last_update_sync field of the given pool.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":true},{"name":"get_telemetry_next_collection","description":"Get the telemetry_next_collection field of the given pool.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"implicit":true},{"name":"get_telemetry_frequency","description":"Get the telemetry_frequency field of the given pool.","result":["enum telemetry_frequency","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"implicit":true},{"name":"get_telemetry_uuid","description":"Get the telemetry_uuid field of the given pool.","result":["secret ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.9.0","description":""}]},"implicit":true},{"name":"get_ext_auth_max_threads","description":"Get the ext_auth_max_threads field of the given pool.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"implicit":true},{"name":"get_local_auth_max_threads","description":"Get the local_auth_max_threads field of the given pool.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.27.0","description":""}]},"implicit":true},{"name":"get_coordinator_bias","description":"Get the coordinator_bias field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"22.37.0","description":""},{"transition":"published","release":"rio","description":"true if bias against pool master when scheduling vms is enabled, false otherwise"}]},"implicit":true},{"name":"get_migration_compression","description":"Get the migration_compression field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.33.0","description":""}]},"implicit":true},{"name":"get_repository_proxy_password","description":"Get the repository_proxy_password field of the given pool.","result":["secret ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":""},{"transition":"changed","release":"23.9.0","description":"Changed internal_only to false"}]},"implicit":true},{"name":"get_repository_proxy_username","description":"Get the repository_proxy_username field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Username for the authentication of the proxy used in syncing with the enabled repositories"}]},"implicit":true},{"name":"get_repository_proxy_url","description":"Get the repository_proxy_url field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"21.3.0","description":"Url of the proxy used in syncing with the enabled repositories"}]},"implicit":true},{"name":"get_client_certificate_auth_name","description":"Get the client_certificate_auth_name field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"implicit":true},{"name":"get_client_certificate_auth_enabled","description":"Get the client_certificate_auth_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.318.0","description":""}]},"implicit":true},{"name":"get_repositories","description":"Get the repositories field of the given pool.","result":["Repository ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"The set of currently enabled repositories"}]},"implicit":true},{"name":"get_tls_verification_enabled","description":"Get the tls_verification_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":""}]},"implicit":true},{"name":"get_is_psr_pending","description":"Get the is_psr_pending field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm_psr","description":"True if either a PSR is running or we are waiting for a PSR to be re-run"}]},"implicit":true},{"name":"get_custom_uefi_certificates","description":"Get the custom_uefi_certificates field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"implicit":true},{"name":"get_uefi_certificates","description":"Get the uefi_certificates field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":"The UEFI certificates allowing Secure Boot"},{"transition":"changed","release":"22.16.0","description":"Became StaticRO to be editable through new method"}]},"implicit":true},{"name":"get_igmp_snooping_enabled","description":"Get the igmp_snooping_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"true if IGMP snooping is enabled in the pool, false otherwise."}]},"implicit":true},{"name":"get_live_patching_disabled","description":"Get the live_patching_disabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The pool-wide flag to show if the live patching feauture is disabled or not."}]},"implicit":true},{"name":"get_policy_no_vendor_device","description":"Get the policy_no_vendor_device field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The pool-wide policy for clients on whether to use the vendor device or not on newly created VMs. This field will also be consulted if the 'has_vendor_device' field is not specified in the VM.create call."}]},"implicit":true},{"name":"get_cpu_info","description":"Get the cpu_info field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Details about the physical CPUs on the pool"}]},"implicit":true},{"name":"get_guest_agent_config","description":"Get the guest_agent_config field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Pool-wide guest agent configuration information"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given pool.","result":["(string -> enum pool_allowed_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given pool.","result":["enum pool_allowed_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_ha_cluster_stack","description":"Get the ha_cluster_stack field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The HA cluster stack that is currently in use. Only valid when HA is enabled."}]},"implicit":true},{"name":"get_metadata_VDIs","description":"Get the metadata_VDIs field of the given pool.","result":["VDI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The set of currently known metadata VDIs for this pool"}]},"implicit":true},{"name":"get_restrictions","description":"Get the restrictions field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Pool-wide restrictions currently in effect"}]},"implicit":true},{"name":"get_vswitch_controller","description":"Get the vswitch_controller field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":"the IP address of the vswitch controller."},{"transition":"deprecated","release":"falcon","description":"Deprecated: set the IP address of the vswitch controller in SDN_controller instead."}]},"implicit":true},{"name":"get_redo_log_vdi","description":"Get the redo_log_vdi field of the given pool.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"indicates the VDI to use for the redo-log other than when HA is enabled"}]},"implicit":true},{"name":"get_redo_log_enabled","description":"Get the redo_log_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"true a redo-log is to be used other than when HA is enabled, false otherwise"}]},"implicit":true},{"name":"get_wlb_verify_cert","description":"Get the wlb_verify_cert field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"george","description":""},{"transition":"deprecated","release":"1.290.0","description":"Deprecated: to enable TLS verification use Pool.enable_tls_verification instead"}]},"implicit":true},{"name":"get_wlb_enabled","description":"Get the wlb_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true if workload balancing is enabled on the pool, false otherwise"}]},"implicit":true},{"name":"get_wlb_username","description":"Get the wlb_username field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Username for accessing the workload balancing host"}]},"implicit":true},{"name":"get_wlb_url","description":"Get the wlb_url field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Url for the configured workload balancing host"}]},"implicit":true},{"name":"get_health_check_config","description":"Get the health_check_config field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configuration for the automatic health check feature"}]},"implicit":true},{"name":"get_gui_config","description":"Get the gui_config field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"gui-specific configuration for pool"}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given pool.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_blobs","description":"Get the blobs field of the given pool.","result":["(string -> blob ref) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this pool"}]},"implicit":true},{"name":"get_ha_overcommitted","description":"Get the ha_overcommitted field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"True if the Pool is considered to be overcommitted i.e. if there exist insufficient physical resources to tolerate the configured number of host failures"}]},"implicit":true},{"name":"get_ha_allow_overcommit","description":"Get the ha_allow_overcommit field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"If set to false then operations which would cause the Pool to become overcommitted will be blocked."}]},"implicit":true},{"name":"get_ha_plan_exists_for","description":"Get the ha_plan_exists_for field of the given pool.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Number of future host failures we have managed to find a plan for. Once this reaches zero any future host failures will cause the failure of protected VMs."}]},"implicit":true},{"name":"get_ha_host_failures_to_tolerate","description":"Get the ha_host_failures_to_tolerate field of the given pool.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Number of host failures to tolerate before the Pool is declared to be overcommitted"}]},"implicit":true},{"name":"get_ha_statefiles","description":"Get the ha_statefiles field of the given pool.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"HA statefile VDIs in use"}]},"implicit":true},{"name":"get_ha_configuration","description":"Get the ha_configuration field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The current HA configuration"}]},"implicit":true},{"name":"get_ha_enabled","description":"Get the ha_enabled field of the given pool.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if HA is enabled on the pool, false otherwise"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given pool.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_crash_dump_SR","description":"Get the crash_dump_SR field of the given pool.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]},"implicit":true},{"name":"get_suspend_image_SR","description":"Get the suspend_image_SR field of the given pool.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]},"implicit":true},{"name":"get_default_SR","description":"Get the default_SR field of the given pool.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Default SR for VDIs"}]},"implicit":true},{"name":"get_master","description":"Get the master field of the given pool.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The host that is pool master"}]},"implicit":true},{"name":"get_name_description","description":"Get the name_description field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name_label field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Short name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given pool.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the pool instance with the specified UUID.","result":["pool ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool-wide information"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given pool.","result":["pool record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool-wide information"}]},"implicit":true}],"enums":[{"name":"pool_allowed_operations","values":[{"name":"ha_enable","doc":"Indicates this pool is in the process of enabling HA"},{"name":"ha_disable","doc":"Indicates this pool is in the process of disabling HA"},{"name":"cluster_create","doc":"Indicates this pool is in the process of creating a cluster"},{"name":"designate_new_master","doc":"Indicates this pool is in the process of changing master"},{"name":"configure_repositories","doc":"Indicates this pool is in the process of configuring repositories"},{"name":"sync_updates","doc":"Indicates this pool is in the process of syncing updates"},{"name":"get_updates","doc":"Indicates this pool is in the process of getting updates"},{"name":"apply_updates","doc":"Indicates this pool is in the process of applying updates"},{"name":"tls_verification_enable","doc":"Indicates this pool is in the process of enabling TLS verification"},{"name":"cert_refresh","doc":"A certificate refresh and distribution is in progress"},{"name":"exchange_certificates_on_join","doc":"Indicates this pool is exchanging internal certificates with a new joiner"},{"name":"exchange_ca_certificates_on_join","doc":"Indicates this pool is exchanging ca certificates with a new joiner"},{"name":"copy_primary_host_certs","doc":"Indicates the primary host is sending its certificates to another host"},{"name":"eject","doc":"Ejection of a host from the pool is under way"}]},{"name":"telemetry_frequency","values":[{"name":"daily","doc":"Run telemetry task daily"},{"name":"weekly","doc":"Run telemetry task weekly"},{"name":"monthly","doc":"Run telemetry task monthly"}]},{"name":"update_sync_frequency","values":[{"name":"daily","doc":"The update synchronizations happen every day"},{"name":"weekly","doc":"The update synchronizations happen every week on the chosen day"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool-wide information"}]},"tag":""},{"name":"pool_patch","description":"Pool-wide patches","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"version","description":"Patch version number","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Patch version number"}]},"default":"\"\""},{"name":"size","description":"Size of the patch","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Size of the patch"}]},"default":"0"},{"name":"pool_applied","description":"This patch should be applied across the entire pool","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"This patch should be applied across the entire pool"}]},"default":"false"},{"name":"host_patches","description":"This hosts this patch is applied to.","type":"host_patch ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"This hosts this patch is applied to."}]}},{"name":"after_apply_guidance","description":"What the client should do after this patch has been applied.","type":"enum after_apply_guidance set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"What the client should do after this patch has been applied."}]},"default":"{}"},{"name":"pool_update","description":"A reference to the associated pool_update object","type":"pool_update ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"A reference to the associated pool_update object"}]},"default":"OpaqueRef:NULL"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of pool_patch references to pool_patch records for all pool_patchs known to the system.","result":["(pool_patch ref -> pool_patch record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the pool_patchs known to the system.","result":["pool_patch ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"clean_on_host","description":"Removes the patch's files from the specified host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to clean up"},{"type":"host ref","name":"host","doc":"The host on which to clean the patch"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"tampa","description":"Removes the patch's files from the specified host"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"destroy","description":"Removes the patch's files from all hosts in the pool, and removes the database entries. Only works on unapplied patches.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Removes the patch's files from all hosts in the pool, and removes the database entries. Only works on unapplied patches."},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"pool_clean","description":"Removes the patch's files from all hosts in the pool, but does not remove the database entries","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to clean up"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"tampa","description":"Removes the patch's files from all hosts in the pool, but does not remove the database entries"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"clean","description":"Removes the patch's files from the server","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to clean up"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Removes the patch's files from the server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"precheck","description":"Execute the precheck stage of the selected patch on a host and return its output","result":["string","the output of the patch prechecks"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch whose prechecks will be run"},{"type":"host ref","name":"host","doc":"The host to run the prechecks on"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Execute the precheck stage of the selected patch on a host and return its output"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"pool_apply","description":"Apply the selected patch to all hosts in the pool and return a map of host_ref -> patch output","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to apply"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Apply the selected patch to all hosts in the pool and return a map of host_ref -> patch output"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"apply","description":"Apply the selected patch to a host and return its output","result":["string","the output of the patch application process"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"The patch to apply"},{"type":"host ref","name":"host","doc":"The host to apply the patch too"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Apply the selected patch to a host and return its output"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given pool_patch. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given pool_patch.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given pool_patch.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given pool_patch.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_pool_update","description":"Get the pool_update field of the given pool_patch.","result":["pool_update ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"A reference to the associated pool_update object"}]},"implicit":true},{"name":"get_after_apply_guidance","description":"Get the after_apply_guidance field of the given pool_patch.","result":["enum after_apply_guidance set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"What the client should do after this patch has been applied."}]},"implicit":true},{"name":"get_host_patches","description":"Get the host_patches field of the given pool_patch.","result":["host_patch ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"This hosts this patch is applied to."}]},"implicit":true},{"name":"get_pool_applied","description":"Get the pool_applied field of the given pool_patch.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"This patch should be applied across the entire pool"}]},"implicit":true},{"name":"get_size","description":"Get the size field of the given pool_patch.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Size of the patch"}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given pool_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Patch version number"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given pool_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given pool_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given pool_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the pool_patch instances with the given label.","result":["pool_patch ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the pool_patch instance with the specified UUID.","result":["pool_patch ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given pool_patch.","result":["pool_patch record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true}],"enums":[{"name":"after_apply_guidance","values":[{"name":"restartHVM","doc":"This patch requires HVM guests to be restarted once applied."},{"name":"restartPV","doc":"This patch requires PV guests to be restarted once applied."},{"name":"restartHost","doc":"This patch requires the host to be restarted once applied."},{"name":"restartXAPI","doc":"This patch requires XAPI to be restarted once applied."}]}],"lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":"Pool-wide patches"},{"transition":"deprecated","release":"ely","description":""}]},"tag":""},{"name":"pool_update","description":"Pool-wide updates to the host software","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"version","description":"Update version number","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Update version number"}]},"default":"\"\""},{"name":"installation_size","description":"Size of the update in bytes","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Size of the update in bytes"}]},"default":"0"},{"name":"key","description":"GPG key of the update","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"GPG key of the update"}]},"default":"\"\""},{"name":"after_apply_guidance","description":"What the client should do after this update has been applied.","type":"enum update_after_apply_guidance set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"What the client should do after this update has been applied."}]},"default":"{}"},{"name":"vdi","description":"VDI the update was uploaded to","type":"VDI ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VDI the update was uploaded to"}]}},{"name":"hosts","description":"The hosts that have applied this update.","type":"host ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The hosts that have applied this update."}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"additional configuration"}]},"default":"{}"},{"name":"enforce_homogeneity","description":"Flag - if true, all hosts in a pool must apply this update","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Flag - if true, all hosts in a pool must apply this update"}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of pool_update references to pool_update records for all pool_updates known to the system.","result":["(pool_update ref -> pool_update record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the pool_updates known to the system.","result":["pool_update ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"implicit":true},{"name":"destroy","description":"Removes the database entry. Only works on unapplied update.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"The update to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Removes the database entry. Only works on unapplied update."}]},"implicit":false},{"name":"pool_clean","description":"Removes the update's files from all hosts in the pool, but does not revert the update","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"The update to clean up"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Removes the update's files from all hosts in the pool, but does not revert the update"}]},"implicit":false},{"name":"pool_apply","description":"Apply the selected update to all hosts in the pool","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"The update to apply"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Apply the selected update to all hosts in the pool"}]},"implicit":false},{"name":"apply","description":"Apply the selected update to a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"The update to apply"},{"type":"host ref","name":"host","doc":"The host to apply the update to."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Apply the selected update to a host"}]},"implicit":false},{"name":"precheck","description":"Execute the precheck stage of the selected update on a host","result":["enum livepatch_status","The precheck pool update"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"The update whose prechecks will be run"},{"type":"host ref","name":"host","doc":"The host to run the prechecks on."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Execute the precheck stage of the selected update on a host"}]},"implicit":false},{"name":"introduce","description":"Introduce update VDI","result":["pool_update ref","the introduced pool update"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI which contains a software update."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Introduce update VDI"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given pool_update. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given pool_update.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given pool_update.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"additional configuration"}]},"implicit":true},{"name":"get_enforce_homogeneity","description":"Get the enforce_homogeneity field of the given pool_update.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Flag - if true, all hosts in a pool must apply this update"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given pool_update.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"additional configuration"}]},"implicit":true},{"name":"get_hosts","description":"Get the hosts field of the given pool_update.","result":["host ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The hosts that have applied this update."}]},"implicit":true},{"name":"get_vdi","description":"Get the vdi field of the given pool_update.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VDI the update was uploaded to"}]},"implicit":true},{"name":"get_after_apply_guidance","description":"Get the after_apply_guidance field of the given pool_update.","result":["enum update_after_apply_guidance set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"What the client should do after this update has been applied."}]},"implicit":true},{"name":"get_key","description":"Get the key field of the given pool_update.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"GPG key of the update"}]},"implicit":true},{"name":"get_installation_size","description":"Get the installation_size field of the given pool_update.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Size of the update in bytes"}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given pool_update.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Update version number"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given pool_update.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given pool_update.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given pool_update.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the pool_update instances with the given label.","result":["pool_update ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the pool_update instance with the specified UUID.","result":["pool_update ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given pool_update.","result":["pool_update record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"pool_update ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"implicit":true}],"enums":[{"name":"update_after_apply_guidance","values":[{"name":"restartHVM","doc":"This update requires HVM guests to be restarted once applied."},{"name":"restartPV","doc":"This update requires PV guests to be restarted once applied."},{"name":"restartHost","doc":"This update requires the host to be restarted once applied."},{"name":"restartXAPI","doc":"This update requires XAPI to be restarted once applied."}]},{"name":"livepatch_status","values":[{"name":"ok_livepatch_complete","doc":"An applicable live patch exists for every required component"},{"name":"ok_livepatch_incomplete","doc":"An applicable live patch exists but it is not sufficient"},{"name":"ok","doc":"There is no applicable live patch"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Pool-wide updates to the host software"}]},"tag":""},{"name":"VM","description":"A virtual machine (or 'guest').","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vm_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vm_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"power_state","description":"Current power state of the machine","type":"enum vm_power_state","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow Suspended VM creation"}]},"default":"Halted"},{"name":"user_version","description":"Creators of VMs and templates may store version information here.","type":"int","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Creators of VMs and templates may store version information here."}]}},{"name":"is_a_template","description":"true if this is a template. Template VMs can never be started, they are used only for cloning other VMs","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this is a template. Template VMs can never be started, they are used only for cloning other VMs"}]}},{"name":"is_default_template","description":"true if this is a default template. Default template VMs can never be started or migrated, they are used only for cloning other VMs","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Identifies default templates"}]},"default":"false"},{"name":"suspend_VDI","description":"The VDI that a suspend image is stored on. (Only has meaning if VM is currently suspended)","type":"VDI ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Become static to allow Suspended VM creation"}]},"default":"OpaqueRef:NULL"},{"name":"resident_on","description":"the host the VM is currently resident on","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host the VM is currently resident on"}]}},{"name":"scheduled_to_be_resident_on","description":"the host on which the VM is due to be started/resumed/migrated. This acts as a memory reservation indicator","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host on which the VM is due to be started/resumed/migrated. This acts as a memory reservation indicator"}]},"default":"OpaqueRef:NULL"},{"name":"affinity","description":"A host which the VM has some affinity for (or NULL). This is used as a hint to the start call when it decides where to run the VM. Resource constraints may cause the VM to be started elsewhere.","type":"host ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A host which the VM has some affinity for (or NULL). This is used as a hint to the start call when it decides where to run the VM. Resource constraints may cause the VM to be started elsewhere."}]}},{"name":"memory_overhead","description":"Virtualization memory overhead (bytes).","type":"int","qualifier":"RO/runtime","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Virtualization memory overhead (bytes)."}]},"default":"0"},{"name":"memory_target","description":"Dynamically-set memory target (bytes). The value of this field indicates the current target for memory available to this VM.","type":"int","qualifier":"RO/constructor","tag":"memory","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Dynamically-set memory target (bytes). The value of this field indicates the current target for memory available to this VM."},{"transition":"deprecated","release":"midnight-ride","description":""}]},"default":"0"},{"name":"memory_static_max","description":"Statically-set (i.e. absolute) maximum (bytes). The value of this field at VM start time acts as a hard limit of the amount of memory a guest can use. New values only take effect on reboot.","type":"int","qualifier":"RO/constructor","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Statically-set (i.e. absolute) maximum (bytes). The value of this field at VM start time acts as a hard limit of the amount of memory a guest can use. New values only take effect on reboot."}]}},{"name":"memory_dynamic_max","description":"Dynamic maximum (bytes)","type":"int","qualifier":"RO/constructor","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Dynamic maximum (bytes)"}]}},{"name":"memory_dynamic_min","description":"Dynamic minimum (bytes)","type":"int","qualifier":"RO/constructor","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Dynamic minimum (bytes)"}]}},{"name":"memory_static_min","description":"Statically-set (i.e. absolute) mininum (bytes). The value of this field indicates the least amount of memory this VM can boot with without crashing.","type":"int","qualifier":"RO/constructor","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Statically-set (i.e. absolute) mininum (bytes). The value of this field indicates the least amount of memory this VM can boot with without crashing."}]}},{"name":"VCPUs_params","description":"configuration parameters for the selected VCPU policy","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"configuration parameters for the selected VCPU policy"}]}},{"name":"VCPUs_max","description":"Max number of VCPUs","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Max number of VCPUs"}]}},{"name":"VCPUs_at_startup","description":"Boot number of VCPUs","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Boot number of VCPUs"}]}},{"name":"actions_after_softreboot","description":"action to take after soft reboot","type":"enum on_softreboot_behavior","qualifier":"RW","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.1.0","description":""}]},"default":"soft_reboot"},{"name":"actions_after_shutdown","description":"action to take after the guest has shutdown itself","type":"enum on_normal_exit","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has shutdown itself"}]}},{"name":"actions_after_reboot","description":"action to take after the guest has rebooted itself","type":"enum on_normal_exit","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has rebooted itself"}]}},{"name":"actions_after_crash","description":"action to take if the guest crashes","type":"enum on_crash_behaviour","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take if the guest crashes"}]}},{"name":"consoles","description":"virtual console devices","type":"console ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual console devices"}]}},{"name":"VIFs","description":"virtual network interfaces","type":"VIF ref set","qualifier":"RO/runtime","tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network interfaces"}]}},{"name":"VBDs","description":"virtual block devices","type":"VBD ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual block devices"}]}},{"name":"VUSBs","description":"vitual usb devices","type":"VUSB ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"vitual usb devices"}]}},{"name":"crash_dumps","description":"crash dumps associated with this VM","type":"crashdump ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"crash dumps associated with this VM"}]}},{"name":"VTPMs","description":"virtual TPMs","type":"VTPM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual TPMs"}]}},{"name":"PV_bootloader","description":"name of or path to bootloader","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"name of or path to bootloader"}]}},{"name":"PV_kernel","description":"path to the kernel","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the kernel"}]}},{"name":"PV_ramdisk","description":"path to the initrd","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the initrd"}]}},{"name":"PV_args","description":"kernel command-line arguments","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"kernel command-line arguments"}]}},{"name":"PV_bootloader_args","description":"miscellaneous arguments for the bootloader","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"miscellaneous arguments for the bootloader"}]}},{"name":"PV_legacy_args","description":"to make Zurich guests boot","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"to make Zurich guests boot"}]}},{"name":"HVM_boot_policy","description":"HVM boot policy","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"kolkata","description":"Replaced by VM.domain_type"}]}},{"name":"HVM_boot_params","description":"HVM boot params","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"HVM boot params"}]}},{"name":"HVM_shadow_multiplier","description":"multiplier applied to the amount of shadow that will be made available to the guest","type":"float","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"multiplier applied to the amount of shadow that will be made available to the guest"}]},"default":"1."},{"name":"platform","description":"platform-specific configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"platform-specific configuration"}]}},{"name":"PCI_bus","description":"PCI bus path for pass-through devices","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"PCI bus path for pass-through devices"},{"transition":"deprecated","release":"boston","description":"Field was never used"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"domid","description":"domain ID (if available, -1 otherwise)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"domain ID (if available, -1 otherwise)"}]}},{"name":"domarch","description":"Domain architecture (if available, null string otherwise)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Domain architecture (if available, null string otherwise)"}]}},{"name":"last_boot_CPU_flags","description":"describes the CPU flags on which the VM was last booted","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"describes the CPU flags on which the VM was last booted"}]},"default":"{}"},{"name":"is_control_domain","description":"true if this is a control domain (domain 0 or a driver domain)","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this is a control domain (domain 0 or a driver domain)"}]}},{"name":"metrics","description":"metrics associated with this VM","type":"VM_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this VM"}]}},{"name":"guest_metrics","description":"metrics associated with the running guest","type":"VM_guest_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with the running guest"}]}},{"name":"last_booted_record","description":"marshalled value containing VM record at time of last boot","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Marshalled value containing VM record at time of last boot, updated dynamically to reflect the runtime state of the domain"},{"transition":"changed","release":"1.257.0","description":"Become static to allow Suspended VM creation"}]},"default":"\"\""},{"name":"recommendations","description":"An XML specification of recommended values and ranges for properties of this VM","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"An XML specification of recommended values and ranges for properties of this VM"}]}},{"name":"xenstore_data","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created.","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created."}]},"default":"{}"},{"name":"ha_always_run","description":"if true then the system will attempt to keep the VM running as much as possible.","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"orlando","description":"if true then the system will attempt to keep the VM running as much as possible."},{"transition":"deprecated","release":"boston","description":""}]},"default":"false"},{"name":"ha_restart_priority","description":"has possible values: \"best-effort\" meaning \"try to restart this VM if possible but don't consider the Pool to be overcommitted if this is not possible\"; \"restart\" meaning \"this VM should be restarted\"; \"\" meaning \"do not try to restart this VM\"","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"has possible values: \"best-effort\" meaning \"try to restart this VM if possible but don't consider the Pool to be overcommitted if this is not possible\"; \"restart\" meaning \"this VM should be restarted\"; \"\" meaning \"do not try to restart this VM\""}]},"default":"\"\""},{"name":"is_a_snapshot","description":"true if this is a snapshot. Snapshotted VMs can never be started, they are used only for cloning other VMs","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if this is a snapshot. Snapshotted VMs can never be started, they are used only for cloning other VMs"}]},"default":"false"},{"name":"snapshot_of","description":"Ref pointing to the VM this snapshot is of.","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the VM this snapshot is of."}]},"default":"Null"},{"name":"snapshots","description":"List pointing to all the VM snapshots.","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the VM snapshots."}]}},{"name":"snapshot_time","description":"Date/time when this snapshot was created.","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Date/time when this snapshot was created."}]},"default":"19700101T00:00:00Z"},{"name":"transportable_snapshot_id","description":"Transportable ID of the snapshot VM","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Transportable ID of the snapshot VM"}]},"default":"\"\""},{"name":"blobs","description":"Binary blobs associated with this VM","type":"(string -> blob ref) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this VM"}]},"default":"{}"},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"blocked_operations","description":"List of operations which have been explicitly blocked and an error code","type":"(enum vm_operations -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List of operations which have been explicitly blocked and an error code"}]},"default":"{}"},{"name":"snapshot_info","description":"Human-readable information concerning this snapshot","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Human-readable information concerning this snapshot"}]},"default":"{}"},{"name":"snapshot_metadata","description":"Encoded information about the VM's metadata this is a snapshot of","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Encoded information about the VM's metadata this is a snapshot of"}]},"default":"\"\""},{"name":"parent","description":"Ref pointing to the parent of this VM","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Ref pointing to the parent of this VM"}]},"default":"Null"},{"name":"children","description":"List pointing to all the children of this VM","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"List pointing to all the children of this VM"}]}},{"name":"bios_strings","description":"BIOS strings","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"BIOS strings"}]},"default":"{}"},{"name":"protection_policy","description":"Ref pointing to a protection policy for this VM","type":"VMPP ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"OpaqueRef:NULL"},{"name":"is_snapshot_from_vmpp","description":"true if this snapshot was created by the protection policy","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"false"},{"name":"snapshot_schedule","description":"Ref pointing to a snapshot schedule for this VM","type":"VMSS ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Ref pointing to a snapshot schedule for this VM"}]},"default":"OpaqueRef:NULL"},{"name":"is_vmss_snapshot","description":"true if this snapshot was created by the snapshot schedule","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"true if this snapshot was created by the snapshot schedule"}]},"default":"false"},{"name":"appliance","description":"the appliance to which this VM belongs","type":"VM_appliance ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the appliance to which this VM belongs"}]},"default":"OpaqueRef:NULL"},{"name":"start_delay","description":"The delay to wait before proceeding to the next order in the startup sequence (seconds)","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The delay to wait before proceeding to the next order in the startup sequence (seconds)"}]},"default":"0"},{"name":"shutdown_delay","description":"The delay to wait before proceeding to the next order in the shutdown sequence (seconds)","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The delay to wait before proceeding to the next order in the shutdown sequence (seconds)"}]},"default":"0"},{"name":"order","description":"The point in the startup or shutdown sequence at which this VM will be started","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The point in the startup or shutdown sequence at which this VM will be started"}]},"default":"0"},{"name":"VGPUs","description":"Virtual GPUs","type":"VGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"attached_PCIs","description":"Currently passed-through PCI devices","type":"PCI ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"suspend_SR","description":"The SR on which a suspend image is stored","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The SR on which a suspend image is stored"}]},"default":"OpaqueRef:NULL"},{"name":"version","description":"The number of times this VM has been recovered","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The number of times this VM has been recovered"}]},"default":"0"},{"name":"generation_id","description":"Generation ID of the VM","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"Generation ID of the VM"}]},"default":"\"0:0\""},{"name":"hardware_platform_version","description":"The host virtual hardware platform version the VM can run on","type":"int","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"The host virtual hardware platform version the VM can run on"}]},"default":"0"},{"name":"has_vendor_device","description":"When an HVM guest starts, this controls the presence of the emulated C000 PCI device which triggers Windows Update to fetch or update PV drivers.","type":"bool","qualifier":"RO/constructor","tag":"windows-vm","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"},{"name":"requires_reboot","description":"Indicates whether a VM requires a reboot in order to update its configuration, e.g. its memory allocation.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"false"},{"name":"reference_label","description":"Textual reference to the template used to create a VM. This can be used by clients in need of an immutable reference to the template since the latter's uuid and name_label may change, for example, after a package installation or upgrade.","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Textual reference to the template used to create a VM. This can be used by clients in need of an immutable reference to the template since the latter's uuid and name_label may change, for example, after a package installation or upgrade."}]},"default":"\"\""},{"name":"domain_type","description":"The type of domain that will be created when the VM is started","type":"enum domain_type","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"jura","description":"Internal-only field; not yet in the public API"},{"transition":"published","release":"kolkata","description":"The field is now valid"}]},"default":"unspecified"},{"name":"NVRAM","description":"initial value for guest NVRAM (containing UEFI variables, etc). Cannot be changed while the VM is running","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"naples","description":""}]},"default":"{}"},{"name":"pending_guidances","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.303.0","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures"}]},"default":"{}"},{"name":"pending_guidances_recommended","description":"The set of pending recommended guidances after applying updates, which most users should follow to make the updates effective, but if not followed, will not cause a failure","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"default":"{}"},{"name":"pending_guidances_full","description":"The set of pending full guidances after applying updates, which a user should follow to make some updates, e.g. specific hardware drivers or CPU features, fully effective, but the 'average user' doesn't need to","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VM references to VM records for all VMs known to the system.","result":["(VM ref -> VM record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VMs known to the system.","result":["VM ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"restart_device_models","description":"Restart device models of the VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."}],"roles":["pool-admin","pool-operator","vm-power-admin","client-cert"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.30.0","description":""}]},"implicit":false},{"name":"set_HVM_boot_policy","description":"Set the VM.HVM_boot_policy field of the given VM, which will take effect when it is next started","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"value","doc":"The new HVM boot policy"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"kolkata","description":"Replaced by VM.set_domain_type"}]},"implicit":false},{"name":"set_domain_type","description":"Set the VM.domain_type field of the given VM, which will take effect when it is next started","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"enum domain_type","name":"value","doc":"The new domain type"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"set_actions_after_crash","description":"Sets the actions_after_crash parameter","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to set"},{"type":"enum on_crash_behaviour","name":"value","doc":"The new value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Sets the actions_after_crash parameter"}]},"implicit":false},{"name":"import","description":"Import an XVA from a URI","result":["VM ref set","Imported VM reference"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"url","doc":"The URL of the XVA file"},{"type":"SR ref","name":"sr","doc":"The destination SR for the disks"},{"type":"bool","name":"full_restore","doc":"Perform a full restore"},{"type":"bool","name":"force","doc":"Force the import"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Import an XVA from a URI"}]},"implicit":false},{"name":"set_has_vendor_device","description":"Controls whether, when the VM starts in HVM mode, its virtual hardware will include the emulated PCI device for which drivers may be available through Windows Update. Usually this should never be changed on a VM on which Windows has been installed: changing it on such a VM is likely to lead to a crash on next start.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM on which to set this flag"},{"type":"bool","name":"value","doc":"True to provide the vendor PCI device."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"windows-vm","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Controls whether, when the VM starts in HVM mode, its virtual hardware will include the emulated PCI device for which drivers may be available through Windows Update. Usually this should never be changed on a VM on which Windows has been installed: changing it on such a VM is likely to lead to a crash on next start."}]},"implicit":false},{"name":"call_plugin","description":"Call an API plugin on this vm","result":["string","Result from the plugin"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The vm"},{"type":"string","name":"plugin","doc":"The name of the plugin"},{"type":"string","name":"fn","doc":"The name of the function within the plugin"},{"type":"(string -> string) map","name":"args","doc":"Arguments for the function"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"Call an API plugin on this vm"}]},"implicit":false},{"name":"query_services","description":"Query the system services advertised by this VM and register them. This can only be applied to a system domain.","result":["(string -> string) map","map of service type to name"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Query the system services advertised by this VM and register them. This can only be applied to a system domain."}]},"implicit":false},{"name":"set_appliance","description":"Assign this VM to an appliance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to assign to an appliance."},{"type":"VM_appliance ref","name":"value","doc":"The appliance to which this VM should be assigned."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Assign this VM to an appliance."}]},"implicit":false},{"name":"import_convert","description":"Import using a conversion service.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"type","doc":"Type of the conversion"},{"type":"string","name":"username","doc":"Admin username on the host"},{"type":"string","name":"password","doc":"Password on the host"},{"type":"SR ref","name":"sr","doc":"The destination SR"},{"type":"(string -> string) map","name":"remote_config","doc":"Remote configuration options"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Import using a conversion service."}]},"implicit":false},{"name":"recover","description":"Recover the VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to recover"},{"type":"session ref","name":"session_to","doc":"The session to which the VM is to be recovered."},{"type":"bool","name":"force","doc":"Whether the VM should replace newer versions of itself."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Recover the VM"}]},"implicit":false},{"name":"get_SRs_required_for_recovery","description":"List all the SR's that are required for the VM to be recovered","result":["SR ref set","refs for SRs required to recover the VM"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM for which the SRs have to be recovered"},{"type":"session ref","name":"session_to","doc":"The session to which the SRs of the VM have to be recovered."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":"List all the SR's that are required for the VM to be recovered"}]},"implicit":false},{"name":"assert_can_be_recovered","description":"Assert whether all SRs required to recover this VM are available.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to recover"},{"type":"session ref","name":"session_to","doc":"The session to which the VM is to be recovered."}],"errors":[{"name":"VM_IS_PART_OF_AN_APPLIANCE","doc":"This operation is not allowed as the VM is part of an appliance."},{"name":"VM_REQUIRES_SR","doc":"You attempted to run a VM on a host which doesn't have access to an SR needed by the VM. The VM has at least one VBD attached to a VDI in the SR."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Assert whether all SRs required to recover this VM are available."}]},"implicit":false},{"name":"set_suspend_VDI","description":"Set this VM's suspend VDI, which must be indentical to its current one","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"VDI ref","name":"value","doc":"The suspend VDI uuid"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Set this VM's suspend VDI, which must be indentical to its current one"}]},"implicit":false},{"name":"set_order","description":"Set this VM's boot order","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"This VM's boot order"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Set this VM's boot order"}]},"implicit":false},{"name":"set_shutdown_delay","description":"Set this VM's shutdown delay in seconds","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"This VM's shutdown delay in seconds"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Set this VM's shutdown delay in seconds"}]},"implicit":false},{"name":"set_start_delay","description":"Set this VM's start delay in seconds","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"This VM's start delay in seconds"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Set this VM's start delay in seconds"}]},"implicit":false},{"name":"set_snapshot_schedule","description":"Set the value of the snapshot schedule field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"VMSS ref","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Set the value of the snapshot schedule field"}]},"implicit":false},{"name":"set_protection_policy","description":"Set the value of the protection_policy field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"VMPP ref","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"copy_bios_strings","description":"Copy the BIOS strings from the given host to this VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to modify"},{"type":"host ref","name":"host","doc":"The host to copy the BIOS strings from"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Copy the BIOS strings from the given host to this VM"}]},"implicit":false},{"name":"set_bios_strings","description":"Set custom BIOS strings to this VM. VM will be given a default set of BIOS strings, only some of which can be overridden by the supplied values. Allowed keys are: 'bios-vendor', 'bios-version', 'system-manufacturer', 'system-product-name', 'system-version', 'system-serial-number', 'enclosure-asset-tag', 'baseboard-manufacturer', 'baseboard-product-name', 'baseboard-version', 'baseboard-serial-number', 'baseboard-asset-tag', 'baseboard-location-in-chassis', 'enclosure-asset-tag'","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to modify"},{"type":"(string -> string) map","name":"value","doc":"The custom BIOS strings as a list of key-value pairs"}],"errors":[{"name":"VM_BIOS_STRINGS_ALREADY_SET","doc":"The BIOS strings for this VM have already been set and cannot be changed."},{"name":"INVALID_VALUE","doc":"The value given is invalid"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Set custom BIOS strings to this VM. VM will be given a default set of BIOS strings, only some of which can be overridden by the supplied values. Allowed keys are: 'bios-vendor', 'bios-version', 'system-manufacturer', 'system-product-name', 'system-version', 'system-serial-number', 'enclosure-asset-tag', 'baseboard-manufacturer', 'baseboard-product-name', 'baseboard-version', 'baseboard-serial-number', 'baseboard-asset-tag', 'baseboard-location-in-chassis', 'enclosure-asset-tag'"}]},"implicit":false},{"name":"retrieve_wlb_recommendations","description":"Returns mapping of hosts to ratings, indicating the suitability of starting the VM at that location according to wlb. Rating is replaced with an error if the VM cannot boot there.","result":["(host ref -> string set) map","The potential hosts and their corresponding recommendations or errors"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Returns mapping of hosts to ratings, indicating the suitability of starting the VM at that location according to wlb. Rating is replaced with an error if the VM cannot boot there."}]},"implicit":false},{"name":"assert_agile","description":"Returns an error if the VM is not considered agile e.g. because it is tied to a resource local to a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Returns an error if the VM is not considered agile e.g. because it is tied to a resource local to a host"}]},"implicit":false},{"name":"create_new_blob","description":"Create a placeholder for a named binary blob of data that is associated with this VM","result":["blob ref","The reference of the blob, needed for populating its data"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"},{"type":"string","name":"name","doc":"The name associated with the blob"},{"type":"string","name":"mime_type","doc":"The mime type for the data. Empty string translates to application/octet-stream"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a named binary blob of data that is associated with this VM"}]},"implicit":false},{"name":"assert_can_boot_here","description":"Returns an error if the VM could not boot on this host for some reason","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[{"name":"HOST_NOT_ENOUGH_FREE_MEMORY","doc":"Not enough server memory is available to perform this operation."},{"name":"HOST_NOT_ENOUGH_PCPUS","doc":"The host does not have enough pCPUs to run the VM. It needs at least as many as the VM has vCPUs."},{"name":"NETWORK_SRIOV_INSUFFICIENT_CAPACITY","doc":"There is insufficient capacity for VF reservation"},{"name":"HOST_NOT_LIVE","doc":"This operation cannot be completed as the server is not live."},{"name":"HOST_DISABLED","doc":"The specified server is disabled."},{"name":"HOST_CANNOT_ATTACH_NETWORK","doc":"Server cannot attach network (in the case of NIC bonding, this may be because attaching the network on this server would require other networks - that are currently active - to be taken down)."},{"name":"VM_HVM_REQUIRED","doc":"HVM is required for this operation"},{"name":"VM_REQUIRES_GPU","doc":"You attempted to run a VM on a host which doesn't have a pGPU available in the GPU group needed by the VM. The VM has a vGPU attached to this GPU group."},{"name":"VM_REQUIRES_IOMMU","doc":"You attempted to run a VM on a host which doesn't have I/O virtualization (IOMMU/VT-d) enabled, which is needed by the VM."},{"name":"VM_REQUIRES_NETWORK","doc":"You attempted to run a VM on a host which doesn't have a PIF on a Network needed by the VM. The VM has at least one VIF attached to the Network."},{"name":"VM_REQUIRES_SR","doc":"You attempted to run a VM on a host which doesn't have access to an SR needed by the VM. The VM has at least one VBD attached to a VDI in the SR."},{"name":"VM_REQUIRES_VGPU","doc":"You attempted to run a VM on a host on which the vGPU required by the VM cannot be allocated on any pGPUs in the GPU_group needed by the VM."},{"name":"VM_HOST_INCOMPATIBLE_VERSION","doc":"This VM operation cannot be performed on an older-versioned host during an upgrade."},{"name":"VM_HOST_INCOMPATIBLE_VIRTUAL_HARDWARE_PLATFORM_VERSION","doc":"You attempted to run a VM on a host that cannot provide the VM's required Virtual Hardware Platform version."},{"name":"INVALID_VALUE","doc":"The value given is invalid"},{"name":"MEMORY_CONSTRAINT_VIOLATION","doc":"The dynamic memory range does not satisfy the following constraint."},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VALUE_NOT_SUPPORTED","doc":"You attempted to set a value that is not supported by this implementation. The fully-qualified field name and the value that you tried to set are returned. Also returned is a developer-only diagnostic reason."},{"name":"VM_INCOMPATIBLE_WITH_THIS_HOST","doc":"The VM is incompatible with the CPU features of this host."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"quebec","description":"Does additional compatibility checks when VM powerstate is not halted (e.g. CPUID). Use this before calling VM.resume or VM.pool_migrate."}]},"implicit":false},{"name":"get_possible_hosts","description":"Return the list of hosts on which this VM may run.","result":["host ref set","The possible hosts"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Return the list of hosts on which this VM may run."}]},"implicit":false},{"name":"get_allowed_VIF_devices","description":"Returns a list of the allowed values that a VIF device field can take","result":["string set","The allowed values"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Returns a list of the allowed values that a VIF device field can take"}]},"implicit":false},{"name":"get_allowed_VBD_devices","description":"Returns a list of the allowed values that a VBD device field can take","result":["string set","The allowed values"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Returns a list of the allowed values that a VBD device field can take"}]},"implicit":false},{"name":"update_allowed_operations","description":"Recomputes the list of acceptable operations","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Recomputes the list of acceptable operations"}]},"implicit":false},{"name":"assert_operation_valid","description":"Check to see whether this operation is acceptable in the current state of the system, raising an error if the operation is invalid for some reason","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum vm_operations","name":"op","doc":"proposed operation"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Check to see whether this operation is acceptable in the current state of the system, raising an error if the operation is invalid for some reason"}]},"implicit":false},{"name":"forget_data_source_archives","description":"Forget the recorded statistics related to the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"data_source","doc":"The data source whose archives are to be forgotten"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Forget the recorded statistics related to the specified data source"}]},"implicit":false},{"name":"query_data_source","description":"Query the latest value of the specified data source","result":["float","The latest value, averaged over the last 5 seconds"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"data_source","doc":"The data source to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Query the latest value of the specified data source"}]},"implicit":false},{"name":"record_data_source","description":"Start recording the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"data_source","doc":"The data source to record"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Start recording the specified data source"}]},"implicit":false},{"name":"get_data_sources","description":"","result":["data_source record set","A set of data sources"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to interrogate"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_boot_record","description":"Returns a record describing the VM's dynamic state, initialised when the VM boots and updated to reflect runtime configuration changes e.g. CPU hotplug","result":["VM record","A record describing the VM"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM whose boot-time state to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"inverness","description":"Use the current VM record/fields instead"}]},"implicit":false},{"name":"assert_can_migrate","description":"Assert whether a VM can be migrated to the specified destination.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"},{"type":"(string -> string) map","name":"dest","doc":"The result of a VM.migrate_receive call."},{"type":"bool","name":"live","doc":"Live migration"},{"type":"(VDI ref -> SR ref) map","name":"vdi_map","doc":"Map of source VDI to destination SR"},{"type":"(VIF ref -> network ref) map","name":"vif_map","doc":"Map of source VIF to destination network"},{"type":"(string -> string) map","name":"options","doc":"Other parameters"},{"type":"(VGPU ref -> GPU_group ref) map","name":"vgpu_map","doc":"Map of source vGPU to destination GPU group"}],"errors":[{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Assert whether a VM can be migrated to the specified destination."}]},"implicit":false},{"name":"migrate_send","description":"Migrate the VM to another host. This can only be called when the specified VM is in the Running state.","result":["VM ref","The reference of the newly created VM in the destination pool"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"},{"type":"(string -> string) map","name":"dest","doc":"The result of a Host.migrate_receive call."},{"type":"bool","name":"live","doc":"Live migration"},{"type":"(VDI ref -> SR ref) map","name":"vdi_map","doc":"Map of source VDI to destination SR"},{"type":"(VIF ref -> network ref) map","name":"vif_map","doc":"Map of source VIF to destination network"},{"type":"(string -> string) map","name":"options","doc":"Other parameters"},{"type":"(VGPU ref -> GPU_group ref) map","name":"vgpu_map","doc":"Map of source vGPU to destination GPU group"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Migrate the VM to another host. This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"maximise_memory","description":"Returns the maximum amount of guest memory which will fit, together with overheads, in the supplied amount of physical memory. If 'exact' is true then an exact calculation is performed using the VM's current settings. If 'exact' is false then a more conservative approximation is used","result":["int","The maximum possible static-max"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"total","doc":"Total amount of physical RAM to fit within"},{"type":"bool","name":"approximate","doc":"If false the limit is calculated with the guest's current exact configuration. Otherwise a more approximate calculation is performed"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Returns the maximum amount of guest memory which will fit, together with overheads, in the supplied amount of physical memory. If 'exact' is true then an exact calculation is performed using the VM's current settings. If 'exact' is false then a more conservative approximation is used"}]},"implicit":false},{"name":"send_trigger","description":"Send the named trigger to this VM. This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"},{"type":"string","name":"trigger","doc":"The trigger to send"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."}],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Send the named trigger to this VM. This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"send_sysrq","description":"Send the given key as a sysrq to this VM. The key is specified as a single character (a String of length 1). This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM"},{"type":"string","name":"key","doc":"The key to send"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."}],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Send the given key as a sysrq to this VM. The key is specified as a single character (a String of length 1). This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"set_VCPUs_at_startup","description":"Set the number of startup VCPUs for a halted VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"The new maximum number of VCPUs"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the number of startup VCPUs for a halted VM"}]},"implicit":false},{"name":"set_VCPUs_max","description":"Set the maximum number of VCPUs for a halted VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"The new maximum number of VCPUs"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the maximum number of VCPUs for a halted VM"}]},"implicit":false},{"name":"set_shadow_multiplier_live","description":"Set the shadow memory multiplier on a running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"float","name":"multiplier","doc":"The new shadow memory multiplier to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the shadow memory multiplier on a running VM"}]},"implicit":false},{"name":"set_HVM_shadow_multiplier","description":"Set the shadow memory multiplier on a halted VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"float","name":"value","doc":"The new shadow memory multiplier to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the shadow memory multiplier on a halted VM"}]},"implicit":false},{"name":"get_cooperative","description":"Return true if the VM is currently 'co-operative' i.e. is expected to reach a balloon target and actually has done","result":["bool","true if the VM is currently 'co-operative'; false otherwise"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Return true if the VM is currently 'co-operative' i.e. is expected to reach a balloon target and actually has done"},{"transition":"deprecated","release":"tampa","description":""}]},"implicit":false},{"name":"wait_memory_target_live","description":"Wait for a running VM to reach its current memory target","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"orlando","description":"Wait for a running VM to reach its current memory target"},{"transition":"deprecated","release":"midnight-ride","description":""}]},"implicit":false},{"name":"set_memory_target_live","description":"Set the memory target for a running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"target","doc":"The target in bytes"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Set the memory target for a running VM"},{"transition":"deprecated","release":"midnight-ride","description":""}]},"implicit":false},{"name":"set_memory","description":"Set the memory allocation of this VM. Sets all of memory_static_max, memory_dynamic_min, and memory_dynamic_max to the given value, and leaves memory_static_min untouched.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"value","doc":"The new memory allocation (bytes)."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Set the memory allocation of this VM. Sets all of memory_static_max, memory_dynamic_min, and memory_dynamic_max to the given value, and leaves memory_static_min untouched."}]},"implicit":false},{"name":"set_memory_limits","description":"Set the memory limits of this VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"static_min","doc":"The new value of memory_static_min."},{"type":"int","name":"static_max","doc":"The new value of memory_static_max."},{"type":"int","name":"dynamic_min","doc":"The new value of memory_dynamic_min."},{"type":"int","name":"dynamic_max","doc":"The new value of memory_dynamic_max."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the memory limits of this VM."}]},"implicit":false},{"name":"set_memory_static_range","description":"Set the static (ie boot-time) range of virtual memory that the VM is allowed to use.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"min","doc":"The new minimum value"},{"type":"int","name":"max","doc":"The new maximum value"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the static (ie boot-time) range of virtual memory that the VM is allowed to use."}]},"implicit":false},{"name":"set_memory_static_min","description":"Set the value of the memory_static_min field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to modify"},{"type":"int","name":"value","doc":"The new value of memory_static_min"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the value of the memory_static_min field"}]},"implicit":false},{"name":"set_memory_static_max","description":"Set the value of the memory_static_max field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to modify"},{"type":"int","name":"value","doc":"The new value of memory_static_max"}],"errors":[{"name":"HA_OPERATION_WOULD_BREAK_FAILOVER_PLAN","doc":"This operation cannot be performed because it would invalidate VM failover planning such that the system would be unable to guarantee to restart protected VMs after a Host failure."}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Set the value of the memory_static_max field"}]},"implicit":false},{"name":"set_memory_dynamic_range","description":"Set the minimum and maximum amounts of physical memory the VM is allowed to use.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"min","doc":"The new minimum value"},{"type":"int","name":"max","doc":"The new maximum value"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the minimum and maximum amounts of physical memory the VM is allowed to use."}]},"implicit":false},{"name":"set_memory_dynamic_min","description":"Set the value of the memory_dynamic_min field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to modify"},{"type":"int","name":"value","doc":"The new value of memory_dynamic_min"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the value of the memory_dynamic_min field"}]},"implicit":false},{"name":"set_memory_dynamic_max","description":"Set the value of the memory_dynamic_max field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM to modify"},{"type":"int","name":"value","doc":"The new value of memory_dynamic_max"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Set the value of the memory_dynamic_max field"}]},"implicit":false},{"name":"compute_memory_overhead","description":"Computes the virtualization memory overhead of a VM.","result":["int","the virtualization memory overhead of the VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM for which to compute the memory overhead"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Computes the virtualization memory overhead of a VM."}]},"implicit":false},{"name":"set_ha_always_run","description":"Set the value of the ha_always_run","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"bool","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"orlando","description":"Set the value of the ha_always_run"},{"transition":"deprecated","release":"boston","description":""}]},"implicit":false},{"name":"set_ha_restart_priority","description":"Set the value of the ha_restart_priority field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Set the value of the ha_restart_priority field"}]},"implicit":false},{"name":"remove_from_NVRAM","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"key","doc":"The key"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"naples","description":""}]},"implicit":false},{"name":"add_to_NVRAM","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"key","doc":"The key"},{"type":"string","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"naples","description":""}]},"implicit":false},{"name":"set_NVRAM","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"(string -> string) map","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"naples","description":""}]},"implicit":false},{"name":"add_to_VCPUs_params_live","description":"Add the given key-value pair to VM.VCPUs_params, and apply that value on the running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"string","name":"key","doc":"The key"},{"type":"string","name":"value","doc":"The value"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Add the given key-value pair to VM.VCPUs_params, and apply that value on the running VM"}]},"implicit":false},{"name":"set_VCPUs_number_live","description":"Set the number of VCPUs for a running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"The VM"},{"type":"int","name":"nvcpu","doc":"The number of VCPUs"}],"errors":[{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the number of VCPUs for a running VM"},{"transition":"changed","release":"ely","description":"Unless the feature is explicitly enabled for every host in the pool, this fails with Api_errors.license_restriction."}]},"implicit":false},{"name":"pool_migrate","description":"Migrate a VM to another Host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to migrate"},{"type":"host ref","name":"host","doc":"The target host"},{"type":"(string -> string) map","name":"options","doc":"Extra configuration operations: force, live, copy, compress. Each is a boolean option, taking 'true' or 'false' as a value. Option 'compress' controls the use of stream compression during migration."}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."}],"roles":["pool-admin","pool-operator","vm-power-admin","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Migrate a VM to another Host."}]},"implicit":false},{"name":"resume_on","description":"Awaken the specified VM and resume it on a particular Host. This can only be called when the specified VM is in the Suspended state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to resume"},{"type":"host ref","name":"host","doc":"The Host on which to resume the VM"},{"type":"bool","name":"start_paused","doc":"Resume VM in paused state if set to true."},{"type":"bool","name":"force","doc":"Attempt to force the VM to resume. If this flag is false then the VM may fail pre-resume safety checks (e.g. if the CPU the VM was running on looks substantially different to the current one)"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Awaken the specified VM and resume it on a particular Host. This can only be called when the specified VM is in the Suspended state."}]},"implicit":false},{"name":"resume","description":"Awaken the specified VM and resume it. This can only be called when the specified VM is in the Suspended state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to resume"},{"type":"bool","name":"start_paused","doc":"Resume VM in paused state if set to true."},{"type":"bool","name":"force","doc":"Attempt to force the VM to resume. If this flag is false then the VM may fail pre-resume safety checks (e.g. if the CPU the VM was running on looks substantially different to the current one)"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Awaken the specified VM and resume it. This can only be called when the specified VM is in the Suspended state."}]},"implicit":false},{"name":"suspend","description":"Suspend the specified VM to disk. This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to suspend"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Suspend the specified VM to disk. This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"hard_reboot","description":"Stop executing the specified VM without attempting a clean shutdown and immediately restart the VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to reboot"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Stop executing the specified VM without attempting a clean shutdown and immediately restart the VM."}]},"implicit":false},{"name":"power_state_reset","description":"Reset the power-state of the VM to halted in the database only. (Used to recover from slave failures in pooling scenarios by resetting the power-states of VMs running on dead slaves to halted.) This is a potentially dangerous operation; use with care.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to reset"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Reset the power-state of the VM to halted in the database only. (Used to recover from slave failures in pooling scenarios by resetting the power-states of VMs running on dead slaves to halted.) This is a potentially dangerous operation; use with care."}]},"implicit":false},{"name":"hard_shutdown","description":"Stop executing the specified VM without attempting a clean shutdown.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to destroy"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Stop executing the specified VM without attempting a clean shutdown."}]},"implicit":false},{"name":"clean_reboot","description":"Attempt to cleanly shutdown the specified VM (Note: this may not be supported---e.g. if a guest agent is not installed). This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to shutdown"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Attempt to cleanly shutdown the specified VM (Note: this may not be supported---e.g. if a guest agent is not installed). This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"shutdown","description":"Attempts to first clean shutdown a VM and if it should fail then perform a hard shutdown on it.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to shutdown"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"Attempts to first clean shutdown a VM and if it should fail then perform a hard shutdown on it."}]},"implicit":false},{"name":"clean_shutdown","description":"Attempt to cleanly shutdown the specified VM. (Note: this may not be supported---e.g. if a guest agent is not installed). This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to shutdown"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Attempt to cleanly shutdown the specified VM. (Note: this may not be supported---e.g. if a guest agent is not installed). This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"unpause","description":"Resume the specified VM. This can only be called when the specified VM is in the Paused state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to unpause"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Resume the specified VM. This can only be called when the specified VM is in the Paused state."}]},"implicit":false},{"name":"pause","description":"Pause the specified VM. This can only be called when the specified VM is in the Running state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to pause"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pause the specified VM. This can only be called when the specified VM is in the Running state."}]},"implicit":false},{"name":"start_on","description":"Start the specified VM on a particular host. This function can only be called with the VM is in the Halted State.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to start"},{"type":"host ref","name":"host","doc":"The Host on which to start the VM"},{"type":"bool","name":"start_paused","doc":"Instantiate VM in paused state if set to true."},{"type":"bool","name":"force","doc":"Attempt to force the VM to start. If this flag is false then the VM may fail pre-boot safety checks (e.g. if the CPU the VM last booted on looks substantially different to the current one)"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"BOOTLOADER_FAILED","doc":"The bootloader returned an error"},{"name":"UNKNOWN_BOOTLOADER","doc":"The requested bootloader is unknown"}],"roles":["pool-admin","pool-operator","vm-power-admin","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Start the specified VM on a particular host. This function can only be called with the VM is in the Halted State."}]},"implicit":false},{"name":"start","description":"Start the specified VM. This function can only be called with the VM is in the Halted State.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to start"},{"type":"bool","name":"start_paused","doc":"Instantiate VM in paused state if set to true."},{"type":"bool","name":"force","doc":"Attempt to force the VM to start. If this flag is false then the VM may fail pre-boot safety checks (e.g. if the CPU the VM last booted on looks substantially different to the current one)"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"VM_HVM_REQUIRED","doc":"HVM is required for this operation"},{"name":"VM_IS_TEMPLATE","doc":"The operation attempted is not valid for a template VM"},{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"BOOTLOADER_FAILED","doc":"The bootloader returned an error"},{"name":"UNKNOWN_BOOTLOADER","doc":"The requested bootloader is unknown"},{"name":"NO_HOSTS_AVAILABLE","doc":"There were no servers available to complete the specified operation."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Start the specified VM. This function can only be called with the VM is in the Halted State."}]},"implicit":false},{"name":"provision","description":"Inspects the disk configuration contained within the VM's other_config, creates VDIs and VBDs and then executes any applicable post-install script.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be provisioned"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Inspects the disk configuration contained within the VM's other_config, creates VDIs and VBDs and then executes any applicable post-install script."}]},"implicit":false},{"name":"checkpoint","description":"Checkpoints the specified VM, making a new VM. Checkpoint automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write) and saves the memory image as well.","result":["VM ref","The reference of the newly created VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be checkpointed"},{"type":"string","name":"new_name","doc":"The name of the checkpointed VM"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_CHECKPOINT_SUSPEND_FAILED","doc":"An error occured while saving the memory image of the specified virtual machine"},{"name":"VM_CHECKPOINT_RESUME_FAILED","doc":"An error occured while restoring the memory image of the specified virtual machine"}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Checkpoints the specified VM, making a new VM. Checkpoint automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write) and saves the memory image as well."}]},"implicit":false},{"name":"revert","description":"Reverts the specified VM to a previous state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"snapshot","doc":"The snapshotted state that we revert to"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"VM_REVERT_FAILED","doc":"An error occured while reverting the specified virtual machine to the specified snapshot"}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Reverts the specified VM to a previous state."}]},"implicit":false},{"name":"copy","description":"Copied the specified VM, making a new VM. Unlike clone, copy does not exploits the capabilities of the underlying storage repository in which the VM's disk images are stored. Instead, copy guarantees that the disk images of the newly created VM will be 'full disks' - i.e. not part of a CoW chain. This function can only be called when the VM is in the Halted State.","result":["VM ref","The reference of the newly created VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be copied"},{"type":"string","name":"new_name","doc":"The name of the copied VM"},{"type":"SR ref","name":"sr","doc":"An SR to copy all the VM's disks into (if an invalid reference then it uses the existing SRs)"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Copies a VM to an SR. There must be a host that can see both the source and destination SRs simultaneously"},{"transition":"extended","release":"cowley","description":"The copy can now be performed between any two SRs."}]},"implicit":false},{"name":"clone","description":"Clones the specified VM, making a new VM. Clone automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write). This function can only be called when the VM is in the Halted State.","result":["VM ref","The reference of the newly created VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be cloned"},{"type":"string","name":"new_name","doc":"The name of the cloned VM"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"LICENCE_RESTRICTION","doc":"This operation is not allowed because your license lacks a needed feature. Please contact your support representative."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Clones the specified VM, making a new VM. Clone automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write). This function can only be called when the VM is in the Halted State."}]},"implicit":false},{"name":"snapshot_with_quiesce","description":"Snapshots the specified VM with quiesce, making a new VM. Snapshot automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write).","result":["VM ref","The reference of the newly created VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be snapshotted"},{"type":"string","name":"new_name","doc":"The name of the snapshotted VM"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VM_SNAPSHOT_WITH_QUIESCE_FAILED","doc":"The quiesced-snapshot operation failed for an unexpected reason"},{"name":"VM_SNAPSHOT_WITH_QUIESCE_TIMEOUT","doc":"The VSS plug-in has timed out"},{"name":"VM_SNAPSHOT_WITH_QUIESCE_PLUGIN_DEOS_NOT_RESPOND","doc":"The VSS plug-in cannot be contacted"},{"name":"VM_SNAPSHOT_WITH_QUIESCE_NOT_SUPPORTED","doc":"The VSS plug-in is not installed on this virtual machine"}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"quebec","description":"Dummy transition"},{"transition":"removed","release":"quebec","description":"VSS support has been removed"}]},"implicit":false},{"name":"snapshot","description":"Snapshots the specified VM, making a new VM. Snapshot automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write).","result":["VM ref","The reference of the newly created VM."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vm","doc":"The VM to be snapshotted"},{"type":"string","name":"new_name","doc":"The name of the snapshotted VM"},{"type":"VDI ref set","name":"ignore_vdis","doc":"A list of VDIs to ignore for the snapshot"}],"errors":[{"name":"VM_BAD_POWER_STATE","doc":"You attempted an operation on a VM that was not in an appropriate power state at the time; for example, you attempted to start a VM that was already running. The parameters returned are the VM's handle, and the expected and actual VM state at the time of the call."},{"name":"SR_FULL","doc":"The SR is full. Requested new size exceeds the maximum size"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."}],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Snapshots the specified VM, making a new VM. Snapshot automatically exploits the capabilities of the underlying storage repository in which the VM's disk images are stored (e.g. Copy on Write)."}]},"implicit":false},{"name":"set_hardware_platform_version","description":"Set the hardware_platform_version field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"int","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"The host virtual hardware platform version the VM can run on"}]},"implicit":true},{"name":"set_suspend_SR","description":"Set the suspend_SR field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The SR on which a suspend image is stored"}]},"implicit":true},{"name":"remove_from_blocked_operations","description":"Remove the given key and its corresponding value from the blocked_operations field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum vm_operations","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List of operations which have been explicitly blocked and an error code"}]},"implicit":true},{"name":"add_to_blocked_operations","description":"Add the given key-value pair to the blocked_operations field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum vm_operations","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List of operations which have been explicitly blocked and an error code"}]},"implicit":true},{"name":"set_blocked_operations","description":"Set the blocked_operations field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(enum vm_operations -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List of operations which have been explicitly blocked and an error code"}]},"implicit":true},{"name":"remove_tags","description":"Remove the given value from the tags field of the given VM. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given VM. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"remove_from_xenstore_data","description":"Remove the given key and its corresponding value from the xenstore_data field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created."}]},"implicit":true},{"name":"add_to_xenstore_data","description":"Add the given key-value pair to the xenstore_data field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created."}]},"implicit":true},{"name":"set_xenstore_data","description":"Set the xenstore_data field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created."}]},"implicit":true},{"name":"set_recommendations","description":"Set the recommendations field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"An XML specification of recommended values and ranges for properties of this VM"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_PCI_bus","description":"Set the PCI_bus field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"PCI bus path for pass-through devices"},{"transition":"deprecated","release":"boston","description":"Field was never used"}]},"implicit":true},{"name":"remove_from_platform","description":"Remove the given key and its corresponding value from the platform field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"platform-specific configuration"}]},"implicit":true},{"name":"add_to_platform","description":"Add the given key-value pair to the platform field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"platform-specific configuration"}]},"implicit":true},{"name":"set_platform","description":"Set the platform field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"platform-specific configuration"}]},"implicit":true},{"name":"remove_from_HVM_boot_params","description":"Remove the given key and its corresponding value from the HVM/boot_params field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"HVM boot params"}]},"implicit":true},{"name":"add_to_HVM_boot_params","description":"Add the given key-value pair to the HVM/boot_params field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"HVM boot params"}]},"implicit":true},{"name":"set_HVM_boot_params","description":"Set the HVM/boot_params field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"HVM boot params"}]},"implicit":true},{"name":"set_PV_legacy_args","description":"Set the PV/legacy_args field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"to make Zurich guests boot"}]},"implicit":true},{"name":"set_PV_bootloader_args","description":"Set the PV/bootloader_args field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"miscellaneous arguments for the bootloader"}]},"implicit":true},{"name":"set_PV_args","description":"Set the PV/args field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"kernel command-line arguments"}]},"implicit":true},{"name":"set_PV_ramdisk","description":"Set the PV/ramdisk field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the initrd"}]},"implicit":true},{"name":"set_PV_kernel","description":"Set the PV/kernel field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the kernel"}]},"implicit":true},{"name":"set_PV_bootloader","description":"Set the PV/bootloader field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"name of or path to bootloader"}]},"implicit":true},{"name":"set_actions_after_reboot","description":"Set the actions/after_reboot field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum on_normal_exit","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has rebooted itself"}]},"implicit":true},{"name":"set_actions_after_shutdown","description":"Set the actions/after_shutdown field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum on_normal_exit","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has shutdown itself"}]},"implicit":true},{"name":"set_actions_after_softreboot","description":"Set the actions/after_softreboot field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"enum on_softreboot_behavior","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.1.0","description":""}]},"implicit":true},{"name":"remove_from_VCPUs_params","description":"Remove the given key and its corresponding value from the VCPUs/params field of the given VM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"configuration parameters for the selected VCPU policy"}]},"implicit":true},{"name":"add_to_VCPUs_params","description":"Add the given key-value pair to the VCPUs/params field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"configuration parameters for the selected VCPU policy"}]},"implicit":true},{"name":"set_VCPUs_params","description":"Set the VCPUs/params field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"configuration parameters for the selected VCPU policy"}]},"implicit":true},{"name":"set_affinity","description":"Set the affinity field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"host ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A host which the VM has some affinity for (or NULL). This is used as a hint to the start call when it decides where to run the VM. Resource constraints may cause the VM to be started elsewhere."}]},"implicit":true},{"name":"set_is_a_template","description":"Set the is_a_template field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this is a template. Template VMs can never be started, they are used only for cloning other VMs"}]},"implicit":true},{"name":"set_user_version","description":"Set the user_version field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"int","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Creators of VMs and templates may store version information here."}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_pending_guidances_full","description":"Get the pending_guidances_full field of the given VM.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":true},{"name":"get_pending_guidances_recommended","description":"Get the pending_guidances_recommended field of the given VM.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":true},{"name":"get_pending_guidances","description":"Get the pending_guidances field of the given VM.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.303.0","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures"}]},"implicit":true},{"name":"get_NVRAM","description":"Get the NVRAM field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"naples","description":""}]},"implicit":true},{"name":"get_domain_type","description":"Get the domain_type field of the given VM.","result":["enum domain_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"jura","description":"Internal-only field; not yet in the public API"},{"transition":"published","release":"kolkata","description":"The field is now valid"}]},"implicit":true},{"name":"get_reference_label","description":"Get the reference_label field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Textual reference to the template used to create a VM. This can be used by clients in need of an immutable reference to the template since the latter's uuid and name_label may change, for example, after a package installation or upgrade."}]},"implicit":true},{"name":"get_requires_reboot","description":"Get the requires_reboot field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_has_vendor_device","description":"Get the has_vendor_device field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_hardware_platform_version","description":"Get the hardware_platform_version field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"The host virtual hardware platform version the VM can run on"}]},"implicit":true},{"name":"get_generation_id","description":"Get the generation_id field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"Generation ID of the VM"}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The number of times this VM has been recovered"}]},"implicit":true},{"name":"get_suspend_SR","description":"Get the suspend_SR field of the given VM.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The SR on which a suspend image is stored"}]},"implicit":true},{"name":"get_attached_PCIs","description":"Get the attached_PCIs field of the given VM.","result":["PCI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_VGPUs","description":"Get the VGPUs field of the given VM.","result":["VGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_order","description":"Get the order field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The point in the startup or shutdown sequence at which this VM will be started"}]},"implicit":true},{"name":"get_shutdown_delay","description":"Get the shutdown_delay field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The delay to wait before proceeding to the next order in the shutdown sequence (seconds)"}]},"implicit":true},{"name":"get_start_delay","description":"Get the start_delay field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The delay to wait before proceeding to the next order in the startup sequence (seconds)"}]},"implicit":true},{"name":"get_appliance","description":"Get the appliance field of the given VM.","result":["VM_appliance ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the appliance to which this VM belongs"}]},"implicit":true},{"name":"get_is_vmss_snapshot","description":"Get the is_vmss_snapshot field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"true if this snapshot was created by the snapshot schedule"}]},"implicit":true},{"name":"get_snapshot_schedule","description":"Get the snapshot_schedule field of the given VM.","result":["VMSS ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Ref pointing to a snapshot schedule for this VM"}]},"implicit":true},{"name":"get_is_snapshot_from_vmpp","description":"Get the is_snapshot_from_vmpp field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_protection_policy","description":"Get the protection_policy field of the given VM.","result":["VMPP ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_bios_strings","description":"Get the bios_strings field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"BIOS strings"}]},"implicit":true},{"name":"get_children","description":"Get the children field of the given VM.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"List pointing to all the children of this VM"}]},"implicit":true},{"name":"get_parent","description":"Get the parent field of the given VM.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Ref pointing to the parent of this VM"}]},"implicit":true},{"name":"get_snapshot_metadata","description":"Get the snapshot_metadata field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Encoded information about the VM's metadata this is a snapshot of"}]},"implicit":true},{"name":"get_snapshot_info","description":"Get the snapshot_info field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Human-readable information concerning this snapshot"}]},"implicit":true},{"name":"get_blocked_operations","description":"Get the blocked_operations field of the given VM.","result":["(enum vm_operations -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List of operations which have been explicitly blocked and an error code"}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given VM.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_blobs","description":"Get the blobs field of the given VM.","result":["(string -> blob ref) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this VM"}]},"implicit":true},{"name":"get_transportable_snapshot_id","description":"Get the transportable_snapshot_id field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Transportable ID of the snapshot VM"}]},"implicit":true},{"name":"get_snapshot_time","description":"Get the snapshot_time field of the given VM.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Date/time when this snapshot was created."}]},"implicit":true},{"name":"get_snapshots","description":"Get the snapshots field of the given VM.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the VM snapshots."}]},"implicit":true},{"name":"get_snapshot_of","description":"Get the snapshot_of field of the given VM.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the VM this snapshot is of."}]},"implicit":true},{"name":"get_is_a_snapshot","description":"Get the is_a_snapshot field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if this is a snapshot. Snapshotted VMs can never be started, they are used only for cloning other VMs"}]},"implicit":true},{"name":"get_ha_restart_priority","description":"Get the ha_restart_priority field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"has possible values: \"best-effort\" meaning \"try to restart this VM if possible but don't consider the Pool to be overcommitted if this is not possible\"; \"restart\" meaning \"this VM should be restarted\"; \"\" meaning \"do not try to restart this VM\""}]},"implicit":true},{"name":"get_ha_always_run","description":"Get the ha_always_run field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"orlando","description":"if true then the system will attempt to keep the VM running as much as possible."},{"transition":"deprecated","release":"boston","description":""}]},"implicit":true},{"name":"get_xenstore_data","description":"Get the xenstore_data field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain//vm-data) after the VM is created."}]},"implicit":true},{"name":"get_recommendations","description":"Get the recommendations field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"An XML specification of recommended values and ranges for properties of this VM"}]},"implicit":true},{"name":"get_last_booted_record","description":"Get the last_booted_record field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Marshalled value containing VM record at time of last boot, updated dynamically to reflect the runtime state of the domain"},{"transition":"changed","release":"1.257.0","description":"Become static to allow Suspended VM creation"}]},"implicit":true},{"name":"get_guest_metrics","description":"Get the guest_metrics field of the given VM.","result":["VM_guest_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with the running guest"}]},"implicit":true},{"name":"get_metrics","description":"Get the metrics field of the given VM.","result":["VM_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this VM"}]},"implicit":true},{"name":"get_is_control_domain","description":"Get the is_control_domain field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this is a control domain (domain 0 or a driver domain)"}]},"implicit":true},{"name":"get_last_boot_CPU_flags","description":"Get the last_boot_CPU_flags field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"describes the CPU flags on which the VM was last booted"}]},"implicit":true},{"name":"get_domarch","description":"Get the domarch field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Domain architecture (if available, null string otherwise)"}]},"implicit":true},{"name":"get_domid","description":"Get the domid field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"domain ID (if available, -1 otherwise)"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_PCI_bus","description":"Get the PCI_bus field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"PCI bus path for pass-through devices"},{"transition":"deprecated","release":"boston","description":"Field was never used"}]},"implicit":true},{"name":"get_platform","description":"Get the platform field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"platform-specific configuration"}]},"implicit":true},{"name":"get_HVM_shadow_multiplier","description":"Get the HVM/shadow_multiplier field of the given VM.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"multiplier applied to the amount of shadow that will be made available to the guest"}]},"implicit":true},{"name":"get_HVM_boot_params","description":"Get the HVM/boot_params field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"HVM boot params"}]},"implicit":true},{"name":"get_HVM_boot_policy","description":"Get the HVM/boot_policy field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"kolkata","description":"Replaced by VM.domain_type"}]},"implicit":true},{"name":"get_PV_legacy_args","description":"Get the PV/legacy_args field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"to make Zurich guests boot"}]},"implicit":true},{"name":"get_PV_bootloader_args","description":"Get the PV/bootloader_args field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"miscellaneous arguments for the bootloader"}]},"implicit":true},{"name":"get_PV_args","description":"Get the PV/args field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"kernel command-line arguments"}]},"implicit":true},{"name":"get_PV_ramdisk","description":"Get the PV/ramdisk field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the initrd"}]},"implicit":true},{"name":"get_PV_kernel","description":"Get the PV/kernel field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"path to the kernel"}]},"implicit":true},{"name":"get_PV_bootloader","description":"Get the PV/bootloader field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"name of or path to bootloader"}]},"implicit":true},{"name":"get_VTPMs","description":"Get the VTPMs field of the given VM.","result":["VTPM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual TPMs"}]},"implicit":true},{"name":"get_crash_dumps","description":"Get the crash_dumps field of the given VM.","result":["crashdump ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"crash dumps associated with this VM"}]},"implicit":true},{"name":"get_VUSBs","description":"Get the VUSBs field of the given VM.","result":["VUSB ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"vitual usb devices"}]},"implicit":true},{"name":"get_VBDs","description":"Get the VBDs field of the given VM.","result":["VBD ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual block devices"}]},"implicit":true},{"name":"get_VIFs","description":"Get the VIFs field of the given VM.","result":["VIF ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network interfaces"}]},"implicit":true},{"name":"get_consoles","description":"Get the consoles field of the given VM.","result":["console ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual console devices"}]},"implicit":true},{"name":"get_actions_after_crash","description":"Get the actions/after_crash field of the given VM.","result":["enum on_crash_behaviour","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take if the guest crashes"}]},"implicit":true},{"name":"get_actions_after_reboot","description":"Get the actions/after_reboot field of the given VM.","result":["enum on_normal_exit","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has rebooted itself"}]},"implicit":true},{"name":"get_actions_after_shutdown","description":"Get the actions/after_shutdown field of the given VM.","result":["enum on_normal_exit","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"action to take after the guest has shutdown itself"}]},"implicit":true},{"name":"get_actions_after_softreboot","description":"Get the actions/after_softreboot field of the given VM.","result":["enum on_softreboot_behavior","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.1.0","description":""}]},"implicit":true},{"name":"get_VCPUs_at_startup","description":"Get the VCPUs/at_startup field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Boot number of VCPUs"}]},"implicit":true},{"name":"get_VCPUs_max","description":"Get the VCPUs/max field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Max number of VCPUs"}]},"implicit":true},{"name":"get_VCPUs_params","description":"Get the VCPUs/params field of the given VM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"configuration parameters for the selected VCPU policy"}]},"implicit":true},{"name":"get_memory_static_min","description":"Get the memory/static_min field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Statically-set (i.e. absolute) mininum (bytes). The value of this field indicates the least amount of memory this VM can boot with without crashing."}]},"implicit":true},{"name":"get_memory_dynamic_min","description":"Get the memory/dynamic_min field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Dynamic minimum (bytes)"}]},"implicit":true},{"name":"get_memory_dynamic_max","description":"Get the memory/dynamic_max field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Dynamic maximum (bytes)"}]},"implicit":true},{"name":"get_memory_static_max","description":"Get the memory/static_max field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Statically-set (i.e. absolute) maximum (bytes). The value of this field at VM start time acts as a hard limit of the amount of memory a guest can use. New values only take effect on reboot."}]},"implicit":true},{"name":"get_memory_target","description":"Get the memory/target field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Dynamically-set memory target (bytes). The value of this field indicates the current target for memory available to this VM."},{"transition":"deprecated","release":"midnight-ride","description":""}]},"implicit":true},{"name":"get_memory_overhead","description":"Get the memory/overhead field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Virtualization memory overhead (bytes)."}]},"implicit":true},{"name":"get_affinity","description":"Get the affinity field of the given VM.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A host which the VM has some affinity for (or NULL). This is used as a hint to the start call when it decides where to run the VM. Resource constraints may cause the VM to be started elsewhere."}]},"implicit":true},{"name":"get_scheduled_to_be_resident_on","description":"Get the scheduled_to_be_resident_on field of the given VM.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host on which the VM is due to be started/resumed/migrated. This acts as a memory reservation indicator"}]},"implicit":true},{"name":"get_resident_on","description":"Get the resident_on field of the given VM.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host the VM is currently resident on"}]},"implicit":true},{"name":"get_suspend_VDI","description":"Get the suspend_VDI field of the given VM.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Become static to allow Suspended VM creation"}]},"implicit":true},{"name":"get_is_default_template","description":"Get the is_default_template field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Identifies default templates"}]},"implicit":true},{"name":"get_is_a_template","description":"Get the is_a_template field of the given VM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this is a template. Template VMs can never be started, they are used only for cloning other VMs"}]},"implicit":true},{"name":"get_user_version","description":"Get the user_version field of the given VM.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Creators of VMs and templates may store version information here."}]},"implicit":true},{"name":"get_power_state","description":"Get the power_state field of the given VM.","result":["enum vm_power_state","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow Suspended VM creation"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VM.","result":["(string -> enum vm_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VM.","result":["enum vm_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the VM instances with the given label.","result":["VM ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VM. The VM is completely removed from the system. This function can only be called when the VM is in the Halted State.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"create","description":"NOT RECOMMENDED! VM.clone or VM.copy (or VM.import) is a better choice in almost all situations. The standard way to obtain a new VM is to call VM.clone on a template VM, then call VM.provision on the new clone. Caution: if VM.create is used and then the new VM is attached to a virtual disc that has an operating system already installed, then there is no guarantee that the operating system will boot and run. Any software that calls VM.create on a future version of this API may fail or give unexpected results. For example this could happen if an additional parameter were added to VM.create. VM.create is intended only for use in the automatic creation of the system VM templates. It creates a new VM instance, and returns its handle.\nThe constructor args are: name_label, name_description, power_state, user_version*, is_a_template*, suspend_VDI, affinity*, memory_target, memory_static_max*, memory_dynamic_max*, memory_dynamic_min*, memory_static_min*, VCPUs_params*, VCPUs_max*, VCPUs_at_startup*, actions_after_softreboot, actions_after_shutdown*, actions_after_reboot*, actions_after_crash*, PV_bootloader*, PV_kernel*, PV_ramdisk*, PV_args*, PV_bootloader_args*, PV_legacy_args*, HVM_boot_policy*, HVM_boot_params*, HVM_shadow_multiplier, platform*, PCI_bus*, other_config*, last_boot_CPU_flags, last_booted_record, recommendations*, xenstore_data, ha_always_run, ha_restart_priority, tags, blocked_operations, protection_policy, is_snapshot_from_vmpp, snapshot_schedule, is_vmss_snapshot, appliance, start_delay, shutdown_delay, order, suspend_SR, version, generation_id, hardware_platform_version, has_vendor_device, reference_label, domain_type, NVRAM (* = non-optional).","result":["VM ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VM instance with the specified UUID.","result":["VM ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VM.","result":["VM record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"implicit":true}],"enums":[{"name":"vm_power_state","values":[{"name":"Halted","doc":"VM is offline and not using any resources"},{"name":"Paused","doc":"All resources have been allocated but the VM itself is paused and its vCPUs are not running"},{"name":"Running","doc":"Running"},{"name":"Suspended","doc":"VM state has been saved to disk and it is nolonger running. Note that disks remain in-use while the VM is suspended."}]},{"name":"update_guidances","values":[{"name":"reboot_host","doc":"Indicates the updated host should reboot as soon as possible"},{"name":"reboot_host_on_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more livepatch(es) failed to be applied."},{"name":"reboot_host_on_kernel_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more kernel livepatch(es) failed to be applied."},{"name":"reboot_host_on_xen_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more xen livepatch(es) failed to be applied."},{"name":"restart_toolstack","doc":"Indicates the Toolstack running on the updated host should restart as soon as possible"},{"name":"restart_device_model","doc":"Indicates the device model of a running VM should restart as soon as possible"},{"name":"restart_vm","doc":"Indicates the VM should restart as soon as possible"}]},{"name":"on_softreboot_behavior","values":[{"name":"soft_reboot","doc":"perform soft-reboot"},{"name":"destroy","doc":"destroy the VM state"},{"name":"restart","doc":"restart the VM"},{"name":"preserve","doc":"leave the VM paused"}]},{"name":"on_normal_exit","values":[{"name":"destroy","doc":"destroy the VM state"},{"name":"restart","doc":"restart the VM"}]},{"name":"vm_operations","values":[{"name":"snapshot","doc":"refers to the operation \"snapshot\""},{"name":"clone","doc":"refers to the operation \"clone\""},{"name":"copy","doc":"refers to the operation \"copy\""},{"name":"create_template","doc":"refers to the operation \"create_template\""},{"name":"revert","doc":"refers to the operation \"revert\""},{"name":"checkpoint","doc":"refers to the operation \"checkpoint\""},{"name":"snapshot_with_quiesce","doc":"refers to the operation \"snapshot_with_quiesce\""},{"name":"provision","doc":"refers to the operation \"provision\""},{"name":"start","doc":"refers to the operation \"start\""},{"name":"start_on","doc":"refers to the operation \"start_on\""},{"name":"pause","doc":"refers to the operation \"pause\""},{"name":"unpause","doc":"refers to the operation \"unpause\""},{"name":"clean_shutdown","doc":"refers to the operation \"clean_shutdown\""},{"name":"clean_reboot","doc":"refers to the operation \"clean_reboot\""},{"name":"hard_shutdown","doc":"refers to the operation \"hard_shutdown\""},{"name":"power_state_reset","doc":"refers to the operation \"power_state_reset\""},{"name":"hard_reboot","doc":"refers to the operation \"hard_reboot\""},{"name":"suspend","doc":"refers to the operation \"suspend\""},{"name":"csvm","doc":"refers to the operation \"csvm\""},{"name":"resume","doc":"refers to the operation \"resume\""},{"name":"resume_on","doc":"refers to the operation \"resume_on\""},{"name":"pool_migrate","doc":"refers to the operation \"pool_migrate\""},{"name":"migrate_send","doc":"refers to the operation \"migrate_send\""},{"name":"get_boot_record","doc":"refers to the operation \"get_boot_record\""},{"name":"send_sysrq","doc":"refers to the operation \"send_sysrq\""},{"name":"send_trigger","doc":"refers to the operation \"send_trigger\""},{"name":"query_services","doc":"refers to the operation \"query_services\""},{"name":"shutdown","doc":"refers to the operation \"shutdown\""},{"name":"call_plugin","doc":"refers to the operation \"call_plugin\""},{"name":"changing_memory_live","doc":"Changing the memory settings"},{"name":"awaiting_memory_live","doc":"Waiting for the memory settings to change"},{"name":"changing_dynamic_range","doc":"Changing the memory dynamic range"},{"name":"changing_static_range","doc":"Changing the memory static range"},{"name":"changing_memory_limits","doc":"Changing the memory limits"},{"name":"changing_shadow_memory","doc":"Changing the shadow memory for a halted VM."},{"name":"changing_shadow_memory_live","doc":"Changing the shadow memory for a running VM."},{"name":"changing_VCPUs","doc":"Changing VCPU settings for a halted VM."},{"name":"changing_VCPUs_live","doc":"Changing VCPU settings for a running VM."},{"name":"changing_NVRAM","doc":"Changing NVRAM for a halted VM."},{"name":"assert_operation_valid","doc":""},{"name":"data_source_op","doc":"Add, remove, query or list data sources"},{"name":"update_allowed_operations","doc":""},{"name":"make_into_template","doc":"Turning this VM into a template"},{"name":"import","doc":"importing a VM from a network stream"},{"name":"export","doc":"exporting a VM to a network stream"},{"name":"metadata_export","doc":"exporting VM metadata to a network stream"},{"name":"reverting","doc":"Reverting the VM to a previous snapshotted state"},{"name":"destroy","doc":"refers to the act of uninstalling the VM"},{"name":"create_vtpm","doc":"Creating and adding a VTPM to this VM"}]},{"name":"on_crash_behaviour","values":[{"name":"destroy","doc":"destroy the VM state"},{"name":"coredump_and_destroy","doc":"record a coredump and then destroy the VM state"},{"name":"restart","doc":"restart the VM"},{"name":"coredump_and_restart","doc":"record a coredump and then restart the VM"},{"name":"preserve","doc":"leave the crashed VM paused"},{"name":"rename_restart","doc":"rename the crashed VM and start a new copy"}]},{"name":"domain_type","values":[{"name":"hvm","doc":"HVM; Fully Virtualised"},{"name":"pv","doc":"PV: Paravirtualised"},{"name":"pv_in_pvh","doc":"PV inside a PVH container"},{"name":"pvh","doc":"PVH"},{"name":"unspecified","doc":"Not specified or unknown domain type"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"possibility to create a VM in suspended mode with a suspend_VDI set"}]},"tag":""},{"name":"VM_metrics","description":"The metrics associated with a VM","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"memory_actual","description":"Guest's actual memory (bytes)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Guest's actual memory (bytes)"}]}},{"name":"VCPUs_number","description":"Current number of VCPUs","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Current number of VCPUs"}]}},{"name":"VCPUs_utilisation","description":"Utilisation for all of guest's current VCPUs","type":"(int -> float) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"default":"{}"},{"name":"VCPUs_CPU","description":"VCPU to PCPU map","type":"(int -> int) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VCPU to PCPU map"}]}},{"name":"VCPUs_params","description":"The live equivalent to VM.VCPUs_params","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The live equivalent to VM.VCPUs_params"}]}},{"name":"VCPUs_flags","description":"CPU flags (blocked,online,running)","type":"(int -> string set) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"CPU flags (blocked,online,running)"}]}},{"name":"state","description":"The state of the guest, eg blocked, dying etc","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The state of the guest, eg blocked, dying etc"}]}},{"name":"start_time","description":"Time at which this VM was last booted","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this VM was last booted"}]}},{"name":"install_time","description":"Time at which the VM was installed","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which the VM was installed"}]}},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"},{"name":"hvm","description":"hardware virtual machine","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"hardware virtual machine"}]},"default":"false"},{"name":"nested_virt","description":"VM supports nested virtualisation","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"VM supports nested virtualisation"}]},"default":"false"},{"name":"nomigrate","description":"VM is immobile and can't migrate between hosts","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"VM is immobile and can't migrate between hosts"}]},"default":"false"},{"name":"current_domain_type","description":"The current domain type of the VM (for running,suspended, or paused VMs). The last-known domain type for halted VMs.","type":"enum domain_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"jura","description":"Not yet implemented (for future use)"},{"transition":"published","release":"kolkata","description":"This field now contains valid data"}]},"default":"unspecified"}],"messages":[{"name":"get_all_records","description":"Return a map of VM_metrics references to VM_metrics records for all VM_metrics instances known to the system.","result":["(VM_metrics ref -> VM_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a VM"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VM_metrics instances known to the system.","result":["VM_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a VM"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VM_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VM_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VM_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_current_domain_type","description":"Get the current_domain_type field of the given VM_metrics.","result":["enum domain_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"jura","description":"Not yet implemented (for future use)"},{"transition":"published","release":"kolkata","description":"This field now contains valid data"}]},"implicit":true},{"name":"get_nomigrate","description":"Get the nomigrate field of the given VM_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"VM is immobile and can't migrate between hosts"}]},"implicit":true},{"name":"get_nested_virt","description":"Get the nested_virt field of the given VM_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"VM supports nested virtualisation"}]},"implicit":true},{"name":"get_hvm","description":"Get the hvm field of the given VM_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"hardware virtual machine"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VM_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given VM_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]},"implicit":true},{"name":"get_install_time","description":"Get the install_time field of the given VM_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which the VM was installed"}]},"implicit":true},{"name":"get_start_time","description":"Get the start_time field of the given VM_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this VM was last booted"}]},"implicit":true},{"name":"get_state","description":"Get the state field of the given VM_metrics.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The state of the guest, eg blocked, dying etc"}]},"implicit":true},{"name":"get_VCPUs_flags","description":"Get the VCPUs/flags field of the given VM_metrics.","result":["(int -> string set) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"CPU flags (blocked,online,running)"}]},"implicit":true},{"name":"get_VCPUs_params","description":"Get the VCPUs/params field of the given VM_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The live equivalent to VM.VCPUs_params"}]},"implicit":true},{"name":"get_VCPUs_CPU","description":"Get the VCPUs/CPU field of the given VM_metrics.","result":["(int -> int) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VCPU to PCPU map"}]},"implicit":true},{"name":"get_VCPUs_utilisation","description":"Get the VCPUs/utilisation field of the given VM_metrics.","result":["(int -> float) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"get_VCPUs_number","description":"Get the VCPUs/number field of the given VM_metrics.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Current number of VCPUs"}]},"implicit":true},{"name":"get_memory_actual","description":"Get the memory/actual field of the given VM_metrics.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Guest's actual memory (bytes)"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VM_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VM_metrics instance with the specified UUID.","result":["VM_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a VM"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VM_metrics.","result":["VM_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a VM"}]},"implicit":true}],"enums":[{"name":"domain_type","values":[{"name":"hvm","doc":"HVM; Fully Virtualised"},{"name":"pv","doc":"PV: Paravirtualised"},{"name":"pv_in_pvh","doc":"PV inside a PVH container"},{"name":"pvh","doc":"PVH"},{"name":"unspecified","doc":"Not specified or unknown domain type"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a VM"}]},"tag":""},{"name":"VM_guest_metrics","description":"The metrics reported by the guest (as opposed to inferred from outside)","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"os_version","description":"version of the OS","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version of the OS"}]}},{"name":"PV_drivers_version","description":"version of the PV drivers","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version of the PV drivers"}]}},{"name":"PV_drivers_up_to_date","description":"Logically equivalent to PV_drivers_detected","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"true if the PV drivers appear to be up to date"},{"transition":"deprecated","release":"dundee","description":"Deprecated in favour of PV_drivers_detected, and redefined in terms of it"}]}},{"name":"memory","description":"This field exists but has no data. Use the memory and memory_internal_free RRD data-sources instead.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"free/used/total"},{"transition":"deprecated","release":"george","description":"Dummy transition"},{"transition":"removed","release":"george","description":"Disabled in favour of the RRDs, to improve scalability"}]},"default":"{}"},{"name":"disks","description":"This field exists but has no data.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"Disk configuration/free space"},{"transition":"deprecated","release":"orlando","description":"Dummy transition"},{"transition":"removed","release":"orlando","description":"No data"}]},"default":"{}"},{"name":"networks","description":"network configuration","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"network configuration"}]}},{"name":"other","description":"anything else","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"anything else"}]}},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"},{"name":"live","description":"True if the guest is sending heartbeat messages via the guest agent","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"True if the guest is sending heartbeat messages via the guest agent"}]},"default":"false"},{"name":"can_use_hotplug_vbd","description":"The guest's statement of whether it supports VBD hotplug, i.e. whether it is capable of responding immediately to instantiation of a new VBD by bringing online a new PV block device. If the guest states that it is not capable, then the VBD plug and unplug operations will not be allowed while the guest is running.","type":"enum tristate_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"To be used where relevant and available instead of checking PV driver version."}]},"default":"unspecified"},{"name":"can_use_hotplug_vif","description":"The guest's statement of whether it supports VIF hotplug, i.e. whether it is capable of responding immediately to instantiation of a new VIF by bringing online a new PV network device. If the guest states that it is not capable, then the VIF plug and unplug operations will not be allowed while the guest is running.","type":"enum tristate_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"To be used where relevant and available instead of checking PV driver version."}]},"default":"unspecified"},{"name":"PV_drivers_detected","description":"At least one of the guest's devices has successfully connected to the backend.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of VM_guest_metrics references to VM_guest_metrics records for all VM_guest_metrics instances known to the system.","result":["(VM_guest_metrics ref -> VM_guest_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics reported by the guest (as opposed to inferred from outside)"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VM_guest_metrics instances known to the system.","result":["VM_guest_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics reported by the guest (as opposed to inferred from outside)"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VM_guest_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VM_guest_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VM_guest_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_PV_drivers_detected","description":"Get the PV_drivers_detected field of the given VM_guest_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_can_use_hotplug_vif","description":"Get the can_use_hotplug_vif field of the given VM_guest_metrics.","result":["enum tristate_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"To be used where relevant and available instead of checking PV driver version."}]},"implicit":true},{"name":"get_can_use_hotplug_vbd","description":"Get the can_use_hotplug_vbd field of the given VM_guest_metrics.","result":["enum tristate_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"To be used where relevant and available instead of checking PV driver version."}]},"implicit":true},{"name":"get_live","description":"Get the live field of the given VM_guest_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"True if the guest is sending heartbeat messages via the guest agent"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given VM_guest_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]},"implicit":true},{"name":"get_other","description":"Get the other field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"anything else"}]},"implicit":true},{"name":"get_networks","description":"Get the networks field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"network configuration"}]},"implicit":true},{"name":"get_disks","description":"Get the disks field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"Disk configuration/free space"},{"transition":"deprecated","release":"orlando","description":"Dummy transition"},{"transition":"removed","release":"orlando","description":"No data"}]},"implicit":true},{"name":"get_memory","description":"Get the memory field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"free/used/total"},{"transition":"deprecated","release":"george","description":"Dummy transition"},{"transition":"removed","release":"george","description":"Disabled in favour of the RRDs, to improve scalability"}]},"implicit":true},{"name":"get_PV_drivers_up_to_date","description":"Get the PV_drivers_up_to_date field of the given VM_guest_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"true if the PV drivers appear to be up to date"},{"transition":"deprecated","release":"dundee","description":"Deprecated in favour of PV_drivers_detected, and redefined in terms of it"}]},"implicit":true},{"name":"get_PV_drivers_version","description":"Get the PV_drivers_version field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version of the PV drivers"}]},"implicit":true},{"name":"get_os_version","description":"Get the os_version field of the given VM_guest_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version of the OS"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VM_guest_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VM_guest_metrics instance with the specified UUID.","result":["VM_guest_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics reported by the guest (as opposed to inferred from outside)"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VM_guest_metrics.","result":["VM_guest_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_guest_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics reported by the guest (as opposed to inferred from outside)"}]},"implicit":true}],"enums":[{"name":"tristate_type","values":[{"name":"yes","doc":"Known to be true"},{"name":"no","doc":"Known to be false"},{"name":"unspecified","doc":"Unknown or unspecified"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics reported by the guest (as opposed to inferred from outside)"}]},"tag":""},{"name":"VMPP","description":"VM Protection Policy","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"is_policy_enabled","description":"enable or disable this policy","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"true"},{"name":"backup_type","description":"type of the backup sub-policy","type":"enum vmpp_backup_type","qualifier":"RW","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"snapshot"},{"name":"backup_retention_value","description":"maximum number of backups that should be stored at any time","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"7"},{"name":"backup_frequency","description":"frequency of the backup schedule","type":"enum vmpp_backup_frequency","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"daily"},{"name":"backup_schedule","description":"schedule of the backup containing 'hour', 'min', 'days'. Date/time-related information is in Local Timezone","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"{}"},{"name":"is_backup_running","description":"true if this protection policy's backup is running","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]}},{"name":"backup_last_run_time","description":"time of the last backup","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"19700101T00:00:00Z"},{"name":"archive_target_type","description":"type of the archive target config","type":"enum vmpp_archive_target_type","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"none"},{"name":"archive_target_config","description":"configuration for the archive, including its 'location', 'username', 'password'","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"{}"},{"name":"archive_frequency","description":"frequency of the archive schedule","type":"enum vmpp_archive_frequency","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"never"},{"name":"archive_schedule","description":"schedule of the archive containing 'hour', 'min', 'days'. Date/time-related information is in Local Timezone","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"{}"},{"name":"is_archive_running","description":"true if this protection policy's archive is running","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]}},{"name":"archive_last_run_time","description":"time of the last archive","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"19700101T00:00:00Z"},{"name":"VMs","description":"all VMs attached to this protection policy","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]}},{"name":"is_alarm_enabled","description":"true if alarm is enabled for this policy","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"false"},{"name":"alarm_config","description":"configuration for the alarm","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"{}"},{"name":"recent_alerts","description":"recent alerts","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VMPP references to VMPP records for all VMPPs known to the system.","result":["(VMPP ref -> VMPP record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VMPPs known to the system.","result":["VMPP ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"set_archive_last_run_time","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"datetime","name":"value","doc":"the value to set"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_backup_last_run_time","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"datetime","name":"value","doc":"the value to set"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"remove_from_alarm_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"remove_from_archive_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"remove_from_archive_target_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"remove_from_backup_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"add_to_alarm_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to add"},{"type":"string","name":"value","doc":"the value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"add_to_archive_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to add"},{"type":"string","name":"value","doc":"the value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"add_to_archive_target_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to add"},{"type":"string","name":"value","doc":"the value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"add_to_backup_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"string","name":"key","doc":"the key to add"},{"type":"string","name":"value","doc":"the value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_alarm_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"(string -> string) map","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_is_alarm_enabled","description":"Set the value of the is_alarm_enabled field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"bool","name":"value","doc":"true if alarm is enabled for this policy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_archive_target_config","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"(string -> string) map","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_archive_target_type","description":"Set the value of the archive_target_config_type field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"enum vmpp_archive_target_type","name":"value","doc":"the archive target config type"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_archive_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"(string -> string) map","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_archive_frequency","description":"Set the value of the archive_frequency field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"enum vmpp_archive_frequency","name":"value","doc":"the archive frequency"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_backup_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"(string -> string) map","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_backup_frequency","description":"Set the value of the backup_frequency field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"enum vmpp_backup_frequency","name":"value","doc":"the backup frequency"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_backup_retention_value","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"The protection policy"},{"type":"int","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"get_alerts","description":"This call fetches a history of alerts for a given protection policy","result":["string set","A list of alerts encoded in xml"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"vmpp","doc":"The protection policy"},{"type":"int","name":"hours_from_now","doc":"how many hours in the past the oldest record to fetch is"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"archive_now","description":"This call archives the snapshot provided as a parameter","result":["string","An XMLRPC result"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"snapshot","doc":"The snapshot to archive"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"protect_now","description":"This call executes the protection policy immediately","result":["string","An XMLRPC result"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"vmpp","doc":"The protection policy to execute"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":false},{"name":"set_backup_type","description":"Set the backup_type field of the given VMPP.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"},{"type":"enum vmpp_backup_type","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"set_is_policy_enabled","description":"Set the is_policy_enabled field of the given VMPP.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given VMPP.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given VMPP.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_recent_alerts","description":"Get the recent_alerts field of the given VMPP.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_alarm_config","description":"Get the alarm_config field of the given VMPP.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_is_alarm_enabled","description":"Get the is_alarm_enabled field of the given VMPP.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_VMs","description":"Get the VMs field of the given VMPP.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_archive_last_run_time","description":"Get the archive_last_run_time field of the given VMPP.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_is_archive_running","description":"Get the is_archive_running field of the given VMPP.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_archive_schedule","description":"Get the archive_schedule field of the given VMPP.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_archive_frequency","description":"Get the archive_frequency field of the given VMPP.","result":["enum vmpp_archive_frequency","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_archive_target_config","description":"Get the archive_target_config field of the given VMPP.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_archive_target_type","description":"Get the archive_target_type field of the given VMPP.","result":["enum vmpp_archive_target_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_backup_last_run_time","description":"Get the backup_last_run_time field of the given VMPP.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_is_backup_running","description":"Get the is_backup_running field of the given VMPP.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_backup_schedule","description":"Get the backup_schedule field of the given VMPP.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_backup_frequency","description":"Get the backup_frequency field of the given VMPP.","result":["enum vmpp_backup_frequency","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_backup_retention_value","description":"Get the backup_retention_value field of the given VMPP.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_backup_type","description":"Get the backup_type field of the given VMPP.","result":["enum vmpp_backup_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_is_policy_enabled","description":"Get the is_policy_enabled field of the given VMPP.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given VMPP.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given VMPP.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VMPP.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the VMPP instances with the given label.","result":["VMPP ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VMPP instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"create","description":"Create a new VMPP instance, and return its handle.\nThe constructor args are: name_label, name_description, is_policy_enabled, backup_type, backup_retention_value, backup_frequency, backup_schedule, archive_target_type, archive_target_config, archive_frequency, archive_schedule, is_alarm_enabled, alarm_config (* = non-optional).","result":["VMPP ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VMPP instance with the specified UUID.","result":["VMPP ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VMPP.","result":["VMPP record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMPP ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"implicit":true}],"enums":[{"name":"vmpp_backup_type","values":[{"name":"snapshot","doc":"The backup is a snapshot"},{"name":"checkpoint","doc":"The backup is a checkpoint"}]},{"name":"vmpp_backup_frequency","values":[{"name":"hourly","doc":"Hourly backups"},{"name":"daily","doc":"Daily backups"},{"name":"weekly","doc":"Weekly backups"}]},{"name":"vmpp_archive_frequency","values":[{"name":"never","doc":"Never archive"},{"name":"always_after_backup","doc":"Archive after backup"},{"name":"daily","doc":"Daily archives"},{"name":"weekly","doc":"Weekly backups"}]},{"name":"vmpp_archive_target_type","values":[{"name":"none","doc":"No target config"},{"name":"cifs","doc":"CIFS target config"},{"name":"nfs","doc":"NFS target config"}]}],"lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"The VMPR feature was removed"}]},"tag":""},{"name":"VMSS","description":"VM Snapshot Schedule","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"enabled","description":"enable or disable this snapshot schedule","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"enable or disable this snapshot schedule"}]},"default":"true"},{"name":"type","description":"type of the snapshot schedule","type":"enum vmss_type","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the snapshot schedule"}]}},{"name":"retained_snapshots","description":"maximum number of snapshots that should be stored at any time","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"maximum number of snapshots that should be stored at any time"}]},"default":"7"},{"name":"frequency","description":"frequency of taking snapshot from snapshot schedule","type":"enum vmss_frequency","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"frequency of taking snapshot from snapshot schedule"}]}},{"name":"schedule","description":"schedule of the snapshot containing 'hour', 'min', 'days'. Date/time-related information is in Local Timezone","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"schedule of the snapshot containing 'hour', 'min', 'days'. Date/time-related information is in Local Timezone"}]},"default":"{}"},{"name":"last_run_time","description":"time of the last snapshot","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"time of the last snapshot"}]},"default":"19700101T00:00:00Z"},{"name":"VMs","description":"all VMs attached to this snapshot schedule","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all VMs attached to this snapshot schedule"}]}}],"messages":[{"name":"get_all_records","description":"Return a map of VMSS references to VMSS records for all VMSSs known to the system.","result":["(VMSS ref -> VMSS record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VMSSs known to the system.","result":["VMSS ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"set_type","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"enum vmss_type","name":"value","doc":"the snapshot schedule type"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"set_last_run_time","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"datetime","name":"value","doc":"the value to set"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"remove_from_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"string","name":"key","doc":"the key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"add_to_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"string","name":"key","doc":"the key to add"},{"type":"string","name":"value","doc":"the value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"set_schedule","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"(string -> string) map","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"set_frequency","description":"Set the value of the frequency field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The snapshot schedule"},{"type":"enum vmss_frequency","name":"value","doc":"the snapshot schedule frequency"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"Set the value of the frequency field"}]},"implicit":false},{"name":"set_retained_snapshots","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"The schedule snapshot"},{"type":"int","name":"value","doc":"the value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"snapshot_now","description":"This call executes the snapshot schedule immediately","result":["string","An XMLRPC result"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"vmss","doc":"Snapshot Schedule to execute"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"This call executes the snapshot schedule immediately"}]},"implicit":false},{"name":"set_enabled","description":"Set the enabled field of the given VMSS.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"enable or disable this snapshot schedule"}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given VMSS.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given VMSS.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_VMs","description":"Get the VMs field of the given VMSS.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all VMs attached to this snapshot schedule"}]},"implicit":true},{"name":"get_last_run_time","description":"Get the last_run_time field of the given VMSS.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"time of the last snapshot"}]},"implicit":true},{"name":"get_schedule","description":"Get the schedule field of the given VMSS.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"schedule of the snapshot containing 'hour', 'min', 'days'. Date/time-related information is in Local Timezone"}]},"implicit":true},{"name":"get_frequency","description":"Get the frequency field of the given VMSS.","result":["enum vmss_frequency","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"frequency of taking snapshot from snapshot schedule"}]},"implicit":true},{"name":"get_retained_snapshots","description":"Get the retained_snapshots field of the given VMSS.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"maximum number of snapshots that should be stored at any time"}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given VMSS.","result":["enum vmss_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the snapshot schedule"}]},"implicit":true},{"name":"get_enabled","description":"Get the enabled field of the given VMSS.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"enable or disable this snapshot schedule"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given VMSS.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given VMSS.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VMSS.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the VMSS instances with the given label.","result":["VMSS ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VMSS instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"create","description":"Create a new VMSS instance, and return its handle.\nThe constructor args are: name_label, name_description, enabled, type*, retained_snapshots, frequency*, schedule (* = non-optional).","result":["VMSS ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VMSS instance with the specified UUID.","result":["VMSS ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VMSS.","result":["VMSS record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VMSS ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"implicit":true}],"enums":[{"name":"vmss_frequency","values":[{"name":"hourly","doc":"Hourly snapshots"},{"name":"daily","doc":"Daily snapshots"},{"name":"weekly","doc":"Weekly snapshots"}]},{"name":"vmss_type","values":[{"name":"snapshot","doc":"The snapshot is a disk snapshot"},{"name":"checkpoint","doc":"The snapshot is a checkpoint"},{"name":"snapshot_with_quiesce","doc":"Support for VSS has been removed."}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":"VM Snapshot Schedule"}]},"tag":""},{"name":"VM_appliance","description":"VM appliance","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vm_appliance_operation set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vm_appliance_operation) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VMs","description":"all VMs in this appliance","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all VMs in this appliance"}]}}],"messages":[{"name":"get_all_records","description":"Return a map of VM_appliance references to VM_appliance records for all VM_appliances known to the system.","result":["(VM_appliance ref -> VM_appliance record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VM_appliances known to the system.","result":["VM_appliance ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"recover","description":"Recover the VM appliance","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance to recover"},{"type":"session ref","name":"session_to","doc":"The session to which the VM appliance is to be recovered."},{"type":"bool","name":"force","doc":"Whether the VMs should replace newer versions of themselves."}],"errors":[{"name":"VM_REQUIRES_SR","doc":"You attempted to run a VM on a host which doesn't have access to an SR needed by the VM. The VM has at least one VBD attached to a VDI in the SR."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Recover the VM appliance"}]},"implicit":false},{"name":"get_SRs_required_for_recovery","description":"Get the list of SRs required by the VM appliance to recover.","result":["SR ref set","refs for SRs required to recover the VM"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance for which the required list of SRs has to be recovered."},{"type":"session ref","name":"session_to","doc":"The session to which the list of SRs have to be recovered ."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":"Get the list of SRs required by the VM appliance to recover."}]},"implicit":false},{"name":"assert_can_be_recovered","description":"Assert whether all SRs required to recover this VM appliance are available.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance to recover"},{"type":"session ref","name":"session_to","doc":"The session to which the VM appliance is to be recovered."}],"errors":[{"name":"VM_REQUIRES_SR","doc":"You attempted to run a VM on a host which doesn't have access to an SR needed by the VM. The VM has at least one VBD attached to a VDI in the SR."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Assert whether all SRs required to recover this VM appliance are available."}]},"implicit":false},{"name":"shutdown","description":"For each VM in the appliance, try to shut it down cleanly. If this fails, perform a hard shutdown of the VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance"}],"errors":[{"name":"OPERATION_PARTIALLY_FAILED","doc":"Some VMs belonging to the appliance threw an exception while carrying out the specified operation"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"For each VM in the appliance, try to shut it down cleanly. If this fails, perform a hard shutdown of the VM."}]},"implicit":false},{"name":"hard_shutdown","description":"Perform a hard shutdown of all the VMs in the appliance","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance"}],"errors":[{"name":"OPERATION_PARTIALLY_FAILED","doc":"Some VMs belonging to the appliance threw an exception while carrying out the specified operation"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Perform a hard shutdown of all the VMs in the appliance"}]},"implicit":false},{"name":"clean_shutdown","description":"Perform a clean shutdown of all the VMs in the appliance","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance"}],"errors":[{"name":"OPERATION_PARTIALLY_FAILED","doc":"Some VMs belonging to the appliance threw an exception while carrying out the specified operation"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Perform a clean shutdown of all the VMs in the appliance"}]},"implicit":false},{"name":"start","description":"Start all VMs in the appliance","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"The VM appliance"},{"type":"bool","name":"paused","doc":"Instantiate all VMs belonging to this appliance in paused state if set to true."}],"errors":[{"name":"OPERATION_PARTIALLY_FAILED","doc":"Some VMs belonging to the appliance threw an exception while carrying out the specified operation"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Start all VMs in the appliance"}]},"implicit":false},{"name":"set_name_description","description":"Set the name/description field of the given VM_appliance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given VM_appliance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_VMs","description":"Get the VMs field of the given VM_appliance.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all VMs in this appliance"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VM_appliance.","result":["(string -> enum vm_appliance_operation) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VM_appliance.","result":["enum vm_appliance_operation set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given VM_appliance.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given VM_appliance.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VM_appliance.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the VM_appliance instances with the given label.","result":["VM_appliance ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VM_appliance instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"create","description":"Create a new VM_appliance instance, and return its handle.\nThe constructor args are: name_label, name_description (* = non-optional).","result":["VM_appliance ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VM_appliance instance with the specified UUID.","result":["VM_appliance ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VM_appliance.","result":["VM_appliance record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM_appliance ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"implicit":true}],"enums":[{"name":"vm_appliance_operation","values":[{"name":"start","doc":"Start"},{"name":"clean_shutdown","doc":"Clean shutdown"},{"name":"hard_shutdown","doc":"Hard shutdown"},{"name":"shutdown","doc":"Shutdown"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"VM appliance"}]},"tag":""},{"name":"DR_task","description":"DR task","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"introduced_SRs","description":"All SRs introduced by this appliance","type":"SR ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"All SRs introduced by this appliance"}]}}],"messages":[{"name":"get_all_records","description":"Return a map of DR_task references to DR_task records for all DR_tasks known to the system.","result":["(DR_task ref -> DR_task record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"DR task"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the DR_tasks known to the system.","result":["DR_task ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"DR task"}]},"implicit":true},{"name":"destroy","description":"Destroy the disaster recovery task, detaching and forgetting any SRs introduced which are no longer required","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"DR_task ref","name":"self","doc":"The disaster recovery task to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Destroy the disaster recovery task, detaching and forgetting any SRs introduced which are no longer required"}]},"implicit":false},{"name":"create","description":"Create a disaster recovery task which will query the supplied list of devices","result":["DR_task ref","The reference of the created DR_task"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"type","doc":"The SR driver type of the SRs to introduce"},{"type":"(string -> string) map","name":"device_config","doc":"The device configuration of the SRs to introduce"},{"type":"string set","name":"whitelist","doc":"The devices to use for disaster recovery"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Create a disaster recovery task which will query the supplied list of devices"}]},"implicit":false},{"name":"get_introduced_SRs","description":"Get the introduced_SRs field of the given DR_task.","result":["SR ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"DR_task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"All SRs introduced by this appliance"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given DR_task.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"DR_task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the DR_task instance with the specified UUID.","result":["DR_task ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"DR task"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given DR_task.","result":["DR_task record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"DR_task ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"DR task"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"DR task"}]},"tag":""},{"name":"host","description":"A physical host","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"memory_overhead","description":"Virtualization memory overhead (bytes).","type":"int","qualifier":"RO/runtime","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Virtualization memory overhead (bytes)."}]},"default":"0"},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum host_allowed_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum host_allowed_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"API_version_major","description":"major version number","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"major version number"}]}},{"name":"API_version_minor","description":"minor version number","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"minor version number"}]}},{"name":"API_version_vendor","description":"identification of vendor","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"identification of vendor"}]}},{"name":"API_version_vendor_implementation","description":"details of vendor implementation","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"details of vendor implementation"}]}},{"name":"enabled","description":"True if the host is currently enabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if the host is currently enabled"}]}},{"name":"software_version","description":"version strings","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version strings"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"capabilities","description":"Xen capabilities","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Xen capabilities"}]}},{"name":"cpu_configuration","description":"The CPU configuration on this host. May contain keys such as \"nr_nodes\", \"sockets_per_node\", \"cores_per_socket\", or \"threads_per_core\"","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The CPU configuration on this host. May contain keys such as \"nr_nodes\", \"sockets_per_node\", \"cores_per_socket\", or \"threads_per_core\""}]}},{"name":"sched_policy","description":"Scheduler policy currently in force on this host","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Scheduler policy currently in force on this host"}]}},{"name":"supported_bootloaders","description":"a list of the bootloaders installed on the machine","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a list of the bootloaders installed on the machine"}]}},{"name":"resident_VMs","description":"list of VMs currently resident on host","type":"VM ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of VMs currently resident on host"}]}},{"name":"logging","description":"logging configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"logging configuration"}]}},{"name":"PIFs","description":"physical network interfaces","type":"PIF ref set","qualifier":"RO/runtime","tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical network interfaces"}]}},{"name":"suspend_image_sr","description":"The SR in which VDIs for suspend images are created","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]}},{"name":"crash_dump_sr","description":"The SR in which VDIs for crash dumps are created","type":"SR ref","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]}},{"name":"crashdumps","description":"Set of host crash dumps","type":"host_crashdump ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set of host crash dumps"}]}},{"name":"patches","description":"Set of host patches","type":"host_patch ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Set of host patches"},{"transition":"deprecated","release":"ely","description":""}]}},{"name":"updates","description":"Set of updates","type":"pool_update ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Set of updates"}]}},{"name":"PBDs","description":"physical blockdevices","type":"PBD ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical blockdevices"}]}},{"name":"host_CPUs","description":"The physical CPUs on this host","type":"host_cpu ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical CPUs on this host"}]}},{"name":"cpu_info","description":"Details about the physical CPUs on this host","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Details about the physical CPUs on this host"}]},"default":"{}"},{"name":"hostname","description":"The hostname of this host","type":"string","qualifier":"RW","tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The hostname of this host"}]}},{"name":"address","description":"The address by which this host can be contacted from any other host in the pool","type":"string","qualifier":"RW","tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The address by which this host can be contacted from any other host in the pool"}]}},{"name":"metrics","description":"metrics associated with this host","type":"host_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this host"}]}},{"name":"license_params","description":"State of the current license","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"State of the current license"}]}},{"name":"ha_statefiles","description":"The set of statefiles accessible from this host","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The set of statefiles accessible from this host"}]},"default":"{}"},{"name":"ha_network_peers","description":"The set of hosts visible via the network from this host","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The set of hosts visible via the network from this host"}]},"default":"{}"},{"name":"blobs","description":"Binary blobs associated with this host","type":"(string -> blob ref) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this host"}]},"default":"{}"},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"external_auth_type","description":"type of external authentication service configured; empty if none configured.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"type of external authentication service configured; empty if none configured."}]},"default":"\"\""},{"name":"external_auth_service_name","description":"name of external authentication service configured; empty if none configured.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"name of external authentication service configured; empty if none configured."}]},"default":"\"\""},{"name":"external_auth_configuration","description":"configuration specific to external authentication service","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"configuration specific to external authentication service"}]},"default":"{}"},{"name":"edition","description":"Product edition","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Product edition"}]},"default":"\"\""},{"name":"license_server","description":"Contact information of the license server","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Contact information of the license server"}]},"default":"{\"address\" -> \"localhost\", \"port\" -> \"27000\"}"},{"name":"bios_strings","description":"BIOS strings","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"BIOS strings"}]},"default":"{}"},{"name":"power_on_mode","description":"The power on mode","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"The power on mode"}]},"default":"\"\""},{"name":"power_on_config","description":"The power on config","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"The power on config"}]},"default":"{}"},{"name":"local_cache_sr","description":"The SR that is used as a local cache","type":"SR ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The SR that is used as a local cache"}]},"default":"OpaqueRef:NULL"},{"name":"chipset_info","description":"Information about chipset features","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"PCIs","description":"List of PCI devices in the host","type":"PCI ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"PGPUs","description":"List of physical GPUs in the host","type":"PGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"PUSBs","description":"List of physical USBs in the host","type":"PUSB ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"ssl_legacy","description":"Allow SSLv3 protocol and ciphersuites as used by older server versions. This controls both incoming and outgoing connections. When this is set to a different value, the host immediately restarts its SSL/TLS listening service; typically this takes less than a second but existing connections to it will be broken. API login sessions will remain valid.","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"dundee","description":""},{"transition":"deprecated","release":"stockholm","description":"Legacy SSL no longer supported"}]},"default":"true"},{"name":"guest_VCPUs_params","description":"VCPUs params to apply to all resident guests","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"VCPUs params to apply to all resident guests"}]},"default":"{}"},{"name":"display","description":"indicates whether the host is configured to output its console to a physical display device","type":"enum host_display","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"indicates whether the host is configured to output its console to a physical display device"}]},"default":"enabled"},{"name":"virtual_hardware_platform_versions","description":"The set of versions of the virtual hardware platform that the host can offer to its guests","type":"int set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"The set of versions of the virtual hardware platform that the host can offer to its guests"}]},"default":"{0}"},{"name":"control_domain","description":"The control domain (domain 0)","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The control domain (domain 0)"}]},"default":"OpaqueRef:NULL"},{"name":"updates_requiring_reboot","description":"List of updates which require reboot","type":"pool_update ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"features","description":"List of features available on this host","type":"Feature ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]}},{"name":"iscsi_iqn","description":"The initiator IQN for the host","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"\"\""},{"name":"multipathing","description":"Specifies whether multipathing is enabled","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"false"},{"name":"uefi_certificates","description":"The UEFI certificates allowing Secure Boot","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"quebec","description":""},{"transition":"deprecated","release":"22.16.0","description":"Use Pool.uefi_certificates instead"}]},"default":"\"\""},{"name":"certificates","description":"List of certificates installed in the host","type":"Certificate ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]}},{"name":"editions","description":"List of all available product editions","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"{}"},{"name":"pending_guidances","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.303.0","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures"}]},"default":"{}"},{"name":"tls_verification_enabled","description":"True if this host has TLS verifcation enabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.313.0","description":"True if this host has TLS verifcation enabled"}]},"default":"false"},{"name":"last_software_update","description":"Date and time when the last software update was applied","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.20.0","description":""}]},"default":"19700101T00:00:00Z"},{"name":"https_only","description":"Reflects whether port 80 is open (false) or not (true)","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.27.0","description":""}]},"default":"false"},{"name":"latest_synced_updates_applied","description":"Default as 'unknown', 'yes' if the host is up to date with updates synced from remote CDN, otherwise 'no'","type":"enum latest_synced_updates_applied_state","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"default":"unknown"},{"name":"numa_affinity_policy","description":"NUMA-aware VM memory and vCPU placement policy","type":"enum host_numa_affinity_policy","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"default":"default_policy"},{"name":"pending_guidances_recommended","description":"The set of pending recommended guidances after applying updates, which most users should follow to make the updates effective, but if not followed, will not cause a failure","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"default":"{}"},{"name":"pending_guidances_full","description":"The set of pending full guidances after applying updates, which a user should follow to make some updates, e.g. specific hardware drivers or CPU features, fully effective, but the 'average user' doesn't need to","type":"enum update_guidances set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"default":"{}"},{"name":"last_update_hash","description":"The SHA256 checksum of updateinfo of the most recently applied update on the host","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"default":"\"\""}],"messages":[{"name":"get_all_records","description":"Return a map of host references to host records for all hosts known to the system.","result":["(host ref -> host record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the hosts known to the system.","result":["host ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"implicit":true},{"name":"emergency_clear_mandatory_guidance","description":"Clear the pending mandatory guidance on this host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":false},{"name":"apply_recommended_guidances","description":"apply all recommended guidances both on the host and on all HVM VMs on the host after updates are applied on the host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host whose recommended guidances will be applied"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""},{"transition":"removed","release":"23.25.0","description":""}]},"implicit":false},{"name":"set_https_only","description":"updates the host firewall to open or close port 80 depending on the value","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The Host"},{"type":"bool","name":"value","doc":"true - http port 80 will be blocked, false - http port 80 will be open"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.27.0","description":""}]},"implicit":false},{"name":"apply_updates","description":"apply updates from current enabled repository on a host","result":["string set set","The list of results after applying updates, including livepatch apply failures and recommended guidances"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host where updates will be applied"},{"type":"string","name":"hash","doc":"The hash of updateinfo to be applied which is returned by previous pool.sync_udpates"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":"apply updates from current enabled repository on a host"}]},"implicit":false},{"name":"emergency_reenable_tls_verification","description":"Reenable TLS verification for this host only","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.298.0","description":""}]},"implicit":false},{"name":"emergency_disable_tls_verification","description":"Disable TLS verification for this host only","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":""}]},"implicit":false},{"name":"set_numa_affinity_policy","description":"Set VM placement NUMA affinity policy","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host"},{"type":"enum host_numa_affinity_policy","name":"value","doc":"The NUMA affinity policy to apply to a host"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"implicit":false},{"name":"get_sched_gran","description":"Gets xen's sched-gran on a host","result":["enum host_sched_gran","The host's sched-gran"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.271.0","description":""}]},"implicit":false},{"name":"set_sched_gran","description":"Sets xen's sched-gran on a host. See: https://xenbits.xen.org/docs/unstable/misc/xen-command-line.html#sched-gran-x86","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host"},{"type":"enum host_sched_gran","name":"value","doc":"The sched-gran to apply to a host"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.271.0","description":""}]},"implicit":false},{"name":"set_uefi_certificates","description":"Sets the UEFI certificates on a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"value","doc":"The certificates to apply to a host"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"quebec","description":""},{"transition":"deprecated","release":"22.16.0","description":"Use Pool.set_uefi_certificates instead"}]},"implicit":false},{"name":"set_multipathing","description":"Specifies whether multipathing is enabled","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"bool","name":"value","doc":"Whether multipathing should be enabled"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"set_iscsi_iqn","description":"Sets the initiator IQN for the host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"value","doc":"The value to which the IQN should be set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"set_ssl_legacy","description":"Enable/disable SSLv3 for interoperability with older server versions. When this is set to a different value, the host immediately restarts its SSL/TLS listening service; typically this takes less than a second but existing connections to it will be broken. API login sessions will remain valid.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host"},{"type":"bool","name":"value","doc":"True to allow SSLv3 and ciphersuites as used in old XenServer versions"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""},{"transition":"changed","release":"stockholm","description":"Legacy SSL no longer supported"}]},"implicit":false},{"name":"disable_display","description":"Disable console output to the physical display device next time this host boots","result":["enum host_display","This host's physical display usage"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":false},{"name":"enable_display","description":"Enable console output to the physical display device next time this host boots","result":["enum host_display","This host's physical display usage"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":false},{"name":"declare_dead","description":"Declare that a host is dead. This is a dangerous operation, and should only be called if the administrator is absolutely sure the host is definitely dead","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to declare is dead"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"Declare that a host is dead. This is a dangerous operation, and should only be called if the administrator is absolutely sure the host is definitely dead"}]},"implicit":false},{"name":"migrate_receive","description":"Prepare to receive a VM, returning a token which can be passed to VM.migrate.","result":["(string -> string) map","A value which should be passed to VM.migrate"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The target host"},{"type":"network ref","name":"network","doc":"The network through which migration traffic should be received."},{"type":"(string -> string) map","name":"options","doc":"Extra configuration operations"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Prepare to receive a VM, returning a token which can be passed to VM.migrate."}]},"implicit":false},{"name":"disable_local_storage_caching","description":"Disable the use of a local SR for caching purposes","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Disable the use of a local SR for caching purposes"}]},"implicit":false},{"name":"enable_local_storage_caching","description":"Enable the use of a local SR for caching purposes","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"SR ref","name":"sr","doc":"The SR to use as a local cache"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Enable the use of a local SR for caching purposes"}]},"implicit":false},{"name":"reset_cpu_features","description":"Remove the feature mask, such that after a reboot all features of the CPU are enabled.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"midnight-ride","description":""},{"transition":"deprecated","release":"dundee","description":"Dummy transition"},{"transition":"removed","release":"dundee","description":"Manual CPU feature setting was removed"}]},"implicit":false},{"name":"set_cpu_features","description":"Set the CPU features to be used after a reboot, if the given features string is valid.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"features","doc":"The features string (32 hexadecimal digits)"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"midnight-ride","description":""},{"transition":"deprecated","release":"dundee","description":"Dummy transition"},{"transition":"removed","release":"dundee","description":"Manual CPU feature setting was removed"}]},"implicit":false},{"name":"set_power_on_mode","description":"Set the power-on-mode, host, user and password","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host"},{"type":"string","name":"power_on_mode","doc":"power-on-mode can be empty, wake-on-lan, DRAC or other"},{"type":"(string -> string) map","name":"power_on_config","doc":"Power on config"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":""},{"transition":"changed","release":"stockholm","description":"Removed iLO script"}]},"implicit":false},{"name":"refresh_pack_info","description":"Refresh the list of installed Supplemental Packs.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to modify"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":""},{"transition":"deprecated","release":"ely","description":"Use Pool_update.resync_host instead"}]},"implicit":false},{"name":"apply_edition","description":"Change to another edition, or reactivate the current edition after a license has expired. This may be subject to the successful checkout of an appropriate license.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"edition","doc":"The requested edition"},{"type":"bool","name":"force","doc":"Update the license params even if the apply call fails"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Change to another edition, or reactivate the current edition after a license has expired. This may be subject to the successful checkout of an appropriate license."}]},"implicit":false},{"name":"reset_server_certificate","description":"Delete the current TLS server certificate and replace by a new, self-signed one. This should only be used with extreme care.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.290.0","description":""}]},"implicit":false},{"name":"emergency_reset_server_certificate","description":"Delete the current TLS server certificate and replace by a new, self-signed one. This should only be used with extreme care.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":[],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":false},{"name":"install_server_certificate","description":"Install the TLS server certificate.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"certificate","doc":"The server certificate, in PEM form"},{"type":"string","name":"private_key","doc":"The unencrypted private key used to sign the certificate, in PKCS#8 form"},{"type":"string","name":"certificate_chain","doc":"The certificate chain, in PEM form"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":false},{"name":"refresh_server_certificate","description":"Replace the internal self-signed host certficate with a new one.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.307.0","description":""}]},"implicit":false},{"name":"get_server_certificate","description":"Get the installed server public TLS certificate.","result":["string","The installed server public TLS certificate, in PEM form."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":""},{"transition":"changed","release":"inverness","description":"Now available to all RBAC roles."}]},"implicit":false},{"name":"retrieve_wlb_evacuate_recommendations","description":"Retrieves recommended host migrations to perform when evacuating the host from the wlb server. If a VM cannot be migrated from the host the reason is listed instead of a recommendation.","result":["(VM ref -> string set) map","VMs and the reasons why they would block evacuation, or their target host recommended by the wlb server"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Retrieves recommended host migrations to perform when evacuating the host from the wlb server. If a VM cannot be migrated from the host the reason is listed instead of a recommendation."}]},"implicit":false},{"name":"disable_external_auth","description":"This call disables external authentication on the local host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host whose external authentication should be disabled"},{"type":"(string -> string) map","name":"config","doc":"Optional parameters as a list of key-values containing the configuration data"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call disables external authentication on the local host"}]},"implicit":false},{"name":"enable_external_auth","description":"This call enables external authentication on a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host whose external authentication should be enabled"},{"type":"(string -> string) map","name":"config","doc":"A list of key-values containing the configuration data"},{"type":"string","name":"service_name","doc":"The name of the service"},{"type":"string","name":"auth_type","doc":"The type of authentication (e.g. AD for Active Directory)"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"This call enables external authentication on a host"}]},"implicit":false},{"name":"get_server_localtime","description":"This call queries the host's clock for the current time in the host's local timezone","result":["datetime","The current local time"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host whose clock should be queried"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"This call queries the host's clock for the current time in the host's local timezone"}]},"implicit":false},{"name":"get_servertime","description":"This call queries the host's clock for the current time","result":["datetime","The current time"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host whose clock should be queried"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"This call queries the host's clock for the current time"}]},"implicit":false},{"name":"call_extension","description":"Call an API extension on this host","result":["string","Result from the extension"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"call","doc":"Rpc call for the extension"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Call an API extension on this host"}]},"implicit":false},{"name":"has_extension","description":"Return true if the extension is available on the host","result":["bool","True if the extension exists, false otherwise"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"name","doc":"The name of the API call"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Return true if the extension is available on the host"}]},"implicit":false},{"name":"call_plugin","description":"Call an API plugin on this host","result":["string","Result from the plugin"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"plugin","doc":"The name of the plugin"},{"type":"string","name":"fn","doc":"The name of the function within the plugin"},{"type":"(string -> string) map","name":"args","doc":"Arguments for the function"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Call an API plugin on this host"}]},"implicit":false},{"name":"create_new_blob","description":"Create a placeholder for a named binary blob of data that is associated with this host","result":["blob ref","The reference of the blob, needed for populating its data"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"name","doc":"The name associated with the blob"},{"type":"string","name":"mime_type","doc":"The mime type for the data. Empty string translates to application/octet-stream"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a named binary blob of data that is associated with this host"}]},"implicit":false},{"name":"backup_rrds","description":"This causes the RRDs to be backed up to the master","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"Schedule a backup of the RRDs of this host"},{"type":"float","name":"delay","doc":"Delay in seconds from when the call is received to perform the backup"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"This causes the RRDs to be backed up to the master"}]},"implicit":false},{"name":"sync_data","description":"This causes the synchronisation of the non-database data (messages, RRDs and so on) stored on the master to be synchronised with the host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to whom the data should be sent"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"This causes the synchronisation of the non-database data (messages, RRDs and so on) stored on the master to be synchronised with the host"}]},"implicit":false},{"name":"compute_memory_overhead","description":"Computes the virtualization memory overhead of a host.","result":["int","the virtualization memory overhead of the host."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host for which to compute the memory overhead"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Computes the virtualization memory overhead of a host."}]},"implicit":false},{"name":"compute_free_memory","description":"Computes the amount of free memory on the host.","result":["int","the amount of free memory on the host."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to send the request to"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Computes the amount of free memory on the host."}]},"implicit":false},{"name":"set_hostname_live","description":"Sets the host name to the specified string. Both the API and lower-level system hostname are changed immediately.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host whose host name to set"},{"type":"string","name":"hostname","doc":"The new host name"}],"errors":[{"name":"HOST_NAME_INVALID","doc":"The server name is invalid."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Sets the host name to the specified string. Both the API and lower-level system hostname are changed immediately."}]},"implicit":false},{"name":"shutdown_agent","description":"Shuts the agent down after a 10 second pause. WARNING: this is a dangerous operation. Any operations in progress will be aborted, and unrecoverable data loss may occur. The caller is responsible for ensuring that there are no operations in progress when this method is called.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Shuts the agent down after a 10 second pause. WARNING: this is a dangerous operation. Any operations in progress will be aborted, and unrecoverable data loss may occur. The caller is responsible for ensuring that there are no operations in progress when this method is called."}]},"implicit":false},{"name":"restart_agent","description":"Restarts the agent after a 10 second pause. WARNING: this is a dangerous operation. Any operations in progress will be aborted, and unrecoverable data loss may occur. The caller is responsible for ensuring that there are no operations in progress when this method is called.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host on which you want to restart the agent"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Restarts the agent after a 10 second pause. WARNING: this is a dangerous operation. Any operations in progress will be aborted, and unrecoverable data loss may occur. The caller is responsible for ensuring that there are no operations in progress when this method is called."}]},"implicit":false},{"name":"get_system_status_capabilities","description":"","result":["string","An XML fragment containing the system status capabilities."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to interrogate"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":""}]},"implicit":false},{"name":"get_management_interface","description":"Returns the management interface for the specified host","result":["PIF ref","The management interface for the host"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"Which host's management interface is required"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":false},{"name":"management_disable","description":"Disable the management network interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Disable the management network interface"}]},"implicit":false},{"name":"local_management_reconfigure","description":"Reconfigure the management network interface. Should only be used if Host.management_reconfigure is impossible because the network configuration is broken.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"interface","doc":"name of the interface to use as a management interface"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Reconfigure the management network interface. Should only be used if Host.management_reconfigure is impossible because the network configuration is broken."}]},"implicit":false},{"name":"management_reconfigure","description":"Reconfigure the management network interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"pif","doc":"reference to a PIF object corresponding to the management interface"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"networking","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Reconfigure the management network interface"}]},"implicit":false},{"name":"syslog_reconfigure","description":"Re-configure syslog logging","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"Tell the host to reread its Host.logging parameters and reconfigure itself accordingly"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Re-configure syslog logging"}]},"implicit":false},{"name":"evacuate","description":"Migrate all VMs off of this host, where possible.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to evacuate"},{"type":"network ref","name":"network","doc":"Optional preferred network for migration"},{"type":"int","name":"evacuate_batch_size","doc":"The maximum number of VMs to be migrated per batch 0 will use the value `evacuation-batch-size` defined in xapi.conf"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":""},{"transition":"extended","release":"1.297.0","description":"Enable migration network selection."},{"transition":"extended","release":"23.27.0","description":"Choose batch size of VM evacuation."}]},"implicit":false},{"name":"get_uncooperative_resident_VMs","description":"Return a set of VMs which are not co-operating with the host's memory control system","result":["VM ref set","VMs which are not co-operating"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Return a set of VMs which are not co-operating with the host's memory control system"},{"transition":"deprecated","release":"tampa","description":""}]},"implicit":false},{"name":"get_vms_which_prevent_evacuation","description":"Return a set of VMs which prevent the host being evacuated, with per-VM error codes","result":["(VM ref -> string set) map","VMs which block evacuation together with reasons"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Return a set of VMs which prevent the host being evacuated, with per-VM error codes"}]},"implicit":false},{"name":"assert_can_evacuate","description":"Check this host can be evacuated.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to evacuate"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Check this host can be evacuated."}]},"implicit":false},{"name":"forget_data_source_archives","description":"Forget the recorded statistics related to the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"data_source","doc":"The data source whose archives are to be forgotten"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Forget the recorded statistics related to the specified data source"}]},"implicit":false},{"name":"query_data_source","description":"Query the latest value of the specified data source","result":["float","The latest value, averaged over the last 5 seconds"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"data_source","doc":"The data source to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Query the latest value of the specified data source"}]},"implicit":false},{"name":"record_data_source","description":"Start recording the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"data_source","doc":"The data source to record"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Start recording the specified data source"}]},"implicit":false},{"name":"get_data_sources","description":"","result":["data_source record set","A set of data sources"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to interrogate"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"emergency_ha_disable","description":"This call disables HA on the local host. This should only be used with extreme care.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"bool","name":"soft","doc":"Disable HA temporarily, revert upon host reboot or further changes, idempotent"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"This call disables HA on the local host. This should only be used with extreme care."}]},"implicit":false},{"name":"power_on","description":"Attempt to power-on the host (if the capability exists).","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to power on"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Attempt to power-on the host (if the capability exists)."}]},"implicit":false},{"name":"destroy","description":"Destroy specified host record in database","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"The host record to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Destroy specified host record in database"}]},"implicit":false},{"name":"license_remove","description":"Remove any license file from the specified host, and switch that host to the unlicensed edition","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host from which any license will be removed"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"indigo","description":""}]},"implicit":false},{"name":"license_add","description":"Apply a new license to a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to upload the license to"},{"type":"string","name":"contents","doc":"The contents of the license file, base64 encoded"}],"errors":[{"name":"LICENSE_PROCESSING_ERROR","doc":"There was an error processing your license. Please contact your support representative."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"indigo","description":"Functionality for parsing license files re-added"}]},"implicit":false},{"name":"license_apply","description":"Apply a new license to a host","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to upload the license to"},{"type":"string","name":"contents","doc":"The contents of the license file, base64 encoded"}],"errors":[{"name":"LICENSE_PROCESSING_ERROR","doc":"There was an error processing your license. Please contact your support representative."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"Apply a new license to a host"},{"transition":"deprecated","release":"clearwater","description":"Dummy transition"},{"transition":"removed","release":"clearwater","description":"Free licenses no longer handled by xapi"}]},"implicit":false},{"name":"list_methods","description":"List all supported methods","result":["string set","The name of every supported method."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"List all supported methods"}]},"implicit":false},{"name":"bugreport_upload","description":"Run xen-bugtool --yestoall and upload the output to support","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host on which to run xen-bugtool"},{"type":"string","name":"url","doc":"The URL to upload to"},{"type":"(string -> string) map","name":"options","doc":"Extra configuration operations"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Run xen-bugtool --yestoall and upload the output to support"}]},"implicit":false},{"name":"send_debug_keys","description":"Inject the given string as debugging keys into Xen","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"},{"type":"string","name":"keys","doc":"The keys to send"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Inject the given string as debugging keys into Xen"}]},"implicit":false},{"name":"get_log","description":"Get the host's log file","result":["string","The contents of the host's primary log file"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Get the host's log file"}]},"implicit":false},{"name":"dmesg_clear","description":"Get the host xen dmesg, and clear the buffer.","result":["string","dmesg string"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to query"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Get the host xen dmesg, and clear the buffer."}]},"implicit":false},{"name":"dmesg","description":"Get the host xen dmesg.","result":["string","dmesg string"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to query"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Get the host xen dmesg."}]},"implicit":false},{"name":"reboot","description":"Reboot the host. (This function can only be called if there are no currently running VMs on the host and it is disabled.)","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to reboot"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Reboot the host. (This function can only be called if there are no currently running VMs on the host and it is disabled.)"}]},"implicit":false},{"name":"shutdown","description":"Shutdown the host. (This function can only be called if there are no currently running VMs on the host and it is disabled.)","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to shutdown"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Shutdown the host. (This function can only be called if there are no currently running VMs on the host and it is disabled.)"}]},"implicit":false},{"name":"enable","description":"Puts the host into a state in which new VMs can be started.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to enable"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Puts the host into a state in which new VMs can be started."}]},"implicit":false},{"name":"disable","description":"Puts the host into a state in which no new VMs can be started. Currently active VMs on the host continue to execute.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The Host to disable"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Puts the host into a state in which no new VMs can be started. Currently active VMs on the host continue to execute."}]},"implicit":false},{"name":"set_display","description":"Set the display field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"enum host_display","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"indicates whether the host is configured to output its console to a physical display device"}]},"implicit":true},{"name":"remove_from_guest_VCPUs_params","description":"Remove the given key and its corresponding value from the guest_VCPUs_params field of the given host. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"VCPUs params to apply to all resident guests"}]},"implicit":true},{"name":"add_to_guest_VCPUs_params","description":"Add the given key-value pair to the guest_VCPUs_params field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"VCPUs params to apply to all resident guests"}]},"implicit":true},{"name":"set_guest_VCPUs_params","description":"Set the guest_VCPUs_params field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"VCPUs params to apply to all resident guests"}]},"implicit":true},{"name":"remove_from_license_server","description":"Remove the given key and its corresponding value from the license_server field of the given host. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Contact information of the license server"}]},"implicit":true},{"name":"add_to_license_server","description":"Add the given key-value pair to the license_server field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Contact information of the license server"}]},"implicit":true},{"name":"set_license_server","description":"Set the license_server field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Contact information of the license server"}]},"implicit":true},{"name":"remove_tags","description":"Remove the given value from the tags field of the given host. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given host. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_address","description":"Set the address field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The address by which this host can be contacted from any other host in the pool"}]},"implicit":true},{"name":"set_hostname","description":"Set the hostname field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The hostname of this host"}]},"implicit":true},{"name":"set_crash_dump_sr","description":"Set the crash_dump_sr field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]},"implicit":true},{"name":"set_suspend_image_sr","description":"Set the suspend_image_sr field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"SR ref","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]},"implicit":true},{"name":"remove_from_logging","description":"Remove the given key and its corresponding value from the logging field of the given host. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"logging configuration"}]},"implicit":true},{"name":"add_to_logging","description":"Add the given key-value pair to the logging field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"logging configuration"}]},"implicit":true},{"name":"set_logging","description":"Set the logging field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"logging configuration"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given host. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_last_update_hash","description":"Get the last_update_hash field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":true},{"name":"get_pending_guidances_full","description":"Get the pending_guidances_full field of the given host.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":true},{"name":"get_pending_guidances_recommended","description":"Get the pending_guidances_recommended field of the given host.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.10.0","description":""}]},"implicit":true},{"name":"get_numa_affinity_policy","description":"Get the numa_affinity_policy field of the given host.","result":["enum host_numa_affinity_policy","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.0.0","description":""}]},"implicit":true},{"name":"get_latest_synced_updates_applied","description":"Get the latest_synced_updates_applied field of the given host.","result":["enum latest_synced_updates_applied_state","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.18.0","description":""}]},"implicit":true},{"name":"get_https_only","description":"Get the https_only field of the given host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.27.0","description":""}]},"implicit":true},{"name":"get_last_software_update","description":"Get the last_software_update field of the given host.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.20.0","description":""}]},"implicit":true},{"name":"get_tls_verification_enabled","description":"Get the tls_verification_enabled field of the given host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.313.0","description":"True if this host has TLS verifcation enabled"}]},"implicit":true},{"name":"get_pending_guidances","description":"Get the pending_guidances field of the given host.","result":["enum update_guidances set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.303.0","description":"The set of pending mandatory guidances after applying updates, which must be applied, as otherwise there may be e.g. VM failures"}]},"implicit":true},{"name":"get_editions","description":"Get the editions field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_certificates","description":"Get the certificates field of the given host.","result":["Certificate ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_uefi_certificates","description":"Get the uefi_certificates field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"quebec","description":""},{"transition":"deprecated","release":"22.16.0","description":"Use Pool.uefi_certificates instead"}]},"implicit":true},{"name":"get_multipathing","description":"Get the multipathing field of the given host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_iscsi_iqn","description":"Get the iscsi_iqn field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_features","description":"Get the features field of the given host.","result":["Feature ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_updates_requiring_reboot","description":"Get the updates_requiring_reboot field of the given host.","result":["pool_update ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_control_domain","description":"Get the control_domain field of the given host.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"The control domain (domain 0)"}]},"implicit":true},{"name":"get_virtual_hardware_platform_versions","description":"Get the virtual_hardware_platform_versions field of the given host.","result":["int set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"The set of versions of the virtual hardware platform that the host can offer to its guests"}]},"implicit":true},{"name":"get_display","description":"Get the display field of the given host.","result":["enum host_display","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":"indicates whether the host is configured to output its console to a physical display device"}]},"implicit":true},{"name":"get_guest_VCPUs_params","description":"Get the guest_VCPUs_params field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"VCPUs params to apply to all resident guests"}]},"implicit":true},{"name":"get_ssl_legacy","description":"Get the ssl_legacy field of the given host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"dundee","description":""},{"transition":"deprecated","release":"stockholm","description":"Legacy SSL no longer supported"}]},"implicit":true},{"name":"get_PUSBs","description":"Get the PUSBs field of the given host.","result":["PUSB ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_PGPUs","description":"Get the PGPUs field of the given host.","result":["PGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_PCIs","description":"Get the PCIs field of the given host.","result":["PCI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_chipset_info","description":"Get the chipset_info field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_local_cache_sr","description":"Get the local_cache_sr field of the given host.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The SR that is used as a local cache"}]},"implicit":true},{"name":"get_power_on_config","description":"Get the power_on_config field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"The power on config"}]},"implicit":true},{"name":"get_power_on_mode","description":"Get the power_on_mode field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"The power on mode"}]},"implicit":true},{"name":"get_bios_strings","description":"Get the bios_strings field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"BIOS strings"}]},"implicit":true},{"name":"get_license_server","description":"Get the license_server field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Contact information of the license server"}]},"implicit":true},{"name":"get_edition","description":"Get the edition field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Product edition"}]},"implicit":true},{"name":"get_external_auth_configuration","description":"Get the external_auth_configuration field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"configuration specific to external authentication service"}]},"implicit":true},{"name":"get_external_auth_service_name","description":"Get the external_auth_service_name field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"name of external authentication service configured; empty if none configured."}]},"implicit":true},{"name":"get_external_auth_type","description":"Get the external_auth_type field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"type of external authentication service configured; empty if none configured."}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_blobs","description":"Get the blobs field of the given host.","result":["(string -> blob ref) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this host"}]},"implicit":true},{"name":"get_ha_network_peers","description":"Get the ha_network_peers field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The set of hosts visible via the network from this host"}]},"implicit":true},{"name":"get_ha_statefiles","description":"Get the ha_statefiles field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"The set of statefiles accessible from this host"}]},"implicit":true},{"name":"get_license_params","description":"Get the license_params field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"State of the current license"}]},"implicit":true},{"name":"get_metrics","description":"Get the metrics field of the given host.","result":["host_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this host"}]},"implicit":true},{"name":"get_address","description":"Get the address field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The address by which this host can be contacted from any other host in the pool"}]},"implicit":true},{"name":"get_hostname","description":"Get the hostname field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The hostname of this host"}]},"implicit":true},{"name":"get_cpu_info","description":"Get the cpu_info field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"Details about the physical CPUs on this host"}]},"implicit":true},{"name":"get_host_CPUs","description":"Get the host_CPUs field of the given host.","result":["host_cpu ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical CPUs on this host"}]},"implicit":true},{"name":"get_PBDs","description":"Get the PBDs field of the given host.","result":["PBD ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical blockdevices"}]},"implicit":true},{"name":"get_updates","description":"Get the updates field of the given host.","result":["pool_update ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Set of updates"}]},"implicit":true},{"name":"get_patches","description":"Get the patches field of the given host.","result":["host_patch ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Set of host patches"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_crashdumps","description":"Get the crashdumps field of the given host.","result":["host_crashdump ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set of host crash dumps"}]},"implicit":true},{"name":"get_crash_dump_sr","description":"Get the crash_dump_sr field of the given host.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for crash dumps are created"}]},"implicit":true},{"name":"get_suspend_image_sr","description":"Get the suspend_image_sr field of the given host.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The SR in which VDIs for suspend images are created"}]},"implicit":true},{"name":"get_PIFs","description":"Get the PIFs field of the given host.","result":["PIF ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical network interfaces"}]},"implicit":true},{"name":"get_logging","description":"Get the logging field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"logging configuration"}]},"implicit":true},{"name":"get_resident_VMs","description":"Get the resident_VMs field of the given host.","result":["VM ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of VMs currently resident on host"}]},"implicit":true},{"name":"get_supported_bootloaders","description":"Get the supported_bootloaders field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a list of the bootloaders installed on the machine"}]},"implicit":true},{"name":"get_sched_policy","description":"Get the sched_policy field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Scheduler policy currently in force on this host"}]},"implicit":true},{"name":"get_cpu_configuration","description":"Get the cpu_configuration field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The CPU configuration on this host. May contain keys such as \"nr_nodes\", \"sockets_per_node\", \"cores_per_socket\", or \"threads_per_core\""}]},"implicit":true},{"name":"get_capabilities","description":"Get the capabilities field of the given host.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Xen capabilities"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_software_version","description":"Get the software_version field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"version strings"}]},"implicit":true},{"name":"get_enabled","description":"Get the enabled field of the given host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if the host is currently enabled"}]},"implicit":true},{"name":"get_API_version_vendor_implementation","description":"Get the API_version/vendor_implementation field of the given host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"details of vendor implementation"}]},"implicit":true},{"name":"get_API_version_vendor","description":"Get the API_version/vendor field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"identification of vendor"}]},"implicit":true},{"name":"get_API_version_minor","description":"Get the API_version/minor field of the given host.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"minor version number"}]},"implicit":true},{"name":"get_API_version_major","description":"Get the API_version/major field of the given host.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"major version number"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given host.","result":["(string -> enum host_allowed_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given host.","result":["enum host_allowed_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_memory_overhead","description":"Get the memory/overhead field of the given host.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Virtualization memory overhead (bytes)."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the host instances with the given label.","result":["host ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the host instance with the specified UUID.","result":["host ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given host.","result":["host record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"implicit":true}],"enums":[{"name":"host_allowed_operations","values":[{"name":"provision","doc":"Indicates this host is able to provision another VM"},{"name":"evacuate","doc":"Indicates this host is evacuating"},{"name":"shutdown","doc":"Indicates this host is in the process of shutting itself down"},{"name":"reboot","doc":"Indicates this host is in the process of rebooting"},{"name":"power_on","doc":"Indicates this host is in the process of being powered on"},{"name":"vm_start","doc":"This host is starting a VM"},{"name":"vm_resume","doc":"This host is resuming a VM"},{"name":"vm_migrate","doc":"This host is the migration target of a VM"},{"name":"apply_updates","doc":"Indicates this host is being updated"},{"name":"enable","doc":"Indicates this host is in the process of enabling"}]},{"name":"latest_synced_updates_applied_state","values":[{"name":"yes","doc":"The host is up to date with the latest updates synced from remote CDN"},{"name":"no","doc":"The host is outdated with the latest updates synced from remote CDN"},{"name":"unknown","doc":"If the host is up to date with the latest updates synced from remote CDN is unknown"}]},{"name":"update_guidances","values":[{"name":"reboot_host","doc":"Indicates the updated host should reboot as soon as possible"},{"name":"reboot_host_on_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more livepatch(es) failed to be applied."},{"name":"reboot_host_on_kernel_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more kernel livepatch(es) failed to be applied."},{"name":"reboot_host_on_xen_livepatch_failure","doc":"Indicates the updated host should reboot as soon as possible since one or more xen livepatch(es) failed to be applied."},{"name":"restart_toolstack","doc":"Indicates the Toolstack running on the updated host should restart as soon as possible"},{"name":"restart_device_model","doc":"Indicates the device model of a running VM should restart as soon as possible"},{"name":"restart_vm","doc":"Indicates the VM should restart as soon as possible"}]},{"name":"host_display","values":[{"name":"enabled","doc":"This host is outputting its console to a physical display device"},{"name":"disable_on_reboot","doc":"The host will stop outputting its console to a physical display device on next boot"},{"name":"disabled","doc":"This host is not outputting its console to a physical display device"},{"name":"enable_on_reboot","doc":"The host will start outputting its console to a physical display device on next boot"}]},{"name":"host_sched_gran","values":[{"name":"core","doc":"core scheduling"},{"name":"cpu","doc":"CPU scheduling"},{"name":"socket","doc":"socket scheduling"}]},{"name":"host_numa_affinity_policy","values":[{"name":"any","doc":"VMs are spread across all available NUMA nodes"},{"name":"best_effort","doc":"VMs are placed on the smallest number of NUMA nodes that they fit using soft-pinning, but the policy doesn't guarantee a balanced placement, falling back to the 'any' policy."},{"name":"default_policy","doc":"Use the NUMA affinity policy that is the default for the current version"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical host"}]},"tag":""},{"name":"host_crashdump","description":"Represents a host crash dump","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"host","description":"Host the crashdump relates to","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Host the crashdump relates to"}]}},{"name":"timestamp","description":"Time the crash happened","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time the crash happened"}]}},{"name":"size","description":"Size of the crashdump","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the crashdump"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of host_crashdump references to host_crashdump records for all host_crashdumps known to the system.","result":["(host_crashdump ref -> host_crashdump record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Represents a host crash dump"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the host_crashdumps known to the system.","result":["host_crashdump ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Represents a host crash dump"}]},"implicit":true},{"name":"upload","description":"Upload the specified host crash dump to a specified URL","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"The host crashdump to upload"},{"type":"string","name":"url","doc":"The URL to upload to"},{"type":"(string -> string) map","name":"options","doc":"Extra configuration operations"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Upload the specified host crash dump to a specified URL"}]},"implicit":false},{"name":"destroy","description":"Destroy specified host crash dump, removing it from the disk.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"The host crashdump to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Destroy specified host crash dump, removing it from the disk."}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given host_crashdump. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given host_crashdump.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given host_crashdump.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given host_crashdump.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_size","description":"Get the size field of the given host_crashdump.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the crashdump"}]},"implicit":true},{"name":"get_timestamp","description":"Get the timestamp field of the given host_crashdump.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time the crash happened"}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given host_crashdump.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Host the crashdump relates to"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given host_crashdump.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the host_crashdump instance with the specified UUID.","result":["host_crashdump ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Represents a host crash dump"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given host_crashdump.","result":["host_crashdump record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Represents a host crash dump"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Represents a host crash dump"}]},"tag":""},{"name":"host_patch","description":"Represents a patch stored on a server","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"version","description":"Patch version number","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Patch version number"}]}},{"name":"host","description":"Host the patch relates to","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Host the patch relates to"}]}},{"name":"applied","description":"True if the patch has been applied","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if the patch has been applied"}]}},{"name":"timestamp_applied","description":"Time the patch was applied","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time the patch was applied"}]}},{"name":"size","description":"Size of the patch","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the patch"}]}},{"name":"pool_patch","description":"The patch applied","type":"pool_patch ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The patch applied"}]},"default":"Null"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of host_patch references to host_patch records for all host_patchs known to the system.","result":["(host_patch ref -> host_patch record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the host_patchs known to the system.","result":["host_patch ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"apply","description":"Apply the selected patch and return its output","result":["string","the output of the patch application process"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"The patch to apply"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Apply the selected patch and return its output"},{"transition":"deprecated","release":"miami","description":""}]},"implicit":false},{"name":"destroy","description":"Destroy the specified host patch, removing it from the disk. This does NOT reverse the patch","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"The patch to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Destroy the specified host patch, removing it from the disk. This does NOT reverse the patch"},{"transition":"deprecated","release":"miami","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given host_patch. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given host_patch.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given host_patch.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given host_patch.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_pool_patch","description":"Get the pool_patch field of the given host_patch.","result":["pool_patch ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The patch applied"}]},"implicit":true},{"name":"get_size","description":"Get the size field of the given host_patch.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the patch"}]},"implicit":true},{"name":"get_timestamp_applied","description":"Get the timestamp_applied field of the given host_patch.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time the patch was applied"}]},"implicit":true},{"name":"get_applied","description":"Get the applied field of the given host_patch.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"True if the patch has been applied"}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given host_patch.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Host the patch relates to"}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given host_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Patch version number"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given host_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given host_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given host_patch.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the host_patch instances with the given label.","result":["host_patch ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the host_patch instance with the specified UUID.","result":["host_patch ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given host_patch.","result":["host_patch record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_patch ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Represents a patch stored on a server"},{"transition":"deprecated","release":"ely","description":""}]},"tag":""},{"name":"host_metrics","description":"The metrics associated with a host","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"memory_total","description":"Total host memory (bytes)","type":"int","qualifier":"RO/runtime","tag":"memory","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Total host memory (bytes)"}]}},{"name":"memory_free","description":"Free host memory (bytes)","type":"int","qualifier":"RO/runtime","tag":"memory","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"midnight-ride","description":"Will be disabled in favour of RRD"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"default":"0"},{"name":"live","description":"Pool master thinks this host is live","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool master thinks this host is live"}]}},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of host_metrics references to host_metrics records for all host_metrics instances known to the system.","result":["(host_metrics ref -> host_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a host"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the host_metrics instances known to the system.","result":["host_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a host"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given host_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given host_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given host_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given host_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given host_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]},"implicit":true},{"name":"get_live","description":"Get the live field of the given host_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Pool master thinks this host is live"}]},"implicit":true},{"name":"get_memory_free","description":"Get the memory/free field of the given host_metrics.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"midnight-ride","description":"Will be disabled in favour of RRD"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_memory_total","description":"Get the memory/total field of the given host_metrics.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Total host memory (bytes)"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given host_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the host_metrics instance with the specified UUID.","result":["host_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a host"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given host_metrics.","result":["host_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a host"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a host"}]},"tag":""},{"name":"host_cpu","description":"A physical CPU","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"host","description":"the host the CPU is in","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host the CPU is in"}]}},{"name":"number","description":"the number of the physical CPU within the host","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the number of the physical CPU within the host"}]}},{"name":"vendor","description":"the vendor of the physical CPU","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the vendor of the physical CPU"}]}},{"name":"speed","description":"the speed of the physical CPU","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the speed of the physical CPU"}]}},{"name":"modelname","description":"the model name of the physical CPU","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the model name of the physical CPU"}]}},{"name":"family","description":"the family (number) of the physical CPU","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the family (number) of the physical CPU"}]}},{"name":"model","description":"the model number of the physical CPU","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the model number of the physical CPU"}]}},{"name":"stepping","description":"the stepping of the physical CPU","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the stepping of the physical CPU"}]}},{"name":"flags","description":"the flags of the physical CPU (a decoded version of the features field)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the flags of the physical CPU (a decoded version of the features field)"}]}},{"name":"features","description":"the physical CPU feature bitmap","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the physical CPU feature bitmap"}]}},{"name":"utilisation","description":"the current CPU utilisation","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the current CPU utilisation"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of host_cpu references to host_cpu records for all host_cpus known to the system.","result":["(host_cpu ref -> host_cpu record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A physical CPU"},{"transition":"deprecated","release":"midnight-ride","description":"Deprecated in favour of the Host.cpu_info field"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the host_cpus known to the system.","result":["host_cpu ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A physical CPU"},{"transition":"deprecated","release":"midnight-ride","description":"Deprecated in favour of the Host.cpu_info field"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given host_cpu. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given host_cpu.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given host_cpu.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given host_cpu.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_utilisation","description":"Get the utilisation field of the given host_cpu.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the current CPU utilisation"}]},"implicit":true},{"name":"get_features","description":"Get the features field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the physical CPU feature bitmap"}]},"implicit":true},{"name":"get_flags","description":"Get the flags field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the flags of the physical CPU (a decoded version of the features field)"}]},"implicit":true},{"name":"get_stepping","description":"Get the stepping field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the stepping of the physical CPU"}]},"implicit":true},{"name":"get_model","description":"Get the model field of the given host_cpu.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the model number of the physical CPU"}]},"implicit":true},{"name":"get_family","description":"Get the family field of the given host_cpu.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the family (number) of the physical CPU"}]},"implicit":true},{"name":"get_modelname","description":"Get the modelname field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the model name of the physical CPU"}]},"implicit":true},{"name":"get_speed","description":"Get the speed field of the given host_cpu.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the speed of the physical CPU"}]},"implicit":true},{"name":"get_vendor","description":"Get the vendor field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the vendor of the physical CPU"}]},"implicit":true},{"name":"get_number","description":"Get the number field of the given host_cpu.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the number of the physical CPU within the host"}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given host_cpu.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the host the CPU is in"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given host_cpu.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the host_cpu instance with the specified UUID.","result":["host_cpu ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A physical CPU"},{"transition":"deprecated","release":"midnight-ride","description":"Deprecated in favour of the Host.cpu_info field"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given host_cpu.","result":["host_cpu record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host_cpu ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A physical CPU"},{"transition":"deprecated","release":"midnight-ride","description":"Deprecated in favour of the Host.cpu_info field"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A physical CPU"},{"transition":"deprecated","release":"midnight-ride","description":"Deprecated in favour of the Host.cpu_info field"}]},"tag":""},{"name":"network","description":"A virtual network","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum network_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum network_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VIFs","description":"list of connected vifs","type":"VIF ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of connected vifs"}]}},{"name":"PIFs","description":"list of connected pifs","type":"PIF ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of connected pifs"}]}},{"name":"MTU","description":"MTU in octets","type":"int","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"MTU in octets"}]},"default":"1500"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"bridge","description":"name of the bridge corresponding to this network on the local host","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"falcon","description":"Added to the constructor (network.create)"}]},"default":"\"\""},{"name":"managed","description":"true if the bridge is managed by xapi","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"true"},{"name":"blobs","description":"Binary blobs associated with this network","type":"(string -> blob ref) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this network"}]},"default":"{}"},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"default_locking_mode","description":"The network will use this value to determine the behaviour of all VIFs where locking_mode = default","type":"enum network_default_locking_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"The network will use this value to determine the behaviour of all VIFs where locking_mode = default"}]},"default":"unlocked"},{"name":"assigned_ips","description":"The IP addresses assigned to VIFs on networks that have active xapi-managed DHCP","type":"(VIF ref -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":"The IP addresses assigned to VIFs on networks that have active xapi-managed DHCP"}]},"default":"{}"},{"name":"purpose","description":"Set of purposes for which the server will use this network","type":"enum network_purpose set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Set of purposes for which the server will use this network"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of network references to network records for all networks known to the system.","result":["(network ref -> network record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the networks known to the system.","result":["network ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"remove_purpose","description":"Remove a purpose from a network (if present)","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"The network"},{"type":"enum network_purpose","name":"value","doc":"The purpose to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Remove a purpose from a network (if present)"}]},"implicit":false},{"name":"add_purpose","description":"Give a network a new purpose (if not present already)","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"The network"},{"type":"enum network_purpose","name":"value","doc":"The purpose to add"}],"errors":[{"name":"NETWORK_INCOMPATIBLE_PURPOSES","doc":"You tried to add a purpose to a network but the new purpose is not compatible with an existing purpose of the network or other networks."}],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Give a network a new purpose (if not present already)"}]},"implicit":false},{"name":"set_default_locking_mode","description":"Set the default locking mode for VIFs attached to this network","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"network","doc":"The network"},{"type":"enum network_default_locking_mode","name":"value","doc":"The default locking mode for VIFs attached to this network."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Set the default locking mode for VIFs attached to this network"}]},"implicit":false},{"name":"create_new_blob","description":"Create a placeholder for a named binary blob of data that is associated with this pool","result":["blob ref","The reference of the blob, needed for populating its data"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"network","doc":"The network"},{"type":"string","name":"name","doc":"The name associated with the blob"},{"type":"string","name":"mime_type","doc":"The mime type for the data. Empty string translates to application/octet-stream"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a named binary blob of data that is associated with this pool"}]},"implicit":false},{"name":"remove_tags","description":"Remove the given value from the tags field of the given network. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given network. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given network. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_MTU","description":"Set the MTU field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"int","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"MTU in octets"}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given network.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_purpose","description":"Get the purpose field of the given network.","result":["enum network_purpose set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Set of purposes for which the server will use this network"}]},"implicit":true},{"name":"get_assigned_ips","description":"Get the assigned_ips field of the given network.","result":["(VIF ref -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":"The IP addresses assigned to VIFs on networks that have active xapi-managed DHCP"}]},"implicit":true},{"name":"get_default_locking_mode","description":"Get the default_locking_mode field of the given network.","result":["enum network_default_locking_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"The network will use this value to determine the behaviour of all VIFs where locking_mode = default"}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given network.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_blobs","description":"Get the blobs field of the given network.","result":["(string -> blob ref) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this network"}]},"implicit":true},{"name":"get_managed","description":"Get the managed field of the given network.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_bridge","description":"Get the bridge field of the given network.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"falcon","description":"Added to the constructor (network.create)"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given network.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_MTU","description":"Get the MTU field of the given network.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"MTU in octets"}]},"implicit":true},{"name":"get_PIFs","description":"Get the PIFs field of the given network.","result":["PIF ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of connected pifs"}]},"implicit":true},{"name":"get_VIFs","description":"Get the VIFs field of the given network.","result":["VIF ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of connected vifs"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given network.","result":["(string -> enum network_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given network.","result":["enum network_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given network.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given network.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given network.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the network instances with the given label.","result":["network ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified network instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"create","description":"Create a new network instance, and return its handle.\nThe constructor args are: name_label, name_description, MTU, other_config*, bridge, managed, tags (* = non-optional).","result":["network ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the network instance with the specified UUID.","result":["network ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given network.","result":["network record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"implicit":true}],"enums":[{"name":"network_operations","values":[{"name":"attaching","doc":"Indicates this network is attaching to a VIF or PIF"}]},{"name":"network_default_locking_mode","values":[{"name":"unlocked","doc":"Treat all VIFs on this network with locking_mode = 'default' as if they have locking_mode = 'unlocked'"},{"name":"disabled","doc":"Treat all VIFs on this network with locking_mode = 'default' as if they have locking_mode = 'disabled'"}]},{"name":"network_purpose","values":[{"name":"nbd","doc":"Network Block Device service using TLS"},{"name":"insecure_nbd","doc":"Network Block Device service without integrity or confidentiality: NOT RECOMMENDED"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network"}]},"tag":"networking"},{"name":"VIF","description":"A virtual network interface","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vif_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vif_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"device","description":"order in which VIF backends are created by xapi","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"order in which VIF backends are created by xapi"}]}},{"name":"network","description":"virtual network to which this vif is connected","type":"network ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network to which this vif is connected"}]}},{"name":"VM","description":"virtual machine to which this vif is connected","type":"VM ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual machine to which this vif is connected"}]}},{"name":"MAC","description":"ethernet MAC address of virtual interface, as exposed to guest","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"ethernet MAC address of virtual interface, as exposed to guest"}]}},{"name":"MTU","description":"MTU in octets","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"MTU in octets"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"currently_attached","description":"is the device currently attached (erased on reboot)","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow plugged VIF and VBD creation for Suspended VM"}]},"default":"false"},{"name":"status_code","description":"error/success code associated with last attach-operation (erased on reboot)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success code associated with last attach-operation (erased on reboot)"}]}},{"name":"status_detail","description":"error/success information associated with last attach-operation status (erased on reboot)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success information associated with last attach-operation status (erased on reboot)"}]}},{"name":"runtime_properties","description":"Device runtime properties","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Device runtime properties"}]}},{"name":"qos_algorithm_type","description":"QoS algorithm to use","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]}},{"name":"qos_algorithm_params","description":"parameters for chosen QoS algorithm","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]}},{"name":"qos_supported_algorithms","description":"supported QoS algorithms for this VIF","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"supported QoS algorithms for this VIF"}]}},{"name":"metrics","description":"metrics associated with this VIF","type":"VIF_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"default":"OpaqueRef:NULL"},{"name":"MAC_autogenerated","description":"true if the MAC was autogenerated; false indicates it was set manually","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true if the MAC was autogenerated; false indicates it was set manually"}]},"default":"false"},{"name":"locking_mode","description":"current locking mode of the VIF","type":"enum vif_locking_mode","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"current locking mode of the VIF"}]},"default":"network_default"},{"name":"ipv4_allowed","description":"A list of IPv4 addresses which can be used to filter traffic passing through this VIF","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"A list of IPv4 addresses which can be used to filter traffic passing through this VIF"}]},"default":"{}"},{"name":"ipv6_allowed","description":"A list of IPv6 addresses which can be used to filter traffic passing through this VIF","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"A list of IPv6 addresses which can be used to filter traffic passing through this VIF"}]},"default":"{}"},{"name":"ipv4_configuration_mode","description":"Determines whether IPv4 addresses are configured on the VIF","type":"enum vif_ipv4_configuration_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Determines whether IPv4 addresses are configured on the VIF"}]},"default":"None"},{"name":"ipv4_addresses","description":"IPv4 addresses in CIDR format","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv4 addresses in CIDR format"}]},"default":"{}"},{"name":"ipv4_gateway","description":"IPv4 gateway (the empty string means that no gateway is set)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv4 gateway (the empty string means that no gateway is set)"}]},"default":"\"\""},{"name":"ipv6_configuration_mode","description":"Determines whether IPv6 addresses are configured on the VIF","type":"enum vif_ipv6_configuration_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Determines whether IPv6 addresses are configured on the VIF"}]},"default":"None"},{"name":"ipv6_addresses","description":"IPv6 addresses in CIDR format","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv6 addresses in CIDR format"}]},"default":"{}"},{"name":"ipv6_gateway","description":"IPv6 gateway (the empty string means that no gateway is set)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv6 gateway (the empty string means that no gateway is set)"}]},"default":"\"\""}],"messages":[{"name":"get_all_records","description":"Return a map of VIF references to VIF records for all VIFs known to the system.","result":["(VIF ref -> VIF record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VIFs known to the system.","result":["VIF ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true},{"name":"configure_ipv6","description":"Configure IPv6 settings for this virtual interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to configure"},{"type":"enum vif_ipv6_configuration_mode","name":"mode","doc":"Whether to use static or no IPv6 assignment"},{"type":"string","name":"address","doc":"The IPv6 address in / format (for static mode only)"},{"type":"string","name":"gateway","doc":"The IPv6 gateway (for static mode only; leave empty to not set a gateway)"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configure IPv6 settings for this virtual interface"}]},"implicit":false},{"name":"configure_ipv4","description":"Configure IPv4 settings for this virtual interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to configure"},{"type":"enum vif_ipv4_configuration_mode","name":"mode","doc":"Whether to use static or no IPv4 assignment"},{"type":"string","name":"address","doc":"The IPv4 address in / format (for static mode only)"},{"type":"string","name":"gateway","doc":"The IPv4 gateway (for static mode only; leave empty to not set a gateway)"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Configure IPv4 settings for this virtual interface"}]},"implicit":false},{"name":"remove_ipv6_allowed","description":"Removes an IPv6 address from this VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF from which the IP address will be removed"},{"type":"string","name":"value","doc":"The IP address which will be removed from the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Removes an IPv6 address from this VIF"}]},"implicit":false},{"name":"add_ipv6_allowed","description":"Associates an IPv6 address with this VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF which the IP address will be associated with"},{"type":"string","name":"value","doc":"The IP address which will be associated with the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Associates an IPv6 address with this VIF"}]},"implicit":false},{"name":"set_ipv6_allowed","description":"Set the IPv6 addresses to which traffic on this VIF can be restricted","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF which the IP addresses will be associated with"},{"type":"string set","name":"value","doc":"The IP addresses which will be associated with the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Set the IPv6 addresses to which traffic on this VIF can be restricted"}]},"implicit":false},{"name":"remove_ipv4_allowed","description":"Removes an IPv4 address from this VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF from which the IP address will be removed"},{"type":"string","name":"value","doc":"The IP address which will be removed from the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Removes an IPv4 address from this VIF"}]},"implicit":false},{"name":"add_ipv4_allowed","description":"Associates an IPv4 address with this VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF which the IP address will be associated with"},{"type":"string","name":"value","doc":"The IP address which will be associated with the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Associates an IPv4 address with this VIF"}]},"implicit":false},{"name":"set_ipv4_allowed","description":"Set the IPv4 addresses to which traffic on this VIF can be restricted","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF which the IP addresses will be associated with"},{"type":"string set","name":"value","doc":"The IP addresses which will be associated with the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Set the IPv4 addresses to which traffic on this VIF can be restricted"}]},"implicit":false},{"name":"set_locking_mode","description":"Set the locking mode for this VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF whose locking mode will be set"},{"type":"enum vif_locking_mode","name":"value","doc":"The new locking mode for the VIF"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Set the locking mode for this VIF"}]},"implicit":false},{"name":"move","description":"Move the specified VIF to the specified network, even while the VM is running","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to move"},{"type":"network ref","name":"network","doc":"The network to move it to"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":"Move the specified VIF to the specified network, even while the VM is running"}]},"implicit":false},{"name":"unplug_force","description":"Forcibly unplug the specified VIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to forcibly unplug"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Forcibly unplug the specified VIF"}]},"implicit":false},{"name":"unplug","description":"Hot-unplug the specified VIF, dynamically unattaching it from the running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to hot-unplug"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Hot-unplug the specified VIF, dynamically unattaching it from the running VM"}]},"implicit":false},{"name":"plug","description":"Hotplug the specified VIF, dynamically attaching it to the running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"The VIF to hotplug"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Hotplug the specified VIF, dynamically attaching it to the running VM"}]},"implicit":false},{"name":"remove_from_qos_algorithm_params","description":"Remove the given key and its corresponding value from the qos/algorithm_params field of the given VIF. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"add_to_qos_algorithm_params","description":"Add the given key-value pair to the qos/algorithm_params field of the given VIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"set_qos_algorithm_params","description":"Set the qos/algorithm_params field of the given VIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"set_qos_algorithm_type","description":"Set the qos/algorithm_type field of the given VIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VIF. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_ipv6_gateway","description":"Get the ipv6_gateway field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv6 gateway (the empty string means that no gateway is set)"}]},"implicit":true},{"name":"get_ipv6_addresses","description":"Get the ipv6_addresses field of the given VIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv6 addresses in CIDR format"}]},"implicit":true},{"name":"get_ipv6_configuration_mode","description":"Get the ipv6_configuration_mode field of the given VIF.","result":["enum vif_ipv6_configuration_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Determines whether IPv6 addresses are configured on the VIF"}]},"implicit":true},{"name":"get_ipv4_gateway","description":"Get the ipv4_gateway field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv4 gateway (the empty string means that no gateway is set)"}]},"implicit":true},{"name":"get_ipv4_addresses","description":"Get the ipv4_addresses field of the given VIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"IPv4 addresses in CIDR format"}]},"implicit":true},{"name":"get_ipv4_configuration_mode","description":"Get the ipv4_configuration_mode field of the given VIF.","result":["enum vif_ipv4_configuration_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Determines whether IPv4 addresses are configured on the VIF"}]},"implicit":true},{"name":"get_ipv6_allowed","description":"Get the ipv6_allowed field of the given VIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"A list of IPv6 addresses which can be used to filter traffic passing through this VIF"}]},"implicit":true},{"name":"get_ipv4_allowed","description":"Get the ipv4_allowed field of the given VIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"A list of IPv4 addresses which can be used to filter traffic passing through this VIF"}]},"implicit":true},{"name":"get_locking_mode","description":"Get the locking_mode field of the given VIF.","result":["enum vif_locking_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"current locking mode of the VIF"}]},"implicit":true},{"name":"get_MAC_autogenerated","description":"Get the MAC_autogenerated field of the given VIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"true if the MAC was autogenerated; false indicates it was set manually"}]},"implicit":true},{"name":"get_metrics","description":"Get the metrics field of the given VIF.","result":["VIF_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"get_qos_supported_algorithms","description":"Get the qos/supported_algorithms field of the given VIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"supported QoS algorithms for this VIF"}]},"implicit":true},{"name":"get_qos_algorithm_params","description":"Get the qos/algorithm_params field of the given VIF.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"get_qos_algorithm_type","description":"Get the qos/algorithm_type field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]},"implicit":true},{"name":"get_runtime_properties","description":"Get the runtime_properties field of the given VIF.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Device runtime properties"}]},"implicit":true},{"name":"get_status_detail","description":"Get the status_detail field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success information associated with last attach-operation status (erased on reboot)"}]},"implicit":true},{"name":"get_status_code","description":"Get the status_code field of the given VIF.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success code associated with last attach-operation (erased on reboot)"}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given VIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow plugged VIF and VBD creation for Suspended VM"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VIF.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_MTU","description":"Get the MTU field of the given VIF.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"MTU in octets"}]},"implicit":true},{"name":"get_MAC","description":"Get the MAC field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"ethernet MAC address of virtual interface, as exposed to guest"}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given VIF.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual machine to which this vif is connected"}]},"implicit":true},{"name":"get_network","description":"Get the network field of the given VIF.","result":["network ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network to which this vif is connected"}]},"implicit":true},{"name":"get_device","description":"Get the device field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"order in which VIF backends are created by xapi"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VIF.","result":["(string -> enum vif_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VIF.","result":["enum vif_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VIF instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true},{"name":"create","description":"Create a new VIF instance, and return its handle.\nThe constructor args are: device*, network*, VM*, MAC*, MTU*, other_config*, currently_attached, qos_algorithm_type*, qos_algorithm_params*, locking_mode, ipv4_allowed, ipv6_allowed (* = non-optional).","result":["VIF ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VIF instance with the specified UUID.","result":["VIF ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VIF.","result":["VIF record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"implicit":true}],"enums":[{"name":"vif_operations","values":[{"name":"attach","doc":"Attempting to attach this VIF to a VM"},{"name":"plug","doc":"Attempting to hotplug this VIF"},{"name":"unplug","doc":"Attempting to hot unplug this VIF"}]},{"name":"vif_locking_mode","values":[{"name":"network_default","doc":"No specific configuration set - default network policy applies"},{"name":"locked","doc":"Only traffic to a specific MAC and a list of IPv4 or IPv6 addresses is permitted"},{"name":"unlocked","doc":"All traffic is permitted"},{"name":"disabled","doc":"No traffic is permitted"}]},{"name":"vif_ipv4_configuration_mode","values":[{"name":"None","doc":"Follow the default IPv4 configuration of the guest (this is guest-dependent)"},{"name":"Static","doc":"Static IPv4 address configuration"}]},{"name":"vif_ipv6_configuration_mode","values":[{"name":"None","doc":"Follow the default IPv6 configuration of the guest (this is guest-dependent)"},{"name":"Static","doc":"Static IPv6 address configuration"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual network interface"}]},"tag":"networking"},{"name":"VIF_metrics","description":"The metrics associated with a virtual network device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"io_read_kbs","description":"Read bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"io_write_kbs","description":"Write bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VIF_metrics references to VIF_metrics records for all VIF_metrics instances known to the system.","result":["(VIF_metrics ref -> VIF_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual network device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VIF_metrics instances known to the system.","result":["VIF_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual network device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VIF_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VIF_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VIF_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VIF_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given VIF_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]},"implicit":true},{"name":"get_io_write_kbs","description":"Get the io/write_kbs field of the given VIF_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_io_read_kbs","description":"Get the io/read_kbs field of the given VIF_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VIF_metrics instance with the specified UUID.","result":["VIF_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual network device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VIF_metrics.","result":["VIF_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual network device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual network device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"tag":"networking"},{"name":"PIF","description":"A physical network interface (note separate VLANs are represented as several PIFs)","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"device","description":"machine-readable name of the interface (e.g. eth0)","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"machine-readable name of the interface (e.g. eth0)"}]}},{"name":"network","description":"virtual network to which this pif is connected","type":"network ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network to which this pif is connected"}]}},{"name":"host","description":"physical machine to which this pif is connected","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical machine to which this pif is connected"}]}},{"name":"MAC","description":"ethernet MAC address of physical interface","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"ethernet MAC address of physical interface"}]}},{"name":"MTU","description":"MTU in octets","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"MTU in octets"}]}},{"name":"VLAN","description":"VLAN tag for all traffic passing through this interface","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VLAN tag for all traffic passing through this interface"}]}},{"name":"metrics","description":"metrics associated with this PIF","type":"PIF_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this PIF"}]}},{"name":"physical","description":"true if this represents a physical network interface","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this represents a physical network interface"}]},"default":"false"},{"name":"currently_attached","description":"true if this interface is online","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this interface is online"}]},"default":"true"},{"name":"ip_configuration_mode","description":"Sets if and how this interface gets an IP address","type":"enum ip_configuration_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Sets if and how this interface gets an IP address"}]},"default":"None"},{"name":"IP","description":"IP address","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP address"}]},"default":"\"\""},{"name":"netmask","description":"IP netmask","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP netmask"}]},"default":"\"\""},{"name":"gateway","description":"IP gateway","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP gateway"}]},"default":"\"\""},{"name":"DNS","description":"Comma separated list of the IP addresses of the DNS servers to use","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Comma separated list of the IP addresses of the DNS servers to use"}]},"default":"\"\""},{"name":"bond_slave_of","description":"Indicates which bond this interface is part of","type":"Bond ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which bond this interface is part of"}]},"default":"Null"},{"name":"bond_master_of","description":"Indicates this PIF represents the results of a bond","type":"Bond ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates this PIF represents the results of a bond"}]}},{"name":"VLAN_master_of","description":"Indicates which VLAN this interface receives untagged traffic from","type":"VLAN ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which VLAN this interface receives untagged traffic from"}]},"default":"Null"},{"name":"VLAN_slave_of","description":"Indicates which VLANs this interface transmits tagged traffic to","type":"VLAN ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which VLANs this interface transmits tagged traffic to"}]}},{"name":"management","description":"Indicates whether the control software is listening for connections on this interface","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates whether the control software is listening for connections on this interface"}]},"default":"false"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Additional configuration"}]},"default":"{}"},{"name":"disallow_unplug","description":"Prevent this PIF from being unplugged; set this to notify the management tool-stack that the PIF has a special use and should not be unplugged under any circumstances (e.g. because you're running storage traffic over it)","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Prevent this PIF from being unplugged; set this to notify the management tool-stack that the PIF has a special use and should not be unplugged under any circumstances (e.g. because you're running storage traffic over it)"}]},"default":"false"},{"name":"tunnel_access_PIF_of","description":"Indicates to which tunnel this PIF gives access","type":"tunnel ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Indicates to which tunnel this PIF gives access"}]}},{"name":"tunnel_transport_PIF_of","description":"Indicates to which tunnel this PIF provides transport","type":"tunnel ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Indicates to which tunnel this PIF provides transport"}]}},{"name":"ipv6_configuration_mode","description":"Sets if and how this interface gets an IPv6 address","type":"enum ipv6_configuration_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"default":"None"},{"name":"IPv6","description":"IPv6 address","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"default":"{}"},{"name":"ipv6_gateway","description":"IPv6 gateway","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"default":"\"\""},{"name":"primary_address_type","description":"Which protocol should define the primary address of this interface","type":"enum primary_address_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"default":"IPv4"},{"name":"managed","description":"Indicates whether the interface is managed by xapi. If it is not, then xapi will not configure the interface, the commands PIF.plug/unplug/reconfigure_ip(v6) cannot be used, nor can the interface be bonded or have VLANs based on top through xapi.","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"default":"true"},{"name":"properties","description":"Additional configuration properties for the interface.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":""}]},"default":"{}"},{"name":"capabilities","description":"Additional capabilities on the interface.","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"{}"},{"name":"igmp_snooping_status","description":"The IGMP snooping status of the corresponding network bridge","type":"enum pif_igmp_status","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"unknown"},{"name":"sriov_physical_PIF_of","description":"Indicates which network_sriov this interface is physical of","type":"network_sriov ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":"Indicates which network_sriov this interface is physical of"}]}},{"name":"sriov_logical_PIF_of","description":"Indicates which network_sriov this interface is logical of","type":"network_sriov ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":"Indicates which network_sriov this interface is logical of"}]}},{"name":"PCI","description":"Link to underlying PCI device","type":"PCI ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"OpaqueRef:NULL"}],"messages":[{"name":"get_all_records","description":"Return a map of PIF references to PIF records for all PIFs known to the system.","result":["(PIF ref -> PIF record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical network interface (note separate VLANs are represented as several PIFs)"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PIFs known to the system.","result":["PIF ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical network interface (note separate VLANs are represented as several PIFs)"}]},"implicit":true},{"name":"set_property","description":"Set the value of a property of the PIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"The PIF"},{"type":"string","name":"name","doc":"The property name"},{"type":"string","name":"value","doc":"The property value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":""}]},"implicit":false},{"name":"db_forget","description":"Destroy a PIF database record.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"The ref of the PIF whose database record should be destroyed"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Destroy a PIF database record."}]},"implicit":false},{"name":"db_introduce","description":"Create a new PIF record in the database only","result":["PIF ref","The ref of the newly created PIF record."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"device","doc":""},{"type":"network ref","name":"network","doc":""},{"type":"host ref","name":"host","doc":""},{"type":"string","name":"MAC","doc":""},{"type":"int","name":"MTU","doc":""},{"type":"int","name":"VLAN","doc":""},{"type":"bool","name":"physical","doc":""},{"type":"enum ip_configuration_mode","name":"ip_configuration_mode","doc":""},{"type":"string","name":"IP","doc":""},{"type":"string","name":"netmask","doc":""},{"type":"string","name":"gateway","doc":""},{"type":"string","name":"DNS","doc":""},{"type":"Bond ref","name":"bond_slave_of","doc":""},{"type":"VLAN ref","name":"VLAN_master_of","doc":""},{"type":"bool","name":"management","doc":""},{"type":"(string -> string) map","name":"other_config","doc":""},{"type":"bool","name":"disallow_unplug","doc":""},{"type":"enum ipv6_configuration_mode","name":"ipv6_configuration_mode","doc":""},{"type":"string set","name":"IPv6","doc":""},{"type":"string","name":"ipv6_gateway","doc":""},{"type":"enum primary_address_type","name":"primary_address_type","doc":""},{"type":"bool","name":"managed","doc":""},{"type":"(string -> string) map","name":"properties","doc":""}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a new PIF record in the database only"}]},"implicit":false},{"name":"plug","description":"Attempt to bring up a physical interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to plug"}],"errors":[{"name":"TRANSPORT_PIF_NOT_CONFIGURED","doc":"The tunnel transport PIF has no IP configuration set."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Attempt to bring up a physical interface"}]},"implicit":false},{"name":"set_disallow_unplug","description":"Set whether unplugging the PIF is allowed","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"Reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[{"name":"OTHER_OPERATION_IN_PROGRESS","doc":"Another operation involving the object is currently in progress"},{"name":"CLUSTERING_ENABLED","doc":"An operation was attempted while clustering was enabled on the cluster_host."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Set whether unplugging the PIF is allowed"}]},"implicit":false},{"name":"unplug","description":"Attempt to bring down a physical interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to unplug"}],"errors":[{"name":"HA_OPERATION_WOULD_BREAK_FAILOVER_PLAN","doc":"This operation cannot be performed because it would invalidate VM failover planning such that the system would be unable to guarantee to restart protected VMs after a Host failure."},{"name":"VIF_IN_USE","doc":"Network has active VIFs"},{"name":"PIF_DOES_NOT_ALLOW_UNPLUG","doc":"The operation you requested cannot be performed because the specified PIF does not allow unplug."},{"name":"PIF_HAS_FCOE_SR_IN_USE","doc":"The operation you requested cannot be performed because the specified PIF has FCoE SR in use."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Attempt to bring down a physical interface"}]},"implicit":false},{"name":"forget","description":"Destroy the PIF object matching a particular network interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"The PIF object to destroy"}],"errors":[{"name":"PIF_TUNNEL_STILL_EXISTS","doc":"Operation cannot proceed while a tunnel exists on this interface."},{"name":"CLUSTERING_ENABLED","doc":"An operation was attempted while clustering was enabled on the cluster_host."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Destroy the PIF object matching a particular network interface"}]},"implicit":false},{"name":"introduce","description":"Create a PIF object matching a particular network interface","result":["PIF ref","The reference of the created PIF object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host on which the interface exists"},{"type":"string","name":"MAC","doc":"The MAC address of the interface"},{"type":"string","name":"device","doc":"The device name to use for the interface"},{"type":"bool","name":"managed","doc":"Indicates whether the interface is managed by xapi (defaults to \"true\")"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Create a PIF object matching a particular network interface"}]},"implicit":false},{"name":"scan","description":"Scan for physical interfaces on a host and create PIF objects to represent them","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host on which to scan"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Scan for physical interfaces on a host and create PIF objects to represent them"}]},"implicit":false},{"name":"set_primary_address_type","description":"Change the primary address type used by this PIF","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to reconfigure"},{"type":"enum primary_address_type","name":"primary_address_type","doc":"Whether to prefer IPv4 or IPv6 connections"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":false},{"name":"reconfigure_ipv6","description":"Reconfigure the IPv6 address settings for this interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to reconfigure"},{"type":"enum ipv6_configuration_mode","name":"mode","doc":"whether to use dynamic/static/no-assignment"},{"type":"string","name":"IPv6","doc":"the new IPv6 address (in / format)"},{"type":"string","name":"gateway","doc":"the new gateway"},{"type":"string","name":"DNS","doc":"the new DNS settings"}],"errors":[{"name":"CLUSTERING_ENABLED","doc":"An operation was attempted while clustering was enabled on the cluster_host."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":false},{"name":"reconfigure_ip","description":"Reconfigure the IP address settings for this interface","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to reconfigure"},{"type":"enum ip_configuration_mode","name":"mode","doc":"whether to use dynamic/static/no-assignment"},{"type":"string","name":"IP","doc":"the new IP address"},{"type":"string","name":"netmask","doc":"the new netmask"},{"type":"string","name":"gateway","doc":"the new gateway"},{"type":"string","name":"DNS","doc":"the new DNS settings"}],"errors":[{"name":"CLUSTERING_ENABLED","doc":"An operation was attempted while clustering was enabled on the cluster_host."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Reconfigure the IP address settings for this interface"}]},"implicit":false},{"name":"destroy","description":"Destroy the PIF object (provided it is a VLAN interface). This call is deprecated: use VLAN.destroy or Bond.destroy instead","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"the PIF object to destroy"}],"errors":[{"name":"PIF_IS_PHYSICAL","doc":"You tried to destroy a PIF, but it represents an aspect of the physical host configuration, and so cannot be destroyed. The parameter echoes the PIF handle you gave."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Destroy the PIF object (provided it is a VLAN interface)"},{"transition":"deprecated","release":"miami","description":"Replaced by VLAN.destroy and Bond.destroy"}]},"implicit":false},{"name":"create_VLAN","description":"Create a VLAN interface from an existing physical interface. This call is deprecated: use VLAN.create instead","result":["PIF ref","The reference of the created PIF object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"device","doc":"physical interface on which to create the VLAN interface"},{"type":"network ref","name":"network","doc":"network to which this interface should be connected"},{"type":"host ref","name":"host","doc":"physical machine to which this PIF is connected"},{"type":"int","name":"VLAN","doc":"VLAN tag for the new interface"}],"errors":[{"name":"VLAN_TAG_INVALID","doc":"You tried to create a VLAN, but the tag you gave was invalid -- it must be between 0 and 4094. The parameter echoes the VLAN tag you gave."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Create a VLAN interface from an existing physical interface"},{"transition":"deprecated","release":"miami","description":"Replaced by VLAN.create"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PIF. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PIF.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Additional configuration"}]},"implicit":true},{"name":"get_PCI","description":"Get the PCI field of the given PIF.","result":["PCI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_sriov_logical_PIF_of","description":"Get the sriov_logical_PIF_of field of the given PIF.","result":["network_sriov ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":"Indicates which network_sriov this interface is logical of"}]},"implicit":true},{"name":"get_sriov_physical_PIF_of","description":"Get the sriov_physical_PIF_of field of the given PIF.","result":["network_sriov ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":"Indicates which network_sriov this interface is physical of"}]},"implicit":true},{"name":"get_igmp_snooping_status","description":"Get the igmp_snooping_status field of the given PIF.","result":["enum pif_igmp_status","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_capabilities","description":"Get the capabilities field of the given PIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_properties","description":"Get the properties field of the given PIF.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"creedence","description":""}]},"implicit":true},{"name":"get_managed","description":"Get the managed field of the given PIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_primary_address_type","description":"Get the primary_address_type field of the given PIF.","result":["enum primary_address_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":true},{"name":"get_ipv6_gateway","description":"Get the ipv6_gateway field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":true},{"name":"get_IPv6","description":"Get the IPv6 field of the given PIF.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":true},{"name":"get_ipv6_configuration_mode","description":"Get the ipv6_configuration_mode field of the given PIF.","result":["enum ipv6_configuration_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":""}]},"implicit":true},{"name":"get_tunnel_transport_PIF_of","description":"Get the tunnel_transport_PIF_of field of the given PIF.","result":["tunnel ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Indicates to which tunnel this PIF provides transport"}]},"implicit":true},{"name":"get_tunnel_access_PIF_of","description":"Get the tunnel_access_PIF_of field of the given PIF.","result":["tunnel ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Indicates to which tunnel this PIF gives access"}]},"implicit":true},{"name":"get_disallow_unplug","description":"Get the disallow_unplug field of the given PIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Prevent this PIF from being unplugged; set this to notify the management tool-stack that the PIF has a special use and should not be unplugged under any circumstances (e.g. because you're running storage traffic over it)"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PIF.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Additional configuration"}]},"implicit":true},{"name":"get_management","description":"Get the management field of the given PIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates whether the control software is listening for connections on this interface"}]},"implicit":true},{"name":"get_VLAN_slave_of","description":"Get the VLAN_slave_of field of the given PIF.","result":["VLAN ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which VLANs this interface transmits tagged traffic to"}]},"implicit":true},{"name":"get_VLAN_master_of","description":"Get the VLAN_master_of field of the given PIF.","result":["VLAN ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which VLAN this interface receives untagged traffic from"}]},"implicit":true},{"name":"get_bond_master_of","description":"Get the bond_master_of field of the given PIF.","result":["Bond ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates this PIF represents the results of a bond"}]},"implicit":true},{"name":"get_bond_slave_of","description":"Get the bond_slave_of field of the given PIF.","result":["Bond ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Indicates which bond this interface is part of"}]},"implicit":true},{"name":"get_DNS","description":"Get the DNS field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Comma separated list of the IP addresses of the DNS servers to use"}]},"implicit":true},{"name":"get_gateway","description":"Get the gateway field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP gateway"}]},"implicit":true},{"name":"get_netmask","description":"Get the netmask field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP netmask"}]},"implicit":true},{"name":"get_IP","description":"Get the IP field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"IP address"}]},"implicit":true},{"name":"get_ip_configuration_mode","description":"Get the ip_configuration_mode field of the given PIF.","result":["enum ip_configuration_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Sets if and how this interface gets an IP address"}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given PIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this interface is online"}]},"implicit":true},{"name":"get_physical","description":"Get the physical field of the given PIF.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this represents a physical network interface"}]},"implicit":true},{"name":"get_metrics","description":"Get the metrics field of the given PIF.","result":["PIF_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"metrics associated with this PIF"}]},"implicit":true},{"name":"get_VLAN","description":"Get the VLAN field of the given PIF.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VLAN tag for all traffic passing through this interface"}]},"implicit":true},{"name":"get_MTU","description":"Get the MTU field of the given PIF.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"MTU in octets"}]},"implicit":true},{"name":"get_MAC","description":"Get the MAC field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"ethernet MAC address of physical interface"}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PIF.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical machine to which this pif is connected"}]},"implicit":true},{"name":"get_network","description":"Get the network field of the given PIF.","result":["network ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"virtual network to which this pif is connected"}]},"implicit":true},{"name":"get_device","description":"Get the device field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"machine-readable name of the interface (e.g. eth0)"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PIF.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PIF instance with the specified UUID.","result":["PIF ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical network interface (note separate VLANs are represented as several PIFs)"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PIF.","result":["PIF record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical network interface (note separate VLANs are represented as several PIFs)"}]},"implicit":true}],"enums":[{"name":"pif_igmp_status","values":[{"name":"enabled","doc":"IGMP Snooping is enabled in the corresponding backend bridge.'"},{"name":"disabled","doc":"IGMP Snooping is disabled in the corresponding backend bridge.'"},{"name":"unknown","doc":"IGMP snooping status is unknown. If this is a VLAN master, then please consult the underlying VLAN slave PIF."}]},{"name":"ip_configuration_mode","values":[{"name":"None","doc":"Do not acquire an IP address"},{"name":"DHCP","doc":"Acquire an IP address by DHCP"},{"name":"Static","doc":"Static IP address configuration"}]},{"name":"ipv6_configuration_mode","values":[{"name":"None","doc":"Do not acquire an IPv6 address"},{"name":"DHCP","doc":"Acquire an IPv6 address by DHCP"},{"name":"Static","doc":"Static IPv6 address configuration"},{"name":"Autoconf","doc":"Router assigned prefix delegation IPv6 allocation"}]},{"name":"primary_address_type","values":[{"name":"IPv4","doc":"Primary address is the IPv4 address"},{"name":"IPv6","doc":"Primary address is the IPv6 address"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A physical network interface (note separate VLANs are represented as several PIFs)"}]},"tag":"networking"},{"name":"PIF_metrics","description":"The metrics associated with a physical network interface","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"io_read_kbs","description":"Read bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"io_write_kbs","description":"Write bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"carrier","description":"Report if the PIF got a carrier or not","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report if the PIF got a carrier or not"}]}},{"name":"vendor_id","description":"Report vendor ID","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report vendor ID"}]}},{"name":"vendor_name","description":"Report vendor name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report vendor name"}]}},{"name":"device_id","description":"Report device ID","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report device ID"}]}},{"name":"device_name","description":"Report device name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report device name"}]}},{"name":"speed","description":"Speed of the link in Mbit/s (if available)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Speed of the link in Mbit/s (if available)"}]}},{"name":"duplex","description":"Full duplex capability of the link (if available)","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Full duplex capability of the link (if available)"}]}},{"name":"pci_bus_path","description":"PCI bus path of the pif (if available)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"PCI bus path of the pif (if available)"}]}},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of PIF_metrics references to PIF_metrics records for all PIF_metrics instances known to the system.","result":["(PIF_metrics ref -> PIF_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a physical network interface"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PIF_metrics instances known to the system.","result":["PIF_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a physical network interface"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PIF_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PIF_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PIF_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PIF_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given PIF_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which this information was last updated"}]},"implicit":true},{"name":"get_pci_bus_path","description":"Get the pci_bus_path field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"PCI bus path of the pif (if available)"}]},"implicit":true},{"name":"get_duplex","description":"Get the duplex field of the given PIF_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Full duplex capability of the link (if available)"}]},"implicit":true},{"name":"get_speed","description":"Get the speed field of the given PIF_metrics.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Speed of the link in Mbit/s (if available)"}]},"implicit":true},{"name":"get_device_name","description":"Get the device_name field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report device name"}]},"implicit":true},{"name":"get_device_id","description":"Get the device_id field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report device ID"}]},"implicit":true},{"name":"get_vendor_name","description":"Get the vendor_name field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report vendor name"}]},"implicit":true},{"name":"get_vendor_id","description":"Get the vendor_id field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report vendor ID"}]},"implicit":true},{"name":"get_carrier","description":"Get the carrier field of the given PIF_metrics.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Report if the PIF got a carrier or not"}]},"implicit":true},{"name":"get_io_write_kbs","description":"Get the io/write_kbs field of the given PIF_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_io_read_kbs","description":"Get the io/read_kbs field of the given PIF_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PIF_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PIF_metrics instance with the specified UUID.","result":["PIF_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a physical network interface"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PIF_metrics.","result":["PIF_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a physical network interface"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a physical network interface"}]},"tag":"networking"},{"name":"Bond","description":"A Network bond that combines physical network interfaces, also known as link aggregation","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"master","description":"The bonded interface","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The bonded interface"}]},"default":"Null"},{"name":"slaves","description":"The interfaces which are part of this bond","type":"PIF ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The interfaces which are part of this bond"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"},{"name":"primary_slave","description":"The PIF of which the IP configuration and MAC were copied to the bond, and which will receive all configuration/VLANs/VIFs on the bond if the bond is destroyed","type":"PIF ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"OpaqueRef:NULL"},{"name":"mode","description":"The algorithm used to distribute traffic among the bonded NICs","type":"enum bond_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"balance-slb"},{"name":"properties","description":"Additional configuration properties specific to the bond mode.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Additional configuration properties specific to the bond mode."}]},"default":"{}"},{"name":"links_up","description":"Number of links up in this bond","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Number of links up in this bond"}]},"default":"0"},{"name":"auto_update_mac","description":"true if the MAC was taken from the primary slave when the bond was created, and false if the client specified the MAC","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"default":"true"}],"messages":[{"name":"get_all_records","description":"Return a map of Bond references to Bond records for all Bonds known to the system.","result":["(Bond ref -> Bond record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A Network bond that combines physical network interfaces, also known as link aggregation"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Bonds known to the system.","result":["Bond ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A Network bond that combines physical network interfaces, also known as link aggregation"}]},"implicit":true},{"name":"set_property","description":"Set the value of a property of the bond","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"The bond"},{"type":"string","name":"name","doc":"The property name"},{"type":"string","name":"value","doc":"The property value"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Set the value of a property of the bond"}]},"implicit":false},{"name":"set_mode","description":"Change the bond mode","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"The bond"},{"type":"enum bond_mode","name":"value","doc":"The new bond mode"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"destroy","description":"Destroy an interface bond","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"Bond to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Destroy an interface bond"}]},"implicit":false},{"name":"create","description":"Create an interface bond","result":["Bond ref","The reference of the created Bond object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"network","doc":"Network to add the bonded PIF to"},{"type":"PIF ref set","name":"members","doc":"PIFs to add to this bond"},{"type":"string","name":"MAC","doc":"The MAC address to use on the bond itself. If this parameter is the empty string then the bond will inherit its MAC address from the primary slave."},{"type":"enum bond_mode","name":"mode","doc":"Bonding mode to use for the new bond"},{"type":"(string -> string) map","name":"properties","doc":"Additional configuration parameters specific to the bond mode"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Create an interface bond"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given Bond. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given Bond.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given Bond.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_auto_update_mac","description":"Get the auto_update_mac field of the given Bond.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"implicit":true},{"name":"get_links_up","description":"Get the links_up field of the given Bond.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Number of links up in this bond"}]},"implicit":true},{"name":"get_properties","description":"Get the properties field of the given Bond.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Additional configuration properties specific to the bond mode."}]},"implicit":true},{"name":"get_mode","description":"Get the mode field of the given Bond.","result":["enum bond_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_primary_slave","description":"Get the primary_slave field of the given Bond.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given Bond.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_slaves","description":"Get the slaves field of the given Bond.","result":["PIF ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The interfaces which are part of this bond"}]},"implicit":true},{"name":"get_master","description":"Get the master field of the given Bond.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"The bonded interface"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Bond.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Bond instance with the specified UUID.","result":["Bond ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A Network bond that combines physical network interfaces, also known as link aggregation"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Bond.","result":["Bond record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Bond ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A Network bond that combines physical network interfaces, also known as link aggregation"}]},"implicit":true}],"enums":[{"name":"bond_mode","values":[{"name":"balance-slb","doc":"Source-level balancing"},{"name":"active-backup","doc":"Active/passive bonding: only one NIC is carrying traffic"},{"name":"lacp","doc":"Link aggregation control protocol"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A Network bond that combines physical network interfaces, also known as link aggregation"}]},"tag":"networking"},{"name":"VLAN","description":"A VLAN mux/demux","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"tagged_PIF","description":"interface on which traffic is tagged","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"interface on which traffic is tagged"}]},"default":"Null"},{"name":"untagged_PIF","description":"interface on which traffic is untagged","type":"PIF ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"interface on which traffic is untagged"}]},"default":"Null"},{"name":"tag","description":"VLAN tag in use","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"VLAN tag in use"}]},"default":"-1"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VLAN references to VLAN records for all VLANs known to the system.","result":["(VLAN ref -> VLAN record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A VLAN mux/demux"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VLANs known to the system.","result":["VLAN ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A VLAN mux/demux"}]},"implicit":true},{"name":"destroy","description":"Destroy a VLAN mux/demuxer","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"VLAN mux/demuxer to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Destroy a VLAN mux/demuxer"}]},"implicit":false},{"name":"create","description":"Create a VLAN mux/demuxer","result":["VLAN ref","The reference of the created VLAN object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"tagged_PIF","doc":"PIF which receives the tagged traffic"},{"type":"int","name":"tag","doc":"VLAN tag to use"},{"type":"network ref","name":"network","doc":"Network to receive the untagged traffic"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Create a VLAN mux/demuxer"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VLAN. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VLAN.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VLAN.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VLAN.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_tag","description":"Get the tag field of the given VLAN.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"VLAN tag in use"}]},"implicit":true},{"name":"get_untagged_PIF","description":"Get the untagged_PIF field of the given VLAN.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"interface on which traffic is untagged"}]},"implicit":true},{"name":"get_tagged_PIF","description":"Get the tagged_PIF field of the given VLAN.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"interface on which traffic is tagged"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VLAN.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VLAN instance with the specified UUID.","result":["VLAN ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A VLAN mux/demux"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VLAN.","result":["VLAN record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VLAN ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A VLAN mux/demux"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"A VLAN mux/demux"}]},"tag":"networking"},{"name":"SM","description":"A storage manager plugin","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"type","description":"SR.type","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"SR.type"}]}},{"name":"vendor","description":"Vendor who created this plugin","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Vendor who created this plugin"}]}},{"name":"copyright","description":"Entity which owns the copyright of this plugin","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Entity which owns the copyright of this plugin"}]}},{"name":"version","description":"Version of the plugin","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Version of the plugin"}]}},{"name":"required_api_version","description":"Minimum SM API version required on the server","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Minimum SM API version required on the server"}]}},{"name":"configuration","description":"names and descriptions of device config keys","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"names and descriptions of device config keys"}]}},{"name":"capabilities","description":"capabilities of the SM plugin","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":""},{"transition":"deprecated","release":"clearwater","description":"Use SM.features instead"}]},"default":"{}"},{"name":"features","description":"capabilities of the SM plugin, with capability version numbers","type":"(string -> int) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"capabilities of the SM plugin, with capability version numbers"}]},"default":"{}"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"},{"name":"driver_filename","description":"filename of the storage driver","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"filename of the storage driver"}]},"default":"\"\""},{"name":"required_cluster_stack","description":"The storage plugin requires that one of these cluster stacks is configured and running.","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The storage plugin requires that one of these cluster stacks is configured and running."}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of SM references to SM records for all SMs known to the system.","result":["(SM ref -> SM record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the SMs known to the system.","result":["SM ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given SM. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given SM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given SM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_required_cluster_stack","description":"Get the required_cluster_stack field of the given SM.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"The storage plugin requires that one of these cluster stacks is configured and running."}]},"implicit":true},{"name":"get_driver_filename","description":"Get the driver_filename field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"filename of the storage driver"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given SM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_features","description":"Get the features field of the given SM.","result":["(string -> int) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater","description":"capabilities of the SM plugin, with capability version numbers"}]},"implicit":true},{"name":"get_capabilities","description":"Get the capabilities field of the given SM.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"miami","description":""},{"transition":"deprecated","release":"clearwater","description":"Use SM.features instead"}]},"implicit":true},{"name":"get_configuration","description":"Get the configuration field of the given SM.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"names and descriptions of device config keys"}]},"implicit":true},{"name":"get_required_api_version","description":"Get the required_api_version field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Minimum SM API version required on the server"}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Version of the plugin"}]},"implicit":true},{"name":"get_copyright","description":"Get the copyright field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Entity which owns the copyright of this plugin"}]},"implicit":true},{"name":"get_vendor","description":"Get the vendor field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Vendor who created this plugin"}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"SR.type"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given SM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the SM instances with the given label.","result":["SM ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the SM instance with the specified UUID.","result":["SM ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given SM.","result":["SM record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage manager plugin"}]},"tag":""},{"name":"SR","description":"A storage repository","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum storage_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum storage_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VDIs","description":"all virtual disks known to this storage repository","type":"VDI ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all virtual disks known to this storage repository"}]}},{"name":"PBDs","description":"describes how particular hosts can see this storage repository","type":"PBD ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"describes how particular hosts can see this storage repository"}]}},{"name":"virtual_allocation","description":"sum of virtual_sizes of all VDIs in this storage repository (in bytes)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"sum of virtual_sizes of all VDIs in this storage repository (in bytes)"}]}},{"name":"physical_utilisation","description":"physical space currently utilised on this storage repository (in bytes). Note that for sparse disk formats, physical_utilisation may be less than virtual_allocation","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical space currently utilised on this storage repository (in bytes). Note that for sparse disk formats, physical_utilisation may be less than virtual_allocation"}]}},{"name":"physical_size","description":"total physical size of the repository (in bytes)","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"total physical size of the repository (in bytes)"}]}},{"name":"type","description":"type of the storage repository","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the storage repository"}]}},{"name":"content_type","description":"the type of the SR's content, if required (e.g. ISOs)","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the type of the SR's content, if required (e.g. ISOs)"}]}},{"name":"shared","description":"true if this SR is (capable of being) shared between multiple hosts","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this SR is (capable of being) shared between multiple hosts"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"sm_config","description":"SM dependent data","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"default":"{}"},{"name":"blobs","description":"Binary blobs associated with this SR","type":"(string -> blob ref) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this SR"}]},"default":"{}"},{"name":"local_cache_enabled","description":"True if this SR is assigned to be the local cache for its host","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"True if this SR is assigned to be the local cache for its host"}]},"default":"false"},{"name":"introduced_by","description":"The disaster recovery task which introduced this SR","type":"DR_task ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The disaster recovery task which introduced this SR"}]},"default":"OpaqueRef:NULL"},{"name":"clustered","description":"True if the SR is using aggregated local storage","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"},{"name":"is_tools_sr","description":"True if this is the SR that contains the Tools ISO VDIs","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of SR references to SR records for all SRs known to the system.","result":["(SR ref -> SR record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the SRs known to the system.","result":["SR ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"implicit":true},{"name":"forget_data_source_archives","description":"Forget the recorded statistics related to the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"data_source","doc":"The data source whose archives are to be forgotten"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Forget the recorded statistics related to the specified data source"}]},"implicit":false},{"name":"query_data_source","description":"Query the latest value of the specified data source","result":["float","The latest value, averaged over the last 5 seconds"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"data_source","doc":"The data source to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Query the latest value of the specified data source"}]},"implicit":false},{"name":"record_data_source","description":"Start recording the specified data source","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"data_source","doc":"The data source to record"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Start recording the specified data source"}]},"implicit":false},{"name":"get_data_sources","description":"","result":["data_source record set","A set of data sources"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to interrogate"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":false},{"name":"disable_database_replication","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to which metadata should be no longer replicated"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"enable_database_replication","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to which metadata should be replicated"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"assert_supports_database_replication","description":"Returns successfully if the given SR supports database replication. Otherwise returns an error to explain why not.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to query"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Returns successfully if the given SR supports database replication. Otherwise returns an error to explain why not."}]},"implicit":false},{"name":"assert_can_host_ha_statefile","description":"Returns successfully if the given SR can host an HA statefile. Otherwise returns an error to explain why not","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to query"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Returns successfully if the given SR can host an HA statefile. Otherwise returns an error to explain why not"}]},"implicit":false},{"name":"set_physical_size","description":"Sets the SR's physical_size field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"The SR to modify"},{"type":"int","name":"value","doc":"The new value of the SR's physical_size"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Sets the SR's physical_size field"}]},"implicit":false},{"name":"create_new_blob","description":"Create a placeholder for a named binary blob of data that is associated with this SR","result":["blob ref","The reference of the blob, needed for populating its data"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"name","doc":"The name associated with the blob"},{"type":"string","name":"mime_type","doc":"The mime type for the data. Empty string translates to application/octet-stream"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a named binary blob of data that is associated with this SR"}]},"implicit":false},{"name":"set_name_description","description":"Set the name description of the SR","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"value","doc":"The name description for the SR"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the name description of the SR"}]},"implicit":false},{"name":"set_name_label","description":"Set the name label of the SR","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"string","name":"value","doc":"The name label for the SR"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the name label of the SR"}]},"implicit":false},{"name":"set_shared","description":"Sets the shared flag on the SR","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR"},{"type":"bool","name":"value","doc":"True if the SR is shared"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Sets the shared flag on the SR"}]},"implicit":false},{"name":"probe_ext","description":"Perform a backend-specific scan, using the given device_config. If the device_config is complete, then this will return a list of the SRs present of this type on the device, if any. If the device_config is partial, then a backend-specific scan will be performed, returning results that will guide the user in improving the device_config.","result":["probe_result record set","A set of records containing the scan results."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to create/make the SR on"},{"type":"(string -> string) map","name":"device_config","doc":"The device config string that will be passed to backend SR driver"},{"type":"string","name":"type","doc":"The type of the SR; used to specify the SR backend driver to use"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage backend specific configuration options"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"probe","description":"Perform a backend-specific scan, using the given device_config. If the device_config is complete, then this will return a list of the SRs present of this type on the device, if any. If the device_config is partial, then a backend-specific scan will be performed, returning results that will guide the user in improving the device_config.","result":["string","An XML fragment containing the scan results. These are specific to the scan being performed, and the backend."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to create/make the SR on"},{"type":"(string -> string) map","name":"device_config","doc":"The device config string that will be passed to backend SR driver"},{"type":"string","name":"type","doc":"The type of the SR; used to specify the SR backend driver to use"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage backend specific configuration options"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Perform a backend-specific scan, using the given device_config. If the device_config is complete, then this will return a list of the SRs present of this type on the device, if any. If the device_config is partial, then a backend-specific scan will be performed, returning results that will guide the user in improving the device_config."}]},"implicit":false},{"name":"scan","description":"Refreshes the list of VDIs associated with an SR","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to scan"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Refreshes the list of VDIs associated with an SR"}]},"implicit":false},{"name":"get_supported_types","description":"Return a set of all the SR types supported by the system","result":["string set","the supported SR types"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Return a set of all the SR types supported by the system"}]},"implicit":false},{"name":"update","description":"Refresh the fields on the SR object","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR whose fields should be refreshed"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"symc","description":"Refresh the fields on the SR object"}]},"implicit":false},{"name":"forget","description":"Removing specified SR-record from database, without attempting to remove SR from disk","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to destroy"}],"errors":[{"name":"SR_HAS_PBD","doc":"The SR is still connected to a host via a PBD. It cannot be destroyed or forgotten."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Removing specified SR-record from database, without attempting to remove SR from disk"}]},"implicit":false},{"name":"destroy","description":"Destroy specified SR, removing SR-record from database and remove SR from disk. (In order to affect this operation the appropriate device_config is read from the specified SR's PBD on current host)","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"sr","doc":"The SR to destroy"}],"errors":[{"name":"SR_HAS_PBD","doc":"The SR is still connected to a host via a PBD. It cannot be destroyed or forgotten."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Destroy specified SR, removing SR-record from database and remove SR from disk. (In order to affect this operation the appropriate device_config is read from the specified SR's PBD on current host)"}]},"implicit":false},{"name":"make","description":"Create a new Storage Repository on disk. This call is deprecated: use SR.create instead.","result":["string","The uuid of the newly created Storage Repository."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to create/make the SR on"},{"type":"(string -> string) map","name":"device_config","doc":"The device config string that will be passed to backend SR driver"},{"type":"int","name":"physical_size","doc":"The physical size of the new storage repository"},{"type":"string","name":"name_label","doc":"The name of the new storage repository"},{"type":"string","name":"name_description","doc":"The description of the new storage repository"},{"type":"string","name":"type","doc":"The type of the SR; used to specify the SR backend driver to use"},{"type":"string","name":"content_type","doc":"The type of the new SRs content, if required (e.g. ISOs)"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage backend specific configuration options"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"Create a new Storage Repository on disk"},{"transition":"deprecated","release":"miami","description":"Use SR.create instead"}]},"implicit":false},{"name":"introduce","description":"Introduce a new Storage Repository into the managed system","result":["SR ref","The reference of the newly introduced Storage Repository."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"The uuid assigned to the introduced SR"},{"type":"string","name":"name_label","doc":"The name of the new storage repository"},{"type":"string","name":"name_description","doc":"The description of the new storage repository"},{"type":"string","name":"type","doc":"The type of the SR; used to specify the SR backend driver to use"},{"type":"string","name":"content_type","doc":"The type of the new SRs content, if required (e.g. ISOs)"},{"type":"bool","name":"shared","doc":"True if the SR (is capable of) being shared by multiple hosts"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage backend specific configuration options"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Introduce a new Storage Repository into the managed system"}]},"implicit":false},{"name":"create","description":"Create a new Storage Repository and introduce it into the managed system, creating both SR record and PBD record to attach it to current host (with specified device_config parameters)","result":["SR ref","The reference of the newly created Storage Repository."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host to create/make the SR on"},{"type":"(string -> string) map","name":"device_config","doc":"The device config string that will be passed to backend SR driver"},{"type":"int","name":"physical_size","doc":"The physical size of the new storage repository"},{"type":"string","name":"name_label","doc":"The name of the new storage repository"},{"type":"string","name":"name_description","doc":"The description of the new storage repository"},{"type":"string","name":"type","doc":"The type of the SR; used to specify the SR backend driver to use"},{"type":"string","name":"content_type","doc":"The type of the new SRs content, if required (e.g. ISOs)"},{"type":"bool","name":"shared","doc":"True if the SR (is capable of) being shared by multiple hosts"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage backend specific configuration options"}],"errors":[{"name":"SR_UNKNOWN_DRIVER","doc":"The SR could not be connected because the driver was not recognised."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Create a new Storage Repository and introduce it into the managed system, creating both SR record and PBD record to attach it to current host (with specified device_config parameters)"}]},"implicit":false},{"name":"remove_from_sm_config","description":"Remove the given key and its corresponding value from the sm_config field of the given SR. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"add_to_sm_config","description":"Add the given key-value pair to the sm_config field of the given SR.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"set_sm_config","description":"Set the sm_config field of the given SR.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"remove_tags","description":"Remove the given value from the tags field of the given SR. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given SR. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given SR.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given SR. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given SR.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given SR.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_is_tools_sr","description":"Get the is_tools_sr field of the given SR.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_clustered","description":"Get the clustered field of the given SR.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_introduced_by","description":"Get the introduced_by field of the given SR.","result":["DR_task ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The disaster recovery task which introduced this SR"}]},"implicit":true},{"name":"get_local_cache_enabled","description":"Get the local_cache_enabled field of the given SR.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"True if this SR is assigned to be the local cache for its host"}]},"implicit":true},{"name":"get_blobs","description":"Get the blobs field of the given SR.","result":["(string -> blob ref) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Binary blobs associated with this SR"}]},"implicit":true},{"name":"get_sm_config","description":"Get the sm_config field of the given SR.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given SR.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given SR.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_shared","description":"Get the shared field of the given SR.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this SR is (capable of being) shared between multiple hosts"}]},"implicit":true},{"name":"get_content_type","description":"Get the content_type field of the given SR.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the type of the SR's content, if required (e.g. ISOs)"}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given SR.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the storage repository"}]},"implicit":true},{"name":"get_physical_size","description":"Get the physical_size field of the given SR.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"total physical size of the repository (in bytes)"}]},"implicit":true},{"name":"get_physical_utilisation","description":"Get the physical_utilisation field of the given SR.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical space currently utilised on this storage repository (in bytes). Note that for sparse disk formats, physical_utilisation may be less than virtual_allocation"}]},"implicit":true},{"name":"get_virtual_allocation","description":"Get the virtual_allocation field of the given SR.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"sum of virtual_sizes of all VDIs in this storage repository (in bytes)"}]},"implicit":true},{"name":"get_PBDs","description":"Get the PBDs field of the given SR.","result":["PBD ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"describes how particular hosts can see this storage repository"}]},"implicit":true},{"name":"get_VDIs","description":"Get the VDIs field of the given SR.","result":["VDI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"all virtual disks known to this storage repository"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given SR.","result":["(string -> enum storage_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given SR.","result":["enum storage_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given SR.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given SR.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given SR.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the SR instances with the given label.","result":["SR ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the SR instance with the specified UUID.","result":["SR ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given SR.","result":["SR record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SR ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"implicit":true}],"enums":[{"name":"storage_operations","values":[{"name":"scan","doc":"Scanning backends for new or deleted VDIs"},{"name":"destroy","doc":"Destroying the SR"},{"name":"forget","doc":"Forgetting about SR"},{"name":"plug","doc":"Plugging a PBD into this SR"},{"name":"unplug","doc":"Unplugging a PBD from this SR"},{"name":"update","doc":"Refresh the fields on the SR"},{"name":"vdi_create","doc":"Creating a new VDI"},{"name":"vdi_introduce","doc":"Introducing a new VDI"},{"name":"vdi_destroy","doc":"Destroying a VDI"},{"name":"vdi_resize","doc":"Resizing a VDI"},{"name":"vdi_clone","doc":"Cloneing a VDI"},{"name":"vdi_snapshot","doc":"Snapshotting a VDI"},{"name":"vdi_mirror","doc":"Mirroring a VDI"},{"name":"vdi_enable_cbt","doc":"Enabling changed block tracking for a VDI"},{"name":"vdi_disable_cbt","doc":"Disabling changed block tracking for a VDI"},{"name":"vdi_data_destroy","doc":"Deleting the data of the VDI"},{"name":"vdi_list_changed_blocks","doc":"Exporting a bitmap that shows the changed blocks between two VDIs"},{"name":"vdi_set_on_boot","doc":"Setting the on_boot field of the VDI"},{"name":"pbd_create","doc":"Creating a PBD for this SR"},{"name":"pbd_destroy","doc":"Destroying one of this SR's PBDs"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A storage repository"}]},"tag":""},{"name":"sr_stat","description":"A set of high-level properties associated with an SR.","fields":[{"name":"uuid","description":"Uuid that uniquely identifies this SR, if one is available.","type":"string option","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"name_label","description":"Short, human-readable label for the SR.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"name_description","description":"Longer, human-readable description of the SR. Descriptions are generally only displayed by clients when the user is examining SRs in detail.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"free_space","description":"Number of bytes free on the backing storage (in bytes)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"total_space","description":"Total physical size of the backing storage (in bytes)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"clustered","description":"Indicates whether the SR uses clustered local storage.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"health","description":"The health status of the SR.","type":"enum sr_health","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}}],"messages":[],"enums":[{"name":"sr_health","values":[{"name":"healthy","doc":"Storage is fully available"},{"name":"recovering","doc":"Storage is busy recovering, e.g. rebuilding mirrors."}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"tag":""},{"name":"probe_result","description":"A set of properties that describe one result element of SR.probe. Result elements and properties can change dynamically based on changes to the the SR.probe input-parameters or the target.","fields":[{"name":"configuration","description":"Plugin-specific configuration which describes where and how to locate the storage repository. This may include the physical block device name, a remote NFS server and path or an RBD storage pool.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"complete","description":"True if this configuration is complete and can be used to call SR.create. False if it requires further iterative calls to SR.probe, to potentially narrow down on a configuration that can be used.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"sr","description":"Existing SR found for this configuration","type":"sr_stat record option","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"extra_info","description":"Additional plugin-specific information about this configuration, that might be of use for an API user. This can for example include the LUN or the WWPN.","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}}],"messages":[],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"tag":""},{"name":"LVHD","description":"LVHD SR specific operations","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}}],"messages":[{"name":"enable_thin_provisioning","description":"Upgrades an LVHD SR to enable thin-provisioning. Future VDIs created in this SR will be thinly-provisioned, although existing VDIs will be left alone. Note that the SR must be attached to the SRmaster for upgrade to work.","result":["string","Message from LVHD.enable_thin_provisioning extension"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The LVHD Host to upgrade to being thin-provisioned."},{"type":"SR ref","name":"SR","doc":"The LVHD SR to upgrade to being thin-provisioned."},{"type":"int","name":"initial_allocation","doc":"The initial amount of space to allocate to a newly-created VDI in bytes"},{"type":"int","name":"allocation_quantum","doc":"The amount of space to allocate to a VDI when it needs to be enlarged in bytes"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"Upgrades an LVHD SR to enable thin-provisioning. Future VDIs created in this SR will be thinly-provisioned, although existing VDIs will be left alone. Note that the SR must be attached to the SRmaster for upgrade to work."}]},"implicit":false},{"name":"get_uuid","description":"Get the uuid field of the given LVHD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"LVHD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the LVHD instance with the specified UUID.","result":["LVHD ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"LVHD SR specific operations"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given LVHD.","result":["LVHD record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"LVHD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"LVHD SR specific operations"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":"LVHD SR specific operations"}]},"tag":""},{"name":"VDI","description":"A virtual disk image","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vdi_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vdi_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"SR","description":"storage repository in which the VDI resides","type":"SR ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"storage repository in which the VDI resides"}]}},{"name":"VBDs","description":"list of vbds that refer to this disk","type":"VBD ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of vbds that refer to this disk"}]}},{"name":"crash_dumps","description":"list of crash dumps that refer to this disk","type":"crashdump ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of crash dumps that refer to this disk"}]}},{"name":"virtual_size","description":"size of disk as presented to the guest (in bytes). Note that, depending on storage backend type, requested size may not be respected exactly","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"size of disk as presented to the guest (in bytes). Note that, depending on storage backend type, requested size may not be respected exactly"}]}},{"name":"physical_utilisation","description":"amount of physical space that the disk image is currently taking up on the storage repository (in bytes)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"amount of physical space that the disk image is currently taking up on the storage repository (in bytes)"}]}},{"name":"type","description":"type of the VDI","type":"enum vdi_type","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the VDI"}]}},{"name":"sharable","description":"true if this disk may be shared","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk may be shared"}]}},{"name":"read_only","description":"true if this disk may ONLY be mounted read-only","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk may ONLY be mounted read-only"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"storage_lock","description":"true if this disk is locked at the storage level","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk is locked at the storage level"}]}},{"name":"location","description":"location information","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"location information"}]},"default":"\"\""},{"name":"managed","description":"","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""}]}},{"name":"missing","description":"true if SR scan operation reported this VDI as not present on disk","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if SR scan operation reported this VDI as not present on disk"}]}},{"name":"parent","description":"This field is always null. Deprecated","type":"VDI ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"ely","description":"The field was never used."}]}},{"name":"xenstore_data","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach.","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach."}]},"default":"{}"},{"name":"sm_config","description":"SM dependent data","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"default":"{}"},{"name":"is_a_snapshot","description":"true if this is a snapshot.","type":"bool","qualifier":"RO/runtime","tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if this is a snapshot."}]},"default":"false"},{"name":"snapshot_of","description":"Ref pointing to the VDI this snapshot is of.","type":"VDI ref","qualifier":"RO/runtime","tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the VDI this snapshot is of."}]},"default":"Null"},{"name":"snapshots","description":"List pointing to all the VDIs snapshots.","type":"VDI ref set","qualifier":"RO/runtime","tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the VDIs snapshots."}]}},{"name":"snapshot_time","description":"Date/time when this snapshot was created.","type":"datetime","qualifier":"RO/runtime","tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Date/time when this snapshot was created."}]},"default":"19700101T00:00:00Z"},{"name":"tags","description":"user-specified tags for categorization purposes","type":"string set","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"default":"{}"},{"name":"allow_caching","description":"true if this VDI is to be cached in the local cache SR","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"true if this VDI is to be cached in the local cache SR"}]},"default":"false"},{"name":"on_boot","description":"The behaviour of this VDI on a VM boot","type":"enum on_boot","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The behaviour of this VDI on a VM boot"}]},"default":"persist"},{"name":"metadata_of_pool","description":"The pool whose metadata is contained in this VDI","type":"pool ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The pool whose metadata is contained in this VDI"}]},"default":"OpaqueRef:NULL"},{"name":"metadata_latest","description":"Whether this VDI contains the latest known accessible metadata for the pool","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Whether this VDI contains the latest known accessible metadata for the pool"}]},"default":"false"},{"name":"is_tools_iso","description":"Whether this VDI is a Tools ISO","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"},{"name":"cbt_enabled","description":"True if changed blocks are tracked for this VDI","type":"bool","qualifier":"RO/runtime","tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of VDI references to VDI records for all VDIs known to the system.","result":["(VDI ref -> VDI record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VDIs known to the system.","result":["VDI ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"get_nbd_info","description":"Get details specifying how to access this VDI via a Network Block Device server. For each of a set of NBD server addresses on which the VDI is available, the return value set contains a vdi_nbd_server_info object that contains an exportname to request once the NBD connection is established, and connection details for the address. An empty list is returned if there is no network that has a PIF on a host with access to the relevant SR, or if no such network has been assigned an NBD-related purpose in its purpose field. To access the given VDI, any of the vdi_nbd_server_info objects can be used to make a connection to a server, and then the VDI will be available by requesting the exportname.","result":["vdi_nbd_server_info record set","The details necessary for connecting to the VDI over NBD. This includes an authentication token, so must be treated as sensitive material and must not be sent over insecure networks."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to access via Network Block Device protocol"}],"errors":[{"name":"VDI_INCOMPATIBLE_TYPE","doc":"This operation cannot be performed because the specified VDI is of an incompatible type (eg: an HA statefile cannot be attached to a guest)"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Get details specifying how to access this VDI via a Network Block Device server. For each of a set of NBD server addresses on which the VDI is available, the return value set contains a vdi_nbd_server_info object that contains an exportname to request once the NBD connection is established, and connection details for the address. An empty list is returned if there is no network that has a PIF on a host with access to the relevant SR, or if no such network has been assigned an NBD-related purpose in its purpose field. To access the given VDI, any of the vdi_nbd_server_info objects can be used to make a connection to a server, and then the VDI will be available by requesting the exportname."}]},"implicit":false},{"name":"list_changed_blocks","description":"Compare two VDIs in 64k block increments and report which blocks differ. This operation is not allowed when vdi_to is attached to a VM.","result":["string","A base64 string-encoding of the bitmap showing which blocks differ in the two VDIs."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi_from","doc":"The first VDI."},{"type":"VDI ref","name":"vdi_to","doc":"The second VDI."}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"},{"name":"VDI_MISSING","doc":"This operation cannot be performed because the specified VDI could not be found on the storage substrate"},{"name":"SR_NOT_ATTACHED","doc":"The SR is not attached."},{"name":"SR_HAS_NO_PBDS","doc":"The SR has no attached PBDs"},{"name":"VDI_IN_USE","doc":"This operation cannot be performed because this VDI is in use by some other operation"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Compare two VDIs in 64k block increments and report which blocks differ. This operation is not allowed when vdi_to is attached to a VM."}]},"implicit":false},{"name":"data_destroy","description":"Delete the data of the snapshot VDI, but keep its changed block tracking metadata. When successful, this call changes the type of the VDI to cbt_metadata. This operation is idempotent: calling it on a VDI of type cbt_metadata results in a no-op, and no error will be thrown.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI whose data should be deleted."}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"},{"name":"VDI_MISSING","doc":"This operation cannot be performed because the specified VDI could not be found on the storage substrate"},{"name":"SR_NOT_ATTACHED","doc":"The SR is not attached."},{"name":"SR_HAS_NO_PBDS","doc":"The SR has no attached PBDs"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VDI_INCOMPATIBLE_TYPE","doc":"This operation cannot be performed because the specified VDI is of an incompatible type (eg: an HA statefile cannot be attached to a guest)"},{"name":"VDI_NO_CBT_METADATA","doc":"The requested operation is not allowed because the specified VDI does not have changed block tracking metadata."},{"name":"VDI_IN_USE","doc":"This operation cannot be performed because this VDI is in use by some other operation"},{"name":"VDI_IS_A_PHYSICAL_DEVICE","doc":"The operation cannot be performed on physical device"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Delete the data of the snapshot VDI, but keep its changed block tracking metadata. When successful, this call changes the type of the VDI to cbt_metadata. This operation is idempotent: calling it on a VDI of type cbt_metadata results in a no-op, and no error will be thrown."}]},"implicit":false},{"name":"disable_cbt","description":"Disable changed block tracking for the VDI. This call is only allowed on VDIs that support enabling CBT. It is an idempotent operation - disabling CBT for a VDI for which CBT is not enabled results in a no-op, and no error will be thrown.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI for which CBT should be disabled"}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"},{"name":"VDI_MISSING","doc":"This operation cannot be performed because the specified VDI could not be found on the storage substrate"},{"name":"SR_NOT_ATTACHED","doc":"The SR is not attached."},{"name":"SR_HAS_NO_PBDS","doc":"The SR has no attached PBDs"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VDI_INCOMPATIBLE_TYPE","doc":"This operation cannot be performed because the specified VDI is of an incompatible type (eg: an HA statefile cannot be attached to a guest)"},{"name":"VDI_ON_BOOT_MODE_INCOMPATIBLE_WITH_OPERATION","doc":"This operation is not permitted on VDIs in the 'on-boot=reset' mode, or on VMs having such VDIs."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Disable changed block tracking for the VDI. This call is only allowed on VDIs that support enabling CBT. It is an idempotent operation - disabling CBT for a VDI for which CBT is not enabled results in a no-op, and no error will be thrown."}]},"implicit":false},{"name":"enable_cbt","description":"Enable changed block tracking for the VDI. This call is idempotent - enabling CBT for a VDI for which CBT is already enabled results in a no-op, and no error will be thrown.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI for which CBT should be enabled"}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"},{"name":"VDI_MISSING","doc":"This operation cannot be performed because the specified VDI could not be found on the storage substrate"},{"name":"SR_NOT_ATTACHED","doc":"The SR is not attached."},{"name":"SR_HAS_NO_PBDS","doc":"The SR has no attached PBDs"},{"name":"OPERATION_NOT_ALLOWED","doc":"You attempted an operation that was not allowed."},{"name":"VDI_INCOMPATIBLE_TYPE","doc":"This operation cannot be performed because the specified VDI is of an incompatible type (eg: an HA statefile cannot be attached to a guest)"},{"name":"VDI_ON_BOOT_MODE_INCOMPATIBLE_WITH_OPERATION","doc":"This operation is not permitted on VDIs in the 'on-boot=reset' mode, or on VMs having such VDIs."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":"Enable changed block tracking for the VDI. This call is idempotent - enabling CBT for a VDI for which CBT is already enabled results in a no-op, and no error will be thrown."}]},"implicit":false},{"name":"pool_migrate","description":"Migrate a VDI, which may be attached to a running guest, to a different SR. The destination SR must be visible to the guest.","result":["VDI ref","The new reference of the migrated VDI."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to migrate"},{"type":"SR ref","name":"sr","doc":"The destination SR"},{"type":"(string -> string) map","name":"options","doc":"Other parameters"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"Migrate a VDI, which may be attached to a running guest, to a different SR. The destination SR must be visible to the guest."}]},"implicit":false},{"name":"read_database_pool_uuid","description":"Check the VDI cache for the pool UUID of the database on this VDI.","result":["string","The cached pool UUID of the database on the VDI."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The metadata VDI to look up in the cache."}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Check the VDI cache for the pool UUID of the database on this VDI."}]},"implicit":false},{"name":"open_database","description":"Load the metadata found on the supplied VDI and return a session reference which can be used in API calls to query its contents.","result":["session ref","A session which can be used to query the database"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI which contains the database to open"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Load the metadata found on the supplied VDI and return a session reference which can be used in API calls to query its contents."}]},"implicit":false},{"name":"set_allow_caching","description":"Set the value of the allow_caching parameter. This value can only be changed when the VDI is not attached to a running VM. The caching behaviour is only affected by this flag for VHD-based VDIs that have one parent and no child VHDs. Moreover, caching only takes place when the host running the VM containing this VDI has a nominated SR for local caching.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"bool","name":"value","doc":"The value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Set the value of the allow_caching parameter. This value can only be changed when the VDI is not attached to a running VM. The caching behaviour is only affected by this flag for VHD-based VDIs that have one parent and no child VHDs. Moreover, caching only takes place when the host running the VM containing this VDI has a nominated SR for local caching."}]},"implicit":false},{"name":"set_on_boot","description":"Set the value of the on_boot parameter. This value can only be changed when the VDI is not attached to a running VM.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"enum on_boot","name":"value","doc":"The value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Set the value of the on_boot parameter. This value can only be changed when the VDI is not attached to a running VM."}]},"implicit":false},{"name":"set_name_description","description":"Set the name description of the VDI. This can only happen when its SR is currently attached.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"string","name":"value","doc":"The name description for the VDI"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the name description of the VDI. This can only happen when its SR is currently attached."}]},"implicit":false},{"name":"set_name_label","description":"Set the name label of the VDI. This can only happen when then its SR is currently attached.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"string","name":"value","doc":"The name lable for the VDI"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Set the name label of the VDI. This can only happen when then its SR is currently attached."}]},"implicit":false},{"name":"set_read_only","description":"Sets the VDI's read_only field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"bool","name":"value","doc":"The new value of the VDI's read_only field"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Sets the VDI's read_only field"}]},"implicit":false},{"name":"set_sharable","description":"Sets the VDI's sharable field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"The VDI to modify"},{"type":"bool","name":"value","doc":"The new value of the VDI's sharable field"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"george","description":"Sets the VDI's sharable field"}]},"implicit":false},{"name":"forget","description":"Removes a VDI record from the database","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to forget about"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Removes a VDI record from the database"}]},"implicit":false},{"name":"copy","description":"Copy either a full VDI or the block differences between two VDIs into either a fresh VDI or an existing VDI.","result":["VDI ref","The reference of the VDI where the blocks were written."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to copy"},{"type":"SR ref","name":"sr","doc":"The destination SR (only required if the destination VDI is not specified"},{"type":"VDI ref","name":"base_vdi","doc":"The base VDI (only required if copying only changed blocks, by default all blocks will be copied)"},{"type":"VDI ref","name":"into_vdi","doc":"The destination VDI to copy blocks into (if omitted then a destination SR must be provided and a fresh VDI will be created)"}],"errors":[{"name":"VDI_READONLY","doc":"The operation required write access but this VDI is read-only"},{"name":"VDI_TOO_SMALL","doc":"The VDI is too small. Please resize it to at least the minimum size."},{"name":"VDI_NOT_SPARSE","doc":"The VDI is not stored using a sparse format. It is not possible to query and manipulate only the changed blocks (or 'block differences' or 'disk deltas') between two VDIs. Please select a VDI which uses a sparse-aware technology such as VHD."}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Copies a VDI to an SR. There must be a host that can see both the source and destination SRs simultaneously"},{"transition":"extended","release":"cowley","description":"The copy can now be performed between any two SRs."},{"transition":"extended","release":"clearwater-felton","description":"The copy can now be performed into a pre-created VDI. It is now possible to request copying only changed blocks from a base VDI"}]},"implicit":false},{"name":"update","description":"Ask the storage backend to refresh the fields in the VDI object","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI whose stats (eg size) should be updated"}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"symc","description":"Ask the storage backend to refresh the fields in the VDI object"}]},"implicit":false},{"name":"introduce","description":"Create a new VDI record in the database only","result":["VDI ref","The ref of the newly created VDI record."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"The uuid of the disk to introduce"},{"type":"string","name":"name_label","doc":"The name of the disk record"},{"type":"string","name":"name_description","doc":"The description of the disk record"},{"type":"SR ref","name":"SR","doc":"The SR that the VDI is in"},{"type":"enum vdi_type","name":"type","doc":"The type of the VDI"},{"type":"bool","name":"sharable","doc":"true if this disk may be shared"},{"type":"bool","name":"read_only","doc":"true if this disk may ONLY be mounted read-only"},{"type":"(string -> string) map","name":"other_config","doc":"additional configuration"},{"type":"string","name":"location","doc":"location information"},{"type":"(string -> string) map","name":"xenstore_data","doc":"Data to insert into xenstore"},{"type":"(string -> string) map","name":"sm_config","doc":"Storage-specific config"},{"type":"bool","name":"managed","doc":"Storage-specific config"},{"type":"int","name":"virtual_size","doc":"Storage-specific config"},{"type":"int","name":"physical_utilisation","doc":"Storage-specific config"},{"type":"pool ref","name":"metadata_of_pool","doc":"Storage-specific config"},{"type":"bool","name":"is_a_snapshot","doc":"Storage-specific config"},{"type":"datetime","name":"snapshot_time","doc":"Storage-specific config"},{"type":"VDI ref","name":"snapshot_of","doc":"Storage-specific config"}],"errors":[{"name":"SR_OPERATION_NOT_SUPPORTED","doc":"The SR backend does not support the operation (check the SR's allowed operations)"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Create a new VDI record in the database only"}]},"implicit":false},{"name":"resize_online","description":"Resize the VDI which may or may not be attached to running guests.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to resize"},{"type":"int","name":"size","doc":"The new size of the VDI"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"inverness","description":"Dummy transition"},{"transition":"removed","release":"inverness","description":"Online VDI resize is not supported by any of the storage backends."}]},"implicit":false},{"name":"resize","description":"Resize the VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to resize"},{"type":"int","name":"size","doc":"The new size of the VDI"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Resize the VDI."}]},"implicit":false},{"name":"clone","description":"Take an exact copy of the VDI and return a reference to the new disk. If any driver_params are specified then these are passed through to the storage-specific substrate driver that implements the clone operation. NB the clone lives in the same Storage Repository as its parent.","result":["VDI ref","The ID of the newly created VDI."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to clone"},{"type":"(string -> string) map","name":"driver_params","doc":"Optional parameters that are passed through to the backend driver in order to specify storage-type-specific clone options"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Take an exact copy of the VDI and return a reference to the new disk. If any driver_params are specified then these are passed through to the storage-specific substrate driver that implements the clone operation. NB the clone lives in the same Storage Repository as its parent."}]},"implicit":false},{"name":"snapshot","description":"Take a read-only snapshot of the VDI, returning a reference to the snapshot. If any driver_params are specified then these are passed through to the storage-specific substrate driver that takes the snapshot. NB the snapshot lives in the same Storage Repository as its parent.","result":["VDI ref","The ID of the newly created VDI."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"vdi","doc":"The VDI to snapshot"},{"type":"(string -> string) map","name":"driver_params","doc":"Optional parameters that can be passed through to backend driver in order to specify storage-type-specific snapshot options"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"snapshots","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Take a read-only snapshot of the VDI, returning a reference to the snapshot. If any driver_params are specified then these are passed through to the storage-specific substrate driver that takes the snapshot. NB the snapshot lives in the same Storage Repository as its parent."}]},"implicit":false},{"name":"remove_tags","description":"Remove the given value from the tags field of the given VDI. If the value is not in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"Value to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"add_tags","description":"Add the given value to the tags field of the given VDI. If the value is already in that Set, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"set_tags","description":"Set the tags field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string set","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"remove_from_sm_config","description":"Remove the given key and its corresponding value from the sm_config field of the given VDI. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"add_to_sm_config","description":"Add the given key-value pair to the sm_config field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"set_sm_config","description":"Set the sm_config field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"remove_from_xenstore_data","description":"Remove the given key and its corresponding value from the xenstore_data field of the given VDI. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach."}]},"implicit":true},{"name":"add_to_xenstore_data","description":"Add the given key-value pair to the xenstore_data field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach."}]},"implicit":true},{"name":"set_xenstore_data","description":"Set the xenstore_data field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach."}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VDI. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VDI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_cbt_enabled","description":"Get the cbt_enabled field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_is_tools_iso","description":"Get the is_tools_iso field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_metadata_latest","description":"Get the metadata_latest field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"Whether this VDI contains the latest known accessible metadata for the pool"}]},"implicit":true},{"name":"get_metadata_of_pool","description":"Get the metadata_of_pool field of the given VDI.","result":["pool ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":"The pool whose metadata is contained in this VDI"}]},"implicit":true},{"name":"get_on_boot","description":"Get the on_boot field of the given VDI.","result":["enum on_boot","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The behaviour of this VDI on a VM boot"}]},"implicit":true},{"name":"get_allow_caching","description":"Get the allow_caching field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"true if this VDI is to be cached in the local cache SR"}]},"implicit":true},{"name":"get_tags","description":"Get the tags field of the given VDI.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"user-specified tags for categorization purposes"}]},"implicit":true},{"name":"get_snapshot_time","description":"Get the snapshot_time field of the given VDI.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Date/time when this snapshot was created."}]},"implicit":true},{"name":"get_snapshots","description":"Get the snapshots field of the given VDI.","result":["VDI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"List pointing to all the VDIs snapshots."}]},"implicit":true},{"name":"get_snapshot_of","description":"Get the snapshot_of field of the given VDI.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Ref pointing to the VDI this snapshot is of."}]},"implicit":true},{"name":"get_is_a_snapshot","description":"Get the is_a_snapshot field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"true if this is a snapshot."}]},"implicit":true},{"name":"get_sm_config","description":"Get the sm_config field of the given VDI.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"SM dependent data"}]},"implicit":true},{"name":"get_xenstore_data","description":"Get the xenstore_data field of the given VDI.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"data to be inserted into the xenstore tree (/local/domain/0/backend/vbd///sm-data) after the VDI is attached. This is generally set by the SM backends on vdi_attach."}]},"implicit":true},{"name":"get_parent","description":"Get the parent field of the given VDI.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"ely","description":"The field was never used."}]},"implicit":true},{"name":"get_missing","description":"Get the missing field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if SR scan operation reported this VDI as not present on disk"}]},"implicit":true},{"name":"get_managed","description":"Get the managed field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""}]},"implicit":true},{"name":"get_location","description":"Get the location field of the given VDI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"location information"}]},"implicit":true},{"name":"get_storage_lock","description":"Get the storage_lock field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk is locked at the storage level"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VDI.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_read_only","description":"Get the read_only field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk may ONLY be mounted read-only"}]},"implicit":true},{"name":"get_sharable","description":"Get the sharable field of the given VDI.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this disk may be shared"}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given VDI.","result":["enum vdi_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"type of the VDI"}]},"implicit":true},{"name":"get_physical_utilisation","description":"Get the physical_utilisation field of the given VDI.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"amount of physical space that the disk image is currently taking up on the storage repository (in bytes)"}]},"implicit":true},{"name":"get_virtual_size","description":"Get the virtual_size field of the given VDI.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"size of disk as presented to the guest (in bytes). Note that, depending on storage backend type, requested size may not be respected exactly"}]},"implicit":true},{"name":"get_crash_dumps","description":"Get the crash_dumps field of the given VDI.","result":["crashdump ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of crash dumps that refer to this disk"}]},"implicit":true},{"name":"get_VBDs","description":"Get the VBDs field of the given VDI.","result":["VBD ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of vbds that refer to this disk"}]},"implicit":true},{"name":"get_SR","description":"Get the SR field of the given VDI.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"storage repository in which the VDI resides"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VDI.","result":["(string -> enum vdi_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VDI.","result":["enum vdi_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given VDI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given VDI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VDI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the VDI instances with the given label.","result":["VDI ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VDI instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"create","description":"Create a new VDI instance, and return its handle.\nThe constructor args are: name_label, name_description, SR*, virtual_size*, type*, sharable*, read_only*, other_config*, xenstore_data, sm_config, tags (* = non-optional).","result":["VDI ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VDI instance with the specified UUID.","result":["VDI ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VDI.","result":["VDI record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VDI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"implicit":true}],"enums":[{"name":"vdi_operations","values":[{"name":"clone","doc":"Cloning the VDI"},{"name":"copy","doc":"Copying the VDI"},{"name":"resize","doc":"Resizing the VDI"},{"name":"resize_online","doc":"Resizing the VDI which may or may not be online"},{"name":"snapshot","doc":"Snapshotting the VDI"},{"name":"mirror","doc":"Mirroring the VDI"},{"name":"destroy","doc":"Destroying the VDI"},{"name":"forget","doc":"Forget about the VDI"},{"name":"update","doc":"Refreshing the fields of the VDI"},{"name":"force_unlock","doc":"Forcibly unlocking the VDI"},{"name":"generate_config","doc":"Generating static configuration"},{"name":"enable_cbt","doc":"Enabling changed block tracking for a VDI"},{"name":"disable_cbt","doc":"Disabling changed block tracking for a VDI"},{"name":"data_destroy","doc":"Deleting the data of the VDI"},{"name":"list_changed_blocks","doc":"Exporting a bitmap that shows the changed blocks between two VDIs"},{"name":"set_on_boot","doc":"Setting the on_boot field of the VDI"},{"name":"blocked","doc":"Operations on this VDI are temporarily blocked"}]},{"name":"vdi_type","values":[{"name":"system","doc":"a disk that may be replaced on upgrade"},{"name":"user","doc":"a disk that is always preserved on upgrade"},{"name":"ephemeral","doc":"a disk that may be reformatted on upgrade"},{"name":"suspend","doc":"a disk that stores a suspend image"},{"name":"crashdump","doc":"a disk that stores VM crashdump information"},{"name":"ha_statefile","doc":"a disk used for HA storage heartbeating"},{"name":"metadata","doc":"a disk used for HA Pool metadata"},{"name":"redo_log","doc":"a disk used for a general metadata redo-log"},{"name":"rrd","doc":"a disk that stores SR-level RRDs"},{"name":"pvs_cache","doc":"a disk that stores PVS cache data"},{"name":"cbt_metadata","doc":"Metadata about a snapshot VDI that has been deleted: the set of blocks that changed between some previous version of the disk and the version tracked by the snapshot."}]},{"name":"on_boot","values":[{"name":"reset","doc":"When a VM containing this VDI is started, the contents of the VDI are reset to the state they were in when this flag was last set."},{"name":"persist","doc":"Standard behaviour."}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual disk image"}]},"tag":""},{"name":"VBD","description":"A virtual block device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vbd_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vbd_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VM","description":"the virtual machine","type":"VM ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual machine"}]}},{"name":"VDI","description":"the virtual disk","type":"VDI ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual disk"}]}},{"name":"device","description":"device seen by the guest e.g. hda1","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Become static to allow plugged VBD creation for Suspended VM"}]},"default":"\"\""},{"name":"userdevice","description":"user-friendly device name e.g. 0,1,2,etc.","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"user-friendly device name e.g. 0,1,2,etc."}]}},{"name":"bootable","description":"true if this VBD is bootable","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this VBD is bootable"}]}},{"name":"mode","description":"the mode the VBD should be mounted with","type":"enum vbd_mode","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the mode the VBD should be mounted with"}]}},{"name":"type","description":"how the VBD will appear to the guest (e.g. disk or CD)","type":"enum vbd_type","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"how the VBD will appear to the guest (e.g. disk or CD)"}]}},{"name":"unpluggable","description":"true if this VBD will support hot-unplug","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this VBD will support hot-unplug"}]},"default":"true"},{"name":"storage_lock","description":"true if a storage level lock was acquired","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if a storage level lock was acquired"}]}},{"name":"empty","description":"if true this represents an empty drive","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if true this represents an empty drive"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}},{"name":"currently_attached","description":"is the device currently attached (erased on reboot)","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow plugged VIF and VBD creation for Suspended VM"}]},"default":"false"},{"name":"status_code","description":"error/success code associated with last attach-operation (erased on reboot)","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success code associated with last attach-operation (erased on reboot)"}]}},{"name":"status_detail","description":"error/success information associated with last attach-operation status (erased on reboot)","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success information associated with last attach-operation status (erased on reboot)"}]}},{"name":"runtime_properties","description":"Device runtime properties","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Device runtime properties"}]}},{"name":"qos_algorithm_type","description":"QoS algorithm to use","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]}},{"name":"qos_algorithm_params","description":"parameters for chosen QoS algorithm","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]}},{"name":"qos_supported_algorithms","description":"supported QoS algorithms for this VBD","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"supported QoS algorithms for this VBD"}]}},{"name":"metrics","description":"metrics associated with this VBD","type":"VBD_metrics ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"default":"OpaqueRef:NULL"}],"messages":[{"name":"get_all_records","description":"Return a map of VBD references to VBD records for all VBDs known to the system.","result":["(VBD ref -> VBD record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VBDs known to the system.","result":["VBD ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true},{"name":"set_mode","description":"Sets the mode of the VBD. The power_state of the VM must be halted.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"Reference to the object"},{"type":"enum vbd_mode","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Sets the mode of the VBD. The power_state of the VM must be halted."}]},"implicit":false},{"name":"assert_attachable","description":"Throws an error if this VBD could not be attached to this VM if the VM were running. Intended for debugging.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"The VBD to query"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Throws an error if this VBD could not be attached to this VM if the VM were running. Intended for debugging."}]},"implicit":false},{"name":"unplug_force","description":"Forcibly unplug the specified VBD","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"The VBD to forcibly unplug"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Forcibly unplug the specified VBD"}]},"implicit":false},{"name":"unplug","description":"Hot-unplug the specified VBD, dynamically unattaching it from the running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"The VBD to hot-unplug"}],"errors":[{"name":"DEVICE_DETACH_REJECTED","doc":"The VM rejected the attempt to detach the device."},{"name":"DEVICE_ALREADY_DETACHED","doc":"The device is not currently attached"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Hot-unplug the specified VBD, dynamically unattaching it from the running VM"}]},"implicit":false},{"name":"plug","description":"Hotplug the specified VBD, dynamically attaching it to the running VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"The VBD to hotplug"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Hotplug the specified VBD, dynamically attaching it to the running VM"}]},"implicit":false},{"name":"insert","description":"Insert new media into the device","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"vbd","doc":"The vbd representing the CDROM-like device"},{"type":"VDI ref","name":"vdi","doc":"The new VDI to 'insert'"}],"errors":[{"name":"VBD_NOT_REMOVABLE_MEDIA","doc":"Media could not be ejected because it is not removable"},{"name":"VBD_NOT_EMPTY","doc":"Operation could not be performed because the drive is not empty"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Insert new media into the device"}]},"implicit":false},{"name":"eject","description":"Remove the media from the device and leave it empty","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"vbd","doc":"The vbd representing the CDROM-like device"}],"errors":[{"name":"VBD_NOT_REMOVABLE_MEDIA","doc":"Media could not be ejected because it is not removable"},{"name":"VBD_IS_EMPTY","doc":"Operation could not be performed because the drive is empty"}],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Remove the media from the device and leave it empty"}]},"implicit":false},{"name":"remove_from_qos_algorithm_params","description":"Remove the given key and its corresponding value from the qos/algorithm_params field of the given VBD. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"add_to_qos_algorithm_params","description":"Add the given key-value pair to the qos/algorithm_params field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"set_qos_algorithm_params","description":"Set the qos/algorithm_params field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"set_qos_algorithm_type","description":"Set the qos/algorithm_type field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VBD. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_unpluggable","description":"Set the unpluggable field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this VBD will support hot-unplug"}]},"implicit":true},{"name":"set_type","description":"Set the type field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"enum vbd_type","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"how the VBD will appear to the guest (e.g. disk or CD)"}]},"implicit":true},{"name":"set_bootable","description":"Set the bootable field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this VBD is bootable"}]},"implicit":true},{"name":"set_userdevice","description":"Set the userdevice field of the given VBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"user-friendly device name e.g. 0,1,2,etc."}]},"implicit":true},{"name":"get_metrics","description":"Get the metrics field of the given VBD.","result":["VBD_metrics ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRDs"}]},"implicit":true},{"name":"get_qos_supported_algorithms","description":"Get the qos/supported_algorithms field of the given VBD.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"supported QoS algorithms for this VBD"}]},"implicit":true},{"name":"get_qos_algorithm_params","description":"Get the qos/algorithm_params field of the given VBD.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"parameters for chosen QoS algorithm"}]},"implicit":true},{"name":"get_qos_algorithm_type","description":"Get the qos/algorithm_type field of the given VBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"QoS algorithm to use"}]},"implicit":true},{"name":"get_runtime_properties","description":"Get the runtime_properties field of the given VBD.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Device runtime properties"}]},"implicit":true},{"name":"get_status_detail","description":"Get the status_detail field of the given VBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success information associated with last attach-operation status (erased on reboot)"}]},"implicit":true},{"name":"get_status_code","description":"Get the status_code field of the given VBD.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"error/success code associated with last attach-operation (erased on reboot)"}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given VBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Made StaticRO to allow plugged VIF and VBD creation for Suspended VM"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VBD.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_empty","description":"Get the empty field of the given VBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"if true this represents an empty drive"}]},"implicit":true},{"name":"get_storage_lock","description":"Get the storage_lock field of the given VBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if a storage level lock was acquired"}]},"implicit":true},{"name":"get_unpluggable","description":"Get the unpluggable field of the given VBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"true if this VBD will support hot-unplug"}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given VBD.","result":["enum vbd_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"how the VBD will appear to the guest (e.g. disk or CD)"}]},"implicit":true},{"name":"get_mode","description":"Get the mode field of the given VBD.","result":["enum vbd_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the mode the VBD should be mounted with"}]},"implicit":true},{"name":"get_bootable","description":"Get the bootable field of the given VBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if this VBD is bootable"}]},"implicit":true},{"name":"get_userdevice","description":"Get the userdevice field of the given VBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"user-friendly device name e.g. 0,1,2,etc."}]},"implicit":true},{"name":"get_device","description":"Get the device field of the given VBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"changed","release":"1.257.0","description":"Become static to allow plugged VBD creation for Suspended VM"}]},"implicit":true},{"name":"get_VDI","description":"Get the VDI field of the given VBD.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual disk"}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given VBD.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual machine"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VBD.","result":["(string -> enum vbd_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VBD.","result":["enum vbd_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VBD instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true},{"name":"create","description":"Create a new VBD instance, and return its handle.\nThe constructor args are: VM*, VDI*, device, userdevice*, bootable*, mode*, type*, unpluggable, empty*, other_config*, currently_attached, qos_algorithm_type*, qos_algorithm_params* (* = non-optional).","result":["VBD ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VBD instance with the specified UUID.","result":["VBD ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VBD.","result":["VBD record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"implicit":true}],"enums":[{"name":"vbd_operations","values":[{"name":"attach","doc":"Attempting to attach this VBD to a VM"},{"name":"eject","doc":"Attempting to eject the media from this VBD"},{"name":"insert","doc":"Attempting to insert new media into this VBD"},{"name":"plug","doc":"Attempting to hotplug this VBD"},{"name":"unplug","doc":"Attempting to hot unplug this VBD"},{"name":"unplug_force","doc":"Attempting to forcibly unplug this VBD"},{"name":"pause","doc":"Attempting to pause a block device backend"},{"name":"unpause","doc":"Attempting to unpause a block device backend"}]},{"name":"vbd_type","values":[{"name":"CD","doc":"VBD will appear to guest as CD"},{"name":"Disk","doc":"VBD will appear to guest as disk"},{"name":"Floppy","doc":"VBD will appear as a floppy"}]},{"name":"vbd_mode","values":[{"name":"RO","doc":"only read-only access will be allowed"},{"name":"RW","doc":"read-write access will be allowed"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A virtual block device"}]},"tag":""},{"name":"VBD_metrics","description":"The metrics associated with a virtual block device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"io_read_kbs","description":"Read bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"io_write_kbs","description":"Write bandwidth (KiB/s)","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"default":"0."},{"name":"last_updated","description":"Time at which this information was last updated","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"default":"19700101T00:00:00Z"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VBD_metrics references to VBD_metrics records for all VBD_metrics instances known to the system.","result":["(VBD_metrics ref -> VBD_metrics record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual block device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VBD_metrics instances known to the system.","result":["VBD_metrics ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual block device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VBD_metrics. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VBD_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VBD_metrics.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VBD_metrics.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given VBD_metrics.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_io_write_kbs","description":"Get the io/write_kbs field of the given VBD_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_io_read_kbs","description":"Get the io/read_kbs field of the given VBD_metrics.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":""},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled and replaced by RRDs"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VBD_metrics.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VBD_metrics instance with the specified UUID.","result":["VBD_metrics ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual block device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VBD_metrics.","result":["VBD_metrics record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VBD_metrics ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual block device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"rio","description":"The metrics associated with a virtual block device"},{"transition":"deprecated","release":"tampa","description":"Dummy transition"},{"transition":"removed","release":"tampa","description":"Disabled in favour of RRD"}]},"tag":""},{"name":"PBD","description":"The physical block devices through which hosts access SRs","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"host","description":"physical machine on which the pbd is available","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical machine on which the pbd is available"}]}},{"name":"SR","description":"the storage repository that the pbd realises","type":"SR ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the storage repository that the pbd realises"}]}},{"name":"device_config","description":"a config string to string map that is provided to the host's SR-backend-driver","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a config string to string map that is provided to the host's SR-backend-driver"}]}},{"name":"currently_attached","description":"is the SR currently attached on this host?","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"is the SR currently attached on this host?"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of PBD references to PBD records for all PBDs known to the system.","result":["(PBD ref -> PBD record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PBDs known to the system.","result":["PBD ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true},{"name":"set_device_config","description":"Sets the PBD's device_config field","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"The PBD to modify"},{"type":"(string -> string) map","name":"value","doc":"The new value of the PBD's device_config"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"Sets the PBD's device_config field"}]},"implicit":false},{"name":"unplug","description":"Deactivate the specified PBD, causing the referenced SR to be detached and nolonger scanned","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"The PBD to deactivate"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Deactivate the specified PBD, causing the referenced SR to be detached and nolonger scanned"}]},"implicit":false},{"name":"plug","description":"Activate the specified PBD, causing the referenced SR to be attached and scanned","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"The PBD to activate"}],"errors":[{"name":"SR_UNKNOWN_DRIVER","doc":"The SR could not be connected because the driver was not recognised."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Activate the specified PBD, causing the referenced SR to be attached and scanned"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PBD. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PBD.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PBD.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given PBD.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"is the SR currently attached on this host?"}]},"implicit":true},{"name":"get_device_config","description":"Get the device_config field of the given PBD.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a config string to string map that is provided to the host's SR-backend-driver"}]},"implicit":true},{"name":"get_SR","description":"Get the SR field of the given PBD.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the storage repository that the pbd realises"}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PBD.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"physical machine on which the pbd is available"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PBD.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified PBD instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true},{"name":"create","description":"Create a new PBD instance, and return its handle.\nThe constructor args are: host*, SR*, device_config*, other_config (* = non-optional).","result":["PBD ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PBD instance with the specified UUID.","result":["PBD ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PBD.","result":["PBD record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PBD ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The physical block devices through which hosts access SRs"}]},"tag":""},{"name":"crashdump","description":"A VM crashdump","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"VM","description":"the virtual machine","type":"VM ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual machine"}]}},{"name":"VDI","description":"the virtual disk","type":"VDI ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual disk"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of crashdump references to crashdump records for all crashdumps known to the system.","result":["(crashdump ref -> crashdump record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A VM crashdump"},{"transition":"deprecated","release":"inverness","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the crashdumps known to the system.","result":["crashdump ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A VM crashdump"},{"transition":"deprecated","release":"inverness","description":""}]},"implicit":true},{"name":"destroy","description":"Destroy the specified crashdump","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"The crashdump to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Destroy the specified crashdump"}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given crashdump. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given crashdump.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given crashdump.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given crashdump.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"miami","description":"additional configuration"}]},"implicit":true},{"name":"get_VDI","description":"Get the VDI field of the given crashdump.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual disk"}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given crashdump.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the virtual machine"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given crashdump.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the crashdump instance with the specified UUID.","result":["crashdump ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A VM crashdump"},{"transition":"deprecated","release":"inverness","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given crashdump.","result":["crashdump record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"crashdump ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A VM crashdump"},{"transition":"deprecated","release":"inverness","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A VM crashdump"},{"transition":"deprecated","release":"inverness","description":""}]},"tag":""},{"name":"VTPM","description":"A virtual TPM device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vtpm_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vtpm_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VM","description":"The virtual machine the TPM is attached to","type":"VM ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The virtual machine the TPM is attached to"}]}},{"name":"backend","description":"The domain where the backend is located (unused)","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The domain where the backend is located (unused)"}]},"default":"OpaqueRef:NULL"},{"name":"persistence_backend","description":"The backend where the vTPM is persisted","type":"enum persistence_backend","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"default":"xapi"},{"name":"is_unique","description":"Whether the contents are never copied, satisfying the TPM spec","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"default":"false"},{"name":"is_protected","description":"Whether the contents of the VTPM are secured according to the TPM spec","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of VTPM references to VTPM records for all VTPMs known to the system.","result":["(VTPM ref -> VTPM record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VTPMs known to the system.","result":["VTPM ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"destroy","description":"Destroy the specified VTPM instance, along with its state.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"The reference to the VTPM object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":false},{"name":"create","description":"Create a new VTPM instance, and return its handle.","result":["VTPM ref","The reference of the newly created VTPM"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"vM","doc":"The VM reference the VTPM will be attached to"},{"type":"bool","name":"is_unique","doc":"Whether the VTPM must be unique"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":false},{"name":"get_is_protected","description":"Get the is_protected field of the given VTPM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"get_is_unique","description":"Get the is_unique field of the given VTPM.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"get_persistence_backend","description":"Get the persistence_backend field of the given VTPM.","result":["enum persistence_backend","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"get_backend","description":"Get the backend field of the given VTPM.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The domain where the backend is located (unused)"}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given VTPM.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The virtual machine the TPM is attached to"}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VTPM.","result":["(string -> enum vtpm_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VTPM.","result":["enum vtpm_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VTPM.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VTPM instance with the specified UUID.","result":["VTPM ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VTPM.","result":["VTPM record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VTPM ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"implicit":true}],"enums":[{"name":"vtpm_operations","values":[{"name":"destroy","doc":"Destroy a VTPM"}]},{"name":"persistence_backend","values":[{"name":"xapi","doc":"This VTPM is persisted in XAPI's DB"}]}],"lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.26.0","description":""}]},"tag":""},{"name":"console","description":"A console","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"protocol","description":"the protocol used by this console","type":"enum console_protocol","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the protocol used by this console"}]}},{"name":"location","description":"URI for the console service","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"URI for the console service"}]}},{"name":"VM","description":"VM to which this console is attached","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VM to which this console is attached"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]}}],"messages":[{"name":"get_all_records","description":"Return a map of console references to console records for all consoles known to the system.","result":["(console ref -> console record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the consoles known to the system.","result":["console ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given console. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given console.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given console.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given console.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"additional configuration"}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given console.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"VM to which this console is attached"}]},"implicit":true},{"name":"get_location","description":"Get the location field of the given console.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"URI for the console service"}]},"implicit":true},{"name":"get_protocol","description":"Get the protocol field of the given console.","result":["enum console_protocol","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the protocol used by this console"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given console.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified console instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true},{"name":"create","description":"Create a new console instance, and return its handle.\nThe constructor args are: other_config* (* = non-optional).","result":["console ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the console instance with the specified UUID.","result":["console ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given console.","result":["console record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"console ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"implicit":true}],"enums":[{"name":"console_protocol","values":[{"name":"vt100","doc":"VT100 terminal"},{"name":"rfb","doc":"Remote FrameBuffer protocol (as used in VNC)"},{"name":"rdp","doc":"Remote Desktop Protocol"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"A console"}]},"tag":""},{"name":"user","description":"A user of the system","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"short_name","description":"short name (e.g. userid)","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"short name (e.g. userid)"}]}},{"name":"fullname","description":"full name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"full name"}]}},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"default":"{}"}],"messages":[{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given user. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given user.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given user.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"set_fullname","description":"Set the fullname field of the given user.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"full name"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given user.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"additional configuration"}]},"implicit":true},{"name":"get_fullname","description":"Get the fullname field of the given user.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"full name"}]},"implicit":true},{"name":"get_short_name","description":"Get the short_name field of the given user.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"short name (e.g. userid)"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given user.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified user instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A user of the system"},{"transition":"deprecated","release":"george","description":"Deprecated in favor of subject"}]},"implicit":true},{"name":"create","description":"Create a new user instance, and return its handle.\nThe constructor args are: short_name*, fullname*, other_config (* = non-optional).","result":["user ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A user of the system"},{"transition":"deprecated","release":"george","description":"Deprecated in favor of subject"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the user instance with the specified UUID.","result":["user ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A user of the system"},{"transition":"deprecated","release":"george","description":"Deprecated in favor of subject"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given user.","result":["user record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"user ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A user of the system"},{"transition":"deprecated","release":"george","description":"Deprecated in favor of subject"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Deprecated_s","transitions":[{"transition":"published","release":"rio","description":"A user of the system"},{"transition":"deprecated","release":"george","description":"Deprecated in favor of subject"}]},"tag":""},{"name":"data_source","description":"Data sources for logging in RRDs","fields":[{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"enabled","description":"true if the data source is being logged","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if the data source is being logged"}]}},{"name":"standard","description":"true if the data source is enabled by default. Non-default data sources cannot be disabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"true if the data source is enabled by default. Non-default data sources cannot be disabled"}]}},{"name":"units","description":"the units of the value","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the units of the value"}]}},{"name":"min","description":"the minimum value of the data source","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the minimum value of the data source"}]}},{"name":"max","description":"the maximum value of the data source","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the maximum value of the data source"}]}},{"name":"value","description":"current value of the data source","type":"float","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"current value of the data source"}]}}],"messages":[],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Data sources for logging in RRDs"}]},"tag":""},{"name":"blob","description":"A placeholder for a binary blob","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"size","description":"Size of the binary data, in bytes","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the binary data, in bytes"}]}},{"name":"public","description":"True if the blob is publicly accessible","type":"bool","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"True if the blob is publicly accessible"}]},"default":"false"},{"name":"last_updated","description":"Time at which the data in the blob was last updated","type":"datetime","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which the data in the blob was last updated"}]}},{"name":"mime_type","description":"The mime type associated with this object. Defaults to 'application/octet-stream' if the empty string is supplied","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The mime type associated with this object. Defaults to 'application/octet-stream' if the empty string is supplied"}]}}],"messages":[{"name":"get_all_records","description":"Return a map of blob references to blob records for all blobs known to the system.","result":["(blob ref -> blob record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the blobs known to the system.","result":["blob ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"implicit":true},{"name":"destroy","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"The reference of the blob to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"create","description":"Create a placeholder for a binary blob","result":["blob ref","The reference of the created blob"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"mime_type","doc":"The mime-type of the blob. Defaults to 'application/octet-stream' if the empty string is supplied"},{"type":"bool","name":"public","doc":"True if the blob should be publicly available"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"Create a placeholder for a binary blob"}]},"implicit":false},{"name":"set_public","description":"Set the public field of the given blob.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"},{"type":"bool","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"True if the blob is publicly accessible"}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given blob.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given blob.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_mime_type","description":"Get the mime_type field of the given blob.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The mime type associated with this object. Defaults to 'application/octet-stream' if the empty string is supplied"}]},"implicit":true},{"name":"get_last_updated","description":"Get the last_updated field of the given blob.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Time at which the data in the blob was last updated"}]},"implicit":true},{"name":"get_public","description":"Get the public field of the given blob.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"tampa","description":"True if the blob is publicly accessible"}]},"implicit":true},{"name":"get_size","description":"Get the size field of the given blob.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Size of the binary data, in bytes"}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given blob.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given blob.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given blob.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the blob instances with the given label.","result":["blob ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the blob instance with the specified UUID.","result":["blob ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given blob.","result":["blob record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"blob ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"A placeholder for a binary blob"}]},"tag":""},{"name":"message","description":"An message for the attention of the administrator","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"name","description":"The name of the message","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The name of the message"}]}},{"name":"priority","description":"The message priority, 0 being low priority","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The message priority, 0 being low priority"}]}},{"name":"cls","description":"The class of the object this message is associated with","type":"enum cls","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""},{"transition":"extended","release":"1.313.0","description":"Added Certificate class"}]}},{"name":"obj_uuid","description":"The uuid of the object this message is associated with","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The uuid of the object this message is associated with"}]}},{"name":"timestamp","description":"The time at which the message was created","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The time at which the message was created"}]}},{"name":"body","description":"The body of the message","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"The body of the message"}]}}],"messages":[{"name":"get_all_records_where","description":"","result":["(message ref -> message record) map","The messages"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"expr","doc":"The expression to match (not currently used)"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_all_records","description":"","result":["(message ref -> message record) map","The messages"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_by_uuid","description":"","result":["message ref","The message reference"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"The uuid of the message"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_record","description":"","result":["message record","The message record"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"message ref","name":"self","doc":"The reference to the message"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_since","description":"","result":["(message ref -> message record) map","The relevant messages"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"datetime","name":"since","doc":"The cutoff time"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get_all","description":"","result":["message ref set","The references to the messages"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"get","description":"","result":["(message ref -> message record) map","The relevant messages"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"enum cls","name":"cls","doc":"The class of object"},{"type":"string","name":"obj_uuid","doc":"The uuid of the object"},{"type":"datetime","name":"since","doc":"The cutoff time"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"destroy_many","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"message ref set","name":"messages","doc":"Messages to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.19.0","description":""}]},"implicit":false},{"name":"destroy","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"message ref","name":"self","doc":"The reference of the message to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false},{"name":"create","description":"","result":["message ref","The reference of the created message"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name","doc":"The name of the message"},{"type":"int","name":"priority","doc":"The priority of the message"},{"type":"enum cls","name":"cls","doc":"The class of object this message is associated with"},{"type":"string","name":"obj_uuid","doc":"The uuid of the object this message is associated with"},{"type":"string","name":"body","doc":"The body of the message"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":""}]},"implicit":false}],"enums":[{"name":"cls","values":[{"name":"VM","doc":"VM"},{"name":"Host","doc":"Host"},{"name":"SR","doc":"SR"},{"name":"Pool","doc":"Pool"},{"name":"VMPP","doc":"VMPP"},{"name":"VMSS","doc":"VMSS"},{"name":"PVS_proxy","doc":"PVS_proxy"},{"name":"VDI","doc":"VDI"},{"name":"Certificate","doc":"Certificate"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"orlando","description":"An message for the attention of the administrator"}]},"tag":""},{"name":"secret","description":"A secret","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"value","description":"the secret","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the secret"}]}},{"name":"other_config","description":"other_config","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"other_config"}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of secret references to secret records for all secrets known to the system.","result":["(secret ref -> secret record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the secrets known to the system.","result":["secret ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given secret. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"other_config"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given secret.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"other_config"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given secret.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"other_config"}]},"implicit":true},{"name":"set_value","description":"Set the value field of the given secret.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the secret"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given secret.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"other_config"}]},"implicit":true},{"name":"get_value","description":"Get the value field of the given secret.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"the secret"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given secret.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"destroy","description":"Destroy the specified secret instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true},{"name":"create","description":"Create a new secret instance, and return its handle.\nThe constructor args are: value*, other_config (* = non-optional).","result":["secret ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the secret instance with the specified UUID.","result":["secret ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given secret.","result":["secret record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"secret ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"midnight-ride","description":"A secret"}]},"tag":""},{"name":"tunnel","description":"A tunnel for network traffic","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Unique identifier/object reference"}]}},{"name":"access_PIF","description":"The interface through which the tunnel is accessed","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The interface through which the tunnel is accessed"}]},"default":"Null"},{"name":"transport_PIF","description":"The interface used by the tunnel","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The interface used by the tunnel"}]},"default":"Null"},{"name":"status","description":"Status information about the tunnel","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Status information about the tunnel"}]},"default":"{\"active\" -> \"false\"}"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Additional configuration"}]},"default":"{}"},{"name":"protocol","description":"The protocol used for tunneling (either GRE or VxLAN)","type":"enum tunnel_protocol","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.250.0","description":"Add protocol field to tunnel"}]},"default":"gre"}],"messages":[{"name":"get_all_records","description":"Return a map of tunnel references to tunnel records for all tunnels known to the system.","result":["(tunnel ref -> tunnel record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"A tunnel for network traffic"}]},"implicit":true},{"name":"get_all","description":"Return a list of all the tunnels known to the system.","result":["tunnel ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"A tunnel for network traffic"}]},"implicit":true},{"name":"destroy","description":"Destroy a tunnel","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"tunnel to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Destroy a tunnel"}]},"implicit":false},{"name":"create","description":"Create a tunnel","result":["tunnel ref","The reference of the created tunnel object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"transport_PIF","doc":"PIF which receives the tagged traffic"},{"type":"network ref","name":"network","doc":"Network to receive the tunnelled traffic"},{"type":"enum tunnel_protocol","name":"protocol","doc":"Protocol used for the tunnel (GRE or VxLAN)"}],"errors":[{"name":"OPENVSWITCH_NOT_ACTIVE","doc":"This operation needs the OpenVSwitch networking backend to be enabled on all hosts in the pool."},{"name":"TRANSPORT_PIF_NOT_CONFIGURED","doc":"The tunnel transport PIF has no IP configuration set."},{"name":"IS_TUNNEL_ACCESS_PIF","doc":"Cannot create a VLAN or tunnel on top of a tunnel access PIF - use the underlying transport PIF instead."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Create a tunnel"}]},"implicit":false},{"name":"set_protocol","description":"Set the protocol field of the given tunnel.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"enum tunnel_protocol","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.250.0","description":"Add protocol field to tunnel"}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given tunnel. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Additional configuration"}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given tunnel.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Additional configuration"}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given tunnel.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Additional configuration"}]},"implicit":true},{"name":"remove_from_status","description":"Remove the given key and its corresponding value from the status field of the given tunnel. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Status information about the tunnel"}]},"implicit":true},{"name":"add_to_status","description":"Add the given key-value pair to the status field of the given tunnel.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Status information about the tunnel"}]},"implicit":true},{"name":"set_status","description":"Set the status field of the given tunnel.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Status information about the tunnel"}]},"implicit":true},{"name":"get_protocol","description":"Get the protocol field of the given tunnel.","result":["enum tunnel_protocol","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.250.0","description":"Add protocol field to tunnel"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given tunnel.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Additional configuration"}]},"implicit":true},{"name":"get_status","description":"Get the status field of the given tunnel.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Status information about the tunnel"}]},"implicit":true},{"name":"get_transport_PIF","description":"Get the transport_PIF field of the given tunnel.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The interface used by the tunnel"}]},"implicit":true},{"name":"get_access_PIF","description":"Get the access_PIF field of the given tunnel.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"The interface through which the tunnel is accessed"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given tunnel.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the tunnel instance with the specified UUID.","result":["tunnel ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"A tunnel for network traffic"}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given tunnel.","result":["tunnel record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"tunnel ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"A tunnel for network traffic"}]},"implicit":true}],"enums":[{"name":"tunnel_protocol","values":[{"name":"gre","doc":"GRE protocol"},{"name":"vxlan","doc":"VxLAN Protocol"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cowley","description":"A tunnel for network traffic"}]},"tag":"networking"},{"name":"network_sriov","description":"network-sriov which connects logical pif and physical pif","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]}},{"name":"physical_PIF","description":"The PIF that has SR-IOV enabled","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"Null"},{"name":"logical_PIF","description":"The logical PIF to connect to the SR-IOV network after enable SR-IOV on the physical PIF","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"Null"},{"name":"requires_reboot","description":"Indicates whether the host need to be rebooted before SR-IOV is enabled on the physical PIF","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"false"},{"name":"configuration_mode","description":"The mode for configure network sriov","type":"enum sriov_configuration_mode","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"unknown"}],"messages":[{"name":"get_all_records","description":"Return a map of network_sriov references to network_sriov records for all network_sriovs known to the system.","result":["(network_sriov ref -> network_sriov record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the network_sriovs known to the system.","result":["network_sriov ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_remaining_capacity","description":"Get the number of free SR-IOV VFs on the associated PIF","result":["int","The number of free SR-IOV VFs on the associated PIF"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"the NETWORK_SRIOV object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"destroy","description":"Disable SR-IOV on the specific PIF. It will destroy the network-sriov and the logical PIF accordingly.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"SRIOV to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"create","description":"Enable SR-IOV on the specific PIF. It will create a network-sriov based on the specific PIF and automatically create a logical PIF to connect the specific network.","result":["network_sriov ref","The reference of the created network_sriov object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"pif","doc":"PIF on which to enable SR-IOV"},{"type":"network ref","name":"network","doc":"Network to connect SR-IOV virtual functions with VM VIFs"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":false},{"name":"get_configuration_mode","description":"Get the configuration_mode field of the given network_sriov.","result":["enum sriov_configuration_mode","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_requires_reboot","description":"Get the requires_reboot field of the given network_sriov.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_logical_PIF","description":"Get the logical_PIF field of the given network_sriov.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_physical_PIF","description":"Get the physical_PIF field of the given network_sriov.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given network_sriov.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"Unique identifier/object reference"}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the network_sriov instance with the specified UUID.","result":["network_sriov ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given network_sriov.","result":["network_sriov record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network_sriov ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true}],"enums":[{"name":"sriov_configuration_mode","values":[{"name":"sysfs","doc":"Configure network sriov by sysfs, do not need reboot"},{"name":"modprobe","doc":"Configure network sriov by modprobe, need reboot"},{"name":"manual","doc":"Configure network sriov manually"},{"name":"unknown","doc":"Unknown mode"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"tag":""},{"name":"PCI","description":"A PCI device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"class_name","description":"PCI class name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"vendor_name","description":"Vendor name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"device_name","description":"Device name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"host","description":"Physical machine that owns the PCI device","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"OpaqueRef:NULL"},{"name":"pci_id","description":"PCI ID of the physical device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"dependencies","description":"List of dependent PCI devices","type":"PCI ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"subsystem_vendor_name","description":"Subsystem vendor name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater-whetstone","description":""}]},"default":"\"\""},{"name":"subsystem_device_name","description":"Subsystem device name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater-whetstone","description":""}]},"default":"\"\""},{"name":"driver_name","description":"Driver name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"default":"\"\""}],"messages":[{"name":"get_all_records","description":"Return a map of PCI references to PCI records for all PCIs known to the system.","result":["(PCI ref -> PCI record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PCIs known to the system.","result":["PCI ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PCI. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PCI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PCI.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_driver_name","description":"Get the driver_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"kolkata","description":""}]},"implicit":true},{"name":"get_subsystem_device_name","description":"Get the subsystem_device_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater-whetstone","description":""}]},"implicit":true},{"name":"get_subsystem_vendor_name","description":"Get the subsystem_vendor_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"clearwater-whetstone","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PCI.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_dependencies","description":"Get the dependencies field of the given PCI.","result":["PCI ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_pci_id","description":"Get the pci_id field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PCI.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_device_name","description":"Get the device_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_vendor_name","description":"Get the vendor_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_class_name","description":"Get the class_name field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PCI.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PCI instance with the specified UUID.","result":["PCI ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PCI.","result":["PCI record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PCI ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"tag":""},{"name":"PGPU","description":"A physical GPU (pGPU)","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"PCI","description":"Link to underlying PCI device","type":"PCI ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"OpaqueRef:NULL"},{"name":"GPU_group","description":"GPU group the pGPU is contained in","type":"GPU_group ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"OpaqueRef:NULL"},{"name":"host","description":"Host that owns the GPU","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"OpaqueRef:NULL"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"supported_VGPU_types","description":"List of VGPU types supported by the underlying hardware","type":"VGPU_type ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"enabled_VGPU_types","description":"List of VGPU types which have been enabled for this PGPU","type":"VGPU_type ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"resident_VGPUs","description":"List of VGPUs running on this PGPU","type":"VGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"supported_VGPU_max_capacities","description":"A map relating each VGPU type supported on this GPU to the maximum number of VGPUs of that type which can run simultaneously on this GPU","type":"(VGPU_type ref -> int) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"default":"{}"},{"name":"dom0_access","description":"The accessibility of this device from dom0","type":"enum pgpu_dom0_access","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"default":"enabled"},{"name":"is_system_display_device","description":"Is this device the system display device","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"default":"false"},{"name":"compatibility_metadata","description":"PGPU metadata to determine whether a VGPU can migrate between two PGPUs","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of PGPU references to PGPU records for all PGPUs known to the system.","result":["(PGPU ref -> PGPU record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PGPUs known to the system.","result":["PGPU ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"disable_dom0_access","description":"","result":["enum pgpu_dom0_access","The accessibility of this PGPU from dom0"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU to which dom0 will be denied access"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":false},{"name":"enable_dom0_access","description":"","result":["enum pgpu_dom0_access","The accessibility of this PGPU from dom0"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU to which dom0 will be granted access"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":false},{"name":"get_remaining_capacity","description":"","result":["int","The number of VGPUs of the specified type which can still be started on this PGPU"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU to query"},{"type":"VGPU_type ref","name":"vgpu_type","doc":"The VGPU type for which we want to find the number of VGPUs which can still be started on this PGPU"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"set_GPU_group","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU to move to a new group"},{"type":"GPU_group ref","name":"value","doc":"The group to which the PGPU will be moved"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"set_enabled_VGPU_types","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU on which we are enabling a set of VGPU types"},{"type":"VGPU_type ref set","name":"value","doc":"The VGPU types to enable"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"remove_enabled_VGPU_types","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU from which we are removing an enabled VGPU type"},{"type":"VGPU_type ref","name":"value","doc":"The VGPU type to disable"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"add_enabled_VGPU_types","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"The PGPU to which we are adding an enabled VGPU type"},{"type":"VGPU_type ref","name":"value","doc":"The VGPU type to enable"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PGPU. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PGPU.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PGPU.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_compatibility_metadata","description":"Get the compatibility_metadata field of the given PGPU.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_is_system_display_device","description":"Get the is_system_display_device field of the given PGPU.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":true},{"name":"get_dom0_access","description":"Get the dom0_access field of the given PGPU.","result":["enum pgpu_dom0_access","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"cream","description":""}]},"implicit":true},{"name":"get_supported_VGPU_max_capacities","description":"Get the supported_VGPU_max_capacities field of the given PGPU.","result":["(VGPU_type ref -> int) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_resident_VGPUs","description":"Get the resident_VGPUs field of the given PGPU.","result":["VGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_enabled_VGPU_types","description":"Get the enabled_VGPU_types field of the given PGPU.","result":["VGPU_type ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_supported_VGPU_types","description":"Get the supported_VGPU_types field of the given PGPU.","result":["VGPU_type ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PGPU.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PGPU.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_GPU_group","description":"Get the GPU_group field of the given PGPU.","result":["GPU_group ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_PCI","description":"Get the PCI field of the given PGPU.","result":["PCI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PGPU.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PGPU instance with the specified UUID.","result":["PGPU ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PGPU.","result":["PGPU record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true}],"enums":[{"name":"pgpu_dom0_access","values":[{"name":"enabled","doc":"dom0 can access this device as normal"},{"name":"disable_on_reboot","doc":"On host reboot dom0 will be blocked from accessing this device"},{"name":"disabled","doc":"dom0 cannot access this device"},{"name":"enable_on_reboot","doc":"On host reboot dom0 will be allowed to access this device"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"tag":""},{"name":"GPU_group","description":"A group of compatible GPUs across the resource pool","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"\""},{"name":"PGPUs","description":"List of pGPUs in the group","type":"PGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"VGPUs","description":"List of vGPUs using the group","type":"VGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"GPU_types","description":"List of GPU types (vendor+device ID) that can be in this group","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"allocation_algorithm","description":"Current allocation of vGPUs to pGPUs for this group","type":"enum allocation_algorithm","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"depth_first"},{"name":"supported_VGPU_types","description":"vGPU types supported on at least one of the pGPUs in this group","type":"VGPU_type ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]}},{"name":"enabled_VGPU_types","description":"vGPU types supported on at least one of the pGPUs in this group","type":"VGPU_type ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]}}],"messages":[{"name":"get_all_records","description":"Return a map of GPU_group references to GPU_group records for all GPU_groups known to the system.","result":["(GPU_group ref -> GPU_group record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the GPU_groups known to the system.","result":["GPU_group ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_remaining_capacity","description":"","result":["int","The number of VGPUs of the given type which can still be started on the PGPUs in the group"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"The GPU group to query"},{"type":"VGPU_type ref","name":"vgpu_type","doc":"The VGPU_type for which the remaining capacity will be calculated"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":false},{"name":"destroy","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"The GPU group to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"create","description":"","result":["GPU_group ref","The reference of the created GPU_group"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name_label","doc":""},{"type":"string","name":"name_description","doc":""},{"type":"(string -> string) map","name":"other_config","doc":""}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"set_allocation_algorithm","description":"Set the allocation_algorithm field of the given GPU_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"enum allocation_algorithm","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given GPU_group. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given GPU_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given GPU_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given GPU_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given GPU_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_enabled_VGPU_types","description":"Get the enabled_VGPU_types field of the given GPU_group.","result":["VGPU_type ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_supported_VGPU_types","description":"Get the supported_VGPU_types field of the given GPU_group.","result":["VGPU_type ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_allocation_algorithm","description":"Get the allocation_algorithm field of the given GPU_group.","result":["enum allocation_algorithm","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given GPU_group.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_GPU_types","description":"Get the GPU_types field of the given GPU_group.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_VGPUs","description":"Get the VGPUs field of the given GPU_group.","result":["VGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_PGPUs","description":"Get the PGPUs field of the given GPU_group.","result":["PGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given GPU_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given GPU_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given GPU_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the GPU_group instances with the given label.","result":["GPU_group ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the GPU_group instance with the specified UUID.","result":["GPU_group ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given GPU_group.","result":["GPU_group record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"GPU_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true}],"enums":[{"name":"allocation_algorithm","values":[{"name":"breadth_first","doc":"vGPUs of a given type are allocated evenly across supporting pGPUs."},{"name":"depth_first","doc":"vGPUs of a given type are allocated on supporting pGPUs until they are full."}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"tag":""},{"name":"VGPU","description":"A virtual GPU (vGPU)","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"VM","description":"VM that owns the vGPU","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"GPU_group","description":"GPU group used by the vGPU","type":"GPU_group ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]}},{"name":"device","description":"Order in which the devices are plugged into the VM","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"\"0\""},{"name":"currently_attached","description":"Reflects whether the virtual device is currently connected to a physical device","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"false"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"default":"{}"},{"name":"type","description":"Preset type for this VGPU","type":"VGPU_type ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"OpaqueRef:NULL"},{"name":"resident_on","description":"The PGPU on which this VGPU is running","type":"PGPU ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"OpaqueRef:NULL"},{"name":"scheduled_to_be_resident_on","description":"The PGPU on which this VGPU is scheduled to run","type":"PGPU ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"OpaqueRef:NULL"},{"name":"compatibility_metadata","description":"VGPU metadata to determine whether a VGPU can migrate between two PGPUs","type":"(string -> string) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"{}"},{"name":"extra_args","description":"Extra arguments for vGPU and passed to demu","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"default":"\"\""},{"name":"PCI","description":"Device passed trough to VM, either as full device or SR-IOV virtual function","type":"PCI ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"default":"OpaqueRef:NULL"}],"messages":[{"name":"get_all_records","description":"Return a map of VGPU references to VGPU records for all VGPUs known to the system.","result":["(VGPU ref -> VGPU record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VGPUs known to the system.","result":["VGPU ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"destroy","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"The vGPU to destroy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"create","description":"","result":["VGPU ref","The reference of the created VGPU object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"VM","doc":""},{"type":"GPU_group ref","name":"GPU_group","doc":""},{"type":"string","name":"device","doc":""},{"type":"(string -> string) map","name":"other_config","doc":""},{"type":"VGPU_type ref","name":"type","doc":""}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":false},{"name":"set_extra_args","description":"Set the extra_args field of the given VGPU.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"implicit":true},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VGPU. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VGPU.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VGPU.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_PCI","description":"Get the PCI field of the given VGPU.","result":["PCI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"implicit":true},{"name":"get_extra_args","description":"Get the extra_args field of the given VGPU.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"implicit":true},{"name":"get_compatibility_metadata","description":"Get the compatibility_metadata field of the given VGPU.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_scheduled_to_be_resident_on","description":"Get the scheduled_to_be_resident_on field of the given VGPU.","result":["PGPU ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_resident_on","description":"Get the resident_on field of the given VGPU.","result":["PGPU ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given VGPU.","result":["VGPU_type ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VGPU.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given VGPU.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_device","description":"Get the device field of the given VGPU.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_GPU_group","description":"Get the GPU_group field of the given VGPU.","result":["GPU_group ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given VGPU.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VGPU.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VGPU instance with the specified UUID.","result":["VGPU ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VGPU.","result":["VGPU record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"boston","description":""}]},"tag":""},{"name":"VGPU_type","description":"A type of virtual GPU","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"vendor_name","description":"Name of VGPU vendor","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"\"\""},{"name":"model_name","description":"Model name associated with the VGPU type","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"\"\""},{"name":"framebuffer_size","description":"Framebuffer size of the VGPU type, in bytes","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"0"},{"name":"max_heads","description":"Maximum number of displays supported by the VGPU type","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"default":"0"},{"name":"max_resolution_x","description":"Maximum resolution (width) supported by the VGPU type","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"default":"0"},{"name":"max_resolution_y","description":"Maximum resolution (height) supported by the VGPU type","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"default":"0"},{"name":"supported_on_PGPUs","description":"List of PGPUs that support this VGPU type","type":"PGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"enabled_on_PGPUs","description":"List of PGPUs that have this VGPU type enabled","type":"PGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"VGPUs","description":"List of VGPUs of this type","type":"VGPU ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]}},{"name":"supported_on_GPU_groups","description":"List of GPU groups in which at least one PGPU supports this VGPU type","type":"GPU_group ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]}},{"name":"enabled_on_GPU_groups","description":"List of GPU groups in which at least one have this VGPU type enabled","type":"GPU_group ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]}},{"name":"implementation","description":"The internal implementation of this VGPU type","type":"enum vgpu_type_implementation","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"passthrough"},{"name":"identifier","description":"Key used to identify VGPU types and avoid creating duplicates - this field is used internally and not intended for interpretation by API clients","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"\"\""},{"name":"experimental","description":"Indicates whether VGPUs of this type should be considered experimental","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"default":"false"},{"name":"compatible_types_in_vm","description":"List of VGPU types which are compatible in one VM","type":"VGPU_type ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of VGPU_type references to VGPU_type records for all VGPU_types known to the system.","result":["(VGPU_type ref -> VGPU_type record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VGPU_types known to the system.","result":["VGPU_type ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_compatible_types_in_vm","description":"Get the compatible_types_in_vm field of the given VGPU_type.","result":["VGPU_type ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"quebec","description":""}]},"implicit":true},{"name":"get_experimental","description":"Get the experimental field of the given VGPU_type.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_identifier","description":"Get the identifier field of the given VGPU_type.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_implementation","description":"Get the implementation field of the given VGPU_type.","result":["enum vgpu_type_implementation","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"dundee","description":""}]},"implicit":true},{"name":"get_enabled_on_GPU_groups","description":"Get the enabled_on_GPU_groups field of the given VGPU_type.","result":["GPU_group ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_supported_on_GPU_groups","description":"Get the supported_on_GPU_groups field of the given VGPU_type.","result":["GPU_group ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_VGPUs","description":"Get the VGPUs field of the given VGPU_type.","result":["VGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_enabled_on_PGPUs","description":"Get the enabled_on_PGPUs field of the given VGPU_type.","result":["PGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_supported_on_PGPUs","description":"Get the supported_on_PGPUs field of the given VGPU_type.","result":["PGPU ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_max_resolution_y","description":"Get the max_resolution_y field of the given VGPU_type.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_max_resolution_x","description":"Get the max_resolution_x field of the given VGPU_type.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-productisation","description":""}]},"implicit":true},{"name":"get_max_heads","description":"Get the max_heads field of the given VGPU_type.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_framebuffer_size","description":"Get the framebuffer_size field of the given VGPU_type.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_model_name","description":"Get the model_name field of the given VGPU_type.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_vendor_name","description":"Get the vendor_name field of the given VGPU_type.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VGPU_type.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VGPU_type instance with the specified UUID.","result":["VGPU_type ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VGPU_type.","result":["VGPU_type record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VGPU_type ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"implicit":true}],"enums":[{"name":"vgpu_type_implementation","values":[{"name":"passthrough","doc":"Pass through an entire physical GPU to a guest"},{"name":"nvidia","doc":"vGPU using NVIDIA hardware"},{"name":"nvidia_sriov","doc":"vGPU using NVIDIA hardware with SR-IOV"},{"name":"gvt_g","doc":"vGPU using Intel GVT-g"},{"name":"mxgpu","doc":"vGPU using AMD MxGPU"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"vgpu-tech-preview","description":""}]},"tag":""},{"name":"PVS_site","description":"machines serving blocks of data for provisioning VMs","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"\"\""},{"name":"PVS_uuid","description":"Unique identifier of the PVS site, as configured in PVS","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"\"\""},{"name":"cache_storage","description":"The SR used by PVS proxy for the cache","type":"PVS_cache_storage ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"{}"},{"name":"servers","description":"The set of PVS servers in the site","type":"PVS_server ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"proxies","description":"The set of proxies associated with the site","type":"PVS_proxy ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}}],"messages":[{"name":"get_all_records","description":"Return a map of PVS_site references to PVS_site records for all PVS_sites known to the system.","result":["(PVS_site ref -> PVS_site record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PVS_sites known to the system.","result":["PVS_site ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"set_PVS_uuid","description":"Update the PVS UUID of the PVS site","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"this PVS site"},{"type":"string","name":"value","doc":"PVS UUID to be used"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"forget","description":"Remove a site's meta data","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"this PVS site"}],"errors":[{"name":"PVS_SITE_CONTAINS_RUNNING_PROXIES","doc":"The PVS site contains running proxies."},{"name":"PVS_SITE_CONTAINS_SERVERS","doc":"The PVS site contains servers and cannot be forgotten."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"introduce","description":"Introduce new PVS site","result":["PVS_site ref","the new PVS site"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name_label","doc":"name of the PVS site"},{"type":"string","name":"name_description","doc":"description of the PVS site"},{"type":"string","name":"PVS_uuid","doc":"unique identifier of the PVS site"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"set_name_description","description":"Set the name/description field of the given PVS_site.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given PVS_site.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_proxies","description":"Get the proxies field of the given PVS_site.","result":["PVS_proxy ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_servers","description":"Get the servers field of the given PVS_site.","result":["PVS_server ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_cache_storage","description":"Get the cache_storage field of the given PVS_site.","result":["PVS_cache_storage ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_PVS_uuid","description":"Get the PVS_uuid field of the given PVS_site.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given PVS_site.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given PVS_site.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PVS_site.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the PVS_site instances with the given label.","result":["PVS_site ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PVS_site instance with the specified UUID.","result":["PVS_site ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PVS_site.","result":["PVS_site record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"tag":""},{"name":"PVS_server","description":"individual machine serving provisioning (block) data","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"addresses","description":"IPv4 addresses of this server","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"{}"},{"name":"first_port","description":"First UDP port accepted by this server","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"0"},{"name":"last_port","description":"Last UDP port accepted by this server","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"0"},{"name":"site","description":"PVS site this server is part of","type":"PVS_site ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"}],"messages":[{"name":"get_all_records","description":"Return a map of PVS_server references to PVS_server records for all PVS_servers known to the system.","result":["(PVS_server ref -> PVS_server record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PVS_servers known to the system.","result":["PVS_server ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"forget","description":"forget a PVS server","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"this PVS server"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"introduce","description":"introduce new PVS server","result":["PVS_server ref","the new PVS server"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string set","name":"addresses","doc":"IPv4/IPv6 addresses of the server"},{"type":"int","name":"first_port","doc":"first UDP port accepted by this server"},{"type":"int","name":"last_port","doc":"last UDP port accepted by this server"},{"type":"PVS_site ref","name":"site","doc":"PVS site this server is a part of"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"get_site","description":"Get the site field of the given PVS_server.","result":["PVS_site ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_last_port","description":"Get the last_port field of the given PVS_server.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_first_port","description":"Get the first_port field of the given PVS_server.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_addresses","description":"Get the addresses field of the given PVS_server.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PVS_server.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PVS_server instance with the specified UUID.","result":["PVS_server ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PVS_server.","result":["PVS_server record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_server ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"tag":""},{"name":"PVS_proxy","description":"a proxy connects a VM/VIF with a PVS site","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"site","description":"PVS site this proxy is part of","type":"PVS_site ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"},{"name":"VIF","description":"VIF of the VM using the proxy","type":"VIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"},{"name":"currently_attached","description":"true = VM is currently proxied","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"false"},{"name":"status","description":"The run-time status of the proxy","type":"enum pvs_proxy_status","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"stopped"}],"messages":[{"name":"get_all_records","description":"Return a map of PVS_proxy references to PVS_proxy records for all PVS_proxys known to the system.","result":["(PVS_proxy ref -> PVS_proxy record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PVS_proxys known to the system.","result":["PVS_proxy ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"destroy","description":"remove (or switch off) a PVS proxy for this VM","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"this PVS proxy"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"create","description":"Configure a VM/VIF to use a PVS proxy","result":["PVS_proxy ref","The reference of the created PVS proxy"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_site ref","name":"site","doc":"PVS site that we proxy for"},{"type":"VIF ref","name":"VIF","doc":"VIF for the VM that needs to be proxied"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":false},{"name":"get_status","description":"Get the status field of the given PVS_proxy.","result":["enum pvs_proxy_status","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given PVS_proxy.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_VIF","description":"Get the VIF field of the given PVS_proxy.","result":["VIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_site","description":"Get the site field of the given PVS_proxy.","result":["PVS_site ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PVS_proxy.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PVS_proxy instance with the specified UUID.","result":["PVS_proxy ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PVS_proxy.","result":["PVS_proxy record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_proxy ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true}],"enums":[{"name":"pvs_proxy_status","values":[{"name":"stopped","doc":"The proxy is not currently running"},{"name":"initialised","doc":"The proxy is setup but has not yet cached anything"},{"name":"caching","doc":"The proxy is currently caching data"},{"name":"incompatible_write_cache_mode","doc":"The PVS device is configured to use an incompatible write-cache mode"},{"name":"incompatible_protocol_version","doc":"The PVS protocol in use is not compatible with the PVS proxy"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"tag":""},{"name":"PVS_cache_storage","description":"Describes the storage that is available to a PVS site for caching purposes","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]}},{"name":"host","description":"The host on which this object defines PVS cache storage","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"},{"name":"SR","description":"SR providing storage for the PVS cache","type":"SR ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"},{"name":"site","description":"The PVS_site for which this object defines the storage","type":"PVS_site ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"},{"name":"size","description":"The size of the cache VDI (in bytes)","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"21474836480"},{"name":"VDI","description":"The VDI used for caching","type":"VDI ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"default":"OpaqueRef:NULL"}],"messages":[{"name":"get_all_records","description":"Return a map of PVS_cache_storage references to PVS_cache_storage records for all PVS_cache_storages known to the system.","result":["(PVS_cache_storage ref -> PVS_cache_storage record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PVS_cache_storages known to the system.","result":["PVS_cache_storage ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_VDI","description":"Get the VDI field of the given PVS_cache_storage.","result":["VDI ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_size","description":"Get the size field of the given PVS_cache_storage.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_site","description":"Get the site field of the given PVS_cache_storage.","result":["PVS_site ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_SR","description":"Get the SR field of the given PVS_cache_storage.","result":["SR ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PVS_cache_storage.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PVS_cache_storage.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"destroy","description":"Destroy the specified PVS_cache_storage instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"create","description":"Create a new PVS_cache_storage instance, and return its handle.\nThe constructor args are: host, SR, site, size (* = non-optional).","result":["PVS_cache_storage ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PVS_cache_storage instance with the specified UUID.","result":["PVS_cache_storage ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PVS_cache_storage.","result":["PVS_cache_storage record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PVS_cache_storage ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"ely","description":""}]},"tag":""},{"name":"Feature","description":"A new piece of functionality","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"enabled","description":"Indicates whether the feature is enabled","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"false"},{"name":"experimental","description":"Indicates whether the feature is experimental (as opposed to stable and fully supported)","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"false"},{"name":"version","description":"The version of this feature","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"\"1.0\""},{"name":"host","description":"The host where this feature is available","type":"host ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]}}],"messages":[{"name":"get_all_records","description":"Return a map of Feature references to Feature records for all Features known to the system.","result":["(Feature ref -> Feature record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Features known to the system.","result":["Feature ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given Feature.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given Feature.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_experimental","description":"Get the experimental field of the given Feature.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_enabled","description":"Get the enabled field of the given Feature.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given Feature.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given Feature.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Feature.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the Feature instances with the given label.","result":["Feature ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Feature instance with the specified UUID.","result":["Feature ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Feature.","result":["Feature record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Feature ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"tag":""},{"name":"SDN_controller","description":"Describes the SDN controller that is to connect with the pool","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]}},{"name":"protocol","description":"Protocol to connect with SDN controller","type":"enum sdn_controller_protocol","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"ssl"},{"name":"address","description":"IP address of the controller","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"\"\""},{"name":"port","description":"TCP port of the controller","type":"int","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"default":"0"}],"messages":[{"name":"get_all_records","description":"Return a map of SDN_controller references to SDN_controller records for all SDN_controllers known to the system.","result":["(SDN_controller ref -> SDN_controller record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the SDN_controllers known to the system.","result":["SDN_controller ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"forget","description":"Remove the OVS manager of the pool and destroy the db record.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"this SDN controller"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"introduce","description":"Introduce an SDN controller to the pool.","result":["SDN_controller ref","the introduced SDN controller"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"enum sdn_controller_protocol","name":"protocol","doc":"Protocol to connect with the controller."},{"type":"string","name":"address","doc":"IP address of the controller."},{"type":"int","name":"port","doc":"TCP port of the controller."}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":false},{"name":"get_port","description":"Get the port field of the given SDN_controller.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_address","description":"Get the address field of the given SDN_controller.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_protocol","description":"Get the protocol field of the given SDN_controller.","result":["enum sdn_controller_protocol","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given SDN_controller.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the SDN_controller instance with the specified UUID.","result":["SDN_controller ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given SDN_controller.","result":["SDN_controller record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"SDN_controller ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"implicit":true}],"enums":[{"name":"sdn_controller_protocol","values":[{"name":"ssl","doc":"Active ssl connection"},{"name":"pssl","doc":"Passive ssl connection"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"falcon","description":""}]},"tag":""},{"name":"vdi_nbd_server_info","description":"Details for connecting to a VDI using the Network Block Device protocol","fields":[{"name":"exportname","description":"The exportname to request over NBD. This holds details including an authentication token, so it must be protected appropriately. Clients should regard the exportname as an opaque string or token.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"address","description":"An address on which the server can be reached; this can be IPv4, IPv6, or a DNS name.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"port","description":"The TCP port","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"cert","description":"The TLS certificate of the server","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"subject","description":"For convenience, this redundant field holds a DNS (hostname) subject of the certificate. This can be a wildcard, but only for a certificate that has a wildcard subject and no concrete hostname subjects.","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}}],"messages":[],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"tag":""},{"name":"PUSB","description":"A physical USB device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"USB_group","description":"USB group the PUSB is contained in","type":"USB_group ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"OpaqueRef:NULL"},{"name":"host","description":"Physical machine that owns the USB device","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"OpaqueRef:NULL"},{"name":"path","description":"port path of USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"vendor_id","description":"vendor id of the USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"vendor_desc","description":"vendor description of the USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"product_id","description":"product id of the USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"product_desc","description":"product description of the USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"serial","description":"serial of the USB device","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"version","description":"USB device version","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"description","description":"USB device description","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"passthrough_enabled","description":"enabled for passthrough","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"false"},{"name":"other_config","description":"additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"{}"},{"name":"speed","description":"USB device speed","type":"float","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"-1."}],"messages":[{"name":"get_all_records","description":"Return a map of PUSB references to PUSB records for all PUSBs known to the system.","result":["(PUSB ref -> PUSB record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the PUSBs known to the system.","result":["PUSB ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_passthrough_enabled","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"this PUSB"},{"type":"bool","name":"value","doc":"passthrough is enabled when true and disabled with false"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"scan","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"host ref","name":"host","doc":"The host"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given PUSB. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given PUSB.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given PUSB.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_speed","description":"Get the speed field of the given PUSB.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given PUSB.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_passthrough_enabled","description":"Get the passthrough_enabled field of the given PUSB.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_description","description":"Get the description field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_version","description":"Get the version field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_serial","description":"Get the serial field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_product_desc","description":"Get the product_desc field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_product_id","description":"Get the product_id field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_vendor_desc","description":"Get the vendor_desc field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_vendor_id","description":"Get the vendor_id field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_path","description":"Get the path field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given PUSB.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_USB_group","description":"Get the USB_group field of the given PUSB.","result":["USB_group ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given PUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the PUSB instance with the specified UUID.","result":["PUSB ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given PUSB.","result":["PUSB record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"tag":""},{"name":"USB_group","description":"A group of compatible USBs across the resource pool","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"\"\""},{"name":"PUSBs","description":"List of PUSBs in the group","type":"PUSB ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"VUSBs","description":"List of VUSBs using the group","type":"VUSB ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of USB_group references to USB_group records for all USB_groups known to the system.","result":["(USB_group ref -> USB_group record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the USB_groups known to the system.","result":["USB_group ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"destroy","description":"","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"The USB group to destroy"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"create","description":"","result":["USB_group ref","The reference of the created USB_group"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name_label","doc":""},{"type":"string","name":"name_description","doc":""},{"type":"(string -> string) map","name":"other_config","doc":""}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given USB_group. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given USB_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given USB_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_name_description","description":"Set the name/description field of the given USB_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given USB_group.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given USB_group.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_VUSBs","description":"Get the VUSBs field of the given USB_group.","result":["VUSB ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_PUSBs","description":"Get the PUSBs field of the given USB_group.","result":["PUSB ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given USB_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given USB_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given USB_group.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the USB_group instances with the given label.","result":["USB_group ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the USB_group instance with the specified UUID.","result":["USB_group ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given USB_group.","result":["USB_group record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"USB_group ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"tag":""},{"name":"VUSB","description":"Describes the vusb device","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum vusb_operations set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum vusb_operations) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"VM","description":"VM that owns the VUSB","type":"VM ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"USB_group","description":"USB group used by the VUSB","type":"USB_group ref","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]}},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"default":"{}"},{"name":"currently_attached","description":"is the device currently attached","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"is the device currently attached"}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of VUSB references to VUSB records for all VUSBs known to the system.","result":["(VUSB ref -> VUSB record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the VUSBs known to the system.","result":["VUSB ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"destroy","description":"Removes a VUSB record from the database","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"The VUSB to destroy about"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"unplug","description":"Unplug the vusb device from the vm.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"vusb deivce"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"create","description":"Create a new VUSB record in the database only","result":["VUSB ref","The ref of the newly created VUSB record."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VM ref","name":"VM","doc":"The VM"},{"type":"USB_group ref","name":"USB_group","doc":""},{"type":"(string -> string) map","name":"other_config","doc":""}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given VUSB. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given VUSB.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given VUSB.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_currently_attached","description":"Get the currently_attached field of the given VUSB.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"is the device currently attached"}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given VUSB.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_USB_group","description":"Get the USB_group field of the given VUSB.","result":["USB_group ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_VM","description":"Get the VM field of the given VUSB.","result":["VM ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given VUSB.","result":["(string -> enum vusb_operations) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given VUSB.","result":["enum vusb_operations set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given VUSB.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the VUSB instance with the specified UUID.","result":["VUSB ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given VUSB.","result":["VUSB record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"VUSB ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"implicit":true}],"enums":[{"name":"vusb_operations","values":[{"name":"attach","doc":"Attempting to attach this VUSB to a VM"},{"name":"plug","doc":"Attempting to plug this VUSB into a VM"},{"name":"unplug","doc":"Attempting to hot unplug this VUSB"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"inverness","description":""}]},"tag":""},{"name":"Cluster","description":"Cluster-wide Cluster metadata","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"cluster_hosts","description":"A list of the cluster_host objects associated with the Cluster","type":"Cluster_host ref set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"pending_forget","description":"Internal field used by Host.destroy to store the IP of cluster members marked as permanently dead but not yet removed","type":"string set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"lima","description":""}]},"default":"{}"},{"name":"cluster_token","description":"The secret key used by xapi-clusterd when it talks to itself on other hosts","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"\"\""},{"name":"cluster_stack","description":"Simply the string 'corosync'. No other cluster stacks are currently supported","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"\"corosync\""},{"name":"is_quorate","description":"Whether the cluster stack thinks the cluster is quorate","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"default":"false"},{"name":"quorum","description":"Number of live hosts in order to be quorate","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"default":"0"},{"name":"live_hosts","description":"Current number of live hosts, according to the cluster stack","type":"int","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"default":"0"},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum cluster_operation set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum cluster_operation) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"pool_auto_join","description":"True if automatically joining new pool members to the cluster. This will be `true` in the first release","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"true"},{"name":"token_timeout","description":"The corosync token timeout in seconds","type":"float","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":"the unit is milliseconds"},{"transition":"changed","release":"lima","description":"the unit is now seconds"},{"transition":"published","release":"lima","description":""}]},"default":"20."},{"name":"token_timeout_coefficient","description":"The corosync token timeout coefficient in seconds","type":"float","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":"the unit is milliseconds"},{"transition":"changed","release":"lima","description":"the unit is now seconds"},{"transition":"published","release":"lima","description":""}]},"default":"1."},{"name":"cluster_config","description":"Contains read-only settings for the cluster, such as timeouts and other options. It can only be set at cluster create time","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"{}"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of Cluster references to Cluster records for all Clusters known to the system.","result":["(Cluster ref -> Cluster record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Clusters known to the system.","result":["Cluster ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"pool_resync","description":"Resynchronise the cluster_host objects across the pool. Creates them where they need creating and then plugs them","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"The cluster to resync"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"pool_destroy","description":"Attempt to destroy the Cluster_host objects for all hosts in the pool and then destroy the Cluster.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"The cluster to destroy."}],"errors":[{"name":"CLUSTER_STACK_IN_USE","doc":"The cluster stack is still in use by at least one plugged PBD."},{"name":"CLUSTERING_DISABLED","doc":"An operation was attempted while clustering was disabled on the cluster_host."},{"name":"CLUSTER_HOST_IS_LAST","doc":"The last cluster host cannot be destroyed. Destroy the cluster instead"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"pool_force_destroy","description":"Attempt to force destroy the Cluster_host objects, and then destroy the Cluster.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"The cluster to force destroy."}],"errors":[{"name":"CLUSTER_FORCE_DESTROY_FAILED","doc":"Force destroy failed on a Cluster_host while force destroying the cluster."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"pool_create","description":"Attempt to create a Cluster from the entire pool","result":["Cluster ref","the new Cluster"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"network ref","name":"network","doc":"the single network on which corosync carries out its inter-host communications"},{"type":"string","name":"cluster_stack","doc":"simply the string 'corosync'. No other cluster stacks are currently supported"},{"type":"float","name":"token_timeout","doc":"Corosync token timeout in seconds"},{"type":"float","name":"token_timeout_coefficient","doc":"Corosync token timeout coefficient in seconds"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"get_network","description":"Returns the network used by the cluster for inter-host communication, i.e. the network shared by all cluster host PIFs","result":["network ref","network of cluster"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"the Cluster with the network"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"destroy","description":"Destroys a Cluster object and the one remaining Cluster_host member","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"the Cluster to destroy"}],"errors":[{"name":"CLUSTER_DOES_NOT_HAVE_ONE_NODE","doc":"An operation failed as it expected the cluster to have only one node but found multiple cluster_hosts."},{"name":"CLUSTER_STACK_IN_USE","doc":"The cluster stack is still in use by at least one plugged PBD."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"create","description":"Creates a Cluster object and one Cluster_host object as its first member","result":["Cluster ref","the new Cluster"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"PIF ref","name":"PIF","doc":"The PIF to connect the cluster's first cluster_host to"},{"type":"string","name":"cluster_stack","doc":"simply the string 'corosync'. No other cluster stacks are currently supported"},{"type":"bool","name":"pool_auto_join","doc":"true if xapi is automatically joining new pool members to the cluster"},{"type":"float","name":"token_timeout","doc":"Corosync token timeout in seconds"},{"type":"float","name":"token_timeout_coefficient","doc":"Corosync token timeout coefficient in seconds"}],"errors":[{"name":"INVALID_CLUSTER_STACK","doc":"The cluster stack provided is not supported."},{"name":"INVALID_VALUE","doc":"The value given is invalid"},{"name":"PIF_ALLOWS_UNPLUG","doc":"The operation you requested cannot be performed because the specified PIF allows unplug."},{"name":"REQUIRED_PIF_IS_UNPLUGGED","doc":"The operation you requested cannot be performed because the specified PIF is currently unplugged."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"remove_from_other_config","description":"Remove the given key and its corresponding value from the other_config field of the given Cluster. If the key is not in that Map, then do nothing.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to remove"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"add_to_other_config","description":"Add the given key-value pair to the other_config field of the given Cluster.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"},{"type":"string","name":"key","doc":"Key to add"},{"type":"string","name":"value","doc":"Value to add"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"set_other_config","description":"Set the other_config field of the given Cluster.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"},{"type":"(string -> string) map","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_other_config","description":"Get the other_config field of the given Cluster.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_cluster_config","description":"Get the cluster_config field of the given Cluster.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_token_timeout_coefficient","description":"Get the token_timeout_coefficient field of the given Cluster.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":"the unit is milliseconds"},{"transition":"changed","release":"lima","description":"the unit is now seconds"},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_token_timeout","description":"Get the token_timeout field of the given Cluster.","result":["float","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":"the unit is milliseconds"},{"transition":"changed","release":"lima","description":"the unit is now seconds"},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_pool_auto_join","description":"Get the pool_auto_join field of the given Cluster.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given Cluster.","result":["(string -> enum cluster_operation) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given Cluster.","result":["enum cluster_operation set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_live_hosts","description":"Get the live_hosts field of the given Cluster.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"implicit":true},{"name":"get_quorum","description":"Get the quorum field of the given Cluster.","result":["int","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"implicit":true},{"name":"get_is_quorate","description":"Get the is_quorate field of the given Cluster.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"implicit":true},{"name":"get_cluster_stack","description":"Get the cluster_stack field of the given Cluster.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_cluster_token","description":"Get the cluster_token field of the given Cluster.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_pending_forget","description":"Get the pending_forget field of the given Cluster.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_cluster_hosts","description":"Get the cluster_hosts field of the given Cluster.","result":["Cluster_host ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Cluster.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Cluster instance with the specified UUID.","result":["Cluster ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Cluster.","result":["Cluster record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true}],"enums":[{"name":"cluster_operation","values":[{"name":"add","doc":"adding a new member to the cluster"},{"name":"remove","doc":"removing a member from the cluster"},{"name":"enable","doc":"enabling any cluster member"},{"name":"disable","doc":"disabling any cluster member"},{"name":"destroy","doc":"completely destroying a cluster"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"tag":""},{"name":"Cluster_host","description":"Cluster member metadata","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]}},{"name":"cluster","description":"Reference to the Cluster object","type":"Cluster ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"OpaqueRef:NULL"},{"name":"host","description":"Reference to the Host object","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"OpaqueRef:NULL"},{"name":"enabled","description":"Whether the cluster host believes that clustering should be enabled on this host. This field can be altered by calling the enable/disable message on a cluster host. Only enabled members run the underlying cluster stack. Disabled members are still considered a member of the cluster (see joined), and can be re-enabled by the user.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"false"},{"name":"PIF","description":"Reference to the PIF object","type":"PIF ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"OpaqueRef:NULL"},{"name":"joined","description":"Whether the cluster host has joined the cluster. Contrary to enabled, a host that is not joined is not considered a member of the cluster, and hence enable and disable operations cannot be performed on this host.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"true"},{"name":"live","description":"Whether the underlying cluster stack thinks we are live. This field is set automatically based on updates from the cluster stack and cannot be altered by the user.","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"default":"false"},{"name":"last_update_live","description":"Time when the live field was last updated based on information from the cluster stack","type":"datetime","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"default":"19700101T00:00:00Z"},{"name":"allowed_operations","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client.","type":"enum cluster_host_operation set","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"default":"{}"},{"name":"current_operations","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task.","type":"(string -> enum cluster_host_operation) map","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"default":"{}"},{"name":"other_config","description":"Additional configuration","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"default":"{}"}],"messages":[{"name":"get_all_records","description":"Return a map of Cluster_host references to Cluster_host records for all Cluster_hosts known to the system.","result":["(Cluster_host ref -> Cluster_host record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Cluster_hosts known to the system.","result":["Cluster_host ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"disable","description":"Disable cluster membership for an enabled cluster host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"the cluster_host to disable"}],"errors":[{"name":"CLUSTER_STACK_IN_USE","doc":"The cluster stack is still in use by at least one plugged PBD."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"force_destroy","description":"Remove a host from an existing cluster forcefully.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"the cluster_host to remove from the cluster"}],"errors":[{"name":"CLUSTER_STACK_IN_USE","doc":"The cluster stack is still in use by at least one plugged PBD."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"enable","description":"Enable cluster membership for a disabled cluster host.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"the cluster_host to enable"}],"errors":[{"name":"PIF_ALLOWS_UNPLUG","doc":"The operation you requested cannot be performed because the specified PIF allows unplug."},{"name":"REQUIRED_PIF_IS_UNPLUGGED","doc":"The operation you requested cannot be performed because the specified PIF is currently unplugged."}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"destroy","description":"Remove the host from an existing cluster. This operation is allowed even if a cluster host is not enabled.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"the cluster_host to remove from the cluster"}],"errors":[{"name":"CLUSTER_STACK_IN_USE","doc":"The cluster stack is still in use by at least one plugged PBD."},{"name":"CLUSTERING_DISABLED","doc":"An operation was attempted while clustering was disabled on the cluster_host."},{"name":"CLUSTER_HOST_IS_LAST","doc":"The last cluster host cannot be destroyed. Destroy the cluster instead"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"create","description":"Add a new host to an existing cluster.","result":["Cluster_host ref","the newly created cluster_host object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster ref","name":"cluster","doc":"Cluster to join"},{"type":"host ref","name":"host","doc":"new cluster member"},{"type":"PIF ref","name":"pif","doc":"Network interface to use for communication"}],"errors":[{"name":"PIF_NOT_ATTACHED_TO_HOST","doc":"Cluster_host creation failed as the PIF provided is not attached to the host."},{"name":"NO_CLUSTER_HOSTS_REACHABLE","doc":"No other cluster host was reachable when joining"}],"roles":["pool-admin","pool-operator"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":false},{"name":"get_other_config","description":"Get the other_config field of the given Cluster_host.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_current_operations","description":"Get the current_operations field of the given Cluster_host.","result":["(string -> enum cluster_host_operation) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task."}]},"implicit":true},{"name":"get_allowed_operations","description":"Get the allowed_operations field of the given Cluster_host.","result":["enum cluster_host_operation set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client."}]},"implicit":true},{"name":"get_last_update_live","description":"Get the last_update_live field of the given Cluster_host.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"implicit":true},{"name":"get_live","description":"Get the live field of the given Cluster_host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"24.3.0","description":""}]},"implicit":true},{"name":"get_joined","description":"Get the joined field of the given Cluster_host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_PIF","description":"Get the PIF field of the given Cluster_host.","result":["PIF ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_enabled","description":"Get the enabled field of the given Cluster_host.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given Cluster_host.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_cluster","description":"Get the cluster field of the given Cluster_host.","result":["Cluster ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Cluster_host.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Cluster_host instance with the specified UUID.","result":["Cluster_host ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Cluster_host.","result":["Cluster_host record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Cluster_host ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"implicit":true}],"enums":[{"name":"cluster_host_operation","values":[{"name":"enable","doc":"enabling cluster membership on a particular host"},{"name":"disable","doc":"disabling cluster membership on a particular host"},{"name":"destroy","doc":"completely destroying a cluster host"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"prototyped","release":"kolkata","description":""},{"transition":"published","release":"lima","description":""}]},"tag":""},{"name":"Certificate","description":"An X509 certificate used for TLS connections","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]}},{"name":"name","description":"The name of the certificate, only present on certificates of type 'ca'","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.294.0","description":""}]},"default":"\"\""},{"name":"type","description":"The type of the certificate, either 'ca', 'host' or 'host_internal'","type":"enum certificate_type","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.294.0","description":""}]},"default":"host"},{"name":"host","description":"The host where the certificate is installed","type":"host ref","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"OpaqueRef:NULL"},{"name":"not_before","description":"Date after which the certificate is valid","type":"datetime","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"19700101T00:00:00Z"},{"name":"not_after","description":"Date before which the certificate is valid","type":"datetime","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"19700101T00:00:00Z"},{"name":"fingerprint","description":"The certificate's SHA256 fingerprint / hash","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"default":"\"\""}],"messages":[{"name":"get_all_records","description":"Return a map of Certificate references to Certificate records for all Certificates known to the system.","result":["(Certificate ref -> Certificate record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Certificates known to the system.","result":["Certificate ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_fingerprint","description":"Get the fingerprint field of the given Certificate.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_not_after","description":"Get the not_after field of the given Certificate.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_not_before","description":"Get the not_before field of the given Certificate.","result":["datetime","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_host","description":"Get the host field of the given Certificate.","result":["host ref","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_type","description":"Get the type field of the given Certificate.","result":["enum certificate_type","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.294.0","description":""}]},"implicit":true},{"name":"get_name","description":"Get the name field of the given Certificate.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.294.0","description":""}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Certificate.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Certificate instance with the specified UUID.","result":["Certificate ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Certificate.","result":["Certificate record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Certificate ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"implicit":true}],"enums":[{"name":"certificate_type","values":[{"name":"ca","doc":"Certificate that is trusted by the whole pool"},{"name":"host","doc":"Certificate that identifies a single host to entities outside the pool"},{"name":"host_internal","doc":"Certificate that identifies a single host to other pool members"}]}],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"stockholm","description":""}]},"tag":""},{"name":"Repository","description":"Repository for updates","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"binary_url","description":"Base URL of binary packages in this repository","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"default":"\"\""},{"name":"source_url","description":"Base URL of source packages in this repository","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"default":"\"\""},{"name":"update","description":"True if updateinfo.xml in this repository needs to be parsed","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"default":"false"},{"name":"hash","description":"SHA256 checksum of latest updateinfo.xml.gz in this repository if its 'update' is true","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"default":"\"\""},{"name":"up_to_date","description":"True if all hosts in pool is up to date with this repository","type":"bool","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"1.301.0","description":""},{"transition":"deprecated","release":"23.18.0","description":"Dummy transition"},{"transition":"removed","release":"23.18.0","description":"The up_to_date field of repository was removed"}]},"default":"false"},{"name":"gpgkey_path","description":"The file name of the GPG public key of this repository","type":"string","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.12.0","description":""}]},"default":"\"\""}],"messages":[{"name":"get_all_records","description":"Return a map of Repository references to Repository records for all Repositorys known to the system.","result":["(Repository ref -> Repository record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Repositorys known to the system.","result":["Repository ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"set_gpgkey_path","description":"Set the file name of the GPG public key of the repository","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"The repository"},{"type":"string","name":"value","doc":"The file name of the GPG public key of the repository"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.12.0","description":""}]},"implicit":false},{"name":"forget","description":"Remove the repository record from the database","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"The repository to be removed from the database"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":false},{"name":"introduce","description":"Add the configuration for a new repository","result":["Repository ref","The ref of the created repository record."],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"name_label","doc":"The name of the repository"},{"type":"string","name":"name_description","doc":"The description of the repository"},{"type":"string","name":"binary_url","doc":"Base URL of binary packages in this repository"},{"type":"string","name":"source_url","doc":"Base URL of source packages in this repository"},{"type":"bool","name":"update","doc":"True if the repository is an update repository. This means that updateinfo.xml will be parsed"},{"type":"string","name":"gpgkey_path","doc":"The GPG public key file name"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":false},{"name":"set_name_description","description":"Set the name/description field of the given Repository.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given Repository.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin","pool-operator","client-cert"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_gpgkey_path","description":"Get the gpgkey_path field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"22.12.0","description":""}]},"implicit":true},{"name":"get_up_to_date","description":"Get the up_to_date field of the given Repository.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Removed_s","transitions":[{"transition":"published","release":"1.301.0","description":""},{"transition":"deprecated","release":"23.18.0","description":"Dummy transition"},{"transition":"removed","release":"23.18.0","description":"The up_to_date field of repository was removed"}]},"implicit":true},{"name":"get_hash","description":"Get the hash field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_update","description":"Get the update field of the given Repository.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_source_url","description":"Get the source_url field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_binary_url","description":"Get the binary_url field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Repository.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the Repository instances with the given label.","result":["Repository ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Repository instance with the specified UUID.","result":["Repository ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Repository.","result":["Repository record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Repository ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"1.301.0","description":""}]},"tag":""},{"name":"Observer","description":"Describes a observer which will control observability activity in the Toolstack","fields":[{"name":"uuid","description":"Unique identifier/object reference","type":"string","qualifier":"RO/runtime","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]}},{"name":"name_label","description":"a human-readable name","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"default":"\"\""},{"name":"name_description","description":"a notes field containing human-readable description","type":"string","qualifier":"RW","tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"default":"\"\""},{"name":"hosts","description":"The list of hosts the observer is active on. An empty list means all hosts","type":"host ref set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"default":"{}"},{"name":"attributes","description":"Attributes that observer will add to the data they produce","type":"(string -> string) map","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"default":"{}"},{"name":"endpoints","description":"The list of endpoints where data is exported to. Each endpoint is a URL or the string 'bugtool' refering to the internal logs","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"default":"{}"},{"name":"components","description":"The list of xenserver components the observer will broadcast. An empty list means all components","type":"string set","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"default":"{}"},{"name":"enabled","description":"This denotes if the observer is enabled. true if it is enabled and false if it is disabled","type":"bool","qualifier":"RO/constructor","tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"default":"false"}],"messages":[{"name":"get_all_records","description":"Return a map of Observer references to Observer records for all Observers known to the system.","result":["(Observer ref -> Observer record) map","records of all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_all","description":"Return a list of all the Observers known to the system.","result":["Observer ref set","references to all objects"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"set_components","description":"Set the components on which the observer will broadcast to. i.e. xapi, xenopsd, networkd, etc","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"The observer"},{"type":"string set","name":"value","doc":"The components the observer will broadcast to"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":false},{"name":"set_endpoints","description":"Set the file/HTTP endpoints the observer sends data to","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"The observer"},{"type":"string set","name":"value","doc":"The endpoints that the observer will export data to. A URL or the string 'bugtool'. This can refer to an enpoint to the local file system"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":false},{"name":"set_attributes","description":"Set the attributes of an observer. These are used to emit metadata by the observer","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"The observer"},{"type":"(string -> string) map","name":"value","doc":"The attributes that the observer emits as part of the data"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":false},{"name":"set_enabled","description":"Enable / disable this observer which will stop the observer from producing observability information","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"The observer"},{"type":"bool","name":"value","doc":"If the observer is to be enabled (true) or disabled (false)"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":false},{"name":"set_hosts","description":"Sets the hosts that the observer is to be registered on","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"The observer"},{"type":"host ref set","name":"value","doc":"Hosts the observer is registered on"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":false},{"name":"set_name_description","description":"Set the name/description field of the given Observer.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"set_name_label","description":"Set the name/label field of the given Observer.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"},{"type":"string","name":"value","doc":"New value to set"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_enabled","description":"Get the enabled field of the given Observer.","result":["bool","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_components","description":"Get the components field of the given Observer.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_endpoints","description":"Get the endpoints field of the given Observer.","result":["string set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_attributes","description":"Get the attributes field of the given Observer.","result":["(string -> string) map","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_hosts","description":"Get the hosts field of the given Observer.","result":["host ref set","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_name_description","description":"Get the name/description field of the given Observer.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a notes field containing human-readable description"}]},"implicit":true},{"name":"get_name_label","description":"Get the name/label field of the given Observer.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Published_s","transitions":[{"transition":"published","release":"rio","description":"a human-readable name"}]},"implicit":true},{"name":"get_uuid","description":"Get the uuid field of the given Observer.","result":["string","value of the field"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_by_name_label","description":"Get all the Observer instances with the given label.","result":["Observer ref set","references to objects with matching names"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"label","doc":"label of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"destroy","description":"Destroy the specified Observer instance.","result":["void"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"create","description":"Create a new Observer instance, and return its handle.\nThe constructor args are: name_label, name_description, hosts, attributes, endpoints, components, enabled (* = non-optional).","result":["Observer ref","reference to the newly created object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer record","name":"args","doc":"All constructor arguments"}],"errors":[],"roles":["pool-admin"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_by_uuid","description":"Get a reference to the Observer instance with the specified UUID.","result":["Observer ref","reference to the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"string","name":"uuid","doc":"UUID of object to return"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true},{"name":"get_record","description":"Get a record containing the current state of the given Observer.","result":["Observer record","all fields from the object"],"params":[{"type":"session ref","name":"session_id","doc":"Reference to a valid session"},{"type":"Observer ref","name":"self","doc":"reference to the object"}],"errors":[],"roles":["pool-admin","pool-operator","vm-power-admin","vm-admin","vm-operator","client-cert","read-only"],"tag":"","lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"implicit":true}],"enums":[],"lifecycle":{"state":"Prototyped_s","transitions":[{"transition":"prototyped","release":"23.14.0","description":""}]},"tag":""}] diff --git a/doc/hugo.toml b/doc/hugo.toml index 3ece19caf47..bb1127b019e 100644 --- a/doc/hugo.toml +++ b/doc/hugo.toml @@ -3,6 +3,7 @@ languageCode = 'en-us' title = 'XAPI Toolstack Developer Documentation' disablePathToLower = true pygmentsCodeFences = true +assetsDir = "assets" [module] [[module.imports]] diff --git a/doc/layouts/xenapi/class.html b/doc/layouts/xenapi/class.html new file mode 100644 index 00000000000..e9e3c6cbe8b --- /dev/null +++ b/doc/layouts/xenapi/class.html @@ -0,0 +1,201 @@ +{{- partial "header.html" . }} + +
navigation + + + + +{{ $style := resources.Get "css/xenapi.css" }} + + +{{ .Content }} +{{ $c := .Page.Params.class }} +{{ with index (where $.Site.Data.xenapi "name" $c) 0 }} + +{{ with .lifecycle }} +
+ {{ if eq .state "Prototyped_s" }} + Prototype + {{ else if eq .state "Deprecated_s" }} + Deprecated + {{ else if eq .state "Removed_s" }} + Removed + {{ end }} +
+{{ end }} + +

+Class: {{ $c }} +

+ +
+{{ .description | htmlEscape }} +
+ + + +{{ if gt (len .enums) 0 }} +

Enums

+ + {{ range $i, $x := .enums }} +
+
{{ $x.name }}
+ +
+ {{ end }} +{{ end }} + +

Fields

+ +{{ range $i, $x := sort .fields "name" }} +
+ {{ with $x.lifecycle }} +
+ {{ if eq .state "Prototyped_s" }} + Prototype + {{ else if eq .state "Deprecated_s" }} + Deprecated + {{ else if eq .state "Removed_s" }} + Removed + {{ end }} +
+ {{ end }} +
+ {{replace $x.type "->" "→"}} + {{$x.name}} + [{{$x.qualifier}}] +
+ +
+{{ end }} + +

+ Messages + +

+ +{{ range $i, $x := sort .messages "name" }} +
+ {{ with $x.lifecycle }} +
+ {{ if eq .state "Prototyped_s" }} + Prototype + {{ else if eq .state "Deprecated_s" }} + Deprecated + {{ else if eq .state "Removed_s" }} + Removed + {{ end }} +
+ {{ end }} +
+ {{replace (index $x.result 0) "->" "→"}} + {{$x.name}} + {{ $ptypes := slice }} + {{ range $x.params }} + {{ $ptypes = $ptypes | append (replace .type "->" "→") }} + {{ end }} + ({{ delimit $ptypes ", " }}) +
+ +
+{{ end }} + +{{ end }} + +{{- partial "footer.html" . }} \ No newline at end of file diff --git a/doc/make-class-pages.py b/doc/make-class-pages.py new file mode 100755 index 00000000000..5ec84bb3347 --- /dev/null +++ b/doc/make-class-pages.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +import json + +xenapi_json = "data/xenapi.json" +classes_root = "content/xen-api/classes/" + +def template(c): + return f"""+++ +title = "{c}" +layout = "class" +type = "xenapi" +class = "{c}" ++++ +""" + +def classes(): + with open(xenapi_json) as f: + xenapi = json.load(f) + return [c['name'] for c in xenapi] + +for c in classes(): + with open(f"{classes_root}{c.lower()}.md", 'w') as f: + f.write(template(c)) From 837cec3861bd4d5c4723cdb85b3f7a0b16ecfba0 Mon Sep 17 00:00:00 2001 From: Alejandro Vallejo Date: Fri, 10 May 2024 17:43:55 +0100 Subject: [PATCH 44/44] xenopsd/scripts: Make pygrub wrapper use the libexec path From Xen 4.19 onwards the legacy paths disappeared and the only valid path for pygrub is /usr/libexec/xen/bin/pygrub. This path has always been preferred, but now it's mandatory. Signed-off-by: Alejandro Vallejo --- ocaml/xenopsd/scripts/pygrub-wrapper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocaml/xenopsd/scripts/pygrub-wrapper b/ocaml/xenopsd/scripts/pygrub-wrapper index 0a3c78964dd..e55121745bf 100644 --- a/ocaml/xenopsd/scripts/pygrub-wrapper +++ b/ocaml/xenopsd/scripts/pygrub-wrapper @@ -15,7 +15,7 @@ import pwd, subprocess, sys -cmd = ["pygrub"] +cmd = ["/usr/libexec/xen/bin/pygrub"] # Get the usage string. We can't use check_output() because the exit status isn't 0 pygrub_usage = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).communicate()[1]