# Specify the IP or DNS name of the Management Server.
MSIP="{{ local_mgmt_ip }}"

# Specify the Edge admin credentials.
ADMIN_EMAIL={{ opdk_user_email }}
APIGEE_ADMINPW={{ opdk_user_pass }} # If omitted, you are prompted for it.

# Specify organization name and administrator.
ORG_NAME={{ org_name }} # lowercase only, no spaces, underscores, or periods.

# Set the organization administrator.
# Do not use sys admin as organization administrator.
#
# Create a new user for the organization administrator.
NEW_USER="{{ new_user }}"
{% if new_user == 'y' %}
# New user information if NEW_USER="y". USER_NAME=new@user.com
USER_NAME={{ opdk_user_email }}
FIRST_NAME={{ first_name }}
LAST_NAME={{ last_name }}
USER_PWD={{ opdk_user_pass }}
ORG_ADMIN={{ opdk_user_email }}

{% else %}

# Specify an existing user as the organization admin, # omit USER_NAME, FIRST_NAME, LAST_NAME, USER_PWD.
# NEW_USER="n"
# ORG_ADMIN=existing@user.com
ORG_ADMIN={{ opdk_user_email }}

{% endif %}

# Specify environment name.
ENV_NAME={{ env_name }}

# Specify virtual host information.
VHOST_PORT={{ virtual_host_port }}
VHOST_NAME={{ virtual_host_name }}

# If you have a DNS entry for the virtual host.
{% if groups['dc-2'] is defined and inventory_hostname in groups['dc-2'] %}
VHOST_ALIAS={{ groups['dc-2-rmp'][0] }}
{% else %}
VHOST_ALIAS={{ groups['dc-1-rmp'][0] }}
{% endif %}

# If you do not have a DNS entry for the virtual host,
# specify the IP and port of each router as a space-separated list: # VHOST_ALIAS="firstRouterIP:9001 secondRouterIP:9001"
# Specify the analytics group.
# Default name is axgroup001.use sys admin as organization administrator.
AXGROUP={{ ax_group }}