<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi everybody,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">As a bit of a novice, I'm trying to use OpenStack SDK 0.13 in an OPNFV/ONAP project (Auto).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'm able to use the compute and network proxies, but have problems with the identity proxy,<o:p></o:p></p>
<p class="MsoNormal">so I can't create projects and users.<o:p></o:p></p>
<p class="MsoNormal">With network, I can create a network, a router, router interfaces, but can't add a gateway to a router. Also, deleting a router fails.<o:p></o:p></p>
<p class="MsoNormal">With compute, I can't create flavors, and not sure if there is a "create_image" method ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Specific issues are listed below with more details.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any pointers (configuration, installation, usage, ...) and URLs to examples and documentation would be welcome.<o:p></o:p></p>
<p class="MsoNormal">For documentation, I've been looking mostly at:<o:p></o:p></p>
<p class="MsoNormal"><a href="https://docs.openstack.org/openstacksdk/latest/user/proxies/network.html">https://docs.openstack.org/openstacksdk/latest/user/proxies/network.html</a>
<o:p></o:p></p>
<p class="MsoNormal"><a href="https://docs.openstack.org/openstacksdk/latest/user/proxies/compute.html">https://docs.openstack.org/openstacksdk/latest/user/proxies/compute.html</a>
<o:p></o:p></p>
<p class="MsoNormal"><a href="https://docs.openstack.org/openstacksdk/latest/user/proxies/identity_v3.html">https://docs.openstack.org/openstacksdk/latest/user/proxies/identity_v3.html</a>
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks in advance,<o:p></o:p></p>
<p class="MsoNormal">Gerard<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For all code, import statement and Connection creation is as follows (constants defined before):<o:p></o:p></p>
<p class="MsoNormal">import openstack<o:p></o:p></p>
<p class="MsoNormal">conn = openstack.connect(cloud=OPENSTACK_CLOUD_NAME, region_name=OPENSTACK_REGION_NAME)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1) problem adding a gateway (external network) to a router:<o:p></o:p></p>
<p class="MsoNormal">not sure how to build a dictionary body (couldn't find examples online)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">tried this:<o:p></o:p></p>
<p class="MsoNormal">network_dict_body = {'network_id': public_network.id}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">and this (from looking at a router printout):<o:p></o:p></p>
<p class="MsoNormal">network_dict_body = {<o:p></o:p></p>
<p class="MsoNormal">    'external_fixed_ips': [{'subnet_id' : public_subnet.id}],<o:p></o:p></p>
<p class="MsoNormal">    'network_id': public_network.id<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">in both cases, tried this command:<o:p></o:p></p>
<p class="MsoNormal">conn.network.add_gateway_to_router(onap_router,network_dict_body)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">getting the error:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'TypeError'> add_gateway_to_router() takes 2 positional arguments but 3 were given<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">printing the router gave this:<o:p></o:p></p>
<p class="MsoNormal">openstack.network.v2.router.Router(distributed=False, tenant_id=03aa47d3bcfd48199e0470b1c86a7f5b, created_at=2018-05-01T01:16:08Z, external_gateway_info=None, status=ACTIVE, availability_zone_hints=[], ha=False, tags=[], description=Router
 created for ONAP, admin_state_up=True, revision=1, flavor_id=None, id=b923fba5-5027-47b6-b679-29c331ac1aba, updated_at=2018-05-01T01:16:08Z, routes=[], name=onap_router, availability_zones=[])<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">2) problem deleting routers:<o:p></o:p></p>
<p class="MsoNormal">onap_router = conn.network.find_router(ONAP_ROUTER_NAME)<o:p></o:p></p>
<p class="MsoNormal">conn.network.delete_router(onap_router.id)<o:p></o:p></p>
<p class="MsoNormal">(same if conn.network.delete_router(onap_router))<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">getting the error:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'AttributeError'> 'NoneType' object has no attribute '_body'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">printing the router that had been created gave this:<o:p></o:p></p>
<p class="MsoNormal">openstack.network.v2.router.Router(description=Router created for ONAP, status=ACTIVE, routes=[], updated_at=2018-05-01T01:16:11Z, ha=False, id=b923fba5-5027-47b6-b679-29c331ac1aba, external_gateway_info=None, admin_state_up=True, availability_zone_hints=[],
 tenant_id=03aa47d3bcfd48199e0470b1c86a7f5b, name=onap_router, availability_zones=['nova'], tags=[], revision=3, distributed=False, flavor_id=None, created_at=2018-05-01T01:16:08Z)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">3) problem reaching the identity service:<o:p></o:p></p>
<p class="MsoNormal">(although I can reach compute and network services, and although there are users and projects in the Openstack instance: "admin" and "service" projects, "ceilometer", "nova", etc. (and "admin") users)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        print("\nList Users:")<o:p></o:p></p>
<p class="MsoNormal">        i=1<o:p></o:p></p>
<p class="MsoNormal">        for user in conn.identity.users():<o:p></o:p></p>
<p class="MsoNormal">            print('User',str(i),'\n',user,'\n')<o:p></o:p></p>
<p class="MsoNormal">            i+=1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">getting the error:<o:p></o:p></p>
<p class="MsoNormal">List Users:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'openstack.exceptions.NotFoundException'> NotFoundException: 404<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        print("\nList Projects:")<o:p></o:p></p>
<p class="MsoNormal">        i=1<o:p></o:p></p>
<p class="MsoNormal">        for project in conn.identity.projects():<o:p></o:p></p>
<p class="MsoNormal">            print('Project',str(i),'\n',project,'\n')<o:p></o:p></p>
<p class="MsoNormal">            i+=1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">also getting an error, but not the same as users:<o:p></o:p></p>
<p class="MsoNormal">List Projects:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'AttributeError'> 'Proxy' object has no attribute 'projects'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">if trying to create a project:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        onap_project = conn.identity.find_project(ONAP_TENANT_NAME)<o:p></o:p></p>
<p class="MsoNormal">        if onap_project != None:<o:p></o:p></p>
<p class="MsoNormal">            print('ONAP project/tenant already exists')<o:p></o:p></p>
<p class="MsoNormal">        else:<o:p></o:p></p>
<p class="MsoNormal">            print('Creating ONAP project/tenant...')<o:p></o:p></p>
<p class="MsoNormal">            onap_project = conn.identity.create_project(<o:p></o:p></p>
<p class="MsoNormal">                name = ONAP_TENANT_NAME,<o:p></o:p></p>
<p class="MsoNormal">                description = ONAP_TENANT_DESC,<o:p></o:p></p>
<p class="MsoNormal">                is_enabled = True)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">getting the error:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'AttributeError'> 'Proxy' object has no attribute 'find_project'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">4) problem creating flavors:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        tiny_flavor = conn.compute.find_flavor("m1.tiny")<o:p></o:p></p>
<p class="MsoNormal">        if tiny_flavor != None:<o:p></o:p></p>
<p class="MsoNormal">            print('m1.tiny Flavor already exists')<o:p></o:p></p>
<p class="MsoNormal">       else:<o:p></o:p></p>
<p class="MsoNormal">            print('Creating m1.tiny Flavor...')<o:p></o:p></p>
<p class="MsoNormal">            tiny_flavor = conn.compute.create_flavor(<o:p></o:p></p>
<p class="MsoNormal">                name = 'm1.tiny',<o:p></o:p></p>
<p class="MsoNormal">                vcpus = 1,<o:p></o:p></p>
<p class="MsoNormal">                disk = 1,<o:p></o:p></p>
<p class="MsoNormal">                ram = 512,<o:p></o:p></p>
<p class="MsoNormal">                ephemeral = 0,<o:p></o:p></p>
<p class="MsoNormal">                #swap = 0,<o:p></o:p></p>
<p class="MsoNormal">                #rxtx_factor = 1.0,<o:p></o:p></p>
<p class="MsoNormal">                is_public = True)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">(by the way, maybe swap and rxtx are not supposed to be set ?)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">getting the error:<o:p></o:p></p>
<p class="MsoNormal">Exception: <class 'AttributeError'> 'NoneType' object has no attribute '_body'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">5) how to create images ?<o:p></o:p></p>
<p class="MsoNormal">there is a compute proxy method: find_image()<o:p></o:p></p>
<p class="MsoNormal">but it looks like there is no create_image() ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">say you wanted to add this image: Ubuntu Server 16.04 LTS (Xenial Xerus)<o:p></o:p></p>
<p class="MsoNormal">https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img<o:p></o:p></p>
<p class="MsoNormal">how would you do it ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">openstacksdk version 0.13.0 is installed:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$ pip3 list<o:p></o:p></p>
<p class="MsoNormal">Package             Version<o:p></o:p></p>
<p class="MsoNormal">------------------- ---------<o:p></o:p></p>
<p class="MsoNormal">appdirs             1.4.3<o:p></o:p></p>
<p class="MsoNormal">certifi             2018.4.16<o:p></o:p></p>
<p class="MsoNormal">chardet             3.0.4<o:p></o:p></p>
<p class="MsoNormal">command-not-found   0.3<o:p></o:p></p>
<p class="MsoNormal">decorator           4.3.0<o:p></o:p></p>
<p class="MsoNormal">deprecation         2.0.2<o:p></o:p></p>
<p class="MsoNormal">dogpile.cache       0.6.5<o:p></o:p></p>
<p class="MsoNormal">idna                2.6<o:p></o:p></p>
<p class="MsoNormal">iso8601             0.1.12<o:p></o:p></p>
<p class="MsoNormal">jmespath            0.9.3<o:p></o:p></p>
<p class="MsoNormal">jsonpatch           1.23<o:p></o:p></p>
<p class="MsoNormal">jsonpointer         2.0<o:p></o:p></p>
<p class="MsoNormal">keystoneauth1       3.5.0<o:p></o:p></p>
<p class="MsoNormal">language-selector   0.1<o:p></o:p></p>
<p class="MsoNormal">munch               2.3.1<o:p></o:p></p>
<p class="MsoNormal">netifaces           0.10.6<o:p></o:p></p>
<p class="MsoNormal">openstacksdk        0.13.0<o:p></o:p></p>
<p class="MsoNormal">os-service-types    1.2.0<o:p></o:p></p>
<p class="MsoNormal">packaging           17.1<o:p></o:p></p>
<p class="MsoNormal">pbr                 4.0.2<o:p></o:p></p>
<p class="MsoNormal">pip                 10.0.1<o:p></o:p></p>
<p class="MsoNormal">pycurl              7.43.0<o:p></o:p></p>
<p class="MsoNormal">pygobject           3.20.0<o:p></o:p></p>
<p class="MsoNormal">pyparsing           2.2.0<o:p></o:p></p>
<p class="MsoNormal">python-apt          1.1.0b1<o:p></o:p></p>
<p class="MsoNormal">python-debian       0.1.27<o:p></o:p></p>
<p class="MsoNormal">python-systemd      231<o:p></o:p></p>
<p class="MsoNormal">PyYAML              3.12<o:p></o:p></p>
<p class="MsoNormal">requests            2.18.4<o:p></o:p></p>
<p class="MsoNormal">requestsexceptions  1.4.0<o:p></o:p></p>
<p class="MsoNormal">setuptools          20.7.0<o:p></o:p></p>
<p class="MsoNormal">six                 1.10.0<o:p></o:p></p>
<p class="MsoNormal">ssh-import-id       5.5<o:p></o:p></p>
<p class="MsoNormal">stevedore           1.28.0<o:p></o:p></p>
<p class="MsoNormal">ufw                 0.35<o:p></o:p></p>
<p class="MsoNormal">unattended-upgrades 0.1<o:p></o:p></p>
<p class="MsoNormal">urllib3             1.22<o:p></o:p></p>
<p class="MsoNormal">wheel               0.29.0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$ pip3 check<o:p></o:p></p>
<p class="MsoNormal">No broken requirements found.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should
 not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments
 for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. www.wipro.com
</body>
</html>