On Tue, Jun 12, 2018 at 7:02 AM Germano Veit Michel <germano(a)redhat.com>
wrote:
On Mon, Jun 11, 2018 at 10:47 PM, Dan Kenigsberg
<danken(a)redhat.com>
wrote:
> On Mon, Jun 11, 2018 at 1:26 PM, Nir Soffer <nsoffer(a)redhat.com> wrote:
> > On Mon, Jun 11, 2018 at 9:59 AM Germano Veit Michel <germano(a)redhat.com
> >
> > wrote:
> >>
> >> Hi,
> >>
> >> I'm finding a bit confusing what is the correct way to import VDSM
> >> types/enums/contants when using the VDSM API.
> >>
> >> For example, vdsmapi tests and the hosted-engine-ha daemons seem to
> use a
> >> bunch of values defined in constants or hardcoded, not really doing an
> >> import for this. i.e.:
> >> ovirt_hosted_engine_ha/env/constants.py.in:66:STORAGE_TYPE_NFS = 1
> >>
> >> I don't want to do this:
> >> getStorageDomains(storageType=1)
> >>
> >> If I want to avoid hard-coding constants on my program, what is the
> >> correct way to do it? Like this?
> >>
> >> import vdsm.storage.sd
> >> getStorageDomains(storageType=sd.NFS_DOMAIN)
> >>
> >> Problem is vdsm.storage.sd does not seem to be part of the public API,
> >> clients shouldn't be seeing all that.
> >
> >
> > Correct, the constants are not part of the API, because vdsm API is
> > generally not a public supported API.
>
> ... which brings up the question: why do you need to access it Germano?
>
Just sending a simple change to the sos plugin, and I need to pass a
constant.
https://gerrit.ovirt.org/#/c/92153/
> > So in your current scripts you need to
> > hard code these values.
> >
> > Can you file a bug to add the missing constants to the api?
> >
> > I think all the values should be in the schema, and they should be
> > accessible via the vdsmclient package.
>
Hi Nir, thanks for helping.
Well, the value is part of the schema AFAICS. Maybe I'm doing something
wrong, but this is what I get:
1. I want to set domainClass on a getStorageDomains() call.
# vdsm-client Host getStorageDomains -h
usage: vdsm-client Host getStorageDomains [-h] [arg=value [arg=value ...]]
positional arguments:
arg=value storageType: Limit to Domains of this StorageDomainType
storagepoolID: Limit to Domains belonging to this Storage
Pool
remotePath: Limit to Domains having this remotePath.
domainClass: Limit to Domains of this
StorageDomainImageClass <---------------
JSON representation:
{
"storageType": {
"StorageDomainType": "enum ['FCP',
'CIFS',
'UNKNOWN', 'ISCSI', 'GLUSTERFS', 'LOCALFS',
'NFS', 'SHAREDFS']"
},
"storagepoolID": {
"UUID": "UUID"
},
"remotePath": "string",
"domainClass": {
"StorageDomainImageClass": "enum ['Iso',
'Data',
'Backup', 'Unknown']"
}
}
This is its type:
StorageDomainImageClass: &StorageDomainImageClass
added: '3.1'
description: An enumeration of Storage Domain classes.
name: StorageDomainImageClass
type: enum
values:
Backup: The Storage Domain is used for import and export of
disk
images
Data: The Storage Domain is used for virtual machine disk
images
Iso: The Storage Domain is used for storing ISO images
Unknown: The class is not known
But if I do this (or in sos.py)
# vdsm-client Host getStorageDomains domainClass=Data
Then the "Data" parameter ends up a unicode 'Data' and the comparison
to
the actual integer constant (1=DATA_DOMAIN) returns False, giving me no
storage domains at all:
2018-06-12 13:58:31,266+1000 INFO (jsonrpc/5) [vdsm.api] START
getStorageDomainsList(spUUID=None, domainClass=u'Data', storageType=None,
remotePath=None, options=None) from=::1,60192,
task_id=be93ee8d-d4d4-42c2-a292-9aeadf88e3da (api:46)
2018-06-12 13:58:31,608+1000 INFO (jsonrpc/5) [vdsm.api] FINISH
getStorageDomainsList return={'domlist': []} from=::1,60192,
task_id=be93ee8d-d4d4-42c2-a292-9aeadf88e3da (api:52)
Yes, unfortunately, someone decided to optimize enums by sending
the integer value, since the integer 1 is smaller than the string "Data".
We know that the schema sometimes document the wrong thing
about enums.
That is why I'm trying to import the constant from the API.
Am I missing something? Is there a special way to use these values defined
by enums?
I don't know of such way, but importing internal modules like API.py is not
a good way.
I suggest to hard code the value 1 until we expose it properly in the
vdsmclient
package.
Nir
> >
> > Nir
> >
> >>
> >>
> >> Hopefully there is an easy answer I am missing. I'm looking for
> something
> >> similar to ovirtsdk4.types.
> >>
> >> Thanks,
> >> Germano
> >>
> >>
> >> _______________________________________________
> >> Devel mailing list -- devel(a)ovirt.org
> >> To unsubscribe send an email to devel-leave(a)ovirt.org
> >> Privacy Statement:
https://www.ovirt.org/site/privacy-policy/
> >> oVirt Code of Conduct:
> >>
https://www.ovirt.org/community/about/community-guidelines/
> >> List Archives:
> >>
>
https://lists.ovirt.org/archives/list/devel@ovirt.org/message/JGIW7MS6MPU...
> >
> >
> > _______________________________________________
> > Devel mailing list -- devel(a)ovirt.org
> > To unsubscribe send an email to devel-leave(a)ovirt.org
> > Privacy Statement:
https://www.ovirt.org/site/privacy-policy/
> > oVirt Code of Conduct:
> >
https://www.ovirt.org/community/about/community-guidelines/
> > List Archives:
> >
>
https://lists.ovirt.org/archives/list/devel@ovirt.org/message/WXY2PKBB2XU...
> >
>