Add option to ignore config drive interfaces info

Some clouds provide incorrect network_data on the config drive because
they are doing an end round neutron to configure networking in their
cloud. Neutron has incorrect data, that ends up in the config drive and
we configure the interfaces improperly.

Address this by checking for a metadata key called
glean_ignore_interfaces. If present then we ignore any interface
configuration information in the config drive and instead fall back to
dhcp.

Change-Id: I20bc7a124891715fa2ead9e4a72956c80d63563d
This commit is contained in:
Clark Boylan 2018-09-20 12:28:23 -07:00
parent ac8458dac8
commit 0908c99be9
16 changed files with 145 additions and 1 deletions

View File

@ -1287,16 +1287,33 @@ def write_network_info_from_config_drive(args):
If there is no meta_data.json in config-drive, it means that there
is no config drive mounted- which means we know nothing.
Can set 'glean_ignore_interfaces' in nova metadata to ignore the
interface configuration specified by the config drive. This will
cause it to fallback to using dhcp configuration.
Returns False on any issue, which will cause the writing of
DHCP network files.
"""
config_drive = os.path.join(args.root, 'mnt/config')
meta_data_path = '%s/openstack/latest/meta_data.json' % config_drive
meta_data = {}
if os.path.exists(meta_data_path):
meta_data = json.load(open(meta_data_path))
network_info = get_network_info(args)
dns = {}
if not args.skip_dns:
dns = write_dns_info(get_dns_from_config_drive(network_info))
interfaces = get_config_drive_interfaces(network_info)
if 'meta' in meta_data and 'glean_ignore_interfaces' in meta_data['meta']:
# Force DHCP to be used ignoring the interface information.
# Some clouds have neutron configured in such a way that we get
# interface config drive data that is at odds with the networking
# in the cloud. Note we set interfaces to {} so that fallback dhcp
# configuration can happen in write_static_network_info().
interfaces = {}
sys_interfaces = get_sys_interfaces(args.interface, args)
write_static_network_info(interfaces, sys_interfaces, dns, args)

View File

@ -0,0 +1,29 @@
{
"admin_pass": "PBzEwRC8ZgVW",
"availability_zone": "nova",
"devices": [],
"hostname": "centos-7-ovh-bhs1-0002156591.novalocal",
"keys": [
{
"data": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLsTZJ8hXTmzjKxYh/7V07mIy8xl2HL+9BaUlt6A6TMsL3LSvaVQNSgmXX5g0XfPWSCKmkZb1O28q49jQI2n7n7+sHkxn0dJDxj1N2oNrzNY7pDuPrdtCijczLFdievygXNhXNkQ2WIqHXDquN/jfLLJ9L0jxtxtsUMbiL2xxZEZcaf/K5MqyPhscpqiVNE1MjE4xgPbIbv8gCKtPpYIIrktOMb4JbV7rhOp5DcSP5gXtLhOF5fbBpZ+szqrTVUcBX0oTYr3iRfOje9WPsTZIk9vBfBtF416mCNxMSRc7KhSW727AnUu85hS0xiP0MRAf69KemG1OE1pW+LtDIAEYp mordred@camelot\n",
"name": "test-monty-key",
"type": "ssh"
}
],
"launch_index": 0,
"meta": {
"groups": "ovh-bhs1,centos-7,centos-7",
"nodepool_image_name": "centos-7",
"nodepool_node_id": "0002156591",
"nodepool_node_label": "centos-7",
"nodepool_provider_name": "ovh-bhs1",
"glean_ignore_interfaces": "true"
},
"name": "centos-7-ovh-bhs1-0002156591",
"project_id": "some_project",
"public_keys": {
"mordred": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLsTZJ8hXTmzjKxYh/7V07mIy8xl2HL+9BaUlt6A6TMsL3LSvaVQNSgmXX5g0XfPWSCKmkZb1O28q49jQI2n7n7+sHkxn0dJDxj1N2oNrzNY7pDuPrdtCijczLFdievygXNhXNkQ2WIqHXDquN/jfLLJ9L0jxtxtsUMbiL2xxZEZcaf/K5MqyPhscpqiVNE1MjE4xgPbIbv8gCKtPpYIIrktOMb4JbV7rhOp5DcSP5gXtLhOF5fbBpZ+szqrTVUcBX0oTYr3iRfOje9WPsTZIk9vBfBtF416mCNxMSRc7KhSW727AnUu85hS0xiP0MRAf69KemG1OE1pW+LtDIAEYp mordred@camelot\n"
},
"random_seed": "YPPvhdhxMKysu5EiBaaZpyDv2DIhMkRJp6XscFvCaI1Bvu1CD1mBg0jwURdVN5T0tbhYH74c8WcatRjyocZXMxUQgUeYd1METz3Fh2+aiJa2HRSCLdDcXzE8kD9VadqEAD/rOiUhjMToDepA6VAKzFTYcbnBNKRgshAFHmBfx0TCOtmM7A7CVsKhAfcMcf2ySYQ0PnS2emRrU21/vv/bj//nb2XxHKPrm7tLLDzqHCd+bg5WQsJ5NkDeuILpyHMGnWUyeNs6jg4z47Cq6grG4orM2G58SW3UbzXPs8waqZrYsfpZMMOj8CUqiAO44vptqOpYb3LlcsSRJHoBfVRY+BlTMkKIDwS3vEoSEX97OwMFDx5x4NXziuoZ4UyVzzAbnLeJHPospKcQC7A0JweazmEJpzTjlYyvC/yNFX8Wrwnohg+I22UghsNI/VVtjwzphUACi1nbttSzlkFkajPJjBAE66UHRp2VRCejLAzjT5TuM276rljQFIW73g9TjD3zf9FFfCYLBgie3pkNFXplLCUbLCUUtvUGJOfaN3N9sBO+P3FFAyuF6P9Jo5QKK2uMVLlE9rS3xOF9q4qtHAvXPSX2ikWQEkklz1UVCNHd5p2nT6C71kCBsT6d2/yOLXTLNAWDf8qpw8poVWlhwSj52mGY/uXYB15+PartkUFOoJA=",
"uuid": "7398a9a5-2a6a-477d-a0ff-1948ed2e211d"
}

View File

@ -0,0 +1,34 @@
{
"links": [
{
"ethernet_mac_address": "fa:16:3e:c8:65:a0",
"id": "tap3c54ff58-02",
"mtu": 1500,
"type": "ovs",
"vif_id": "3c54ff58-02b5-499e-bed0-03530f89e624"
}
],
"networks": [
{
"id": "network0",
"ip_address": "158.69.65.118",
"link": "tap3c54ff58-02",
"netmask": "255.255.224.0",
"network_id": "764d0ecb-f8a5-47d9-b034-53b5b61666a7",
"routes": [
{
"gateway": "158.69.64.1",
"netmask": "0.0.0.0",
"network": "0.0.0.0"
}
],
"type": "ipv4"
}
],
"services": [
{
"address": "213.186.33.99",
"type": "dns"
}
]
}

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1 @@
fa:16:3e:c8:65:a0

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,8 @@
### Write /etc/sysconfig/network-scripts/ifcfg-eth0
# Automatically generated, do not edit
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=fa:16:3e:c8:65:a0
ONBOOT=yes
NM_CONTROLLED=no
TYPE=Ethernet

View File

@ -0,0 +1,7 @@
### Write /etc/network/interfaces
auto lo
iface lo inet loopback
source /etc/network/interfaces.d/*.cfg
### Write /etc/network/interfaces.d/eth0.cfg
auto eth0
iface eth0 inet dhcp

View File

@ -0,0 +1,8 @@
### Write /etc/sysconfig/network-scripts/ifcfg-eth0
# Automatically generated, do not edit
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=fa:16:3e:c8:65:a0
ONBOOT=yes
NM_CONTROLLED=no
TYPE=Ethernet

View File

@ -0,0 +1,4 @@
### Write /etc/conf.d/net.eth0
# Automatically generated, do not edit
config_eth0="dhcp"
mac_eth0="fa:16:3e:c8:65:a0"

View File

@ -0,0 +1,3 @@
### Write /root/.ssh/authorized_keys
# Injected key mordred by keypair extension
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLsTZJ8hXTmzjKxYh/7V07mIy8xl2HL+9BaUlt6A6TMsL3LSvaVQNSgmXX5g0XfPWSCKmkZb1O28q49jQI2n7n7+sHkxn0dJDxj1N2oNrzNY7pDuPrdtCijczLFdievygXNhXNkQ2WIqHXDquN/jfLLJ9L0jxtxtsUMbiL2xxZEZcaf/K5MqyPhscpqiVNE1MjE4xgPbIbv8gCKtPpYIIrktOMb4JbV7rhOp5DcSP5gXtLhOF5fbBpZ+szqrTVUcBX0oTYr3iRfOje9WPsTZIk9vBfBtF416mCNxMSRc7KhSW727AnUu85hS0xiP0MRAf69KemG1OE1pW+LtDIAEYp mordred@camelot

View File

@ -0,0 +1,10 @@
### Write /etc/systemd/network/eth0.network
# Automatically generated, do not edit
[Match]
MACAddress=fa:16:3e:c8:65:a0
Name=eth0
[Network]
DHCP=ipv4
IPv6AcceptRA=no

View File

@ -0,0 +1,5 @@
### Write /etc/sysconfig/network/ifcfg-eth0
# Automatically generated, do not edit
BOOTPROTO=dhcp
LLADDR=fa:16:3e:c8:65:a0
STARTMODE=auto

View File

@ -0,0 +1,8 @@
### Write /etc/sysconfig/network-scripts/ifcfg-eth0
# Automatically generated, do not edit
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=fa:16:3e:c8:65:a0
ONBOOT=yes
NM_CONTROLLED=no
TYPE=Ethernet

View File

@ -0,0 +1,7 @@
### Write /etc/network/interfaces
auto lo
iface lo inet loopback
source /etc/network/interfaces.d/*.cfg
### Write /etc/network/interfaces.d/eth0.cfg
auto eth0
iface eth0 inet dhcp

View File

@ -31,11 +31,12 @@ sample_data_path = os.path.join(
distros = ['Ubuntu', 'Debian', 'Fedora', 'RedHat', 'CentOS', 'Gentoo',
'openSUSE', 'networkd']
styles = ['hp', 'rax', 'rax-iad', 'liberty', 'nokey']
styles = ['hp', 'rax', 'rax-iad', 'liberty', 'nokey', 'ovh']
ips = {'hp': '127.0.1.1',
'rax': '23.253.229.154',
'rax-iad': '146.20.110.113',
'liberty': '23.253.229.154',
'ovh': '158.69.65.118',
'nokey': '127.0.1.1'}
built_scenarios = []