)]}'
{"devstack/lib/ironic":[{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"fca0d7c4a44f1d69afac2d018477f03190a9f1a9","unresolved":false,"context_lines":[{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    die_if_not_set $LINENO subnet_id \"Failure creating SUBNET_ID for $IRONIC_PROVISION_NETWORK_NAME\""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    iniset $IRONIC_CONF_FILE neutron provisioning_network_uuid $net_id"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    IRONIC_PROVISION_SEGMENTATION_ID\u003d${IRONIC_PROVISION_SEGMENTATION_ID:-`openstack network show ${net_id} -f value -c provider:segmentation_id`}"},{"line_number":504,"context_line":"    provision_net_prefix\u003d${IRONIC_PROVISION_SUBNET_PREFIX##*/}"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"fa7ab95a_a8ca984d","line":501,"updated":"2016-08-26 13:37:15.000000000","message":"Should this be changed to \"provisioning_network\" to match check in ironic/drivers/modules/network/neutron.py?","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4a3ebd7fb621582ecd09339addd753f1b38c14ac","unresolved":false,"context_lines":[{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    die_if_not_set $LINENO subnet_id \"Failure creating SUBNET_ID for $IRONIC_PROVISION_NETWORK_NAME\""},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    iniset $IRONIC_CONF_FILE neutron provisioning_network_uuid $net_id"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    IRONIC_PROVISION_SEGMENTATION_ID\u003d${IRONIC_PROVISION_SEGMENTATION_ID:-`openstack network show ${net_id} -f value -c provider:segmentation_id`}"},{"line_number":504,"context_line":"    provision_net_prefix\u003d${IRONIC_PROVISION_SUBNET_PREFIX##*/}"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"fa7ab95a_7b31310b","line":501,"in_reply_to":"fa7ab95a_a8ca984d","updated":"2016-08-26 14:52:32.000000000","message":"Done","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"60b5e6250fb65c01aa18f7a7825b924d6c0a1bbf","unresolved":false,"context_lines":[{"line_number":587,"context_line":"}"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"function configure_ironic_cleaning_network {"},{"line_number":590,"context_line":"    iniset $IRONIC_CONF_FILE neutron cleaning_network $IRONIC_CLEAN_NET_NAME"},{"line_number":591,"context_line":"}"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"function configure_ironic_provision_network {"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3a71b18c_281668a7","line":590,"updated":"2016-12-02 12:23:09.000000000","message":"Shouldn\u0027t we die if it is not set?","commit_id":"849c26cef129cb9aae1cd92cc1252a622d756989"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"211ce7d3d56d8d0956b9d140f3001f07b50dd169","unresolved":false,"context_lines":[{"line_number":587,"context_line":"}"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"function configure_ironic_cleaning_network {"},{"line_number":590,"context_line":"    iniset $IRONIC_CONF_FILE neutron cleaning_network $IRONIC_CLEAN_NET_NAME"},{"line_number":591,"context_line":"}"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"function configure_ironic_provision_network {"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3a71b18c_8e45c5b4","line":590,"in_reply_to":"3a71b18c_281668a7","updated":"2016-12-02 12:28:41.000000000","message":"It has good defaults, see line 128","commit_id":"849c26cef129cb9aae1cd92cc1252a622d756989"}],"doc/source/deploy/multitenancy.rst":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":75,"context_line":"   \"provisioning\" network, and add it in under the neutron section in"},{"line_number":76,"context_line":"   ironic-conductor configuration file. Using ``neutron`` network interface"},{"line_number":77,"context_line":"   requires that ``provision_network`` and ``cleaning_network``"},{"line_number":78,"context_line":"   configuration options are set to a valid neutron network UUIDs, otherwise"},{"line_number":79,"context_line":"   ironic-conductor will fail to start::"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    [neutron]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa7ab95a_616e9b02","line":78,"range":{"start_line":78,"start_character":60,"end_line":78,"end_character":65},"updated":"2016-08-29 09:02:18.000000000","message":"or names here too.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"}],"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a4dce44e75b0f02a013a1b0c37db7c0591f99fc4","unresolved":false,"context_lines":[{"line_number":1955,"context_line":"# Neutron network UUID or name for the ramdisk to be booted"},{"line_number":1956,"context_line":"# into for provisioning nodes. Required for \"neutron\" network"},{"line_number":1957,"context_line":"# interface. (string value)"},{"line_number":1958,"context_line":"# Deprecated group/name - [neutron]/provisioning_network_uuid"},{"line_number":1959,"context_line":"#provisioning_network \u003d \u003cNone\u003e"},{"line_number":1960,"context_line":""},{"line_number":1961,"context_line":"# Client retries in the case of a failed request. (integer"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa7ab95a_e33748ae","line":1958,"updated":"2016-08-26 18:13:18.000000000","message":"I think we need to mention here, that if name is used it should be unique, otherwise deployment will fail. Neutron doesn\u0027t guarantee name uniqness so it is responsibility of administrator,","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a7e533aa4fb1abff09c5d8fbb2cf00e2e2eb8dd0","unresolved":false,"context_lines":[{"line_number":1931,"context_line":"# into for cleaning nodes. Required for \"neutron\" network"},{"line_number":1932,"context_line":"# interface. It is also required if cleaning nodes when using"},{"line_number":1933,"context_line":"# \"flat\" network interface or \"neutron\" DHCP provider. If a"},{"line_number":1934,"context_line":"# name is provided, it must be unique among all provider"},{"line_number":1935,"context_line":"# networks. (string value)"},{"line_number":1936,"context_line":"# Deprecated group/name - [neutron]/cleaning_network_uuid"},{"line_number":1937,"context_line":"#cleaning_network \u003d \u003cNone\u003e"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"5a74a57a_734ce976","line":1934,"updated":"2016-11-30 15:24:54.000000000","message":"might be just mention here that if a name is provided, administrator is responsible to guarantee name uniqueness among all tenant networks.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1479446b8daa9775deb655234f0d4972f14ec65","unresolved":false,"context_lines":[{"line_number":1990,"context_line":"# Neutron network UUID for the ramdisk to be booted into for"},{"line_number":1991,"context_line":"# provisioning nodes. Required for \"neutron\" network"},{"line_number":1992,"context_line":"# interface. If a name is provided, it must be unique among"},{"line_number":1993,"context_line":"# all provider networks. (string value)"},{"line_number":1994,"context_line":"# Deprecated group/name - [neutron]/provisioning_network_uuid"},{"line_number":1995,"context_line":"#provisioning_network \u003d \u003cNone\u003e"},{"line_number":1996,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":8,"id":"3a71b18c_691d0d66","line":1993,"updated":"2016-12-01 09:51:06.000000000","message":"nit: not updated description.","commit_id":"dda64441b8dfd3d8453d42eb93bb77bdfc0fe6c3"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"01cfcebf06d62db8bbb1af38645ad2a84b348064","unresolved":false,"context_lines":[{"line_number":1990,"context_line":"# Neutron network UUID for the ramdisk to be booted into for"},{"line_number":1991,"context_line":"# provisioning nodes. Required for \"neutron\" network"},{"line_number":1992,"context_line":"# interface. If a name is provided, it must be unique among"},{"line_number":1993,"context_line":"# all provider networks. (string value)"},{"line_number":1994,"context_line":"# Deprecated group/name - [neutron]/provisioning_network_uuid"},{"line_number":1995,"context_line":"#provisioning_network \u003d \u003cNone\u003e"},{"line_number":1996,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":8,"id":"3a71b18c_29d14bce","line":1993,"in_reply_to":"3a71b18c_691d0d66","updated":"2016-12-01 13:13:43.000000000","message":"ugh","commit_id":"dda64441b8dfd3d8453d42eb93bb77bdfc0fe6c3"}],"ironic/common/neutron.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"041ac7d62c0400d59eb8c9586177005108d6454a","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"def validate_network(uuid_or_name):"},{"line_number":270,"context_line":"    \"\"\"Check that the given network is present.\"\"\""},{"line_number":271,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":272,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":273,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_479580e2","line":270,"updated":"2016-08-26 10:48:14.000000000","message":"nit: A :returns: would be nice to have here, apparently it does return \"id\", which I assume is the UUID of that network being validate.","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4a3ebd7fb621582ecd09339addd753f1b38c14ac","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"def validate_network(uuid_or_name):"},{"line_number":270,"context_line":"    \"\"\"Check that the given network is present.\"\"\""},{"line_number":271,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":272,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":273,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_9b4fd591","line":270,"in_reply_to":"fa7ab95a_479580e2","updated":"2016-08-26 14:52:32.000000000","message":"Done","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"041ac7d62c0400d59eb8c9586177005108d6454a","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":285,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    return networks[\u0027networks\u0027][0][\u0027id\u0027]"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"class NeutronNetworkInterfaceMixin(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_67c1a4e4","line":287,"updated":"2016-08-26 10:48:14.000000000","message":"Question: Is it possible to have duplicate names ? (Like it would be possible to have more than one instance called XYZ in nova)","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff160dd5f3491777239d29779a4b5b76e19a10a5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":285,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    return networks[\u0027networks\u0027][0][\u0027id\u0027]"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"class NeutronNetworkInterfaceMixin(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_72eec423","line":287,"in_reply_to":"fa7ab95a_67c1a4e4","updated":"2016-08-26 10:51:51.000000000","message":"Just to document:\n\n\u003cdtantsur\u003e lucasagomes, yes, it is possible to have duplicate names, so I have to document it to avoid people shooting their leg\n\u003clucasagomes\u003e dtantsur, yeah, cause that may return the wrong UUID then\n\u003clucasagomes\u003e dtantsur, perhaps we really should raise an error or something ?\n\u003cdtantsur\u003e lucasagomes, I think we should, will fix\n\u003clucasagomes\u003e not sure it would be ideal to have a node booting on a random network\n\u003clucasagomes\u003e dtantsur, cool. Yeah +1 for raising an error preventing it and have the documentation to say to _not_ create networks with duplicated names\n\u003clucasagomes\u003e or, if that\u0027s the case use UUID instead\n\u003cdtantsur\u003e ++","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4a3ebd7fb621582ecd09339addd753f1b38c14ac","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":285,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    return networks[\u0027networks\u0027][0][\u0027id\u0027]"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"class NeutronNetworkInterfaceMixin(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_1b5ca54a","line":287,"in_reply_to":"fa7ab95a_72eec423","updated":"2016-08-26 14:52:32.000000000","message":"Done","commit_id":"5790a44f42fc540b07941a9cf966cec459304094"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"17f5f49aa659760a725263212f96678d16e7c3ba","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_7f272fb6","line":274,"updated":"2016-08-28 00:22:40.000000000","message":"It is a bad idea to use the network name. There could be multiple networks with the same name - use UUID instead","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"564f5594e55ab58c597acb1b33411cef51f877c4","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_0474fdfa","line":274,"in_reply_to":"fa7ab95a_04179ded","updated":"2016-08-29 08:55:25.000000000","message":"I\u0027m not sure that provision/cleaning network should be shared","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"dec2bac9d1848158d3e90e71607f40655da6e458","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_04f95d4d","line":274,"in_reply_to":"fa7ab95a_0474fdfa","updated":"2016-08-29 10:45:35.000000000","message":"Actually at the gates it is not shared: https://github.com/openstack/ironic/blob/master/devstack/lib/ironic#L486","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"873da1cf2216e56d08934bfd3e006b43cfca8b9d","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_e430f903","line":274,"in_reply_to":"fa7ab95a_0474fdfa","updated":"2016-08-29 08:59:58.000000000","message":"Hmm, good point. Btw, why do you think we\u0027re using admin tenant for this client? I thought we tend to use service tenant for the ironic user, no? And we don\u0027t provide a token to this get_client call...","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"718c404b81856258e5500fadd03450eea9712eb8","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_c1f4c788","line":274,"in_reply_to":"fa7ab95a_45fe1838","updated":"2016-08-29 08:34:08.000000000","message":"I think the problem is that identifier should be unique. Unfortunately neutron network name is not. So we  need to add proper description to option and will get only networks from \u0027service\u0027 tenant. As service tenant is fully controlled by administrator who can guarantee Neutron network name uniques.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"37c192bb68dd8a0ed90a7577eefd59014cae9d5f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_45fe1838","line":274,"in_reply_to":"fa7ab95a_7f272fb6","updated":"2016-08-28 07:54:07.000000000","message":"Well, it\u0027s a bad idea to put UUIDs in a config file either. So I want to let operators/installers choose.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"afe5dc389d18772c01d7803b86d73d84dca885c0","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_04179ded","line":274,"in_reply_to":"fa7ab95a_c1f4c788","updated":"2016-08-29 08:48:54.000000000","message":"I understand the problem here, but UUIDs come with their own problems.. I\u0027d personally prefer not to put references to user-created objects in configuration files at all, but other folks do not seem to agree with me. I\u0027ll figure out how to limit networks.\n\nActually, an easier way would be to filter only \"shared\" networks. Only an administrator can create a shared network, right?","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"dec2bac9d1848158d3e90e71607f40655da6e458","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    if uuidutils.is_uuid_like(uuid_or_name):"},{"line_number":273,"context_line":"        filters \u003d {\u0027id\u0027: uuid_or_name}"},{"line_number":274,"context_line":"    else:"},{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_388041c0","line":274,"in_reply_to":"fa7ab95a_e430f903","updated":"2016-08-29 10:45:35.000000000","message":"get_client() returns admin client, since Ironic need to check all neutron ports, including tenant ports so client with \u0027service\u0027 context will not work.\nIt seems that it is possible to set \u0027tenant_id\u0027 (The ID of the tenant who owns the resource.) when requesting list_networks() from neutron client [0]\n\n[0] http://developer.openstack.org/api-ref/networking/v2/?expanded\u003dlist-networks-detail","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a4dce44e75b0f02a013a1b0c37db7c0591f99fc4","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        client \u003d get_client()"},{"line_number":279,"context_line":"        networks \u003d client.list_networks(fields\u003d[\u0027id\u0027], **filters)"},{"line_number":280,"context_line":"    except neutron_exceptions.NeutronClientException as exc:"},{"line_number":281,"context_line":"        raise exception.NetworkError(_(\u0027Could not retrieve network list: %s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_4313940d","line":278,"updated":"2016-08-26 18:13:18.000000000","message":"It will return client with admin token. list_networks() will show all networks including tenant networks. So when someone creates a network with the same name ironic deployments will not work.\nI think here we should check networks from services tenant only.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"17f5f49aa659760a725263212f96678d16e7c3ba","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        client \u003d get_client()"},{"line_number":279,"context_line":"        networks \u003d client.list_networks(fields\u003d[\u0027id\u0027], **filters)"},{"line_number":280,"context_line":"    except neutron_exceptions.NeutronClientException as exc:"},{"line_number":281,"context_line":"        raise exception.NetworkError(_(\u0027Could not retrieve network list: %s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_bf21b7a1","line":278,"in_reply_to":"fa7ab95a_4313940d","updated":"2016-08-28 00:22:40.000000000","message":"+1 - yes, using correct context will help. However, even for the same tenant, there could be multiple networks with the same name. It is better to use the UUIDs","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        filters \u003d {\u0027name\u0027: uuid_or_name}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    try:"},{"line_number":278,"context_line":"        client \u003d get_client()"},{"line_number":279,"context_line":"        networks \u003d client.list_networks(fields\u003d[\u0027id\u0027], **filters)"},{"line_number":280,"context_line":"    except neutron_exceptions.NeutronClientException as exc:"},{"line_number":281,"context_line":"        raise exception.NetworkError(_(\u0027Could not retrieve network list: %s\u0027) %"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_a4f99182","line":278,"in_reply_to":"fa7ab95a_bf21b7a1","updated":"2016-08-29 09:02:18.000000000","message":"We don\u0027t have a possibility to specify a random tenant while creating a ks session, so we can just add a tenant_id filter too to avoid this problem.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        client \u003d get_client()"},{"line_number":279,"context_line":"        networks \u003d client.list_networks(fields\u003d[\u0027id\u0027], **filters)"},{"line_number":280,"context_line":"    except neutron_exceptions.NeutronClientException as exc:"},{"line_number":281,"context_line":"        raise exception.NetworkError(_(\u0027Could not retrieve network list: %s\u0027) %"},{"line_number":282,"context_line":"                                     exc)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_c4505561","line":281,"range":{"start_line":281,"start_character":23,"end_line":281,"end_character":36},"updated":"2016-08-29 09:02:18.000000000","message":"If the conf option is None, it will raise this I think, I\u0027d prefer MissingParameterValue instead.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c948ffab3a37c6a08bd56ec9c8e60c5ba38b9ee2","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":288,"context_line":"    elif len(networks) \u003e 1:"},{"line_number":289,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":290,"context_line":"            _(\u0027More than one network was found for name %(name)s: %(nets)s\u0027) %"},{"line_number":291,"context_line":"            {\u0027name\u0027: uuid_or_name, \u0027nets\u0027: \u0027, \u0027.join(networks)})"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    return networks[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_07d99ff3","line":290,"range":{"start_line":290,"start_character":66,"end_line":290,"end_character":74},"updated":"2016-08-26 16:22:20.000000000","message":"Question: In case of this exception being raise, will it be visible to the user running \"ironic node-validate\" ?\n\nIf so, I think it would be better to just log the duplicated network objects, the message about having more than one network with the same name is clear enough.\n\nAlso, could these objects contain any secret ?","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c948ffab3a37c6a08bd56ec9c8e60c5ba38b9ee2","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":288,"context_line":"    elif len(networks) \u003e 1:"},{"line_number":289,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":290,"context_line":"            _(\u0027More than one network was found for name %(name)s: %(nets)s\u0027) %"},{"line_number":291,"context_line":"            {\u0027name\u0027: uuid_or_name, \u0027nets\u0027: \u0027, \u0027.join(networks)})"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    return networks[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_c7d6d7c4","line":290,"range":{"start_line":290,"start_character":47,"end_line":290,"end_character":55},"updated":"2016-08-26 16:22:20.000000000","message":"with the name\n\nMay I suggest: \u0027Multiple networks found with the %(name)s\". Please use the network UUID instead.\u0027","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5e26bac989c59c35b9a7991f53262ab24a5c28ac","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":288,"context_line":"    elif len(networks) \u003e 1:"},{"line_number":289,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":290,"context_line":"            _(\u0027More than one network was found for name %(name)s: %(nets)s\u0027) %"},{"line_number":291,"context_line":"            {\u0027name\u0027: uuid_or_name, \u0027nets\u0027: \u0027, \u0027.join(networks)})"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    return networks[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_02ad0de9","line":290,"range":{"start_line":290,"start_character":66,"end_line":290,"end_character":74},"in_reply_to":"fa7ab95a_07d99ff3","updated":"2016-08-26 16:24:50.000000000","message":"My bad here... this is only a list of UUIDs!","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc23144b4ea508e8a6b872008d0b900b03410b3c","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            _(\u0027Network with name or UUID %s was not found\u0027) % uuid_or_name)"},{"line_number":288,"context_line":"    elif len(networks) \u003e 1:"},{"line_number":289,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":290,"context_line":"            _(\u0027More than one network was found for name %(name)s: %(nets)s\u0027) %"},{"line_number":291,"context_line":"            {\u0027name\u0027: uuid_or_name, \u0027nets\u0027: \u0027, \u0027.join(networks)})"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    return networks[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_e2af49e1","line":290,"range":{"start_line":290,"start_character":47,"end_line":290,"end_character":55},"in_reply_to":"fa7ab95a_c7d6d7c4","updated":"2016-08-26 16:26:24.000000000","message":"We don\u0027t output objects :) see n[\u0027id\u0027] on line 284.\n\nAs to wording, I\u0027ll fix it if I make one more patchset, ok?","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c948ffab3a37c6a08bd56ec9c8e60c5ba38b9ee2","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    _cleaning_network_uuid \u003d None"},{"line_number":299,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def cleaning_network_uuid(self):"},{"line_number":302,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":303,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":304,"context_line":"                CONF.neutron.cleaning_network)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_87a68fbf","line":301,"updated":"2016-08-26 16:22:20.000000000","message":"Nit: Make it a @property","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    _cleaning_network_uuid \u003d None"},{"line_number":299,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def cleaning_network_uuid(self):"},{"line_number":302,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":303,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":304,"context_line":"                CONF.neutron.cleaning_network)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_3f9f4eb5","line":301,"in_reply_to":"fa7ab95a_4201d5ad","updated":"2016-08-29 09:02:18.000000000","message":"I\u0027m OK with a property as the network call will happen only once per conductor restart.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c32664356df9675579fae43e6f7324e336b8a805","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    _cleaning_network_uuid \u003d None"},{"line_number":299,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def cleaning_network_uuid(self):"},{"line_number":302,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":303,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":304,"context_line":"                CONF.neutron.cleaning_network)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_4201d5ad","line":301,"in_reply_to":"fa7ab95a_62e9791a","updated":"2016-08-26 16:28:19.000000000","message":"Right, I most suggested that because I think it sounds strange to have a \"\u003cinstance\u003e.cleaning_network_uuid()\".\n\nPerhaps renaming the method to \"get_cleaning_network_uuid()\" makes it more readable.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc23144b4ea508e8a6b872008d0b900b03410b3c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    _cleaning_network_uuid \u003d None"},{"line_number":299,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def cleaning_network_uuid(self):"},{"line_number":302,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":303,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":304,"context_line":"                CONF.neutron.cleaning_network)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_62e9791a","line":301,"in_reply_to":"fa7ab95a_87a68fbf","updated":"2016-08-26 16:26:24.000000000","message":"I was thinking about that... I personally don\u0027t like properties that make network calls :) For me a property is something lightweight. But I will change if more people request the same.","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c948ffab3a37c6a08bd56ec9c8e60c5ba38b9ee2","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                CONF.neutron.cleaning_network)"},{"line_number":305,"context_line":"        return self._cleaning_network_uuid"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def provisioning_network_uuid(self):"},{"line_number":308,"context_line":"        if self._provisioning_network_uuid is None:"},{"line_number":309,"context_line":"            self._provisioning_network_uuid \u003d validate_network("},{"line_number":310,"context_line":"                CONF.neutron.provisioning_network)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_6788ab23","line":307,"updated":"2016-08-26 16:22:20.000000000","message":"ditto","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9acf54bbae7971b16d78a7ccea28d97a6cf4a0a4","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    :param uuid_or_name: network UUID or name"},{"line_number":296,"context_line":"    :param net_type: human-readable network type for error messages"},{"line_number":297,"context_line":"    :return: network UUID"},{"line_number":298,"context_line":"    \"\"\""},{"line_number":299,"context_line":"    if not uuid_or_name:"},{"line_number":300,"context_line":"        raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_9ded4791","line":297,"updated":"2016-12-01 09:13:07.000000000","message":"missing raises.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"802cb9ca1a914bb8b2e79a0f8205e564e2df927d","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    :param uuid_or_name: network UUID or name"},{"line_number":296,"context_line":"    :param net_type: human-readable network type for error messages"},{"line_number":297,"context_line":"    :return: network UUID"},{"line_number":298,"context_line":"    \"\"\""},{"line_number":299,"context_line":"    if not uuid_or_name:"},{"line_number":300,"context_line":"        raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_a304a4c6","line":297,"in_reply_to":"3a71b18c_9ded4791","updated":"2016-12-01 09:23:21.000000000","message":"Done","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6a018ca97a00f5bb8171254c80cd160a4e77ccb9","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_b0b3d709","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"updated":"2016-11-30 15:23:31.000000000","message":"provider:physical_network may not be present while route to this network may be added via router, like it is done on our CI with \u0027flat\u0027 network so relying on this option is not fully right.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"802cb9ca1a914bb8b2e79a0f8205e564e2df927d","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_03cf18b1","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"in_reply_to":"3a71b18c_28db13ef","updated":"2016-12-01 09:23:21.000000000","message":"Yeah, fine, let\u0027s drop the check..","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4d3558b2b5373774b13bd08e1ff835512e066f13","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_dda063a8","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"in_reply_to":"5a74a57a_44b6413e","updated":"2016-11-30 16:59:31.000000000","message":"I was told that using DHCP relay with Ironic is not trivial (and not possible at all with inspector). Anyway, I suggest that in this case we recommend people to use UUID. WDYT?","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9ab6f13e7750258f3302f1080e3000d0d0217801","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_44b6413e","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"in_reply_to":"5a74a57a_732b0934","updated":"2016-11-30 16:03:21.000000000","message":"I meant that route from control plane (ie ironic-conductor node) may be added to neutron network via Neutron router. In this case neutron network may not have provider:physycal_network option but we still have access to it from control plane.\n\nRegarding to your question if between baremetal nodes and Neutron physical router is present, than administrator should configure DHCP relay on physical to allow PXE booting.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2e59df0a903a90891387e4ba63c9c4616381523e","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_732b0934","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"in_reply_to":"5a74a57a_b0b3d709","updated":"2016-11-30 15:29:32.000000000","message":"Ok, but I don\u0027t see better options. People with routers might use UUIDs, I guess.\n\nAlso, how do routers work with PXE booting? I assumed it\u0027s not so trivial..","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9acf54bbae7971b16d78a7ccea28d97a6cf4a0a4","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    LOG.debug(\u0027Got list of networks matching %(cond)s: %(result)s\u0027,"},{"line_number":319,"context_line":"              {\u0027cond\u0027: filters, \u0027result\u0027: networks})"},{"line_number":320,"context_line":"    # We only accept provider networks to prevent tenants from creating"},{"line_number":321,"context_line":"    # networks with the same name and thus breaking deployment or cleaning."},{"line_number":322,"context_line":"    networks \u003d [n[\u0027id\u0027] for n in networks.get(\u0027networks\u0027, [])"},{"line_number":323,"context_line":"                if is_uuid or n.get(\u0027provider:physical_network\u0027)]"},{"line_number":324,"context_line":"    if not networks:"},{"line_number":325,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":326,"context_line":"            _(\u0027%(type)s with name or UUID %(uuid_or_name)s was not found\u0027) %"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_28db13ef","line":323,"range":{"start_line":320,"start_character":4,"end_line":323,"end_character":65},"in_reply_to":"5a74a57a_dda063a8","updated":"2016-12-01 09:13:07.000000000","message":"Please have look at this example: http://paste.openstack.org/show/591070/\n\nprovider:physical_network exists even when it was created by in non admin tenant. Might be not rely on provider:physycal_network at all? Just check for name, and if more than one network exist fail?","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"60b5e6250fb65c01aa18f7a7825b924d6c0a1bbf","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def get_cleaning_network_uuid(self):"},{"line_number":340,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":341,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":342,"context_line":"                CONF.neutron.cleaning_network,"},{"line_number":343,"context_line":"                _(\u0027cleaning network\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_0e453516","line":340,"range":{"start_line":340,"start_character":8,"end_line":340,"end_character":47},"updated":"2016-12-02 12:23:09.000000000","message":"Might be good to mention in reno that these are cached for the entire conductor run time.","commit_id":"849c26cef129cb9aae1cd92cc1252a622d756989"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"211ce7d3d56d8d0956b9d140f3001f07b50dd169","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    _provisioning_network_uuid \u003d None"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def get_cleaning_network_uuid(self):"},{"line_number":340,"context_line":"        if self._cleaning_network_uuid is None:"},{"line_number":341,"context_line":"            self._cleaning_network_uuid \u003d validate_network("},{"line_number":342,"context_line":"                CONF.neutron.cleaning_network,"},{"line_number":343,"context_line":"                _(\u0027cleaning network\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_2e275113","line":340,"range":{"start_line":340,"start_character":8,"end_line":340,"end_character":47},"in_reply_to":"3a71b18c_0e453516","updated":"2016-12-02 12:28:41.000000000","message":"Done","commit_id":"849c26cef129cb9aae1cd92cc1252a622d756989"}],"ironic/drivers/modules/network/flat.py":[{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"b7ebe5101063db6ed47eb8c3a8ca6de72fef7805","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if not cleaning_net:"},{"line_number":41,"context_line":"            LOG.warning(_LW("},{"line_number":42,"context_line":"                \u0027Please specify a valid UUID or name for \u0027"},{"line_number":43,"context_line":"                \u0027[neutron]/cleaning_network_uuid configuration option so that \u0027"},{"line_number":44,"context_line":"                \u0027this interface is able to perform cleaning. It will be \u0027"},{"line_number":45,"context_line":"                \u0027required starting with the Ocata release, and if not \u0027"},{"line_number":46,"context_line":"                \u0027specified then, the conductor service will fail to start if \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_d4aaf318","line":43,"updated":"2016-08-19 16:22:39.000000000","message":"Should \"cleaning_network_uuid\" change to \"cleaning_network\" here?","commit_id":"5f27d8468dba6e856f937f0252d59ae30d2bcc2a"},{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"b7ebe5101063db6ed47eb8c3a8ca6de72fef7805","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        if not uuidutils.is_uuid_like(CONF.neutron.cleaning_network_uuid):"},{"line_number":100,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":101,"context_line":"                \u0027You must provide a valid cleaning network UUID in \u0027"},{"line_number":102,"context_line":"                \u0027[neutron]cleaning_network_uuid configuration option.\u0027))"},{"line_number":103,"context_line":"        # If we have left over ports from a previous cleaning, remove them"},{"line_number":104,"context_line":"        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_771d010f","line":101,"updated":"2016-08-19 16:22:39.000000000","message":"\"or name\"?","commit_id":"5f27d8468dba6e856f937f0252d59ae30d2bcc2a"},{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"b7ebe5101063db6ed47eb8c3a8ca6de72fef7805","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if not uuidutils.is_uuid_like(CONF.neutron.cleaning_network_uuid):"},{"line_number":100,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":101,"context_line":"                \u0027You must provide a valid cleaning network UUID in \u0027"},{"line_number":102,"context_line":"                \u0027[neutron]cleaning_network_uuid configuration option.\u0027))"},{"line_number":103,"context_line":"        # If we have left over ports from a previous cleaning, remove them"},{"line_number":104,"context_line":"        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)"},{"line_number":105,"context_line":"        LOG.info(_LI(\u0027Adding cleaning network to node %s\u0027), task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_372b8932","line":102,"updated":"2016-08-19 16:22:39.000000000","message":"Should this change to \"cleaning_network\"","commit_id":"5f27d8468dba6e856f937f0252d59ae30d2bcc2a"},{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"b7ebe5101063db6ed47eb8c3a8ca6de72fef7805","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                \u0027You must provide a valid cleaning network UUID in \u0027"},{"line_number":102,"context_line":"                \u0027[neutron]cleaning_network_uuid configuration option.\u0027))"},{"line_number":103,"context_line":"        # If we have left over ports from a previous cleaning, remove them"},{"line_number":104,"context_line":"        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)"},{"line_number":105,"context_line":"        LOG.info(_LI(\u0027Adding cleaning network to node %s\u0027), task.node.uuid)"},{"line_number":106,"context_line":"        vifs \u003d neutron.add_ports_to_network("},{"line_number":107,"context_line":"            task, CONF.neutron.cleaning_network_uuid, is_flat\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_77a06191","line":104,"updated":"2016-08-19 16:22:39.000000000","message":"Also here?","commit_id":"5f27d8468dba6e856f937f0252d59ae30d2bcc2a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param task: a TaskManager instance."},{"line_number":50,"context_line":"        :raises: InvalidParameterValue, if the network interface configuration"},{"line_number":51,"context_line":"            is invalid."},{"line_number":52,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        self.cleaning_network_uuid()"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_04e23d9f","line":52,"updated":"2016-08-29 09:02:18.000000000","message":"networkerror too, while this should be raising only the following exceptions handled properly by ConductorManager:\n\nexception.InvalidParameterValue, exception.UnsupportedDriverExtension, exception.MissingParameterValue","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9acf54bbae7971b16d78a7ccea28d97a6cf4a0a4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            is invalid."},{"line_number":52,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        self.get_cleaning_network_uuid()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":57,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_fd3f1bd4","line":54,"updated":"2016-12-01 09:13:07.000000000","message":"get_cleaning_network_uuid can raise NetworkError, it should be catched and replaced by InvalidParameterValue","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"802cb9ca1a914bb8b2e79a0f8205e564e2df927d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            is invalid."},{"line_number":52,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        self.get_cleaning_network_uuid()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":57,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_a3b904ef","line":54,"in_reply_to":"3a71b18c_fd3f1bd4","updated":"2016-12-01 09:23:21.000000000","message":"I don\u0027t think so, NetworkError is caused by inability to contact Neutron, it\u0027s not about invalid or missing parameters.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"}],"ironic/drivers/modules/network/neutron.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"80583d460c883d204665b791828d4018346b0ced","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        :param task: a TaskManager instance."},{"line_number":56,"context_line":"        :raises: InvalidParameterValue, if the network interface configuration"},{"line_number":57,"context_line":"            is invalid."},{"line_number":58,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        self.cleaning_network_uuid()"},{"line_number":61,"context_line":"        self.provisioning_network_uuid()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_e4ab991b","line":58,"updated":"2016-08-29 09:02:18.000000000","message":"ditto","commit_id":"45a75143c736a91ad1b4ce7cdb95ab75f33b3846"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9acf54bbae7971b16d78a7ccea28d97a6cf4a0a4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        self.get_cleaning_network_uuid()"},{"line_number":61,"context_line":"        self.get_provisioning_network_uuid()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":64,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_2802333f","line":61,"range":{"start_line":61,"start_character":25,"end_line":61,"end_character":26},"updated":"2016-12-01 09:13:07.000000000","message":"ditto about NetworkError.","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"802cb9ca1a914bb8b2e79a0f8205e564e2df927d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        self.get_cleaning_network_uuid()"},{"line_number":61,"context_line":"        self.get_provisioning_network_uuid()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":64,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_43cbd072","line":61,"range":{"start_line":61,"start_character":25,"end_line":61,"end_character":26},"in_reply_to":"3a71b18c_2802333f","updated":"2016-12-01 09:23:21.000000000","message":"ditto","commit_id":"45d45f792139c52ab80c1402502c90b4a7a8e0b8"}]}
