X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=apex%2Fundercloud%2Fundercloud.py;h=8b6b9d4c91975688ab2df99cf0edbc053a2f193d;hb=1486696939e9b8d42f6f96bc5adb85849f675413;hp=e799d3716dac6ad6773ca89007b47273738be72d;hpb=f6dbb3929d904b4d5a9ee01f8270051e29ac1ec3;p=apex.git diff --git a/apex/undercloud/undercloud.py b/apex/undercloud/undercloud.py index e799d371..8b6b9d4c 100644 --- a/apex/undercloud/undercloud.py +++ b/apex/undercloud/undercloud.py @@ -75,17 +75,27 @@ class Undercloud: template_dir=self.template_path) self.setup_volumes() self.inject_auth() - self._update_delorean_repo() - def _set_ip(self): - ip_out = self.vm.interfaceAddresses( + @staticmethod + def _get_ip(vm): + ip_out = vm.interfaceAddresses( libvirt.VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE, 0) if ip_out: for (name, val) in ip_out.items(): for ipaddr in val['addrs']: if ipaddr['type'] == libvirt.VIR_IP_ADDR_TYPE_IPV4: - self.ip = ipaddr['addr'] - return True + return ipaddr['addr'] + + def _set_ip(self): + ip = self._get_ip(self.vm) + if ip: + self.ip = ip + return True + + @staticmethod + def get_ip(): + vm = Undercloud._get_vm() + return Undercloud._get_ip(vm) def start(self): """ @@ -114,6 +124,16 @@ class Undercloud: "Unable to find IP for undercloud. Check if VM booted " "correctly") + def detect_nat(self, net_settings): + if self.external_net: + net = net_settings['networks'][constants.EXTERNAL_NETWORK][0] + else: + net = net_settings['networks'][constants.ADMIN_NETWORK] + if net['gateway'] == net['installer_vm']['ip']: + return True + else: + return False + def configure(self, net_settings, deploy_settings, playbook, apex_temp_dir, virtual_oc=False): """ @@ -131,7 +151,8 @@ class Undercloud: ansible_vars = Undercloud.generate_config(net_settings, deploy_settings) ansible_vars['apex_temp_dir'] = apex_temp_dir - ansible_vars['virtual_overcloud'] = virtual_oc + + ansible_vars['nat'] = self.detect_nat(net_settings) try: utils.run_ansible(ansible_vars, playbook, host=self.ip, user='stack') @@ -178,7 +199,7 @@ class Undercloud: '/root/.ssh/id_rsa.pub:/root/.ssh/authorized_keys'}) run_cmds = [ 'chmod 600 /root/.ssh/authorized_keys', - 'restorecon /root/.ssh/authorized_keys', + 'restorecon -R -v /root/.ssh', 'cp /root/.ssh/authorized_keys /home/stack/.ssh/', 'chown stack:stack /home/stack/.ssh/authorized_keys', 'chmod 600 /home/stack/.ssh/authorized_keys' @@ -213,11 +234,18 @@ class Undercloud: "undercloud_hostname undercloud.{}".format(ns['dns-domain']), "local_ip {}/{}".format(str(ns_admin['installer_vm']['ip']), str(ns_admin['cidr']).split('/')[1]), - "network_gateway {}".format(str(ns_admin['installer_vm']['ip'])), - "network_cidr {}".format(str(ns_admin['cidr'])), + "generate_service_certificate false", + "undercloud_ntp_servers {}".format(str(ns['ntp'][0])), + "container_images_file " + "/home/stack/containers-prepare-parameter.yaml" + ] + + config['undercloud_network_config'] = [ + "gateway {}".format(str(ns_admin['installer_vm']['ip'])), + "cidr {}".format(str(ns_admin['cidr'])), "dhcp_start {}".format(str(ns_admin['dhcp_range'][0])), "dhcp_end {}".format(str(ns_admin['dhcp_range'][1])), - "inspection_iprange {}".format(','.join(intro_range)) + "inspection_iprange {}".format(','.join(intro_range)), ] config['ironic_config'] = [ @@ -241,8 +269,11 @@ class Undercloud: "prefix": str(ns_external['cidr']).split('/')[1], "enabled": ns_external['enabled'] } - # TODO(trozet): clean this logic up and merge with above - if 'external' in ns.enabled_network_list: + # We will NAT external network if it is enabled. If external network + # is IPv6, we will NAT admin network in case we need IPv4 connectivity + # for things like DNS server. + if 'external' in ns.enabled_network_list and \ + ns_external['cidr'].version == 4: nat_cidr = ns_external['cidr'] else: nat_cidr = ns['networks']['admin']['cidr'] @@ -265,7 +296,7 @@ class Undercloud: cmd = ("curl -L -f -o " "/etc/yum.repos.d/deloran.repo {}".format(delorean_repo)) try: - virt_utils.virt_customize({constants.VIRT_RUN_CMD: cmd}, + virt_utils.virt_customize([{constants.VIRT_RUN_CMD: cmd}], self.volume) except Exception: logging.warning("Failed to download and update delorean repo "