{"id":860,"date":"2014-10-22T12:11:14","date_gmt":"2014-10-22T17:11:14","guid":{"rendered":"https:\/\/www.softwareab.net\/wordpress\/?p=860"},"modified":"2014-10-22T12:12:19","modified_gmt":"2014-10-22T17:12:19","slug":"openstack-fix-missing-external-ips-neutron","status":"publish","type":"post","link":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/","title":{"rendered":"OpenStack: Fix &#8220;Missing&#8221; External IPs in Neutron"},"content":{"rendered":"<p>Have you ever assigned a &#8220;floating&#8221; IP on your external network to an OpenStack VM&#8230;but not been able to ping it? Read our article for info on how we workaround the problem!<\/p>\n<p><!--more--><\/p>\n<p>Here&#8217;s the scenario: you&#8217;ve just created a VM and you&#8217;ve just allocated a &#8220;floating&#8221; IP from your external network. You see that the external IP is properly associated:<\/p>\n<pre>\r\n[l.abruce@co1]$ <strong>nova --os-tenant-name=foobar list<\/strong>\r\n<em>+--------------------------------------+------+--------+-------------------------------------+\r\n| ID                                   | Name | Status | Networks                            |\r\n+--------------------------------------+------+--------+-------------------------------------+\r\n| 39612446-a2b9-4b6b-ab25-08af0d3a0f85 | vm1  | ACTIVE | foobar-net=10.0.0.40, 172.20.132.33 |\r\n| a288bdce-a0c4-4ba8-b6d7-28274ca47fa1 | vm2  | ACTIVE | foobar-net=10.0.0.3, 172.20.132.23  |\r\n+--------------------------------------+------+--------+-------------------------------------+<\/em>\r\n<\/pre>\n<p>In the above, we see that the <code>vm2<\/code> has internal IP of 10.0.0.40 and external IP 172.20.132.33.<\/p>\n<p>The problem? You try to <code>ping<\/code> that IP address&#8230;and, nothing. Nada. Zilch. Zero.<\/p>\n<p>The solution? Normally, a lot of frantic searching on Google, mass restarts of Neutron services, and serious hand-wringing.<\/p>\n<p>But no more! While the <strong>*root cause* is that Neutron notification via AMQP is failing to catch the changed IP<\/strong>, we won&#8217;t solve that now (or World Hunger, for that matter). But we will get you back up and runnning; no need to restart services, interrupt clients, etc.<\/p>\n<p>Here&#8217;s the process:<\/p>\n<ol>\n<li> <strong>Find the Router ID.<\/strong> For the tenant in question, get the ID of the actual Router object you created:\n<pre>\r\n[l.abruce@co1 rc_scripts(lvosksclu100-rc-admin)]$ <strong>neutron --os-tenant-name=foobar router-list | grep foobar<\/strong>\r\n<em>| 418f9a8d-b994-44eb-86b2-c5fa0ea9d732 | foobar-router | {\"network_id\": \"cab649b6-c4b2-4da5-af58-15319d244abf\", \"enable_snat\": true} |\r\n<\/em><\/pre>\n<p>The Router ID is <code>418f9a8d-b994-44eb-86b2-c5fa0ea9d732<\/code>.<\/p>\n<li> <strong>Check the Router Configuration on your Neutron Controller.<\/strong> We logon to our system, become <code>root<\/code>, and check out the current settings using these commands.\n<ul>\n<li>First, verify you can hit the VM on its internal IP. If you can&#8217;t&#8230;this article won&#8217;t help you (you have a different issue or DHCP failure):\n<pre>\r\n[root@neutron ~]# <strong>ip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 ping -c 4 10.0.0.40<\/strong>\r\n<em>PING 10.0.0.40 (10.0.0.40) 56(84) bytes of data.\r\n64 bytes from 10.0.0.40: icmp_seq=1 ttl=64 time=1.80 ms\r\n64 bytes from 10.0.0.40: icmp_seq=2 ttl=64 time=0.761 ms\r\n64 bytes from 10.0.0.40: icmp_seq=3 ttl=64 time=0.618 ms\r\n64 bytes from 10.0.0.40: icmp_seq=4 ttl=64 time=0.643 ms\r\n\r\n--- 10.0.0.40 ping statistics ---\r\n4 packets transmitted, 4 received, 0% packet loss, time 3003ms\r\nrtt min\/avg\/max\/mdev = 0.618\/0.956\/1.802\/0.491 ms<\/em>\r\n<\/pre>\n<\/li>\n<li>Assuming that you have connectivity to the internal IP, now get all of the *external* IP addresses bound to that Router:\n<pre>\r\n[root@neutron ~]# <strong>ip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 ip a<\/strong>\r\n<em>13: qg-ad0b02aa-38: <BROADCAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN \r\n    link\/ether fa:16:3e:f9:ec:24 brd ff:ff:ff:ff:ff:ff\r\n    inet 172.20.132.8\/18 brd 172.20.191.255 scope global qg-ad0b02aa-38\r\n    inet 172.20.132.23\/32 brd 172.20.132.23 scope global qg-ad0b02aa-38\r\n    inet6 fe80::f816:3eff:fef9:ec24\/64 scope link \r\n       valid_lft forever preferred_lft forever\r\n46: qr-d7b86f4d-90: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN \r\n    link\/ether fa:16:3e:8b:99:e3 brd ff:ff:ff:ff:ff:ff\r\n    inet 10.0.0.1\/24 brd 10.0.0.255 scope global qr-d7b86f4d-90\r\n    inet6 fe80::f816:3eff:fe8b:99e3\/64 scope link \r\n       valid_lft forever preferred_lft forever\r\n54: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \r\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\r\n    inet 127.0.0.1\/8 scope host lo\r\n    inet6 ::1\/128 scope host \r\n       valid_lft forever preferred_lft forever<\/em>\r\n<\/pre>\n<p>The above shows that we have two &#8220;external&#8221; addresses (172.20.132.8 and 172.20.132.23) bound to this Router. The 172.20.132.8 is the IP assigned to the Router object itself, the 172.20.132.23 is for another running VM&#8230;so &#8211; we are missing 172.20.132.33!<\/li>\n<li>Next, get the <code>iptables<\/code> information for that Router:\n<pre>\r\n[root@neutron ~]# <strong>ip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 iptables -S -t nat<\/strong>\r\n<em>-P PREROUTING ACCEPT\r\n-P POSTROUTING ACCEPT\r\n-P OUTPUT ACCEPT\r\n-N neutron-l3-agent-OUTPUT\r\n-N neutron-l3-agent-POSTROUTING\r\n-N neutron-l3-agent-PREROUTING\r\n-N neutron-l3-agent-float-snat\r\n-N neutron-l3-agent-snat\r\n-N neutron-postrouting-bottom\r\n-A PREROUTING -j neutron-l3-agent-PREROUTING \r\n-A POSTROUTING -j neutron-l3-agent-POSTROUTING \r\n-A POSTROUTING -j neutron-postrouting-bottom \r\n-A OUTPUT -j neutron-l3-agent-OUTPUT \r\n-A neutron-l3-agent-OUTPUT -d 172.20.132.23\/32 -j DNAT --to-destination 10.0.0.3 \r\n-A neutron-l3-agent-POSTROUTING ! -i qg-ad0b02aa-38 ! -o qg-ad0b02aa-38 -m conntrack ! --ctstate DNAT -j ACCEPT \r\n-A neutron-l3-agent-PREROUTING -d 169.254.169.254\/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697 \r\n-A neutron-l3-agent-PREROUTING -d 172.20.132.23\/32 -j DNAT --to-destination 10.0.0.3 \r\n-A neutron-l3-agent-float-snat -s 10.0.0.3\/32 -j SNAT --to-source 172.20.132.23 \r\n-A neutron-l3-agent-snat -j neutron-l3-agent-float-snat \r\n-A neutron-l3-agent-snat -s 10.0.0.0\/24 -j SNAT --to-source 172.20.132.8 \r\n-A neutron-postrouting-bottom -j neutron-l3-agent-snat<\/em>\r\n<\/pre>\n<p>Look for the values associated with the external IPs, we&#8217;ll add a few more entries.<\/li>\n<\/ul>\n<\/li>\n<li> Add the missing external IP address to your Router object:\n<pre>\r\n[root@neutron ~]# <strong>ip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 ip a add 172.20.132.33\/32 broadcast 172.20.132.33 scope global dev qg-ad0b02aa-38<\/strong>\r\n<\/pre>\n<p>You get no output from that command unless you have a failure. Let&#8217;s verify:<\/p>\n<pre>\r\n[root@neutron ~]# <strong>ip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 ip a show<\/strong>\r\n<em>13: qg-ad0b02aa-38: <BROADCAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN \r\n    link\/ether fa:16:3e:f9:ec:24 brd ff:ff:ff:ff:ff:ff\r\n    inet 172.20.132.8\/18 brd 172.20.191.255 scope global qg-ad0b02aa-38\r\n    inet 172.20.132.23\/32 brd 172.20.132.23 scope global qg-ad0b02aa-38\r\n    inet 172.20.132.33\/32 brd 172.20.132.33 scope global qg-ad0b02aa-38\r\n    inet6 fe80::f816:3eff:fef9:ec24\/64 scope link \r\n       valid_lft forever preferred_lft forever\r\n[...output cut...]<\/em>\r\n<\/pre>\n<p>We have our missing external IP address&#8230;now let&#8217;s setup routing for it.<\/li>\n<li> To setup routing, we issue a few simple commands in the Router object&#8217;s context.\n<ul>\n<li>First, map (NAT) outgoing calls from the internal IP address to the external IP:\n<pre>\r\nip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 iptables -t nat -A neutron-l3-agent-OUTPUT -d 172.20.132.33\/32 -j DNAT --to-destination 10.0.0.40\r\n<\/pre>\n<\/li>\n<li>Next, map incoming calls to the external IP to the internal IP address:\n<pre>\r\nip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 iptables -t nat -A neutron-l3-agent-PREROUTING -d 172.20.132.33\/32 -j DNAT --to-destination 10.0.0.40\r\n<\/pre>\n<\/li>\n<li>Finally, setup source NAT from the internal IP to the external IP:\n<pre>\r\nip netns exec qrouter-418f9a8d-b994-44eb-86b2-c5fa0ea9d732 iptables -t nat -A neutron-l3-agent-float-snat -s 10.0.0.40\/32 -j SNAT --to-source 172.20.132.33\r\n<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>And &#8211; that is it! Now let&#8217;s verify we can get to the external IP from any other node (like your local laptop):<\/p>\n<pre>\r\n[l.abruce@co1]$ <strong>ping -c 4 172.20.132.33<\/strong>\r\n<em>PING 172.20.132.33 (172.20.132.33) 56(84) bytes of data.\r\n64 bytes from 172.20.132.33: icmp_seq=1 ttl=62 time=5.90 ms\r\n64 bytes from 172.20.132.33: icmp_seq=2 ttl=62 time=11.2 ms\r\n64 bytes from 172.20.132.33: icmp_seq=3 ttl=62 time=13.0 ms\r\n64 bytes from 172.20.132.33: icmp_seq=4 ttl=62 time=2.17 ms\r\n\r\n--- 172.20.132.33 ping statistics ---\r\n4 packets transmitted, 4 received, 0% packet loss, time 3006ms\r\nrtt min\/avg\/max\/mdev = 2.175\/8.077\/13.035\/4.300 ms<\/em>\r\n<\/pre>\n<p>Success!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever assigned a &#8220;floating&#8221; IP on your external network to an OpenStack VM&#8230;but not been able to ping it? Read our article for info on how we workaround the problem!<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,69,1],"tags":[67,86,14,18,71],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OpenStack: Fix &quot;Missing&quot; External IPs in Neutron<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenStack: Fix &quot;Missing&quot; External IPs in Neutron\" \/>\n<meta property=\"og:description\" content=\"Have you ever assigned a &#8220;floating&#8221; IP on your external network to an OpenStack VM&#8230;but not been able to ping it? Read our article for info on how we workaround the problem!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\" \/>\n<meta property=\"og:site_name\" content=\"softwareab\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-10-22T17:11:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-10-22T17:12:19+00:00\" \/>\n<meta name=\"author\" content=\"Andrew Bruce\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:site\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Bruce\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\"},\"author\":{\"name\":\"Andrew Bruce\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"headline\":\"OpenStack: Fix &#8220;Missing&#8221; External IPs in Neutron\",\"datePublished\":\"2014-10-22T17:11:14+00:00\",\"dateModified\":\"2014-10-22T17:12:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\"},\"wordCount\":429,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"keywords\":[\"cloud\",\"OpenStack\",\"policy\",\"sysadmin\",\"virtualization\"],\"articleSection\":[\"Network\",\"OpenStack\",\"Teknocratica\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\",\"name\":\"OpenStack: Fix \\\"Missing\\\" External IPs in Neutron\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\"},\"datePublished\":\"2014-10-22T17:11:14+00:00\",\"dateModified\":\"2014-10-22T17:12:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"cloud\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/tag\/cloud-2\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OpenStack: Fix &#8220;Missing&#8221; External IPs in Neutron\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/\",\"name\":\"softwareab\",\"description\":\"Technocratica, Technopolitik, Technophobia\",\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\",\"name\":\"Andrew Bruce\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"contentUrl\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"width\":400,\"height\":330,\"caption\":\"Andrew Bruce\"},\"logo\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\"},\"description\":\"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!\",\"sameAs\":[\"http:\/\/cloudraticsolutions.net\/\",\"https:\/\/www.facebook.com\/cloudraticsolutions\/\",\"https:\/\/twitter.com\/realcloudratics\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenStack: Fix \"Missing\" External IPs in Neutron","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/","og_locale":"en_US","og_type":"article","og_title":"OpenStack: Fix \"Missing\" External IPs in Neutron","og_description":"Have you ever assigned a &#8220;floating&#8221; IP on your external network to an OpenStack VM&#8230;but not been able to ping it? Read our article for info on how we workaround the problem!","og_url":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/","og_site_name":"softwareab","article_publisher":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_author":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_published_time":"2014-10-22T17:11:14+00:00","article_modified_time":"2014-10-22T17:12:19+00:00","author":"Andrew Bruce","twitter_card":"summary_large_image","twitter_creator":"@realcloudratics","twitter_site":"@realcloudratics","twitter_misc":{"Written by":"Andrew Bruce","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#article","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/"},"author":{"name":"Andrew Bruce","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"headline":"OpenStack: Fix &#8220;Missing&#8221; External IPs in Neutron","datePublished":"2014-10-22T17:11:14+00:00","dateModified":"2014-10-22T17:12:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/"},"wordCount":429,"commentCount":1,"publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"keywords":["cloud","OpenStack","policy","sysadmin","virtualization"],"articleSection":["Network","OpenStack","Teknocratica"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/","url":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/","name":"OpenStack: Fix \"Missing\" External IPs in Neutron","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#website"},"datePublished":"2014-10-22T17:11:14+00:00","dateModified":"2014-10-22T17:12:19+00:00","breadcrumb":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-fix-missing-external-ips-neutron\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.softwareab.net\/wordpress\/"},{"@type":"ListItem","position":2,"name":"cloud","item":"https:\/\/www.softwareab.net\/wordpress\/tag\/cloud-2\/"},{"@type":"ListItem","position":3,"name":"OpenStack: Fix &#8220;Missing&#8221; External IPs in Neutron"}]},{"@type":"WebSite","@id":"https:\/\/www.softwareab.net\/wordpress\/#website","url":"https:\/\/www.softwareab.net\/wordpress\/","name":"softwareab","description":"Technocratica, Technopolitik, Technophobia","publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600","name":"Andrew Bruce","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","contentUrl":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","width":400,"height":330,"caption":"Andrew Bruce"},"logo":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/"},"description":"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!","sameAs":["http:\/\/cloudraticsolutions.net\/","https:\/\/www.facebook.com\/cloudraticsolutions\/","https:\/\/twitter.com\/realcloudratics"]}]}},"_links":{"self":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/860"}],"collection":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/comments?post=860"}],"version-history":[{"count":3,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/860\/revisions"}],"predecessor-version":[{"id":863,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/860\/revisions\/863"}],"wp:attachment":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/media?parent=860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/categories?post=860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/tags?post=860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}