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
-
Edit the manifest file,
plugin.json
.
{ "manifestVersion": "1.0.0",
"requirements": {"plugin.api.version": "1.0.0"}
...
-
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": {
...
-
Within the managed object type,
locate the extension type for which the plug-in can supply a dynamic
extension.
Option | Description |
---|
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": {
...
|
-
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.
Option | Description |
---|
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",
...
|
-
At the same level as the
dynamicUri
property, locate the
views
array (for Monitor or Configure extensions) or the
actions
array (for Menu extensions)
Option | Description |
---|
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": [
...
|
-
To each view or action that will be treated as dynamic, add the
dynamic
property.
Option | Description |
---|
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,
...
|
-
Add a
navigationId
(to a Monitor or Configure view) or an
Id
(to a Menu action) if not already present.
Option | Description |
---|
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.