OPDK Setup Default Settings
===========================

This role provides a set of default attributes that are persisted to the local Ansible cache and are used to install,
configure and maintain Apigee OPDK. 

Requirements
------------

No requirements

Role Variables
--------------

These are the variables used throughout the Apigee management framework. Defaults and initial value settings
are centrally managed here to reduce the maintenance burden. It is expected that specific variables would be
overriden as needed either by the playbook or at `~/.apigee/custom-properties.yml`.

## Core Variables Required by All Apigee Installation, Configuration & Maintenance Roles

| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| opdk_version |  '4.18.01' | Default Apigee Edge Private Cloud Version |
| opdk_installer_path | "/tmp/edge" | Apigee staging installation folder |
| jdk_version | '1.8' | Target Java JDK version |
| java_home | /usr/lib/jvm/java-openjdk | System file path to use in JAVA_HOME |
| opdk_group_name |  '' | OPDK OS group name|
| opdk_user_email | '' | OPDK User Email |
| opdk_user_home | /home/{{ opdk_user_name }} | Home folder of the Apigee user |
| opdk_smtp_mail_from | {{ opdk_user_name }} | Home folder of the Apigee user |
| apigee_home | /opt/apigee | Default apigee installation home |
| opdk_license_target_file_path | "{{ opdk_installer_path }}/license.conf" | Apigee license file path |
| opdk_license_source_file_name | '~/.apigee/license.txt' | Apigee license file provided by customer |
| opdk_installation_config_file | "{{ opdk_installer_path }}/silent-install.conf" | Apigee silent installation configuration file |
| apigee_repo_uri | 'software.apigee.com' | Apigee bootstrap download uri |
| apigee_repo_url | 'https://{{ apigee_repo_uri }}' | Apigee bootstrap download url |
| provided_response_file | '' | Silent installation configuration file that is provided manually |
| apigee_validate_config_file | '{{ opdk_installer_path }}/apigee-validate.conf' | Apigee validate config file path |
| opdk_mp_pod | gateway | Apigee edge default pod for silent-config file |
| conf_logs_dir | planet_resources | Local folder in which to store logs and config files |
| fetched_logs_dir | ~/.apigee/planet_resources/ | Default download location for log and config files |
| fetched_configs_dir | ~/.apigee/planet_resources/ | Default download location for log and config files |
| opdk_enable_ax | 'y' | Default to enable analytics |
| opdk_use_cass_cluster | 'y' | Default setting to use a cassandra ring |
| opdk_use_zk_cluster | 'y' | Default to enable use of the zookeeper cluster |
| opdk_ldap_type | '1' | Default silent-install configuration file for OpenLDAP |
| use_opdk_ldap_remote_host | 'n' | Default silent-install configuration file for OpenLDAP |
| opdk_bind_on_all_interfaces | 'y' | Default to bind OPDK on all network interfaces |
| bootstrap_filename | bootstrap.sh | Name of Apigee bootstrap script 
| enable_system_check | 'n' | Enable system check during installation of Apigee component | 

## Analytic Settings for Edge Configuration

| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| ax_group | axgroup001 | Default analytics group |

## SMTP Settings for Edge Configuration
| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| opdk_smtp_skip | 'y' | SMTP settings for Edge Configuration | 
| opdk_smtp_host | 'smtp.example.com' | SMTP settings for Edge Configuration |
| opdk_smtp_port | '25' | SMTP settings for Edge Configuration |
| opdk_smtp_user | '' | SMTP settings for Edge Configuration |
| opdk_smtp_password | '' | SMTP settings for Edge Configuration |
| opdk_smtp_ssl | 'n' | SMTP settings for Edge Configuration |

## Rollback of Apigee Component defaults 
| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| remove_apigee | false | Default settings for removing data on rollback |

## Apigee Archive & Mirror Configurations
| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| copy_archive | yes | Choose whether to copy the Apigee Mirror archive from your control machine or use an existing archive on the server |
| archive_folder | {{ opdk_installer_path }}/tmp | Storage folder for the Apigee archive |
| archive_name | apigee-{{ opdk_version }}.tar.gz | Apigee archive that is created when a mirror is used. |
| archive_path | '{{ apigee_installation_home }}/data/apigee-mirror/{{ archive_name }}' | Path to the Apigee archive that is created by apigee-mirror package |
| apigee_data_backup_archive_name | apigee_data_backup.tar.gz | Default name of the backup archive of the apigee data folder |
| apigee_archive_storage_folder | '{{ opdk_installer_path }}' | Default folder in which the apigee data backup archive will be stored. |
| apigee_mirror_version | {{ opdk_version }} | Default version of the Apigee mirror to use |

