How to config for create an instance catalog item thats allow users to add additional disk

I need help advice related configuration additional disk catalog in below :
“volumes”: [
{
“id”: 40366,
“name”: “root”,
“controllerId”: 14767,
“controllerMountPoint”: “14767:0:17:0”,
“resizeable”: true,
“planResizable”: true,
“rootVolume”: true,
“unitNumber”: “0”,
“typeId”: 2,
“configurableIOPS”: false,
“maxStorage”: 107374182400,
“displayOrder”: 0,
“maxIOPS”: null,
“uuid”: “a13296f8-0ed7-4fc4-98f4-60d62239c000”,
“uniqueId”: null,
“externalId”: “2000”,
“internalId”: “[rpdev-w01-t4-hd21dnd-01] CISO-MORPHEUS-RHEL8-OKT23/CISO-MORPHEUS-RHEL8-OKT23.vmdk”,
“virtualImageId”: 2068,
“size”: 100,
“minStorage”: 64424509440,
“vId”: 2068,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“datastoreId”: 543
},
{
“rootVolume”: false,
“name”: “data-1”,
“maxStorage”: 0,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:1”,
“size”: “<%=customOptions.addDisk1%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-2”,
“maxStorage”: 0,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:2”,
“size”: “<%=customOptions.addDisk2%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-3”,
“maxStorage”: 0,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:3”,
“size”: “<%=customOptions.addDisk3%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-4”,
“maxStorage”: 0,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:4”,
“size”: “<%=customOptions.addDisk4%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-5”,
“maxStorage”: 0,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:5”,
“size”: “<%=customOptions.addDisk5%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
}
],
because i has been tried the catalog for the result it’s failed to order catalog
Thanks,
Fyan

What version of Morpheus are you on? If you are on a version with forms you can add a input type ‘Disks’. Once that form is attached to the catalog Morpheus will handle the logic.
image

In the catalog item config page you will see that disk has “AUTO INJECT” option.
image

If you only have access to use inputs you will need to build the logic yourself in your custom option. You can try something like this.

“volumes”: [
{
“volumeCustomizable”: true,
“readonlyName”: false,
“controllerId”: 161,
“maxIOPS”: null,
“displayOrder”: 0,
“unitNumber”: “0”,
“minStorage”: 64424509440,
“virtualImageId”: 663,
“configurableIOPS”: false,
“uuid”: “49d68a7f-0340-4ccf-9821-2bc2f75931af”,
“controllerMountPoint”: “161:0:6:0”,
“vId”: 663,
“size”: 60,
“name”: “root”,
“rootVolume”: true,
“storageType”: 1,
“typeId”: 1,
“id”: 165,
“resizeable”: true,
“datastoreId”: “auto”,
“maxStorage”: 64424509440
},
{
“controllerMountPoint”: “163:0:6:0”,
“volumeCustomizable”: true,
“readonlyName”: false,
“controllerId”: 163,
“size”: “<%= if(customOptions.addDisk1 == ‘’) {‘40’} else {customOptions.addDisk1} %>”,
“maxIOPS”: null,
“name”: “data-1”,
“rootVolume”: false,
“minStorage”: 0,
“storageType”: “<%= if(customOptions.addDisk1 == ‘’) {‘none’} else {‘1’} %>”,
“datastoreId”: “auto”,
“maxStorage”: 0
},
{
“controllerMountPoint”: “161:1:6:1”,
“volumeCustomizable”: true,
“readonlyName”: false,
“size”: “<%= if(customOptions.addDisk2 == ‘’) {‘40’} else {customOptions.addDisk2} %>”,
“maxIOPS”: null,
“name”: “data-2”,
“rootVolume”: false,
“minStorage”: 0,
“storageType”: “<%= if(customOptions.addDisk2 == ‘’) {‘none’} else {‘1’} %>”,
“datastoreId”: “auto”,
“maxStorage”: 0
},
{
“controllerMountPoint”: “161:0:6:3”,
“volumeCustomizable”: true,
“readonlyName”: false,
“size”: “<%= if(customOptions.addDisk3 == ‘’) {‘40’} else {customOptions.addDisk3} %>”,
“maxIOPS”: null,
“name”: “data-3”,
“rootVolume”: false,
“minStorage”: 0,
“storageType”: “<%= if(customOptions.addDisk3 == ‘’) {‘none’} else {‘1’} %>”,
“datastoreId”: “auto”,
“maxStorage”: 0
},
{
“controllerMountPoint”: “161:0:6:4”,
“volumeCustomizable”: true,
“readonlyName”: false,
“size”: “<%= if(customOptions.addDisk4 == ‘’) {‘40’} else {customOptions.addDisk4} %>”,
“maxIOPS”: null,
“name”: “data-4”,
“rootVolume”: false,
“minStorage”: 0,
“storageType”: “<%= if(customOptions.addDisk4 == ‘’) {‘none’} else {‘1’} %>”,
“datastoreId”: “auto”,
“maxStorage”: 0
},
{
“controllerMountPoint”: “161:0:6:5”,
“volumeCustomizable”: true,
“readonlyName”: false,
“size”: “<%= if(customOptions.addDisk5 == ‘’) {‘40’} else {customOptions.addDisk5} %>”,
“maxIOPS”: null,
“name”: “data-5”,
“rootVolume”: false,
“minStorage”: 0,
“storageType”: “<%= if(customOptions.addDisk5 == ‘’) {‘none’} else {‘1’} %>”,
“datastoreId”: “auto”,
“maxStorage”: 0
}
]

