diff options
Diffstat (limited to 'deploy')
-rwxr-xr-x | deploy/deploy.py | 15 | ||||
-rw-r--r-- | deploy/reap.py | 36 | ||||
-rw-r--r-- | deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml | 4 | ||||
-rw-r--r-- | deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml | 4 | ||||
-rw-r--r-- | deploy/transplant_fuel_settings.py | 37 |
5 files changed, 92 insertions, 4 deletions
diff --git a/deploy/deploy.py b/deploy/deploy.py index 9e188ebe6..f491929e0 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -109,6 +109,20 @@ class AutoDeploy(object): self.iso_file = new_iso self.install_iso() + def delete_old_fuel_env(self): + log('Delete old Fuel Master environments if present') + try: + old_dep = CloudDeploy(self.dea, self.dha, self.fuel_conf['ip'], + self.fuel_username, self.fuel_password, + self.dea_file, self.fuel_plugins_conf_dir, + WORK_DIR, self.no_health_check, + self.deploy_timeout, + self.no_deploy_environment, self.deploy_log) + with old_dep.ssh: + old_dep.check_previous_installation() + except Exception as e: + log('Could not delete old env: %s' % str(e)) + def install_iso(self): fuel = InstallFuelMaster(self.dea_file, self.dha_file, self.fuel_conf['ip'], self.fuel_username, @@ -226,6 +240,7 @@ class AutoDeploy(object): def deploy(self): self.collect_fuel_info() if not self.no_fuel: + self.delete_old_fuel_env() self.setup_execution_environment() self.create_tmp_dir() self.install_fuel_master() diff --git a/deploy/reap.py b/deploy/reap.py index 7d996314b..eb02fe25d 100644 --- a/deploy/reap.py +++ b/deploy/reap.py @@ -16,6 +16,8 @@ import yaml import glob import shutil import tempfile +import re +import netaddr from common import ( N, @@ -253,6 +255,40 @@ class Reap(object): if key not in ['ipaddress', 'netmask', 'dhcp_pool_start', 'dhcp_pool_end', 'ssh_network']: del fuel['ADMIN_NETWORK'][key] + + ## FIXME(armband): Factor in support for adding public/other interfaces. + ## TODO: Following block expects interface name(s) to be lowercase only + interfaces_list = exec_cmd('ip -o -4 a | grep -e "e[nt][hopsx].*"') + for interface in re.split('\n', interfaces_list): + # Sample output line from above cmd: + # 3: eth1 inet 10.0.2.10/24 scope global eth1 valid_lft forever ... + ifcfg = re.split(r'\s+', interface) + ifcfg_name = ifcfg[1] + ifcfg_ipaddr = ifcfg[3] + + # Filter out admin interface (device name is not known, match IP) + current_network = netaddr.IPNetwork(ifcfg_ipaddr) + if str(current_network.ip) == fuel['ADMIN_NETWORK']['ipaddress']: + continue + + # Read ifcfg-* network interface config file, write IFCFG_<IFNAME> + ifcfg_sec = 'IFCFG_%s' % ifcfg_name.upper() + fuel[ifcfg_sec] = {} + ifcfg_data = {} + ifcfg_f = ('/etc/sysconfig/network-scripts/ifcfg-%s' % ifcfg_name) + with open(ifcfg_f) as f: + for line in f: + if line.startswith('#'): + continue + (key, val) = line.split('=') + ifcfg_data[key.lower()] = val.rstrip() + + # Keep only needed info (e.g. filter-out type=Ethernet). + fuel[ifcfg_sec]['ipaddress'] = ifcfg_data['ipaddr'] + fuel[ifcfg_sec]['device'] = ifcfg_data['device'] + fuel[ifcfg_sec]['netmask'] = str(current_network.netmask) + fuel[ifcfg_sec]['gateway'] = ifcfg_data['gateway'] + self.write_yaml(self.dea_file, {'fuel': fuel}) def reap_network_settings(self): diff --git a/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml index 91eb7b342..6ececba6c 100644 --- a/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml @@ -38,8 +38,8 @@ stack-extensions: module-config-override: metadata: versions: - - install_dpdk: - value: true + - install_dpdk: + value: true metadata: plugin_version: 0.9.0 diff --git a/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml index e3c07db35..f7b69a50f 100644 --- a/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml @@ -38,8 +38,8 @@ stack-extensions: module-config-override: metadata: versions: - - install_dpdk: - value: true + - install_dpdk: + value: true metadata: plugin_version: 0.9.0 diff --git a/deploy/transplant_fuel_settings.py b/deploy/transplant_fuel_settings.py index 318c633aa..993b0dcce 100644 --- a/deploy/transplant_fuel_settings.py +++ b/deploy/transplant_fuel_settings.py @@ -11,10 +11,14 @@ import sys import io import yaml +import re +import os from dea import DeploymentEnvironmentAdapter from common import ( check_file_exists, + exec_cmd, + log, ) ASTUTE_YAML = '/etc/fuel/astute.yaml' @@ -36,15 +40,45 @@ def parse_arguments(): check_file_exists(dea_file) return dea_file +def write_ifcfg_file(key, fuel_conf): + config = ('BOOTPROTO=none\n' + 'ONBOOT=yes\n' + 'TYPE=Ethernet\n' + 'NM_CONTROLLED=yes\n') + for skey in ('ipaddress', 'device', 'netmask', 'gateway'): + if not fuel_conf[key].get(skey): + log('Warning: missing key %s for %s' % (skey, key)) + config += '%s=\n' % skey.upper() + elif skey == 'ipaddress': + config += 'IPADDR=%s\n' % fuel_conf[key][skey] + else: + config += '%s=%s\n' % (skey.upper(), fuel_conf[key][skey]) + + fname = os.path.join('/etc/sysconfig/network-scripts/', + key.lower().replace('_','-')) + with open(fname, 'wc') as f: + f.write(config) def transplant(dea, astute): fuel_conf = dea.get_fuel_config() + require_network_restart = False for key in fuel_conf.iterkeys(): if key == 'ADMIN_NETWORK': for skey in fuel_conf[key].iterkeys(): astute[key][skey] = fuel_conf[key][skey] + elif re.match('^IFCFG', key): + log('Adding interface configuration for: %s' % key.lower()) + require_network_restart = True + write_ifcfg_file(key, fuel_conf) + if astute.has_key(key): + astute.pop(key, None) else: astute[key] = fuel_conf[key] + if require_network_restart: + admin_ifcfg = '/etc/sysconfig/network-scripts/ifcfg-eth0' + exec_cmd('echo "DEFROUTE=no" >> %s' % admin_ifcfg) + log('At least one interface was reconfigured, restart network manager') + exec_cmd('systemctl restart network') return astute @@ -62,11 +96,14 @@ def main(): check_file_exists(ASTUTE_YAML) check_file_exists(FUEL_BOOTSTRAP_CLI_YAML) dea = DeploymentEnvironmentAdapter(dea_file) + log('Reading astute file %s' % ASTUTE_YAML) with io.open(ASTUTE_YAML) as stream: astute = yaml.load(stream) + log('Initiating transplant') transplant(dea, astute) with io.open(ASTUTE_YAML, 'w') as stream: yaml.dump(astute, stream, default_flow_style=False) + log('Transplant done') # Update bootstrap config yaml with info from DEA/astute.yaml with io.open(FUEL_BOOTSTRAP_CLI_YAML) as stream: fuel_bootstrap_cli = yaml.load(stream) |