## Apigee Credential Variable Names
| Variable Name | Default or Initial Value | Description |
| --- | --- | --- |
| opdk_user_name |  'apigee' | OPDK OS user name |
| opdk_user_pass | '' | OPDK User Password |
| admin_user | '{{ opdk_user_name }}' | Apigee admin user name |
| admin_pass | '{{ opdk_user_name }}' | Apigee admin user password |
| apigee_repo_user | '{{ opdk_user_name }}' | Apigee bootstrap download user name |
| opdk_ldap_pass | '' | 
| grafana_username | admin | Monitoring dashboard UI user name |
| grafana_password | {{ opdk_user_pass }} | Monitoring dashboard UI password |
| opdk_cass_username | '' | Cassandra username |
| opdk_cass_password | '' | Cassandra password |
| opdk_cass_auth | 'n' | Enable Cassandra authentication |

## Apigee Service Command Line Tools Variable Name    
| Variable Name | Default Value | Description |
|---------------|---------------|-------------|
| apigee_service | '{{ apigee_home }}/apigee-service/bin/apigee-service' | Apigee service command as of 4.16.xx |
| apigee_setup | '{{ apigee_home }}/apigee-setup/bin/setup.sh' | Apigee setup command as of 4.16.xx |
| apigee_update | '{{ apigee_home }}/apigee-setup/bin/update.sh' | Apigee update command as of 4.16.xx |
| apigee_all | '{{ apigee_home }}/apigee-service/bin/apigee-all' | Apigee all command as of 4.16.xx |
| nodetool | '{{ apigee_home }}/apigee-cassandra/bin/nodetool' | Cassandra nodetool command |
    
# Apigee Edge Ports

## Cassandra Ports
| Variable Name | Port Number |
| --- | --- |
| cassandra_jmx_port | 7199 |
| cassandra_thrift_client_port | 9160 |
| cassandra_cql_native_port | 9042 |
| cassandra_non_ssl_gossip_port | 7000 |
| cassandra_ssl_gossip_port | 7001 |

## Zookeeper Ports
| Variable Name | Port Number |
| --- | --- |
| zk_data_port | 2181 |
| zk_leader_port | 2888 |
| zk_voter_port | 3888 |

## Message Processor Ports
| Variable Name | Port Number |
| --- | --- |
| mp_int_mgmt_port | 4528 |
| mp_ext_mgmt_port | 8082 |
| mp_jmx_port | 1101 |
| mp_router_port | 8998 |

## Management Server Ports
| Variable Name | Port Number |
| --- | --- |
| ms_jmx_port | 1099 |
| ms_ext_mgmt_port | 8080 |

## Router Ports
| Variable Name | Port Number |
| --- | --- |
| router_jmx_port | 1100 |
| router_ext_mgmt_port | 8081 |
| router_int_mgmt_port | 4527 |
| router_load_balancer_port | 15999 |
    
## Qpid Ports 
| Variable Name | Port Number |
| --- | --- |
| qpid_jmx_port | 1102 |
| qpid_int_mgmt_port | 4529 |
| qpid_messaging_port | 5672 |
| qpid_ext_mgmt_port | 8083 |

## Postgres & PostgreSQL Ports
| Variable Name | Port Number |
| --- | --- |
| pg_jmx_port | 1103 |
| pg_int_mgmt_port | 4530 |
| pg_db_port | 5432 |
| pg_ext_mgmt_port | 8084 |

## Management UI Ports 
| Variable Name | Port Number |
| --- | --- |
| ui_http_port | 9000 |

## Default Message Processor Port 
| Variable Name | Port Number |
| --- | --- |
| edge_proxy_port | 9001 |

## OpenLDAP Port
| Variable Name | Port Number |
| --- | --- |
| ldap_data_port | 10389 |

## Monitoring Dashboard - Influxdb Port
| Variable Name | Port Number |
| --- | --- |
| influxdb_system_port | 25826 |
| influxdb_port | 8086 |
| influxdb_host | 127.0.0.1 

## Monitoring Dashboard - Grafana Port
| Variable Name | Port Number | Description |
| --- | --- | --- |
| grafana_port | 3000 | Grafana UI port |
    
