On Tue, Jun 12, 2018 at 7:02 AM Germano Veit Michel <germ...@redhat.com>
wrote:

> On Mon, Jun 11, 2018 at 10:47 PM, Dan Kenigsberg <dan...@redhat.com>
> wrote:
>
>> On Mon, Jun 11, 2018 at 1:26 PM, Nir Soffer <nsof...@redhat.com> wrote:
>> > On Mon, Jun 11, 2018 at 9:59 AM Germano Veit Michel <germ...@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@ovirt.org
>> >> To unsubscribe send an email to devel-le...@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/JGIW7MS6MPUM6YLINPMJ3JLVBKPXQK7A/
>> >
>> >
>> > _______________________________________________
>> > Devel mailing list -- devel@ovirt.org
>> > To unsubscribe send an email to devel-le...@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/WXY2PKBB2XUKLCREUITVORP3WZD5VTPT/
>> >
>>
>
_______________________________________________
Devel mailing list -- devel@ovirt.org
To unsubscribe send an email to devel-le...@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/XY3ZDYMXILUW6ZXE3ZLEAUKDSNV7JGAC/

Reply via email to