summaryrefslogtreecommitdiffstats
path: root/apex/deploy.py
diff options
context:
space:
mode:
Diffstat (limited to 'apex/deploy.py')
-rw-r--r--apex/deploy.py103
1 files changed, 89 insertions, 14 deletions
diff --git a/apex/deploy.py b/apex/deploy.py
index 4b1ef855..5485d150 100644
--- a/apex/deploy.py
+++ b/apex/deploy.py
@@ -25,11 +25,15 @@ from apex import DeploySettings
from apex import Inventory
from apex import NetworkEnvironment
from apex import NetworkSettings
+from apex.builders import common_builder as c_builder
+from apex.builders import overcloud_builder as oc_builder
+from apex.builders import undercloud_builder as uc_builder
from apex.common import utils
from apex.common import constants
from apex.common import parsers
from apex.common.exceptions import ApexDeployException
from apex.network import jumphost
+from apex.network import network_data
from apex.undercloud import undercloud as uc_lib
from apex.overcloud import config as oc_cfg
from apex.overcloud import deploy as oc_deploy
@@ -120,7 +124,8 @@ def create_deploy_parser():
deploy_parser.add_argument('-e', '--environment-file',
dest='env_file',
default='opnfv-environment.yaml',
- help='Provide alternate base env file')
+ help='Provide alternate base env file located '
+ 'in deploy_dir')
deploy_parser.add_argument('-v', '--virtual', action='store_true',
default=False,
dest='virtual',
@@ -172,6 +177,10 @@ def create_deploy_parser():
deploy_parser.add_argument('--quickstart', action='store_true',
default=False,
help='Use tripleo-quickstart to deploy')
+ deploy_parser.add_argument('--upstream', action='store_true',
+ default=False,
+ help='Force deployment to use upstream '
+ 'artifacts')
return deploy_parser
@@ -233,8 +242,10 @@ def main():
net_settings = NetworkSettings(args.network_settings_file)
logging.info("Network settings are:\n {}".format(pprint.pformat(
net_settings)))
+ os_version = deploy_settings['deploy_options']['os_version']
net_env_file = os.path.join(args.deploy_dir, constants.NET_ENV_FILE)
- net_env = NetworkEnvironment(net_settings, net_env_file)
+ net_env = NetworkEnvironment(net_settings, net_env_file,
+ os_version=os_version)
net_env_target = os.path.join(APEX_TEMP_DIR, constants.NET_ENV_FILE)
utils.dump_yaml(dict(net_env), net_env_target)
ha_enabled = deploy_settings['global_params']['ha_enabled']
@@ -268,7 +279,7 @@ def main():
inventory = Inventory(args.inventory_file, ha_enabled, args.virtual)
validate_cross_settings(deploy_settings, net_settings, inventory)
-
+ ds_opts = deploy_settings['deploy_options']
if args.quickstart:
deploy_settings_file = os.path.join(APEX_TEMP_DIR,
'apex_deploy_settings.yaml')
@@ -312,7 +323,6 @@ def main():
'members'][0]
bridge = "br-{}".format(network)
jumphost.attach_interface_to_ovs(bridge, iface, network)
- # Dump all settings out to temp bash files to be sourced
instackenv_json = os.path.join(APEX_TEMP_DIR, 'instackenv.json')
with open(instackenv_json, 'w') as fh:
json.dump(inventory, fh)
@@ -322,10 +332,52 @@ def main():
root_pw = constants.DEBUG_OVERCLOUD_PW
else:
root_pw = None
+
+ upstream = (os_version != constants.DEFAULT_OS_VERSION or
+ args.upstream)
+ if os_version == 'master':
+ branch = 'master'
+ else:
+ branch = "stable/{}".format(os_version)
+ if upstream:
+ logging.info("Deploying with upstream artifacts for OpenStack "
+ "{}".format(os_version))
+ args.image_dir = os.path.join(args.image_dir, os_version)
+ upstream_url = constants.UPSTREAM_RDO.replace(
+ constants.DEFAULT_OS_VERSION, os_version)
+ upstream_targets = ['overcloud-full.tar', 'undercloud.qcow2']
+ utils.fetch_upstream_and_unpack(args.image_dir, upstream_url,
+ upstream_targets)
+ sdn_image = os.path.join(args.image_dir, 'overcloud-full.qcow2')
+ if ds_opts['sdn_controller'] == 'opendaylight':
+ logging.info("Preparing upstream image with OpenDaylight")
+ oc_builder.inject_opendaylight(
+ odl_version=ds_opts['odl_version'],
+ image=sdn_image,
+ tmp_dir=APEX_TEMP_DIR
+ )
+ # copy undercloud so we don't taint upstream fetch
+ uc_image = os.path.join(args.image_dir, 'undercloud_mod.qcow2')
+ uc_fetch_img = os.path.join(args.image_dir, 'undercloud.qcow2')
+ shutil.copyfile(uc_fetch_img, uc_image)
+ # prep undercloud with required packages
+ uc_builder.add_upstream_packages(uc_image)
+ # add patches from upstream to undercloud and overcloud
+ logging.info('Adding patches to undercloud')
+ patches = deploy_settings['global_params']['patches']
+ c_builder.add_upstream_patches(patches['undercloud'], uc_image,
+ APEX_TEMP_DIR, branch)
+ logging.info('Adding patches to overcloud')
+ c_builder.add_upstream_patches(patches['overcloud'], sdn_image,
+ APEX_TEMP_DIR, branch)
+ else:
+ sdn_image = os.path.join(args.image_dir, SDN_IMAGE)
+ uc_image = 'undercloud.qcow2'
undercloud = uc_lib.Undercloud(args.image_dir,
args.deploy_dir,
root_pw=root_pw,
- external_network=uc_external)
+ external_network=uc_external,
+ image_name=os.path.basename(uc_image))
undercloud.start()
# Generate nic templates
@@ -340,15 +392,34 @@ def main():
# Prepare overcloud-full.qcow2
logging.info("Preparing Overcloud for deployment...")
- sdn_image = os.path.join(args.image_dir, SDN_IMAGE)
- oc_deploy.prep_image(deploy_settings, sdn_image, APEX_TEMP_DIR,
- root_pw=root_pw)
+ if os_version != 'ocata':
+ net_data_file = os.path.join(APEX_TEMP_DIR, 'network_data.yaml')
+ net_data = network_data.create_network_data(net_settings,
+ net_data_file)
+ else:
+ net_data = False
+ if upstream and args.env_file == 'opnfv-environment.yaml':
+ # Override the env_file if it is defaulted to opnfv
+ # opnfv env file will not work with upstream
+ args.env_file = 'upstream-environment.yaml'
opnfv_env = os.path.join(args.deploy_dir, args.env_file)
- oc_deploy.prep_env(deploy_settings, net_settings, inventory,
- opnfv_env, net_env_target, APEX_TEMP_DIR)
- oc_deploy.create_deploy_cmd(deploy_settings, net_settings,
- inventory, APEX_TEMP_DIR,
- args.virtual, args.env_file)
+ if not upstream:
+ oc_deploy.prep_env(deploy_settings, net_settings, inventory,
+ opnfv_env, net_env_target, APEX_TEMP_DIR)
+ oc_deploy.prep_image(deploy_settings, sdn_image, APEX_TEMP_DIR,
+ root_pw=root_pw)
+ else:
+ shutil.copyfile(sdn_image, os.path.join(APEX_TEMP_DIR,
+ 'overcloud-full.qcow2'))
+ shutil.copyfile(
+ opnfv_env,
+ os.path.join(APEX_TEMP_DIR, os.path.basename(opnfv_env))
+ )
+
+ oc_deploy.create_deploy_cmd(deploy_settings, net_settings, inventory,
+ APEX_TEMP_DIR, args.virtual,
+ os.path.basename(opnfv_env),
+ net_data=net_data)
deploy_playbook = os.path.join(args.lib_dir, ANSIBLE_PATH,
'deploy_overcloud.yml')
virt_env = 'virtual-environment.yaml'
@@ -365,8 +436,11 @@ def main():
deploy_vars['aarch64'] = platform.machine() == 'aarch64'
deploy_vars['dns_server_args'] = ''
deploy_vars['apex_temp_dir'] = APEX_TEMP_DIR
+ deploy_vars['apex_env_file'] = os.path.basename(opnfv_env)
deploy_vars['stackrc'] = 'source /home/stack/stackrc'
deploy_vars['overcloudrc'] = 'source /home/stack/overcloudrc'
+ deploy_vars['upstream'] = upstream
+ deploy_vars['os_version'] = os_version
for dns_server in net_settings['dns_servers']:
deploy_vars['dns_server_args'] += " --dns-nameserver {}".format(
dns_server)
@@ -393,7 +467,6 @@ def main():
deploy_vars['external_network_cmds'] = \
oc_deploy.external_network_cmds(net_settings)
# TODO(trozet): just parse all ds_opts as deploy vars one time
- ds_opts = deploy_settings['deploy_options']
deploy_vars['gluon'] = ds_opts['gluon']
deploy_vars['sdn'] = ds_opts['sdn_controller']
for dep_option in 'yardstick', 'dovetail', 'vsperf':
@@ -459,5 +532,7 @@ def main():
logging.info("Undercloud IP: {}, please connect by doing "
"'opnfv-util undercloud'".format(undercloud.ip))
# TODO(trozet): add logging here showing controller VIP and horizon url
+
+
if __name__ == '__main__':
main()