## Configuring Edge Org and Virtual Host
| Variable Name | Port Number | Description |
| --- | --- | --- |
| org_name | opdk | Default org name |
| env_name | test | Default environment name |
| new_user | 'y' | Default for creating a new user in org |
| first_name | Opdk | Default for first_name in creating new user |
| last_name | User | Default for last_name in creating new user |
| virtual_host_port | 9001 | Virtual host port for the org |
| virtual_host_name | default | Virtual Host name for the org
| virtual_host_alias | '127.0.0.1' | Virtual host alias |
| onboarding_config | 'apigee-provision.conf' | Default onboarding provisioning file name |
| onboarding_config_file_path | "{{ opdk_installer_path }}/{{ onboarding_config }}" | Default onboarding provisioning file path |
| apigee_provision_dir | '{{ apigee_home }}/apigee-provision' | Default onboarding provisioning directory |

## Apigee Baas Core Attributes
| Variable Name | Port Number | Description |
| --- | --- | --- |
| opdk_baas_silent_install_file_path | /tmp/baas-silent-install.conf | Default location and name of the Baas Silent Install file |
| opdk_baas_provided_silent_install_file | '' | Baas silent install file provided by customer |
| baas_cluster_name | 'apigee_baas' | Default cluster name is "apigee_baas" |

## Apigee Baas SMTP Configuration
| Variable Name | Port Number | Description |
| --- | --- | --- |
| baas_smtp_host | 'smtp.gmail.com' | SMTP host server for BaaS |
| baas_smtp_port | '465' | SMTP port server for BaaS |
| baas_smtp_ssl | 'n' | SMTP SSL configuration for BaaS |

## Apigee Baas Ports
| Variable Name | Port Number | Description |
| --- | --- | --- |
| baas_load_balancer_host | '' | URL of the load balancer for the API BaaS Stack nodes or IP/DNS of a single Stack node with no load balancer |
| baas_load_balancer_port | '8080' | Port of the load balancer for the API BaaS Stack nodes or port of a single Stack node with no load balancer |
| baas_portal_port | '9000' | Default portal UI value is 9000 |
| baas_elasticsearch_port_low | '9200' | Default Elastic search low port |
| baas_elasticsearch_port_high | '9300' | Default Elastic search high port |
    
## Define the API BaaS Credentials
| Variable Name | Port Number |
| --- | --- |
| baas_admin_name | '' |
| baas_admin_email | '' |
| baas_admin_pass | '' |
| baas_superuser_name | '' |
| baas_superuser_email | '' |
| baas_superuser_pass | '' |
| baas_smtp_user | '' |
| baas_smtp_user_pass | '' |
    
Default system config files to download

    system_config_files:
      - { dir: '/etc/', name: 'hosts' }
      - { dir: '/etc/', name: 'hosts.allow' }
      - { dir: '/etc/', name: 'hosts.deny' }
      - { dir: '/etc/', name: 'environment' }
      - { dir: '/etc/', name: 'profile' }
      - { dir: '/etc/', name: 'bashrc' }
      - { dir: '/etc/', name: 'resolv.conf' }
      - { dir: '/var/log/', name: 'messages' }
      - { dir: '/etc/', name: 'sysctl.conf' }
      - { dir: '/etc/', name: 'sudoers' }
      - { dir: '/etc/security/', name: 'limits.conf' }
      - { dir: '/etc/security/limits.d/', name: '*conf' }
    
    apigee_config_files:
      - { dir: '{{ opdk_installer_path }}/', name: '*conf' }
      - { dir: '{{ apigee_home }}/customer/', name: '*' }
      - { dir: '{{ apigee_home }}/apigee-cassandra/', name: '*yaml' }
      - { dir: '{{ apigee_home }}/etc/', name: 'default*.sh' }
    
    apigee_log_files:
      - { dir: '{{ opdk_installer_path }}/', name: '*.log' }
      - { dir: '{{ opdk_installer_path }}/var/log/', name: '*.log' }
      - { dir: '{{ opdk_installer_path }}/', name: '*.txt' }
      - { dir: '{{ apigee_home }}/var/log/', name: '*.log' }
      - { dir: '{{ apigee_home }}/', name: '*.out' }

Dependencies
------------

No dependencies

Example Playbook
----------------

    - hosts: servers
      roles:
         - { role: apigee-opdk-setup-default-settings }

License
-------

Apache License Version 2.0, January 2004

Author Information
------------------

Carlos Frias
<!-- BEGIN Google Required Disclaimer -->

# Not Google Product Clause

This is not an officially supported Google product.
<!-- END Google Required Disclaimer -->