Hope this helps :slight_smile:

I use morpheus version 6.2.2

Assuming you want users to be able to dynamically add disks when they go to deploy, forms is going to be your best bet.

We have documentation and a video showing how to use forms with a catalog item on our documentation site.
https://docs.morpheusdata.com/en/latest/library/options/forms.html

what is the version Morpheus using ? If it’s ver 6+ , you shouldn’t use “Input” and “Option list” in tab “Option” for typing input. You shoud using “Form” in tab “Options”

Yes, we are using version morpheus 6.2.2, i will ask to you how to resolve the error with notif volume:Per disk size is below the minimum value from catalog ? can you describe to me for handle this error because we are getting error after try custom disk with scenario added 1 disk only.

After we are try update for configuration related custom disk in below currently getting error from log morpheus is : 2023-12-21_07:48:45.43828 } - config: [customOptions:[vmname:FYAN, plan:1326, cpu:4, ram:8, addDisks:1, addDisk1:60, addDisk2:, addDisk3:, addDisk4:, addDisk5:, Environment:D, projectcode:test custom storage add 1 disks, projectname:test custom storage add 1 disks, platform:, nota:, task:]]
2023-12-21_07:48:45.43828 ‘’[2023-12-21 07:48:45,438] [http-nio-127.0.0.1-8080-exec-1] WARN c.m.CatalogItemService - cart item invalid: null {plan=You must select a plan, plan.id=You must select a plan}

this is config custom disk i update based on your reference in below :
“volumes”: [
{
“id”: 40366,
“name”: “root”,
“controllerId”: 14767,
“controllerMountPoint”: “14767:0:17:0”,
“resizeable”: true,
“planResizable”: true,
“rootVolume”: true,
“unitNumber”: “0”,
“typeId”: 2,
“configurableIOPS”: false,
“maxStorage”: 107374182400,
“displayOrder”: 0,
“maxIOPS”: null,
“uuid”: “a13296f8-0ed7-4fc4-98f4-60d62239c000”,
“uniqueId”: null,
“externalId”: “2000”,
“internalId”: “[rpdev-w01-t4-hd21dnd-01] CISO-MORPHEUS-RHEL8-OKT23/CISO-MORPHEUS-RHEL8-OKT23.vmdk”,
“virtualImageId”: 2068,
“size”: 100,
“minStorage”: 64424509440,
“vId”: 2068,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“datastoreId”: 543
},
{
“rootVolume”: false,
“name”: “data-1”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:1”,
“size”: “<%= if(customOptions.addDisk1 == ‘’) {‘40’} else
{customOptions.addDisk1 ?: 0}%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-2”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:2”,
“size”: “<%=customOptions.addDisk2 ?: 0%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-3”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:3”,
“size”: “<%=customOptions.addDisk3 ?: 0%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-4”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:4”,
“size”: “<%=customOptions.addDisk4 ?: 0%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-5”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:5”,
“size”: “<%=customOptions.addDisk5 ?: 0%>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: 2,
“maxIOPS”: null
}

any feedback from above error ?

thanks tyler after we are update the configuration from your reference, currently the catalog can be added custom disks.
this is the configuration catalog after update:
{
“rootVolume”: false,
“name”: “data-1”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:1”,
“size”: “<%= if(customOptions.addDisk1 == ‘’) {‘40’} else {customOptions.addDisk1 ?: 0} %>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: “<%= if(customOptions.addDisk1 == ‘’) {‘none’} else {‘2’} %>”,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-2”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:2”,
“size”: “<%= if(customOptions.addDisk2 == ‘’) {‘40’} else {customOptions.addDisk2 ?: 0} %>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: “<%= if(customOptions.addDisk2 == ‘’) {‘none’} else {‘2’} %>”,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-3”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:3”,
“size”: “<%= if(customOptions.addDisk3 == ‘’) {‘40’} else {customOptions.addDisk3 ?: 0} %>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: “<%= if(customOptions.addDisk3 == ‘’) {‘none’} else {‘2’} %>”,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-4”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:4”,
“size”: “<%= if(customOptions.addDisk4 == ‘’) {‘40’} else {customOptions.addDisk4 ?: 0} %>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: “<%= if(customOptions.addDisk4 == ‘’) {‘none’} else {‘2’} %>”,
“maxIOPS”: null
},
{
“rootVolume”: false,
“name”: “data-5”,
“maxStorage”: 1073741824000,
“minStorage”: 0,
“datastoreId”: 543,
“controllerMountPoint”: “14767:0:17:5”,
“size”: “<%= if(customOptions.addDisk5 == ‘’) {‘40’} else {customOptions.addDisk5 ?: 0} %>”,
“volumeCustomizable”: true,
“readonlyName”: false,
“storageType”: “<%= if(customOptions.addDisk5 == ‘’) {‘none’} else {‘2’} %>”,
“maxIOPS”: null
}