# config.mk - generated from ansible/roles/genconfig/templates/config.mk.j2
# ** DO NOT EDIT THIS FILE MANUALLY! **
# Edit the Pod Config (or Scenario) and rerun `make config` to regenerate it

# Needed for MaaS, not settable
DOCKER_REGISTRY         = docker-registry:5000

# Scenario specific config
{% if vagrant_vms is defined %}
VAGRANT_VMS             = {{ vagrant_vms | join(' ') }}
{% endif %}
{% if headnode is defined %}
HEADNODE                = {{ headnode }}
{% endif %}
{% if buildnode is defined %}
BUILDNODE               = {{ buildnode }}
{% endif %}
{% if deploy_docker_registry is defined %}
DEPLOY_DOCKER_REGISTRY  = {{ deploy_docker_registry }}
{% endif %}
{% if deploy_docker_tag is defined %}
DEPLOY_DOCKER_TAG       = {{ deploy_docker_tag }}
{% endif %}
{% if deploy_docker_tag is defined %}
DEPLOY_DOCKER_TAG       = {{ deploy_docker_tag }}
{% endif %}
{% if config_cord_profile_dir is defined %}
CONFIG_CORD_PROFILE_DIR = {{ config_cord_profile_dir }}
{% endif %}
{% if build_cord_dir is defined %}
BUILD_CORD_DIR = {{ build_cord_dir }}
{% endif %}
{% if skipTags is defined %}
ANSIBLE_ARGS += --skip-tags "{{ skipTags | join(",") }}"
{% endif %}

# Targets and prerequisties
{% if build_targets is defined %}
BUILD_TARGETS           = $(M)/{{ build_targets | join(" $(M)/") }}
{% endif %}
{% if vagrant_up_prereqs is defined %}
VAGRANT_UP_PREREQS      = $(M)/{{ vagrant_up_prereqs | join(" $(M)/") }}
{% endif %}
{% if cord_config_prereqs is defined %}
CORD_CONFIG_PREREQS     = $(M)/{{ cord_config_prereqs | join(" $(M)/") }}
{% endif %}
{% if copy_config_prereqs is defined %}
COPY_CONFIG_PREREQS     = $(M)/{{ copy_config_prereqs | join(" $(M)/") }}
{% endif %}
{% if prep_buildnode_prereqs is defined %}
PREP_BUILDNODE_PREREQS  = $(M)/{{ prep_buildnode_prereqs | join(" $(M)/") }}
{% endif %}
{% if prep_headnode_prereqs is defined %}
PREP_HEADNODE_PREREQS   = $(M)/{{ prep_headnode_prereqs | join(" $(M)/") }}
{% endif %}
{% if docker_images_prereqs is defined %}
DOCKER_IMAGES_PREREQS   = $(M)/{{ docker_images_prereqs | join(" $(M)/") }}
{% endif %}
{% if start_xos_prereqs is defined %}
START_XOS_PREREQS       = $(M)/{{ start_xos_prereqs | join(" $(M)/") }}
{% endif %}
{% if deploy_onos_prereqs is defined %}
DEPLOY_ONOS_PREREQS     = $(M)/{{ deploy_onos_prereqs | join(" $(M)/") }}
{% endif %}
{% if deploy_openstack_prereqs is defined %}
DEPLOY_OPENSTACK_PREREQS = $(M)/{{ deploy_openstack_prereqs | join(" $(M)/") }}
{% endif %}
{% if setup_automation_prereqs is defined %}
SETUP_AUTOMATION_PREREQS = $(M)/{{ setup_automation_prereqs | join(" $(M)/") }}
{% endif %}

