Configure Dynamic Extensions

You configure dynamic extensions for your plug-in by using properties in the plugin.json manifest file. These properties identify the dynamic extensions and provide SPI endpoints for queries from the client code.

Dynamic Monitor extensions and Configure extensions are configured in the same way. Dynamic Menu extensions are similar. Where the steps differ, the examples show both ways.

Procedure

  1. Edit the manifest file, plugin.json.
    { "manifestVersion": "1.0.0",
      "requirements": {"plugin.api.version": "1.0.0"}
      ...
  2. Within the objects object, locate the type of vSphere managed object for which the plug-in can supply a dynamic extension.
    { "manifestVersion": "1.0.0",
      "requirements": {"plugin.api.version": "1.0.0"}
      ...
      "objects": { ...
        "VirtualMachine": {
          ...
  3. Within the managed object type, locate the extension type for which the plug-in can supply a dynamic extension.
    OptionDescription
    For a dynamic extension in the Monitor tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "monitor": {
          ...
    For a dynamic extension in the Configure tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "configure": {
          ...
    For a dynamic extension in the Actions menu.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "menu": {
          ...
  4. Within the object representing the extension type object, add a dynamicUri property to identify the endpoint where the client code will query the plug-in server for its filter choices.
    OptionDescription
    For a dynamic extension in the Monitor tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "monitor": {
            "dynamicUri": "rest/dynamics/vm/monitor",
            ...
    For a dynamic extension in the Configure tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "configure": {
            "dynamicUri": "rest/dynamics/vm/configure",
            ...
    For a dynamic extension in the Actions menu.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "menu": {
            "dynamicUri": "rest/dynamics/vm/actions",
            ...
  5. At the same level as the dynamicUri property, locate the views array (for Monitor or Configure extensions) or the actions array (for Menu extensions)
    OptionDescription
    For a dynamic extension in the Monitor tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "monitor": {
            "dynamicUri": "rest/dynamics/vm/monitor",
            "views": [
              ...
    For a dynamic extension in the Configure tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "configure": {
            "dynamicUri": "rest/dynamics/vm/configure",
            "views": [
              ...
    For a dynamic extension in the Actions menu.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "menu": {
            "dynamicUri": "rest/dynamics/vm/actions",
            "actions": [
              ...
  6. To each view or action that will be treated as dynamic, add the dynamic property.
    OptionDescription
    For a dynamic extension in the Monitor tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "monitor": {
            "dynamicUri": "rest/dynamics/vm/monitor",
            "views": [
              {
                "dynamic": true,
                ...
    For a dynamic extension in the Configure tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "configure": {
            "dynamicUri": "rest/dynamics/vm/configure",
            "views": [
              {
                "dynamic": true,
                ...
    For a dynamic extension in the Actions menu.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "menu": {
            "dynamicUri": "rest/dynamics/vm/actions",
            "actions": [
              {
                "dynamic": true,
                ...
  7. Add a navigationId (to a Monitor or Configure view) or an Id (to a Menu action) if not already present.
    OptionDescription
    For a dynamic extension in the Monitor tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "monitor": {
            "dynamicUri": "rest/dynamics/vm/monitor",
            "views": [
              {
                "dynamic": true,
                "navigationId": "MonitorDynView",
                ...
    For a dynamic extension in the Configure tab.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "configure": {
            "dynamicUri": "rest/dynamics/vm/configure",
            "views": [
              {
                "dynamic": true,
                "navigationId": "ConfigureDynView",
                ...
    For a dynamic extension in the Actions menu.
    ...
      "objects": { ...
        "VirtualMachine": { ...
          "menu": {
            "dynamicUri": "rest/dynamics/vm/actions",
            "actions": [
              {
                "dynamic": true,
                "id": "TakeAction",
                ...
    A navigationId or id string is required to identify the dynamic view or action in the plug-in server's response to a filter query.

Results

The following example shows a plugin.json file with a dynamic Monitor view, a fixed Configure view, and a dynamic action.

Example: plugin.json With Dynamic Extensions

{ "manifestVersion": "1.0.0",
  "requirements": {"plugin.api.version": "1.0.0"},
  "configuration": {
    "nameKey": "Dynamic Extension Manifest Example"
  }
  "objects": {
    "VirtualMachine": {
      "monitor": {
        "dynamicUri": "rest/dynamics/vm/monitor",
        "views": [
          {
            "dynamic": true,
            "navigationId": "MonitorDynView",
            "uri": "rest/views/vm/monitor/index.html"
          }
        ],
      "configure": {
        "views": [
          {
            "navigationId": "ConfigureFixView",
            "uri": "rest/views/vm/configure/index.html"
          },
      "menu": {
        "dynamicUri": "rest/dynamics/vm/actions",
        "actions": [
          {
            "dynamic": true,
            "id": "TakeAction",
            "labelKey": "Take action",
            "trigger": {
              "type": "modal",
              "uri": "rest/actions/vm/action1.html"
            }
          }
        ]
      }
    }
  }
}

What to do next

Implement server-side code to handle filter queries at the endpoints that you configured in the manifest file. For more information about filter queries, see Dynamic Extensions Filter Query.