I'm working with vsphere client SDK to integrate functionalities into our management plugin for vmware, recently I find a compatibility issues with API version 6.0 or above:
Just noticed some changes when I maintain my plugin code for 6.0. In 5.5 or earlier version, when calling AlarmManager.createAlarm() and supplied a AlarmSpec with few properties specified, it went through without exceptions, however when I tested it on a 6.0 sdk, it throws null exceptions , attaching my calling stack for reference:
com.vmware.vim25.ws.WSClient - Exception caught while invoking method: CreateAlarm
com.vmware.vim25.InvalidRequest: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at com.vmware.vim25.ws.XmlGenDom.fromXml(XmlGenDom.java:219)
at com.vmware.vim25.ws.XmlGenDom.parseSoapFault(XmlGenDom.java:147)
at com.vmware.vim25.ws.XmlGenDom.fromXML(XmlGenDom.java:105)
at com.vmware.vim25.ws.SoapClient.unMarshall(SoapClient.java:212)
at com.vmware.vim25.ws.WSClient.invoke(WSClient.java:93)
at com.vmware.vim25.ws.VimStub.createAlarm(VimStub.java:2544)
at com.vmware.vim25.mo.AlarmManager.createAlarm(AlarmManager.java:151)
at com.mycompany.myproject.vmware.createAlarmCall...
Attaching log from my vcenter: /var/log/vmware/vpxd/vpxd-69.log
2017-03-13T20:50:36.018Z info vpxd[7F9F68DE5700] [Originator@6876 sub=vpxLro opID=72c2b2a9] [VpxLRO] -- FINISH task-internal-5248835
2017-03-13T20:50:35.973Z info vpxd[7F9F68EE7700] [Originator@6876 sub=Default opID=7c867ed3] [VpxLRO] -- ERROR task-2362 -- AlarmManager -- vim.alarm.AlarmManager.create: vmodl.fault.InvalidArgument:
--> Result:
--> (vmodl.fault.InvalidArgument) {
--> faultCause = (vmodl.MethodFault) null,
--> invalidProperty = <unset>,
--> msg = ""
--> }
--> Args:
-->
--> Arg entity:
--> 'vim.Datastore:datastore-2571'
--> Arg spec:
--> (vim.alarm.AlarmSpec) {
--> name = "mydatastore",
--> systemName = <unset>,
--> description = "None",
--> enabled = true,
--> expression = (vim.alarm.MetricAlarmExpression) {
--> operator = "isAbove",
--> type = "vim.Datastore",
--> metric = (vim.PerformanceManager.MetricId) {
--> counterId = 280,
--> instance = ""
--> },
--> yellow = 7500,
--> yellowInterval = <unset>,
--> red = 8500,
--> redInterval = <unset>
--> },
--> action = (vim.alarm.AlarmAction) null,
--> actionFrequency = <unset>,
--> setting = (vim.alarm.AlarmSetting) null,
--> alarmMetadata = <unset>
--> }
Is there any mandatory property of AlarmSpec that I must supply in vsphere client SDK 6.0+? Looks like the SDK has enforced some validation against null value since 6.0+.
I fulfilled all mandatory fields of an AlarmSpec, please see attachment for more details.
Thanks in advance.