)]}'
{"README.rst":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"dcd6073f26e322d3edcf751e7626f3fd19339c45","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"openstacksdk aims to talk to any OpenStack cloud. To do this, it requires a"},{"line_number":25,"context_line":"configuration file. openstacksdk favours ``clouds.yaml`` files, but can also"},{"line_number":26,"context_line":"use environment variables. The ``cloud.yaml`` file should be provided by your"},{"line_number":27,"context_line":"cloud provider or deployment tooling. An example:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d2baec19_e0309def","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":38},"updated":"2021-03-23 18:27:37.000000000","message":"clouds","commit_id":"2e65bb771af58d77f608c85ead34eb8f2bcef5cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4d93b9fedf697e67cb1a43ce88b3cc4f0cccf69d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"openstacksdk aims to talk to any OpenStack cloud. To do this, it requires a"},{"line_number":25,"context_line":"configuration file. openstacksdk favours ``clouds.yaml`` files, but can also"},{"line_number":26,"context_line":"use environment variables. The ``cloud.yaml`` file should be provided by your"},{"line_number":27,"context_line":"cloud provider or deployment tooling. An example:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5147c2b6_37867164","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":38},"in_reply_to":"d2baec19_e0309def","updated":"2021-03-23 18:43:35.000000000","message":"Done","commit_id":"2e65bb771af58d77f608c85ead34eb8f2bcef5cc"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"dcd6073f26e322d3edcf751e7626f3fd19339c45","unresolved":true,"context_lines":[{"line_number":112,"context_line":"    openstack.enable_logging(debug\u003dTrue)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # Initialize session"},{"line_number":115,"context_line":"    config \u003d openstack.config.loader.OpenStackConfig().get_one(cloud\u003d\u0027mordred\u0027)"},{"line_number":116,"context_line":"    session \u003d config.get_session_client(\u0027compute\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    for server in openstack.compute.v2.server.Server.list(session\u003dsession):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6c178083_7de3cb39","line":115,"range":{"start_line":115,"start_character":13,"end_line":115,"end_character":62},"updated":"2021-03-23 18:27:37.000000000","message":"This is a bit verbose and not really needed (the loader interface should mostly never be needed by people. People also really shouldn\u0027t need get_session_client. I\u0027d recommend instead:\n\n  conn \u003d openstack.connect(cloud\u003d\u0027mordred\u0027)\n  for server in openstack.compute.v2.server.Server.list(session\u003dconn.compute):\n    print(server.to_dict())\n\nAlso - good reminder that we should REALLY change the API of all of the resource objects (hahahahaha) so that this is list(adapter\u003dconn.compute) ... because it actually takes an adapter not a session. But we don\u0027t have to do that in this patch.","commit_id":"2e65bb771af58d77f608c85ead34eb8f2bcef5cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4d93b9fedf697e67cb1a43ce88b3cc4f0cccf69d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    openstack.enable_logging(debug\u003dTrue)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    # Initialize session"},{"line_number":115,"context_line":"    config \u003d openstack.config.loader.OpenStackConfig().get_one(cloud\u003d\u0027mordred\u0027)"},{"line_number":116,"context_line":"    session \u003d config.get_session_client(\u0027compute\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    for server in openstack.compute.v2.server.Server.list(session\u003dsession):"}],"source_content_type":"text/x-rst","patch_set":1,"id":"039efdf8_58197d64","line":115,"range":{"start_line":115,"start_character":13,"end_line":115,"end_character":62},"in_reply_to":"6c178083_7de3cb39","updated":"2021-03-23 18:43:35.000000000","message":"\u003e Also - good reminder that we should REALLY change the API of all of the resource objects (hahahahaha) so that this is list(adapter\u003dconn.compute) ... because it actually takes an adapter not a session. But we don\u0027t have to do that in this patch.\n\nGood point. Also, it says it can accept a generic keystoneauth Adapter object:\n\n  \u003e\u003e\u003e import openstack.resource\n  \u003e\u003e\u003e help(openstack.resource.Resource.list)\n  Help on method list in module openstack.resource:\n\n  list(session, paginated\u003dTrue, base_path\u003dNone, allow_unknown_params\u003dFalse, **params) method of builtins.type instance\n      This method is a generator which yields resource objects.\n\n      This resource object list generator handles pagination and takes query\n      params for response filtering\n\n      :param session: The session to use for making this request.\n      :type session: :class:`~keystoneauth1.adapter.Adapter`\n      ...\n\nThat\u0027s not true anymore, it seems:\n\n  \u003e\u003e\u003e from keystoneauth1.identity import v3\n  \u003e\u003e\u003e import keystoneauth1.session\n  \u003e\u003e\u003e import keystoneauth1.adapter\n  \u003e\u003e\u003e from keystoneclient.v3 import client\n  \u003e\u003e\u003e auth \u003d v3.Password(\n  ...     auth_url\u003d\u0027http://172.20.4.155/identity\u0027,\n  ...     username\u003d\u0027admin\u0027,\n  ...     password\u003d\u0027password\u0027,\n  ...     project_name\u003d\u0027demo\u0027,\n  ...     user_domain_id\u003d\u0027default\u0027,\n  ...     project_domain_id\u003d\u0027default\u0027)\n  \u003e\u003e\u003e session \u003d keystoneauth1.session.Session(auth\u003dauth)\n  \u003e\u003e\u003e adapter \u003d keystoneauth1.adapter.Adapter(\n  ...     session\u003dsession,\n  ...     service_type\u003d\u0027block-storage\u0027,\n  ...     interface\u003d\u0027public\u0027,\n  ...     version\u003d3)\n  \u003e\u003e\u003e from openstack.block_storage.v3 import availability_zone\n  \u003e\u003e\u003e list(availability_zone.AvailabilityZone.list(session\u003dadapter))\n  Traceback (most recent call last):\n    File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n    File \"/home/ubuntu/openstacksdk/openstack/resource.py\", line 1782, in list\n      connection\u003dsession._get_connection(),\n  AttributeError: \u0027Adapter\u0027 object has no attribute \u0027_get_connection\u0027","commit_id":"2e65bb771af58d77f608c85ead34eb8f2bcef5cc"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"2977862762710917b2bf517017c940ce8d1ac9b5","unresolved":true,"context_lines":[{"line_number":13,"context_line":"portions of the SDK are for you. However, if what you want is to be able to"},{"line_number":14,"context_line":"write an application that talks to clouds no matter what crazy choices the"},{"line_number":15,"context_line":"deployer has made in an attempt to be more hipster than their self-entitled"},{"line_number":16,"context_line":"narcissist peers, then the Cloud Abstraction layer is for you."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"More information about its history can be found at"},{"line_number":19,"context_line":"https://docs.openstack.org/openstacksdk/latest/contributor/history.html"}],"source_content_type":"text/x-rst","patch_set":2,"id":"93f55f56_cc08e8cf","line":16,"updated":"2021-03-23 20:42:38.000000000","message":"Maybe get rid of the pretty ranty language here, too? And at the same time make the references to the layers that you demonstrate below more explicit?","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c4482070d12206a04eddf7f023c77b20d61b047","unresolved":false,"context_lines":[{"line_number":13,"context_line":"portions of the SDK are for you. However, if what you want is to be able to"},{"line_number":14,"context_line":"write an application that talks to clouds no matter what crazy choices the"},{"line_number":15,"context_line":"deployer has made in an attempt to be more hipster than their self-entitled"},{"line_number":16,"context_line":"narcissist peers, then the Cloud Abstraction layer is for you."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"More information about its history can be found at"},{"line_number":19,"context_line":"https://docs.openstack.org/openstacksdk/latest/contributor/history.html"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df8da574_9d9caf0a","line":16,"in_reply_to":"93f55f56_cc08e8cf","updated":"2021-03-24 12:18:25.000000000","message":"Done","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"2977862762710917b2bf517017c940ce8d1ac9b5","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"     clouds:"},{"line_number":32,"context_line":"      mordred:"},{"line_number":33,"context_line":"        region_name: Dallas"},{"line_number":34,"context_line":"        auth:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"2275c5f0_89b15fe6","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":5},"updated":"2021-03-23 20:42:38.000000000","message":"De-indent this by one in order to keep the whole thing indented in two-space-steps?","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c4482070d12206a04eddf7f023c77b20d61b047","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. code-block:: yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"     clouds:"},{"line_number":32,"context_line":"      mordred:"},{"line_number":33,"context_line":"        region_name: Dallas"},{"line_number":34,"context_line":"        auth:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"54814986_57016c10","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":5},"in_reply_to":"2275c5f0_89b15fe6","updated":"2021-03-24 12:18:25.000000000","message":"Done","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"2977862762710917b2bf517017c940ce8d1ac9b5","unresolved":true,"context_lines":[{"line_number":40,"context_line":"openstacksdk will look for ``clouds.yaml`` files in the following locations:"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* ``.`` (the current directory)"},{"line_number":43,"context_line":"* ``~/.config/openstack``"},{"line_number":44,"context_line":"* ``/etc/openstack``"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"openstacksdk consists of three layers. Most users will make use of the *proxy*"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5caf86d4_ef6d733d","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":5},"updated":"2021-03-23 20:42:38.000000000","message":"Use $HOME instead because it is more generic than the \"bashy\" ~?","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c4482070d12206a04eddf7f023c77b20d61b047","unresolved":false,"context_lines":[{"line_number":40,"context_line":"openstacksdk will look for ``clouds.yaml`` files in the following locations:"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* ``.`` (the current directory)"},{"line_number":43,"context_line":"* ``~/.config/openstack``"},{"line_number":44,"context_line":"* ``/etc/openstack``"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"openstacksdk consists of three layers. Most users will make use of the *proxy*"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1b686195_92b9d69f","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":5},"in_reply_to":"5caf86d4_ef6d733d","updated":"2021-03-24 12:18:25.000000000","message":"Done","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"2977862762710917b2bf517017c940ce8d1ac9b5","unresolved":true,"context_lines":[{"line_number":95,"context_line":"    flavor \u003d conn.get_flavor_by_ram(512)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    # Boot a server, wait for it to boot, and then do whatever is needed"},{"line_number":98,"context_line":"    # to get a public IP for it."},{"line_number":99,"context_line":"    conn.create_server("},{"line_number":100,"context_line":"        \u0027my-server\u0027, image\u003dimage, flavor\u003dflavor, wait\u003dTrue, auto_ip\u003dTrue)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"6cf53afd_3cfa4f50","line":98,"range":{"start_line":98,"start_character":22,"end_line":98,"end_character":24},"updated":"2021-03-23 20:42:38.000000000","message":"\"IP address\" would be even better IMO","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c4482070d12206a04eddf7f023c77b20d61b047","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    flavor \u003d conn.get_flavor_by_ram(512)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    # Boot a server, wait for it to boot, and then do whatever is needed"},{"line_number":98,"context_line":"    # to get a public IP for it."},{"line_number":99,"context_line":"    conn.create_server("},{"line_number":100,"context_line":"        \u0027my-server\u0027, image\u003dimage, flavor\u003dflavor, wait\u003dTrue, auto_ip\u003dTrue)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"e8f2fae7_359012cb","line":98,"range":{"start_line":98,"start_character":22,"end_line":98,"end_character":24},"in_reply_to":"6cf53afd_3cfa4f50","updated":"2021-03-24 12:18:25.000000000","message":"Done","commit_id":"464a72b7987cdf0dd53373094e81ccdcddbebb18"}]}
