diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/artifactory-ami.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/artifactory-ami.yml
new file mode 100644
index 0000000..1e115c9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/artifactory-ami.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ gather_facts: true
+ become: true
+ roles:
+ - name: artifactory-ami
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml
new file mode 100755
index 0000000..c86e6ed
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml
@@ -0,0 +1,51 @@
+---
+# defaults file for artifactory
+# indicates were this collection was downlaoded from (galaxy, automation_hub, standalone)
+ansible_marketplace: standalone
+
+# whether we are creating a AMI for Marketplace or just for configuring EC2 instance
+ami_creation: false
+
+# The version of Artifactory to install
+artifactory_version: 7.15.3
+
+# licenses file - specify a licenses file or specify up to 5 licenses
+artifactory_license1:
+artifactory_license2:
+artifactory_license3:
+artifactory_license4:
+artifactory_license5:
+artifactory_license6:
+
+# whether to enable HA
+artifactory_ha_enabled: true
+
+# value for whether a host is primary. this should be set in host vars
+artifactory_is_primary: true
+
+# The location where Artifactory should install.
+artifactory_download_directory: /opt/jfrog
+
+# The location where Artifactory should store data.
+artifactory_file_store_dir: /data
+
+extra_java_opts: -server -Xms2g -Xmx14g -Xss256k -XX:+UseG1GC
+
+artifactory_tar: https://releases.jfrog.io/artifactory/artifactory-pro/org/artifactory/pro/jfrog-artifactory-pro/{{ artifactory_version }}/jfrog-artifactory-pro-{{ artifactory_version }}-linux.tar.gz
+
+artifactory_home: "{{ artifactory_download_directory }}/artifactory-pro-{{ artifactory_version }}"
+db_download_url: "https://jdbc.postgresql.org/download/postgresql-42.2.12.jar"
+
+artifactory_user: artifactory
+artifactory_group: artifactory
+
+# Set the parameters required for the service.
+service_list:
+ - name: artifactory
+ description: Start script for Artifactory
+ start_command: "{{ artifactory_home }}/bin/artifactory.sh start"
+ stop_command: "{{ artifactory_home }}/bin/artifactory.sh stop"
+ type: forking
+ status_pattern: artifactory
+ user_name: "{{ artifactory_user }}"
+ group_name: "{{ artifactory_group }}"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml.bak b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml.bak
new file mode 100644
index 0000000..6d2c6f9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/defaults/main.yml.bak
@@ -0,0 +1,60 @@
+---
+# defaults file for artifactory
+# indicates were this collection was downlaoded from (galaxy, automation_hub, standalone)
+ansible_marketplace: standalone
+
+# whether we are creating a AMI for Marketplace or just for configuring EC2 instance
+ami_creation: false
+
+# The version of Artifactory to install
+artifactory_version: 7.15.3
+
+# licenses file - specify a licenses file or specify up to 5 licenses
+artifactory_license1:
+artifactory_license2:
+artifactory_license3:
+artifactory_license4:
+artifactory_license5:
+artifactory_license6:
+
+# whether to enable HA
+artifactory_ha_enabled: true
+
+# value for whether a host is primary. this should be set in host vars
+artifactory_is_primary: true
+
+# The location where Artifactory should install.
+artifactory_download_directory: /opt/jfrog
+
+# The location where Artifactory should store data.
+artifactory_file_store_dir: /data
+
+extra_java_opts: -server -Xms2g -Xmx14g -Xss256k -XX:+UseG1GC
+
+
+
+# Pick the Artifactory flavour to install, can be also cpp-ce, jcr, pro.
+# for Artifactory, use following values
+artifactory_flavour: pro
+artifactory_tar: https://releases.jfrog.io/artifactory/artifactory-pro/org/artifactory/{{ artifactory_flavour }}/jfrog-artifactory-{{ artifactory_flavour }}/{{ artifactory_version }}/jfrog-artifactory-{{ artifactory_flavour }}-{{ artifactory_version }}-linux.tar.gz
+
+# for JCR, use following values
+# artifactory_flavour: jcr
+# artifactory_tar: https://dl.bintray.com/jfrog/artifactory/org/artifactory/{{ artifactory_flavour }}/jfrog-artifactory-{{ artifactory_flavour }}/{{ artifactory_version }}/jfrog-artifactory-{{ artifactory_flavour }}-{{ artifactory_version }}-linux.tar.gz
+
+artifactory_home: "{{ artifactory_download_directory }}/artifactory-{{ artifactory_flavour }}-{{ artifactory_version }}"
+db_download_url: "https://jdbc.postgresql.org/download/postgresql-42.2.12.jar"
+
+artifactory_user: artifactory
+artifactory_group: artifactory
+
+# Set the parameters required for the service.
+service_list:
+ - name: artifactory
+ description: Start script for Artifactory
+ start_command: "{{ artifactory_home }}/bin/artifactory.sh start"
+ stop_command: "{{ artifactory_home }}/bin/artifactory.sh stop"
+ type: forking
+ status_pattern: artifactory
+ user_name: "{{ artifactory_user }}"
+ group_name: "{{ artifactory_group }}"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/handlers/main.yml
new file mode 100644
index 0000000..6f8fcda
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/handlers/main.yml
@@ -0,0 +1,10 @@
+---
+# handlers file for artifactory
+- name: systemctl daemon-reload
+ systemd:
+ daemon_reload: yes
+
+- name: restart artifactory
+ service:
+ name: artifactory
+ state: restarted
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/exception.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/exception.yml
new file mode 100644
index 0000000..7de46df
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/exception.yml
@@ -0,0 +1,6 @@
+---
+exceptions:
+ - variation: Alpine
+ reason: Artifactory start/stop scripts don't properly work.
+ - variation: amazonlinux:1
+ reason: "Shutting down artifactory: /usr/bin/java\nfinding\nUsing the default catalina management port (8015) to test shutdown\nArtifactory Tomcat already stopped"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/main.yml
new file mode 100644
index 0000000..0dc573a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/main.yml
@@ -0,0 +1,35 @@
+---
+galaxy_info:
+ author: Robert de Bock
+ role_name: artifactory
+ description: Install and configure artifactory on your system.
+ license: Apache-2.0
+ company: none
+ min_ansible_version: 2.8
+
+ platforms:
+ - name: Debian
+ versions:
+ - all
+ - name: EL
+ versions:
+ - 7
+ - 8
+ - name: Fedora
+ versions:
+ - all
+ - name: OpenSUSE
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - bionic
+
+ galaxy_tags:
+ - artifactory
+ - centos
+ - redhat
+ - server
+ - system
+
+dependencies: []
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/preferences.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/preferences.yml
new file mode 100644
index 0000000..e7fdebf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/preferences.yml
@@ -0,0 +1,2 @@
+---
+tox_parallel: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/version.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/version.yml
new file mode 100644
index 0000000..024188d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/meta/version.yml
@@ -0,0 +1,6 @@
+---
+project_name: JFrog
+reference: "https://github.com/robertdebock/ansible-role-artifactory/blob/master/defaults/main.yml"
+versions:
+ - name: Artifactory
+ url: "https://releases.jfrog.io/artifactory/"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/tasks/main.yml
new file mode 100644
index 0000000..1ecd05d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/tasks/main.yml
@@ -0,0 +1,82 @@
+---
+# tasks file for artifactory
+- name: install nginx
+ include_role:
+ name: artifactory-nginx-ami
+
+- name: create group for artifactory
+ group:
+ name: "{{ artifactory_group }}"
+ state: present
+ become: yes
+
+- name: create user for artifactory
+ user:
+ name: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ system: yes
+ become: yes
+
+- name: ensure artifactory_download_directory exists
+ file:
+ path: "{{ artifactory_download_directory }}"
+ state: directory
+ become: yes
+
+- name: download artifactory
+ unarchive:
+ src: "{{ artifactory_tar }}"
+ dest: "{{ artifactory_download_directory }}"
+ remote_src: yes
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ creates: "{{ artifactory_home }}"
+ become: yes
+ register: downloadartifactory
+ until: downloadartifactory is succeeded
+ retries: 3
+
+- name: ensure artifactory_file_store_dir exists
+ file:
+ path: "{{ artifactory_file_store_dir }}"
+ state: directory
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ become: yes
+
+- name: ensure data subdirectories exist
+ file:
+ path: "{{ artifactory_home }}/var/{{ item }}"
+ state: directory
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ loop:
+ - "bootstrap/artifactory/tomcat/lib"
+ - "etc"
+ become: yes
+
+- name: download database driver
+ get_url:
+ url: "{{ db_download_url }}"
+ dest: "{{ artifactory_home }}/var/bootstrap/artifactory/tomcat/lib"
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ become: yes
+
+- name: clean up after creating ami
+ block:
+ - name: Remove SSH keys
+ file:
+ path: "{{ ssh_keys.dir }}"
+ state: absent
+ loop:
+ - dir: "/home/.jfrog_ami/.ssh/authorized_keys"
+ - dir: "/root/.ssh/authorized_keys"
+ - dir: "/home/centos/.ssh/authorized_keys"
+ loop_control:
+ loop_var: ssh_keys
+
+ - name: shutdown VM
+ command: /sbin/shutdown -h now
+ ignore_errors: 'yes'
+ when: ami_creation
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/artifactory.cluster.license.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/artifactory.cluster.license.j2
new file mode 100644
index 0000000..ec2993b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/artifactory.cluster.license.j2
@@ -0,0 +1,37 @@
+{% if artifactory_license1 %}
+{% if artifactory_license1|length %}
+{{ artifactory_license1 }}
+{% endif %}
+{% endif %}
+{% if artifactory_license2 %}
+
+
+{% if artifactory_license2|length %}
+{{ artifactory_license2 }}
+{% endif %}
+{% endif %}
+{% if artifactory_license3 %}
+
+
+{% if artifactory_license3|length %}
+{{ artifactory_license3 }}
+{% endif %}
+{% endif %}
+{% if artifactory_license4 %}
+
+{% if artifactory_license4|length %}
+{{ artifactory_license4 }}
+{% endif %}
+{% endif %}
+{% if artifactory_license5 %}
+
+{% if artifactory_license5|length %}
+{{ artifactory_license5 }}
+{% endif %}
+{% endif %}
+{% if artifactory_license6 %}
+
+{% if artifactory_license6|length %}
+{{ artifactory_license6 }}
+{% endif %}
+{% endif %}
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/binarystore.xml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/binarystore.xml.j2
new file mode 100644
index 0000000..f85f16f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/binarystore.xml.j2
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/installer-info.json.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/installer-info.json.j2
new file mode 100644
index 0000000..f475256
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/installer-info.json.j2
@@ -0,0 +1,12 @@
+{
+ "productId": "Ansible_artifactory/1.0.0",
+ "features": [
+ {
+ "featureId": "Partner/ACC-006973"
+ },
+ {
+ "featureId": "Channel/{{ ansible_marketplace }}"
+ }
+ ]
+}
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/join.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/join.key.j2
new file mode 100644
index 0000000..17d05d2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/join.key.j2
@@ -0,0 +1 @@
+{{ join_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/master.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/master.key.j2
new file mode 100644
index 0000000..0462a64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/master.key.j2
@@ -0,0 +1 @@
+{{ master_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/system.yaml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/system.yaml.j2
new file mode 100644
index 0000000..162bae8
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/templates/system.yaml.j2
@@ -0,0 +1,39 @@
+## @formatter:off
+## JFROG ARTIFACTORY SYSTEM CONFIGURATION FILE
+## HOW TO USE: comment-out any field and keep the correct yaml indentation by deleting only the leading '#' character.
+configVersion: 1
+
+## NOTE: JFROG_HOME is a place holder for the JFrog root directory containing the deployed product, the home directory for all JFrog products.
+## Replace JFROG_HOME with the real path! For example, in RPM install, JFROG_HOME=/opt/jfrog
+
+## NOTE: Sensitive information such as passwords and join key are encrypted on first read.
+## NOTE: The provided commented key and value is the default.
+
+## SHARED CONFIGURATIONS
+## A shared section for keys across all services in this config
+shared:
+
+ ## Node Settings
+ node:
+ ## A unique id to identify this node.
+ ## Default: auto generated at startup.
+ id: {{ ansible_machine_id }}
+
+ ## Sets this node as primary in HA installation
+ # primary: {{ artifactory_is_primary }}
+ Affinity: "any"
+
+ ## Sets this node as part of HA installation
+ haEnabled: {{ artifactory_ha_enabled }}
+
+ ## Database Configuration
+ database:
+ ## One of: mysql, oracle, mssql, postgresql, mariadb
+ ## Default: Embedded derby
+
+ ## Example for mysql/postgresql
+ type: "{{ db_type }}"
+ driver: "{{ db_driver }}"
+ url: "{{ db_url }}"
+ username: "{{ db_user }}"
+ password: "{{ db_password }}"
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/vars/main.yml
new file mode 100644
index 0000000..cd21505
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-ami/vars/main.yml
@@ -0,0 +1,2 @@
+---
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/defaults/main.yml
new file mode 100644
index 0000000..6b28347
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/defaults/main.yml
@@ -0,0 +1,2 @@
+---
+# defaults file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/files/nginx.conf b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/files/nginx.conf
new file mode 100644
index 0000000..19f9422
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/files/nginx.conf
@@ -0,0 +1,37 @@
+#user nobody;
+worker_processes 1;
+error_log /var/log/nginx/error.log info;
+#pid logs/nginx.pid;
+events {
+ worker_connections 1024;
+}
+http {
+ include mime.types;
+ variables_hash_max_size 1024;
+ variables_hash_bucket_size 64;
+ server_names_hash_max_size 4096;
+ server_names_hash_bucket_size 128;
+ types_hash_max_size 2048;
+ types_hash_bucket_size 64;
+ proxy_read_timeout 2400s;
+ client_header_timeout 2400s;
+ client_body_timeout 2400s;
+ proxy_connect_timeout 75s;
+ proxy_send_timeout 2400s;
+ proxy_buffer_size 32k;
+ proxy_buffers 40 32k;
+ proxy_busy_buffers_size 64k;
+ proxy_temp_file_write_size 250m;
+ proxy_http_version 1.1;
+ client_body_buffer_size 128k;
+ include /etc/nginx/conf.d/*.conf;
+ default_type application/octet-stream;
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+'$status $body_bytes_sent "$http_referer" '
+'"$http_user_agent" "$http_x_forwarded_for"';
+ access_log /var/log/nginx/access.log main;
+ sendfile on;
+ #tcp_nopush on;
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/handlers/main.yml
new file mode 100644
index 0000000..d212386
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/meta/main.yml
new file mode 100644
index 0000000..227ad9c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/meta/main.yml
@@ -0,0 +1,53 @@
+galaxy_info:
+ author: your name
+ description: your role description
+ company: your company (optional)
+
+ # If the issue tracker for your role is not on github, uncomment the
+ # next line and provide a value
+ # issue_tracker_url: http://example.com/issue/tracker
+
+ # Choose a valid license ID from https://spdx.org - some suggested licenses:
+ # - BSD-3-Clause (default)
+ # - MIT
+ # - GPL-2.0-or-later
+ # - GPL-3.0-only
+ # - Apache-2.0
+ # - CC-BY-4.0
+ license: license (GPL-2.0-or-later, MIT, etc)
+
+ min_ansible_version: 2.9
+
+ # If this a Container Enabled role, provide the minimum Ansible Container version.
+ # min_ansible_container_version:
+
+ #
+ # Provide a list of supported platforms, and for each platform a list of versions.
+ # If you don't wish to enumerate all versions for a particular platform, use 'all'.
+ # To view available platforms and versions (or releases), visit:
+ # https://galaxy.ansible.com/api/v1/platforms/
+ #
+ # platforms:
+ # - name: Fedora
+ # versions:
+ # - all
+ # - 25
+ # - name: SomePlatform
+ # versions:
+ # - all
+ # - 1.0
+ # - 7
+ # - 99.99
+
+ galaxy_tags: []
+ # List tags for your role here, one per line. A tag is a keyword that describes
+ # and categorizes the role. Users find roles by searching for tags. Be sure to
+ # remove the '[]' above, if you add tags to this list.
+ #
+ # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
+ # Maximum 20 tags per role.
+
+dependencies: []
+ # List your role dependencies here, one per line. Be sure to remove the '[]' above,
+ # if you add dependencies to this list.
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tasks/main.yml
new file mode 100644
index 0000000..f2cc4c3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tasks/main.yml
@@ -0,0 +1,38 @@
+---
+- name: ensure python2 is installed
+ yum:
+ name: python2
+ state: present
+ update_cache: true
+ become: true
+ become_user: root
+
+- name: Add epel-release repo
+ yum:
+ name: epel-release
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: Install nginx
+ yum:
+ name: nginx
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: configure main nginx conf file.
+ copy:
+ src: nginx.conf
+ dest: /etc/nginx/nginx.conf
+ owner: root
+ group: root
+ mode: '0755'
+ become: yes
+
+- name: restart nginx
+ service:
+ name: nginx
+ state: restarted
+ enabled: yes
+ become: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/templates/artifactory.conf.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/templates/artifactory.conf.j2
new file mode 100644
index 0000000..b36af22
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/templates/artifactory.conf.j2
@@ -0,0 +1,43 @@
+###########################################################
+## this configuration was generated by JFrog Artifactory ##
+ ###########################################################
+
+ ## add HA entries when ha is configure
+ upstream artifactory {
+ server 127.0.0.1:8082;
+}
+ upstream artifactory-direct {
+ server 127.0.0.1:8081;
+}
+ ## server configuration
+ server {
+ listen 80 ;
+ server_name _;
+ if ($http_x_forwarded_proto = '') {
+ set $http_x_forwarded_proto $scheme;
+ }
+ ## Application specific logs
+ access_log /var/log/nginx/artifactory-access.log;
+ error_log /var/log/nginx/artifactory-error.log;
+ rewrite ^/$ /ui/ redirect;
+ rewrite ^/ui$ /ui/ redirect;
+ chunked_transfer_encoding on;
+ client_max_body_size 0;
+ location / {
+ proxy_read_timeout 2400s;
+ proxy_pass_header Server;
+ proxy_cookie_path ~*^/.* /;
+ proxy_pass "http://artifactory";
+ proxy_next_upstream error timeout non_idempotent;
+ proxy_next_upstream_tries 1;
+ proxy_set_header X-JFrog-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ location ~ ^/artifactory/ {
+ proxy_pass http://artifactory-direct;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/inventory b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/inventory
new file mode 100644
index 0000000..878877b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/test.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/test.yml
new file mode 100644
index 0000000..7560bbb
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/tests/test.yml
@@ -0,0 +1,5 @@
+---
+- hosts: localhost
+ remote_user: root
+ roles:
+ - artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/vars/main.yml
new file mode 100644
index 0000000..7465197
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ami/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/defaults/main.yml
new file mode 100644
index 0000000..6b28347
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/defaults/main.yml
@@ -0,0 +1,2 @@
+---
+# defaults file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/handlers/main.yml
new file mode 100644
index 0000000..d212386
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/meta/main.yml
new file mode 100644
index 0000000..227ad9c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/meta/main.yml
@@ -0,0 +1,53 @@
+galaxy_info:
+ author: your name
+ description: your role description
+ company: your company (optional)
+
+ # If the issue tracker for your role is not on github, uncomment the
+ # next line and provide a value
+ # issue_tracker_url: http://example.com/issue/tracker
+
+ # Choose a valid license ID from https://spdx.org - some suggested licenses:
+ # - BSD-3-Clause (default)
+ # - MIT
+ # - GPL-2.0-or-later
+ # - GPL-3.0-only
+ # - Apache-2.0
+ # - CC-BY-4.0
+ license: license (GPL-2.0-or-later, MIT, etc)
+
+ min_ansible_version: 2.9
+
+ # If this a Container Enabled role, provide the minimum Ansible Container version.
+ # min_ansible_container_version:
+
+ #
+ # Provide a list of supported platforms, and for each platform a list of versions.
+ # If you don't wish to enumerate all versions for a particular platform, use 'all'.
+ # To view available platforms and versions (or releases), visit:
+ # https://galaxy.ansible.com/api/v1/platforms/
+ #
+ # platforms:
+ # - name: Fedora
+ # versions:
+ # - all
+ # - 25
+ # - name: SomePlatform
+ # versions:
+ # - all
+ # - 1.0
+ # - 7
+ # - 99.99
+
+ galaxy_tags: []
+ # List tags for your role here, one per line. A tag is a keyword that describes
+ # and categorizes the role. Users find roles by searching for tags. Be sure to
+ # remove the '[]' above, if you add tags to this list.
+ #
+ # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
+ # Maximum 20 tags per role.
+
+dependencies: []
+ # List your role dependencies here, one per line. Be sure to remove the '[]' above,
+ # if you add dependencies to this list.
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tasks/main.yml
new file mode 100644
index 0000000..670c42d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tasks/main.yml
@@ -0,0 +1,54 @@
+---
+# tasks file for artifactory-nginx
+- name: configure the artifactory nginx conf
+ template:
+ src: artifactory.conf.j2
+ dest: /etc/nginx/conf.d/artifactory.conf
+ owner: root
+ group: root
+ mode: '0755'
+ become: yes
+
+- name: ensure nginx dir exists
+ file:
+ path: "/var/opt/jfrog/nginx/ssl"
+ state: directory
+ become: yes
+
+- name: configure certificate
+ template:
+ src: certificate.pem.j2
+ dest: "/var/opt/jfrog/nginx/ssl/cert.pem"
+ become: yes
+
+- name: ensure pki exists
+ file:
+ path: "/etc/pki/tls"
+ state: directory
+ become: yes
+
+- name: configure key
+ template:
+ src: certificate.key.j2
+ dest: "/etc/pki/tls/cert.key"
+ become: yes
+
+- name: Allow apache to modify files in /srv/git_repos
+ sefcontext:
+ target: '/var/opt/jfrog/nginx/ssl/cert.pem'
+ setype: httpd_sys_content_t
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+ become: yes
+
+- name: Apply new SELinux file context to filesystem
+ command: restorecon -v /var/opt/jfrog/nginx/ssl/cert.pem
+ become: yes
+
+- name: restart nginx
+ service:
+ name: nginx
+ state: restarted
+ enabled: yes
+ become: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/artifactory.conf.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/artifactory.conf.j2
new file mode 100644
index 0000000..13a2ac7
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/artifactory.conf.j2
@@ -0,0 +1,49 @@
+###########################################################
+## this configuration was generated by JFrog Artifactory ##
+ ###########################################################
+
+ ## add HA entries when ha is configure
+ upstream artifactory {
+ server 127.0.0.1:8082;
+}
+ upstream artifactory-direct {
+ server 127.0.0.1:8081;
+}
+ ssl_protocols TLSv1.1 TLSv1.2;
+ ssl_certificate /var/opt/jfrog/nginx/ssl/cert.pem;
+ ssl_certificate_key /etc/pki/tls/cert.key;
+ ssl_session_cache shared:SSL:1m;
+ ssl_prefer_server_ciphers on;
+ ## server configuration
+ server {
+ listen 80;
+ listen 443 ssl http2;
+ server_name _;
+ if ($http_x_forwarded_proto = '') {
+ set $http_x_forwarded_proto $scheme;
+ }
+ ## Application specific logs
+ access_log /var/log/nginx/artifactory-access.log;
+ error_log /var/log/nginx/artifactory-error.log;
+ rewrite ^/$ /ui/ redirect;
+ rewrite ^/ui$ /ui/ redirect;
+ chunked_transfer_encoding on;
+ client_max_body_size 0;
+ location / {
+ proxy_read_timeout 2400s;
+ proxy_pass_header Server;
+ proxy_cookie_path ~*^/.* /;
+ proxy_pass "http://artifactory";
+ proxy_next_upstream error timeout non_idempotent;
+ proxy_next_upstream_tries 1;
+ proxy_set_header X-JFrog-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ location ~ ^/artifactory/ {
+ proxy_pass http://artifactory-direct;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.key.j2
new file mode 100644
index 0000000..30f1d88
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.key.j2
@@ -0,0 +1 @@
+{{ certificate_key | regex_replace('(-+(BEGIN|END) [A-Z ]*-+ ?|[A-Za-z0-9\+=/]* )', '\\1\n') }}
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.pem.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.pem.j2
new file mode 100644
index 0000000..d9dbd21
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/templates/certificate.pem.j2
@@ -0,0 +1 @@
+{{ certificate | regex_replace('(-+(BEGIN|END) [A-Z ]*-+ ?|[A-Za-z0-9\+=/]* )', '\\1\n') }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/inventory b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/inventory
new file mode 100644
index 0000000..878877b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/test.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/test.yml
new file mode 100644
index 0000000..7560bbb
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/tests/test.yml
@@ -0,0 +1,5 @@
+---
+- hosts: localhost
+ remote_user: root
+ roles:
+ - artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/vars/main.yml
new file mode 100644
index 0000000..7465197
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx-ssl/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/defaults/main.yml
new file mode 100644
index 0000000..6b28347
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/defaults/main.yml
@@ -0,0 +1,2 @@
+---
+# defaults file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/files/nginx.conf b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/files/nginx.conf
new file mode 100644
index 0000000..19f9422
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/files/nginx.conf
@@ -0,0 +1,37 @@
+#user nobody;
+worker_processes 1;
+error_log /var/log/nginx/error.log info;
+#pid logs/nginx.pid;
+events {
+ worker_connections 1024;
+}
+http {
+ include mime.types;
+ variables_hash_max_size 1024;
+ variables_hash_bucket_size 64;
+ server_names_hash_max_size 4096;
+ server_names_hash_bucket_size 128;
+ types_hash_max_size 2048;
+ types_hash_bucket_size 64;
+ proxy_read_timeout 2400s;
+ client_header_timeout 2400s;
+ client_body_timeout 2400s;
+ proxy_connect_timeout 75s;
+ proxy_send_timeout 2400s;
+ proxy_buffer_size 32k;
+ proxy_buffers 40 32k;
+ proxy_busy_buffers_size 64k;
+ proxy_temp_file_write_size 250m;
+ proxy_http_version 1.1;
+ client_body_buffer_size 128k;
+ include /etc/nginx/conf.d/*.conf;
+ default_type application/octet-stream;
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+'$status $body_bytes_sent "$http_referer" '
+'"$http_user_agent" "$http_x_forwarded_for"';
+ access_log /var/log/nginx/access.log main;
+ sendfile on;
+ #tcp_nopush on;
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/handlers/main.yml
new file mode 100644
index 0000000..d212386
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/meta/main.yml
new file mode 100644
index 0000000..227ad9c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/meta/main.yml
@@ -0,0 +1,53 @@
+galaxy_info:
+ author: your name
+ description: your role description
+ company: your company (optional)
+
+ # If the issue tracker for your role is not on github, uncomment the
+ # next line and provide a value
+ # issue_tracker_url: http://example.com/issue/tracker
+
+ # Choose a valid license ID from https://spdx.org - some suggested licenses:
+ # - BSD-3-Clause (default)
+ # - MIT
+ # - GPL-2.0-or-later
+ # - GPL-3.0-only
+ # - Apache-2.0
+ # - CC-BY-4.0
+ license: license (GPL-2.0-or-later, MIT, etc)
+
+ min_ansible_version: 2.9
+
+ # If this a Container Enabled role, provide the minimum Ansible Container version.
+ # min_ansible_container_version:
+
+ #
+ # Provide a list of supported platforms, and for each platform a list of versions.
+ # If you don't wish to enumerate all versions for a particular platform, use 'all'.
+ # To view available platforms and versions (or releases), visit:
+ # https://galaxy.ansible.com/api/v1/platforms/
+ #
+ # platforms:
+ # - name: Fedora
+ # versions:
+ # - all
+ # - 25
+ # - name: SomePlatform
+ # versions:
+ # - all
+ # - 1.0
+ # - 7
+ # - 99.99
+
+ galaxy_tags: []
+ # List tags for your role here, one per line. A tag is a keyword that describes
+ # and categorizes the role. Users find roles by searching for tags. Be sure to
+ # remove the '[]' above, if you add tags to this list.
+ #
+ # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
+ # Maximum 20 tags per role.
+
+dependencies: []
+ # List your role dependencies here, one per line. Be sure to remove the '[]' above,
+ # if you add dependencies to this list.
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tasks/main.yml
new file mode 100644
index 0000000..146ea79
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tasks/main.yml
@@ -0,0 +1,34 @@
+---
+- name: configure main nginx conf file.
+ copy:
+ src: nginx.conf
+ dest: /etc/nginx/nginx.conf
+ owner: root
+ group: root
+ mode: '0755'
+ become: yes
+
+- name: configure main nginx conf file.
+ copy:
+ src: nginx.conf
+ dest: /etc/nginx/nginx.conf
+ owner: root
+ group: root
+ mode: '0755'
+ become: yes
+
+- name: configure the artifactory nginx conf
+ template:
+ src: artifactory.conf.j2
+ dest: /etc/nginx/conf.d/artifactory.conf
+ owner: root
+ group: root
+ mode: '0755'
+ become: yes
+
+- name: restart nginx
+ service:
+ name: nginx
+ state: restarted
+ enabled: yes
+ become: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/templates/artifactory.conf.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/templates/artifactory.conf.j2
new file mode 100644
index 0000000..b36af22
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/templates/artifactory.conf.j2
@@ -0,0 +1,43 @@
+###########################################################
+## this configuration was generated by JFrog Artifactory ##
+ ###########################################################
+
+ ## add HA entries when ha is configure
+ upstream artifactory {
+ server 127.0.0.1:8082;
+}
+ upstream artifactory-direct {
+ server 127.0.0.1:8081;
+}
+ ## server configuration
+ server {
+ listen 80 ;
+ server_name _;
+ if ($http_x_forwarded_proto = '') {
+ set $http_x_forwarded_proto $scheme;
+ }
+ ## Application specific logs
+ access_log /var/log/nginx/artifactory-access.log;
+ error_log /var/log/nginx/artifactory-error.log;
+ rewrite ^/$ /ui/ redirect;
+ rewrite ^/ui$ /ui/ redirect;
+ chunked_transfer_encoding on;
+ client_max_body_size 0;
+ location / {
+ proxy_read_timeout 2400s;
+ proxy_pass_header Server;
+ proxy_cookie_path ~*^/.* /;
+ proxy_pass "http://artifactory";
+ proxy_next_upstream error timeout non_idempotent;
+ proxy_next_upstream_tries 1;
+ proxy_set_header X-JFrog-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ location ~ ^/artifactory/ {
+ proxy_pass http://artifactory-direct;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/inventory b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/inventory
new file mode 100644
index 0000000..878877b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/test.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/test.yml
new file mode 100644
index 0000000..7560bbb
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/tests/test.yml
@@ -0,0 +1,5 @@
+---
+- hosts: localhost
+ remote_user: root
+ roles:
+ - artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/vars/main.yml
new file mode 100644
index 0000000..7465197
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory-nginx/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for artifactory-nginx
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/defaults/main.yml
new file mode 100755
index 0000000..a900841
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/defaults/main.yml
@@ -0,0 +1,43 @@
+---
+# defaults file for artifactory
+# indicates were this collection was downlaoded from (galaxy, automation_hub, standalone)
+ansible_marketplace: standalone
+
+# The version of Artifactory to install
+artifactory_version: 7.19.4
+
+# licenses - cluster license content in json
+artifactory_licenses:
+
+# whether to enable HA
+artifactory_ha_enabled: true
+
+# value for whether a host is primary. this should be set in host vars
+artifactory_is_primary: true
+
+# The location where Artifactory should install.
+artifactory_download_directory: /opt/jfrog
+
+# The location where Artifactory should store data.
+artifactory_file_store_dir: /data
+
+extra_java_opts: -server -Xms2g -Xmx14g -Xss256k -XX:+UseG1GC
+
+artifactory_tar: https://releases.jfrog.io/artifactory/artifactory-pro/org/artifactory/pro/jfrog-artifactory-pro/{{ artifactory_version }}/jfrog-artifactory-pro-{{ artifactory_version }}-linux.tar.gz
+artifactory_home: "{{ artifactory_download_directory }}/artifactory-pro-{{ artifactory_version }}"
+
+artifactory_user: artifactory
+artifactory_group: artifactory
+
+# Set the parameters required for the service.
+service_list:
+ - name: artifactory
+ description: Start script for Artifactory
+ start_command: "{{ artifactory_home }}/bin/artifactory.sh start"
+ stop_command: "{{ artifactory_home }}/bin/artifactory.sh stop"
+ type: forking
+ status_pattern: artifactory
+ user_name: "{{ artifactory_user }}"
+ group_name: "{{ artifactory_group }}"
+
+product_id: CloudFormation_QS_EC2/1.0.0
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/handlers/main.yml
new file mode 100644
index 0000000..6f8fcda
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/handlers/main.yml
@@ -0,0 +1,10 @@
+---
+# handlers file for artifactory
+- name: systemctl daemon-reload
+ systemd:
+ daemon_reload: yes
+
+- name: restart artifactory
+ service:
+ name: artifactory
+ state: restarted
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/exception.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/exception.yml
new file mode 100644
index 0000000..7de46df
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/exception.yml
@@ -0,0 +1,6 @@
+---
+exceptions:
+ - variation: Alpine
+ reason: Artifactory start/stop scripts don't properly work.
+ - variation: amazonlinux:1
+ reason: "Shutting down artifactory: /usr/bin/java\nfinding\nUsing the default catalina management port (8015) to test shutdown\nArtifactory Tomcat already stopped"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/main.yml
new file mode 100644
index 0000000..0dc573a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/main.yml
@@ -0,0 +1,35 @@
+---
+galaxy_info:
+ author: Robert de Bock
+ role_name: artifactory
+ description: Install and configure artifactory on your system.
+ license: Apache-2.0
+ company: none
+ min_ansible_version: 2.8
+
+ platforms:
+ - name: Debian
+ versions:
+ - all
+ - name: EL
+ versions:
+ - 7
+ - 8
+ - name: Fedora
+ versions:
+ - all
+ - name: OpenSUSE
+ versions:
+ - all
+ - name: Ubuntu
+ versions:
+ - bionic
+
+ galaxy_tags:
+ - artifactory
+ - centos
+ - redhat
+ - server
+ - system
+
+dependencies: []
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/preferences.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/preferences.yml
new file mode 100644
index 0000000..e7fdebf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/preferences.yml
@@ -0,0 +1,2 @@
+---
+tox_parallel: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/version.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/version.yml
new file mode 100644
index 0000000..024188d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/meta/version.yml
@@ -0,0 +1,6 @@
+---
+project_name: JFrog
+reference: "https://github.com/robertdebock/ansible-role-artifactory/blob/master/defaults/main.yml"
+versions:
+ - name: Artifactory
+ url: "https://releases.jfrog.io/artifactory/"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/configure-licenses.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/configure-licenses.yml
new file mode 100644
index 0000000..996f68e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/configure-licenses.yml
@@ -0,0 +1,43 @@
+- name: set license for Enterprise
+ block:
+ - name: use license file
+ copy:
+ src: "{{ artifactory_license_file }}"
+ dest: "{{ artifactory_home }}/var/etc/artifactory/artifactory.cluster.license"
+ force: no # only copy if file doesn't exist
+ become: yes
+ when: artifactory_license_file is defined and artifactory_is_primary == true
+
+ - name: use license strings
+ vars:
+ artifactory_licenses_dict: "{{ artifactory_licenses | default('{}') }}"
+
+ template:
+ src: artifactory.cluster.license.j2
+ dest: "{{ artifactory_home }}/var/etc/artifactory/artifactory.cluster.license"
+ force: no # only create if file doesn't exist
+ become: yes
+ when: artifactory_license_file is not defined and artifactory_is_primary == true
+ when: artifactory_ha_enabled
+
+- name: set license for Pro
+ block:
+ - name: use license file
+ copy:
+ src: "{{ artifactory_license_file }}"
+ dest: "{{ artifactory_home }}/var/etc/artifactory/artifactory.lic"
+ force: no # only create if file doesn't exist
+ become: yes
+ when: artifactory_license_file is defined
+
+ - name: use license strings
+ vars:
+ artifactory_licenses_dict: "{{ artifactory_licenses | default('{}') }}"
+
+ template:
+ src: artifactory.pro.license.j2
+ dest: "{{ artifactory_home }}/var/etc/artifactory/artifactory.lic"
+ force: no # only create if file doesn't exist
+ become: yes
+ when: artifactory_license_file is not defined
+ when: not artifactory_ha_enabled
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/main.yml
new file mode 100755
index 0000000..901137f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/tasks/main.yml
@@ -0,0 +1,158 @@
+---
+# tasks file for artifactory
+- name: Set artifactory major version
+ set_fact:
+ artifactory_major_verion: "{{ artifactory_version.split('.')[0] }}"
+
+- name: create group for artifactory
+ group:
+ name: "{{ artifactory_group }}"
+ state: present
+ become: yes
+
+- name: create user for artifactory
+ user:
+ name: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ system: yes
+ become: yes
+
+- name: ensure artifactory_download_directory exists
+ file:
+ path: "{{ artifactory_download_directory }}"
+ state: directory
+ become: yes
+
+- name: ensure artifactory_file_store_dir exists
+ file:
+ path: "{{ artifactory_file_store_dir }}"
+ state: directory
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ become: yes
+
+- name: ensure data subdirectories exist and have correct ownership
+ file:
+ path: "{{ artifactory_home }}/var/{{ item }}"
+ state: directory
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ loop:
+ - "bootstrap"
+ - "etc"
+ - "data"
+ - "etc/info"
+ - "etc/security"
+ - "etc/artifactory"
+ become: yes
+
+- name: check if system yaml file exits
+ stat:
+ path: "{{ artifactory_home }}/var/etc/system.yaml"
+ register: system_yaml
+
+- name: use specified system yaml
+ copy:
+ src: "{{ system_file }}"
+ dest: "{{ artifactory_home }}/var/etc/system.yaml"
+ become: yes
+ when: system_file is defined and not system_yaml.stat.exists
+
+- name: configure system yaml
+ template:
+ src: system.yaml.j2
+ dest: "{{ artifactory_home }}/var/etc/system.yaml"
+ become: yes
+ when: system_file is not defined and not system_yaml.stat.exists
+
+- name: configure master key
+ template:
+ src: master.key.j2
+ dest: "{{ artifactory_home }}/var/etc/security/master.key"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: configure join key
+ template:
+ src: join.key.j2
+ dest: "{{ artifactory_home }}/var/etc/security/join.key"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: configure installer info
+ template:
+ src: installer-info.json.j2
+ dest: "{{ artifactory_home }}/var/etc/info/installer-info.json"
+ become: yes
+
+- name: use specified binary store file
+ copy:
+ src: "{{ binary_store_file }}"
+ dest: "{{ artifactory_home }}/var/etc/artifactory/binarystore.xml"
+ force: no # only copy if file doesn't exist
+ become: yes
+ when: binary_store_file is defined
+
+- name: set default binary store
+ template:
+ src: binarystore.xml.j2
+ dest: "{{ artifactory_home }}/var/etc/artifactory/binarystore.xml"
+ force: no # only create if file doesn't exist
+ become: yes
+ when: binary_store_file is not defined
+
+- name: configure licenses
+ include_tasks: configure-licenses.yml
+
+- name: create artifactory service
+ shell: "{{ artifactory_home }}/app/bin/installService.sh"
+ become: yes
+
+- name: Delete plugin folder
+ file:
+ state: absent
+ path: "{{ artifactory_home }}/var/etc/artifactory/plugins"
+
+- name: ensure efs plugin folder exists
+ file:
+ path: "/efsmount/plugins"
+ state: directory
+ become: yes
+
+- name: symlink plugin folder to EFS
+ file:
+ src: "/efsmount/plugins"
+ path: "{{ artifactory_home }}/var/etc/artifactory/plugins"
+ state: link
+ force: yes
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+
+- name: ensure data subdirectories exist and have correct ownership
+ file:
+ path: "{{ artifactory_home }}/var/{{ item }}"
+ state: directory
+ owner: "{{ artifactory_user }}"
+ group: "{{ artifactory_group }}"
+ loop:
+ - "etc/artifactory/plugins"
+ become: yes
+
+- name: start and enable the primary node
+ service:
+ name: artifactory
+ state: restarted
+ become: yes
+# when: artifactory_is_primary == true
+
+# - name: random wait before restarting to prevent secondary nodes from hitting DB first
+# pause:
+# seconds: "{{ 120 | random + 10}}"
+# when: artifactory_is_primary == false
+
+# - name: start and enable the secondary nodes
+# service:
+# name: artifactory
+# state: restarted
+# become: yes
+# when: artifactory_is_primary == false
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.cluster.license.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.cluster.license.j2
new file mode 100644
index 0000000..aa30261
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.cluster.license.j2
@@ -0,0 +1,6 @@
+{% if artifactory_licenses_dict %}
+{% for key in (artifactory_licenses_dict.keys() | select('match', '^ArtifactoryLicense\d$')) %}
+{{ artifactory_licenses_dict[key] }}
+
+{% endfor %}
+{% endif %}
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.pro.license.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.pro.license.j2
new file mode 100644
index 0000000..f6881c9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/artifactory.pro.license.j2
@@ -0,0 +1,8 @@
+{% if artifactory_licenses_dict %}
+{% for key in (artifactory_licenses_dict.keys() | select('match', '^ArtifactoryLicense\d$')) %}
+{% if loop.first %}
+ {{ artifactory_licenses_dict[key] }}
+{% endif %}
+
+{% endfor %}
+{% endif %}
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/binarystore.xml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/binarystore.xml.j2
new file mode 100644
index 0000000..f12dba1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/binarystore.xml.j2
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ s3.{{ s3_region }}.amazonaws.com
+ {{ s3_bucket }}
+ artifactory/filestore
+ {{ s3_region }}
+ true
+
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/installer-info.json.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/installer-info.json.j2
new file mode 100644
index 0000000..60e04bd
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/installer-info.json.j2
@@ -0,0 +1,8 @@
+{
+ "productId": "{{ product_id }}",
+ "features": [
+ {
+ "featureId": "Partner/ACC-006973"
+ }
+ ]
+}
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/join.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/join.key.j2
new file mode 100644
index 0000000..17d05d2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/join.key.j2
@@ -0,0 +1 @@
+{{ join_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/master.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/master.key.j2
new file mode 100644
index 0000000..0462a64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/master.key.j2
@@ -0,0 +1 @@
+{{ master_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/system.yaml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/system.yaml.j2
new file mode 100644
index 0000000..7cefa6a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/templates/system.yaml.j2
@@ -0,0 +1,41 @@
+## @formatter:off
+## JFROG ARTIFACTORY SYSTEM CONFIGURATION FILE
+## HOW TO USE: comment-out any field and keep the correct yaml indentation by deleting only the leading '#' character.
+configVersion: 1
+
+## NOTE: JFROG_HOME is a place holder for the JFrog root directory containing the deployed product, the home directory for all JFrog products.
+## Replace JFROG_HOME with the real path! For example, in RPM install, JFROG_HOME=/opt/jfrog
+
+## NOTE: Sensitive information such as passwords and join key are encrypted on first read.
+## NOTE: The provided commented key and value is the default.
+
+## SHARED CONFIGURATIONS
+## A shared section for keys across all services in this config
+shared:
+ ## Java options
+ extraJavaOpts: "{{ extra_java_opts }}"
+
+ ## Node Settings
+ node:
+ ## A unique id to identify this node.
+ ## Default: auto generated at startup.
+ id: {{ ansible_machine_id }}
+
+ ## Sets this node as primary in HA installation
+ # primary: {{ artifactory_is_primary }}
+ Affinity: "any"
+
+ ## Sets this node as part of HA installation
+ haEnabled: {{ artifactory_ha_enabled }}
+
+ ## Database Configuration
+ database:
+ ## One of: mysql, oracle, mssql, postgresql, mariadb
+ ## Default: Embedded derby
+
+ ## Example for mysql/postgresql
+ type: "{{ db_type }}"
+ driver: "{{ db_driver }}"
+ url: "{{ db_url }}"
+ username: "{{ db_user }}"
+ password: "{{ db_password }}"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/vars/main.yml
new file mode 100644
index 0000000..cd21505
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/artifactory/vars/main.yml
@@ -0,0 +1,2 @@
+---
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/defaults/main.yml
new file mode 100644
index 0000000..f547a88
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/defaults/main.yml
@@ -0,0 +1,26 @@
+---
+# defaults file for xray
+# indicates were this collection was downlaoded from (galaxy, automation_hub, standalone)
+ansible_marketplace: standalone
+
+# whether we are creating a AMI for Marketplace or just for configuring EC2 instance
+ami_creation: false
+
+# The version of xray to install
+xray_version: 3.17.4
+
+# whether to enable HA
+xray_ha_enabled: true
+
+# The location where xray should install.
+xray_download_directory: /opt/jfrog
+
+# The remote xray download file
+xray_tar: https://releases.jfrog.io/artifactory/jfrog-xray/xray-linux/{{ xray_version }}/jfrog-xray-{{ xray_version }}-linux.tar.gz
+
+#The xray install directory
+xray_home: "{{ xray_download_directory }}/jfrog-xray-{{ xray_version }}-linux"
+
+#xray users and groups
+xray_user: xray
+xray_group: xray
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/handlers/main.yml
new file mode 100644
index 0000000..f236fe3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/meta/main.yml
new file mode 100644
index 0000000..227ad9c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/meta/main.yml
@@ -0,0 +1,53 @@
+galaxy_info:
+ author: your name
+ description: your role description
+ company: your company (optional)
+
+ # If the issue tracker for your role is not on github, uncomment the
+ # next line and provide a value
+ # issue_tracker_url: http://example.com/issue/tracker
+
+ # Choose a valid license ID from https://spdx.org - some suggested licenses:
+ # - BSD-3-Clause (default)
+ # - MIT
+ # - GPL-2.0-or-later
+ # - GPL-3.0-only
+ # - Apache-2.0
+ # - CC-BY-4.0
+ license: license (GPL-2.0-or-later, MIT, etc)
+
+ min_ansible_version: 2.9
+
+ # If this a Container Enabled role, provide the minimum Ansible Container version.
+ # min_ansible_container_version:
+
+ #
+ # Provide a list of supported platforms, and for each platform a list of versions.
+ # If you don't wish to enumerate all versions for a particular platform, use 'all'.
+ # To view available platforms and versions (or releases), visit:
+ # https://galaxy.ansible.com/api/v1/platforms/
+ #
+ # platforms:
+ # - name: Fedora
+ # versions:
+ # - all
+ # - 25
+ # - name: SomePlatform
+ # versions:
+ # - all
+ # - 1.0
+ # - 7
+ # - 99.99
+
+ galaxy_tags: []
+ # List tags for your role here, one per line. A tag is a keyword that describes
+ # and categorizes the role. Users find roles by searching for tags. Be sure to
+ # remove the '[]' above, if you add tags to this list.
+ #
+ # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
+ # Maximum 20 tags per role.
+
+dependencies: []
+ # List your role dependencies here, one per line. Be sure to remove the '[]' above,
+ # if you add dependencies to this list.
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/Debian.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/Debian.yml
new file mode 100644
index 0000000..420c2d0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/Debian.yml
@@ -0,0 +1,37 @@
+---
+- name: Install db5.3-util
+ apt:
+ deb: "{{ xray_home }}/app/third-party/misc/db5.3-util_5.3.28-3ubuntu3_amd64.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install db-util
+ apt:
+ deb: "{{ xray_home }}/app/third-party/misc/db-util_1_3a5.3.21exp1ubuntu1_all.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install libssl
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/libssl1.1_1.1.0j-1_deb9u1_amd64.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install socat
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/socat_1.7.3.1-2+deb9u1_amd64.deb"
+ become: yes
+
+- name: Install libwxbase3.0-0v5
+ apt:
+ name: libwxbase3.0-0v5
+ update_cache: yes
+ state: present
+ ignore_errors: yes
+ become: yes
+
+- name: Install erlang
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/esl-erlang_21.2.1-1~ubuntu~xenial_amd64.deb"
+ become: yes
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/RedHat.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/RedHat.yml
new file mode 100644
index 0000000..e6a22ef
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/RedHat.yml
@@ -0,0 +1,21 @@
+---
+- name: Install db-utl
+ yum:
+ name: "{{ xray_home }}/app/third-party/misc/libdb-utils-5.3.21-25.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: Install socat
+ yum:
+ name: "{{ xray_home }}/app/third-party/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: Install erlang
+ yum:
+ name: "{{ xray_home }}/app/third-party/rabbitmq/erlang-23.2.3-1.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/main.yml
new file mode 100644
index 0000000..6bf93a5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tasks/main.yml
@@ -0,0 +1,60 @@
+---
+- name: create group for xray
+ group:
+ name: "{{ xray_group }}"
+ state: present
+ become: yes
+
+- name: create user for xray
+ user:
+ name: "{{ xray_user }}"
+ group: "{{ xray_group }}"
+ system: yes
+ become: yes
+
+- name: ensure xray_download_directory exists
+ file:
+ path: "{{ xray_download_directory }}"
+ state: directory
+ become: yes
+
+- name: download xray
+ unarchive:
+ src: "{{ xray_tar }}"
+ dest: "{{ xray_download_directory }}"
+ remote_src: yes
+ owner: "{{ xray_user }}"
+ group: "{{ xray_group }}"
+ creates: "{{ xray_home }}"
+ become: yes
+ register: downloadxray
+ until: downloadxray is succeeded
+ retries: 3
+
+- name: perform prerequisite installation
+ include_tasks: "{{ ansible_os_family }}.yml"
+
+- name: ensure etc exists
+ file:
+ path: "{{ xray_home }}/var/etc"
+ state: directory
+ owner: "{{ xray_user }}"
+ group: "{{ xray_group }}"
+ become: yes
+
+- name: Remove SSH keys
+ file:
+ path: "{{ ssh_keys.dir }}"
+ state: absent
+ loop:
+ - dir: "/home/.xray_ami/.ssh/authorized_keys"
+ - dir: "/root/.ssh/authorized_keys"
+ - dir: "/home/centos/.ssh/authorized_keys"
+ loop_control:
+ loop_var: ssh_keys
+ when: ami_creation
+
+- name: shutdown VM
+ command: /sbin/shutdown -h now
+ ignore_errors: 'yes'
+ when: ami_creation
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/installer-info.json.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/installer-info.json.j2
new file mode 100644
index 0000000..a76c88c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/installer-info.json.j2
@@ -0,0 +1,11 @@
+{
+ "productId": "Ansible_artifactory/1.0.0",
+ "features": [
+ {
+ "featureId": "Partner/ACC-006973"
+ },
+ {
+ "featureId": "Channel/{{ ansible_marketplace }}"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/join.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/join.key.j2
new file mode 100644
index 0000000..17d05d2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/join.key.j2
@@ -0,0 +1 @@
+{{ join_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/master.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/master.key.j2
new file mode 100644
index 0000000..0462a64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/master.key.j2
@@ -0,0 +1 @@
+{{ master_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/system.yaml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/system.yaml.j2
new file mode 100644
index 0000000..206eb77
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/templates/system.yaml.j2
@@ -0,0 +1,36 @@
+## @formatter:off
+## JFROG ARTIFACTORY SYSTEM CONFIGURATION FILE
+## HOW TO USE: comment-out any field and keep the correct yaml indentation by deleting only the leading '#' character.
+configVersion: 1
+
+## NOTE: JFROG_HOME is a place holder for the JFrog root directory containing the deployed product, the home directory for all JFrog products.
+## Replace JFROG_HOME with the real path! For example, in RPM install, JFROG_HOME=/opt/jfrog
+
+## NOTE: Sensitive information such as passwords and join key are encrypted on first read.
+## NOTE: The provided commented key and value is the default.
+
+## SHARED CONFIGURATIONS
+## A shared section for keys across all services in this config
+shared:
+ ## Base URL of the JFrog Platform Deployment (JPD)
+ ## This is the URL to the machine where JFrog Artifactory is deployed, or the load balancer pointing to it. It is recommended to use DNS names rather than direct IPs.
+ ## Examples: "http://jfrog.acme.com" or "http://10.20.30.40:8082"
+ jfrogUrl: {{ jfrog_url }}
+
+ ## Node Settings
+ node:
+ ## A unique id to identify this node.
+ ## Default: auto generated at startup.
+ id: {{ ansible_machine_id }}
+
+ ## Database Configuration
+ database:
+ ## One of: mysql, oracle, mssql, postgresql, mariadb
+ ## Default: Embedded derby
+
+ ## Example for mysql/postgresql
+ type: "{{ db_type }}"
+ driver: "{{ db_driver }}"
+ url: "{{ db_url }}"
+ username: "{{ db_user }}"
+ password: "{{ db_password }}"
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/inventory b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/inventory
new file mode 100644
index 0000000..878877b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/test.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/test.yml
new file mode 100644
index 0000000..f296da6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/tests/test.yml
@@ -0,0 +1,5 @@
+---
+- hosts: localhost
+ remote_user: root
+ roles:
+ - xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/vars/main.yml
new file mode 100644
index 0000000..55363e6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray-ami/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/.travis.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/.travis.yml
new file mode 100644
index 0000000..36bbf62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/.travis.yml
@@ -0,0 +1,29 @@
+---
+language: python
+python: "2.7"
+
+# Use the new container infrastructure
+sudo: false
+
+# Install ansible
+addons:
+ apt:
+ packages:
+ - python-pip
+
+install:
+ # Install ansible
+ - pip install ansible
+
+ # Check ansible version
+ - ansible --version
+
+ # Create ansible.cfg with correct roles_path
+ - printf '[defaults]\nroles_path=../' >ansible.cfg
+
+script:
+ # Basic role syntax check
+ - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
+
+notifications:
+ webhooks: https://galaxy.ansible.com/api/v1/notifications/
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/defaults/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/defaults/main.yml
new file mode 100644
index 0000000..c928913
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/defaults/main.yml
@@ -0,0 +1,23 @@
+---
+# defaults file for xray
+# indicates were this collection was downlaoded from (galaxy, automation_hub, standalone)
+ansible_marketplace: standalone
+
+# The version of xray to install
+xray_version: 3.17.4
+
+# whether to enable HA
+xray_ha_enabled: true
+
+# The location where xray should install.
+xray_download_directory: /opt/jfrog
+
+# The remote xray download file
+xray_tar: https://releases.jfrog.io/artifactory/jfrog-xray/xray-linux/{{ xray_version }}/jfrog-xray-{{ xray_version }}-linux.tar.gz
+
+#The xray install directory
+xray_home: "{{ xray_download_directory }}/jfrog-xray-{{ xray_version }}-linux"
+
+#xray users and groups
+xray_user: xray
+xray_group: xray
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/handlers/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/handlers/main.yml
new file mode 100644
index 0000000..f236fe3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/meta/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/meta/main.yml
new file mode 100644
index 0000000..227ad9c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/meta/main.yml
@@ -0,0 +1,53 @@
+galaxy_info:
+ author: your name
+ description: your role description
+ company: your company (optional)
+
+ # If the issue tracker for your role is not on github, uncomment the
+ # next line and provide a value
+ # issue_tracker_url: http://example.com/issue/tracker
+
+ # Choose a valid license ID from https://spdx.org - some suggested licenses:
+ # - BSD-3-Clause (default)
+ # - MIT
+ # - GPL-2.0-or-later
+ # - GPL-3.0-only
+ # - Apache-2.0
+ # - CC-BY-4.0
+ license: license (GPL-2.0-or-later, MIT, etc)
+
+ min_ansible_version: 2.9
+
+ # If this a Container Enabled role, provide the minimum Ansible Container version.
+ # min_ansible_container_version:
+
+ #
+ # Provide a list of supported platforms, and for each platform a list of versions.
+ # If you don't wish to enumerate all versions for a particular platform, use 'all'.
+ # To view available platforms and versions (or releases), visit:
+ # https://galaxy.ansible.com/api/v1/platforms/
+ #
+ # platforms:
+ # - name: Fedora
+ # versions:
+ # - all
+ # - 25
+ # - name: SomePlatform
+ # versions:
+ # - all
+ # - 1.0
+ # - 7
+ # - 99.99
+
+ galaxy_tags: []
+ # List tags for your role here, one per line. A tag is a keyword that describes
+ # and categorizes the role. Users find roles by searching for tags. Be sure to
+ # remove the '[]' above, if you add tags to this list.
+ #
+ # NOTE: A tag is limited to a single word comprised of alphanumeric characters.
+ # Maximum 20 tags per role.
+
+dependencies: []
+ # List your role dependencies here, one per line. Be sure to remove the '[]' above,
+ # if you add dependencies to this list.
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/Debian.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/Debian.yml
new file mode 100644
index 0000000..420c2d0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/Debian.yml
@@ -0,0 +1,37 @@
+---
+- name: Install db5.3-util
+ apt:
+ deb: "{{ xray_home }}/app/third-party/misc/db5.3-util_5.3.28-3ubuntu3_amd64.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install db-util
+ apt:
+ deb: "{{ xray_home }}/app/third-party/misc/db-util_1_3a5.3.21exp1ubuntu1_all.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install libssl
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/libssl1.1_1.1.0j-1_deb9u1_amd64.deb"
+ ignore_errors: yes
+ become: yes
+
+- name: Install socat
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/socat_1.7.3.1-2+deb9u1_amd64.deb"
+ become: yes
+
+- name: Install libwxbase3.0-0v5
+ apt:
+ name: libwxbase3.0-0v5
+ update_cache: yes
+ state: present
+ ignore_errors: yes
+ become: yes
+
+- name: Install erlang
+ apt:
+ deb: "{{ xray_home }}/app/third-party/rabbitmq/esl-erlang_21.2.1-1~ubuntu~xenial_amd64.deb"
+ become: yes
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/RedHat.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/RedHat.yml
new file mode 100644
index 0000000..e6a22ef
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/RedHat.yml
@@ -0,0 +1,21 @@
+---
+- name: Install db-utl
+ yum:
+ name: "{{ xray_home }}/app/third-party/misc/libdb-utils-5.3.21-25.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: Install socat
+ yum:
+ name: "{{ xray_home }}/app/third-party/rabbitmq/socat-1.7.3.2-2.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
+
+- name: Install erlang
+ yum:
+ name: "{{ xray_home }}/app/third-party/rabbitmq/erlang-23.2.3-1.el7.x86_64.rpm"
+ state: present
+ vars:
+ ansible_python_interpreter: /bin/python2
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/initialize-pg-db.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/initialize-pg-db.yml
new file mode 100644
index 0000000..87334b7
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/initialize-pg-db.yml
@@ -0,0 +1,52 @@
+- name: initialize Postgres DB
+ block:
+ - name: check if user/role exists
+ command: psql -A -t {{db_master_url}} -c "SELECT 1 FROM pg_roles WHERE rolname='{{db_user}}'"
+ register: user_exists
+
+ - debug:
+ var: user_exists.stdout_lines
+
+ - name: create user/role
+ command: psql {{db_master_url}} -c "CREATE USER {{db_user}} WITH PASSWORD '{{db_password}}'"
+ register: shell_output
+ when: user_exists.stdout != "1"
+
+ - debug:
+ var: shell_output.stdout_lines
+ when: user_exists.stdout != "1"
+
+ - name: grant membership role
+ command: psql {{db_master_url}} -c "GRANT {{db_user}} TO {{db_master_user}}"
+ register: shell_output
+ when: user_exists.stdout != "1"
+
+ - debug:
+ var: shell_output.stdout_lines
+ when: user_exists.stdout != "1"
+
+ - name: check if xraydb exists
+ command: psql -A -t {{db_master_url}} -c "SELECT 1 FROM pg_database WHERE datname='xraydb'"
+ register: db_exists
+
+ - debug:
+ var: db_exists.stdout_lines
+
+ - name: create xraydb database
+ command: psql {{db_master_url}} -c "CREATE DATABASE xraydb WITH OWNER={{db_user}} ENCODING='UTF8'"
+ register: shell_output
+ when: db_exists.stdout != "1"
+
+ - debug:
+ var: shell_output.stdout_lines
+ when: db_exists.stdout != "1"
+
+ - name: grant xraydb privileges to role
+ command: psql {{db_master_url}} -c "GRANT ALL PRIVILEGES ON DATABASE xraydb TO {{db_user}}"
+ register: shell_output
+ when: db_exists.stdout != "1"
+
+ - debug:
+ var: shell_output.stdout_lines
+ when: db_exists.stdout != "1"
+ become: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/main.yml
new file mode 100644
index 0000000..0571d74
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tasks/main.yml
@@ -0,0 +1,80 @@
+---
+- name: initialize postgres database
+ include_tasks: initialize-pg-db.yml
+
+- name: create group for xray
+ group:
+ name: "{{ xray_group }}"
+ state: present
+ become: yes
+
+- name: create user for xray
+ user:
+ name: "{{ xray_user }}"
+ group: "{{ xray_group }}"
+ system: yes
+ become: yes
+
+- name: ensure xray_download_directory exists
+ file:
+ path: "{{ xray_download_directory }}"
+ state: directory
+ become: yes
+
+- name: perform prerequisite installation
+ include_tasks: "{{ ansible_os_family }}.yml"
+
+- name: ensure data subdirectories exist and have correct ownership
+ file:
+ path: "{{ xray_home }}/var/{{ item }}"
+ state: directory
+ owner: "{{ xray_user }}"
+ group: "{{ xray_group }}"
+ loop:
+ - "etc"
+ - "data"
+ - "etc/info"
+ - "etc/security"
+ become: yes
+
+- name: configure system yaml
+ template:
+ src: system.yaml.j2
+ dest: "{{ xray_home }}/var/etc/system.yaml"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: configure master key
+ template:
+ src: master.key.j2
+ dest: "{{ xray_home }}/var/etc/security/master.key"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: configure join key
+ template:
+ src: join.key.j2
+ dest: "{{ xray_home }}/var/etc/security/join.key"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: configure installer info
+ template:
+ src: installer-info.json.j2
+ dest: "{{ xray_home }}/var/etc/info/installer-info.json"
+ force: no # only create if file doesn't exist
+ become: yes
+
+- name: create xray service
+ shell: "{{ xray_home }}/app/bin/installService.sh"
+ become: yes
+
+- name: start and enable xray
+ service:
+ name: xray
+ state: restarted
+ become: yes
+
+- name: join rabbitmq cluster
+ shell: "/root/create_rabbitmq_cluster.sh 2>&1 | tee /root/joinrabbitcluster.log"
+ become: yes
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/installer-info.json.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/installer-info.json.j2
new file mode 100644
index 0000000..a76c88c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/installer-info.json.j2
@@ -0,0 +1,11 @@
+{
+ "productId": "Ansible_artifactory/1.0.0",
+ "features": [
+ {
+ "featureId": "Partner/ACC-006973"
+ },
+ {
+ "featureId": "Channel/{{ ansible_marketplace }}"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/join.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/join.key.j2
new file mode 100644
index 0000000..17d05d2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/join.key.j2
@@ -0,0 +1 @@
+{{ join_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/master.key.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/master.key.j2
new file mode 100644
index 0000000..0462a64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/master.key.j2
@@ -0,0 +1 @@
+{{ master_key }}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/system.yaml.j2 b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/system.yaml.j2
new file mode 100644
index 0000000..c6aca8d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/templates/system.yaml.j2
@@ -0,0 +1,39 @@
+## @formatter:off
+## JFROG ARTIFACTORY SYSTEM CONFIGURATION FILE
+## HOW TO USE: comment-out any field and keep the correct yaml indentation by deleting only the leading '#' character.
+configVersion: 1
+
+## NOTE: JFROG_HOME is a place holder for the JFrog root directory containing the deployed product, the home directory for all JFrog products.
+## Replace JFROG_HOME with the real path! For example, in RPM install, JFROG_HOME=/opt/jfrog
+
+## NOTE: Sensitive information such as passwords and join key are encrypted on first read.
+## NOTE: The provided commented key and value is the default.
+
+## SHARED CONFIGURATIONS
+## A shared section for keys across all services in this config
+shared:
+ ## Base URL of the JFrog Platform Deployment (JPD)
+ ## This is the URL to the machine where JFrog Artifactory is deployed, or the load balancer pointing to it. It is recommended to use DNS names rather than direct IPs.
+ ## Examples: "http://jfrog.acme.com" or "http://10.20.30.40:8082"
+ jfrogUrl: {{ jfrog_url }}
+
+ ## Java options
+ extraJavaOpts: "{{ extra_java_opts }}"
+
+ ## Node Settings
+ node:
+ ## A unique id to identify this node.
+ ## Default: auto generated at startup.
+ id: {{ ansible_machine_id }}
+
+ ## Database Configuration
+ database:
+ ## One of: mysql, oracle, mssql, postgresql, mariadb
+ ## Default: Embedded derby
+
+ ## Example for mysql/postgresql
+ type: "{{ db_type }}"
+ driver: "{{ db_driver }}"
+ url: "{{ db_url }}"
+ username: "{{ db_user }}"
+ password: "{{ db_password }}"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/inventory b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/inventory
new file mode 100644
index 0000000..878877b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/inventory
@@ -0,0 +1,2 @@
+localhost
+
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/test.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/test.yml
new file mode 100644
index 0000000..f296da6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/tests/test.yml
@@ -0,0 +1,5 @@
+---
+- hosts: localhost
+ remote_user: root
+ roles:
+ - xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/vars/main.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/vars/main.yml
new file mode 100644
index 0000000..55363e6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/roles/xray/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for xray
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/site-artifactory.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/site-artifactory.yml
new file mode 100644
index 0000000..f6b92cf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/site-artifactory.yml
@@ -0,0 +1,12 @@
+- hosts: localhost
+ gather_facts: true
+ become: true
+ tasks:
+ - include_role:
+ name: artifactory
+ - include_role:
+ name: artifactory-nginx
+ when: "enable_ssl != true"
+ - include_role:
+ name: artifactory-nginx-ssl
+ when: "enable_ssl == true"
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/site-xray.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/site-xray.yml
new file mode 100644
index 0000000..fd761b9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/site-xray.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ gather_facts: true
+ become: true
+ roles:
+ - name: xray
diff --git a/Amazon/artifactory7/v7273/cloudInstallerScripts/xray-ami.yml b/Amazon/artifactory7/v7273/cloudInstallerScripts/xray-ami.yml
new file mode 100644
index 0000000..2921a0d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/cloudInstallerScripts/xray-ami.yml
@@ -0,0 +1,5 @@
+- hosts: localhost
+ gather_facts: true
+ become: true
+ roles:
+ - name: xray-ami
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml
new file mode 100644
index 0000000..9911547
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml
@@ -0,0 +1,37 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - main
+jobs:
+ build-adocs:
+ runs-on: ubuntu-18.04
+ name: asciidoc builder
+ steps:
+ - name: Checkout (main)
+ uses: actions/checkout@v2
+ - name: Get new doc updates
+ run: |
+ wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
+ chmod +x configure_git_env.sh
+ ./configure_git_env.sh
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - name: Generate dynamic content.
+ run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ - name: Run local actions
+ id: adoc
+ uses: ./docs/boilerplate/.actions/asciidoctor-action
+ with:
+ program: "./docs/boilerplate/.utils/build_docs.sh"
+ - name: Stage and Push changes to gh-pages branch.
+ run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Configure gh-pages source and trigger build if necessary.
+ run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitignore b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitignore
new file mode 100644
index 0000000..cdc56e6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitignore
@@ -0,0 +1,10 @@
+taskcat_outputs/*
+.taskcat_overrides.yml
+.taskcat/*
+.DS_Store
+
+# cfn module build
+cfn-module/*.zip
+cfn-module/*.json
+cfn-module/fragments/
+cfn-module/rpdk.log
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitmodules b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitmodules
new file mode 100644
index 0000000..0caba64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "docs/boilerplate"]
+ path = docs/boilerplate
+ url = https://github.com/aws-quickstart/quickstart-documentation-base-common.git
+ branch = main
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.nojekyll b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.taskcat.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.taskcat.yml
new file mode 100644
index 0000000..022c2c0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/.taskcat.yml
@@ -0,0 +1,354 @@
+project:
+ name: quickstart-aws-vpc
+ owner: quickstart@amazon.com
+ package_lambda: false
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ # - cn-north-1
+ # - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+tests:
+ vpc-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-defaults-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-public-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreateNATGateways: 'false'
+ CreatePrivateSubnets: 'false'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-private-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePublicSubnets: 'false'
+ CreateNATGateways: 'false'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ 3az-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_3]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '3'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
+ 4az-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_4]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '4'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ ## - af-south-1
+ ## - ap-east-1
+ ## - ap-south-1
+ ## - ap-northeast-3
+ ## - ap-northeast-2
+ ## - ap-southeast-1
+ ## - ap-southeast-2
+ ## - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ ## - eu-central-1
+ ## - eu-west-1
+ ## - eu-west-2
+ ## - eu-south-1
+ ## - eu-west-3
+ ## - eu-north-1
+ ## - me-south-1
+ ## - sa-east-1
+ - us-east-1
+ ## - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
+ 4az-public-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_4]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePrivateSubnets: 'false'
+ NumberOfAZs: '4'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ ## - af-south-1
+ ## - ap-east-1
+ ## - ap-south-1
+ ## - ap-northeast-3
+ ## - ap-northeast-2
+ ## - ap-southeast-1
+ ## - ap-southeast-2
+ ## - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ ## - eu-central-1
+ ## - eu-west-1
+ ## - eu-west-2
+ ## - eu-south-1
+ ## - eu-west-3
+ ## - eu-north-1
+ ## - me-south-1
+ ## - sa-east-1
+ - us-east-1
+ ## - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/LICENSE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/LICENSE.txt
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/LICENSE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/NOTICE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/NOTICE.txt
new file mode 100644
index 0000000..c7169b4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/NOTICE.txt
@@ -0,0 +1,7 @@
+Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at
+
+ http://aws.amazon.com/apache2.0/
+
+or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/README.md
new file mode 100644
index 0000000..449de22
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/README.md
@@ -0,0 +1,9 @@
+# quickstart-aws-vpc
+
+This Quick Start provides a networking foundation for AWS Cloud infrastructures. It deploys an Amazon Virtual Private Cloud (Amazon VPC) according to AWS best practices and guidelines.
+
+The Amazon VPC architecture includes public and private subnets. The first set of private subnets share the default network access control list (ACL) from the Amazon VPC, and a second, optional set of private subnets include dedicated custom network ACLs per subnet. The Quick Start divides the Amazon VPC address space in a predictable manner across multiple Availability Zones, and deploys NAT gateways in each Availability Zone, which provide highly available outbound internet access for the private subnets.
+
+For architectural details, best practices, step-by-step instructions, and customization options, see the [deployment guide](https://fwd.aws/9VdxN).
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config
new file mode 100644
index 0000000..e8ea3b5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config
@@ -0,0 +1,5 @@
+{
+ "artifact_type": "MODULE",
+ "typeName": "AWSQS::VPC::VPCQS::MODULE",
+ "settings": {}
+}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json
new file mode 100644
index 0000000..58e2891
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json
new file mode 100644
index 0000000..bc07459
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json
new file mode 100644
index 0000000..ee5548a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json
new file mode 100644
index 0000000..b9929b4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json
new file mode 100644
index 0000000..a34e72d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json
new file mode 100644
index 0000000..a543251
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json
new file mode 100644
index 0000000..d180084
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json
new file mode 100644
index 0000000..14186af
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "dedicated"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json
new file mode 100644
index 0000000..aaca90c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json
new file mode 100644
index 0000000..86e37a2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json
new file mode 100644
index 0000000..e8ee3b0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "sa-east-1b,sa-east-1c"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/taskcat.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/taskcat.yml
new file mode 100644
index 0000000..57676dc
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/ci/taskcat.yml
@@ -0,0 +1,70 @@
+global:
+ govcloud: true
+ marketplace-ami: false
+ owner: quickstart@amazon.com
+ qsname: quickstart-aws-vpc
+ regions:
+ - ap-northeast-1
+ - ap-northeast-2
+ - ap-south-1
+ - ap-southeast-1
+ - ap-southeast-2
+ - ca-central-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ reporting: true
+tests:
+ vpc-defaults:
+ parameter_input: aws-vpc-defaults.json
+ template_file: aws-vpc.template
+ vpc-complete:
+ parameter_input: aws-vpc-complete.json
+ template_file: aws-vpc.template
+ vpc-defaults-sa-east-1:
+ parameter_input: aws-vpc-sa-east-1.json
+ template_file: aws-vpc.template
+ regions:
+ - sa-east-1
+ vpc-public:
+ parameter_input: aws-vpc-public.json
+ template_file: aws-vpc.template
+ 3az-eu-west-1:
+ parameter_input: aws-vpc-3az.json
+ regions:
+ - eu-west-1
+ template_file: aws-vpc.template
+ 3az-complete-us-east-2:
+ parameter_input: aws-vpc-3az-complete.json
+ regions:
+ - us-east-2
+ template_file: aws-vpc.template
+ 3az-public-us-west-2:
+ parameter_input: aws-vpc-3az-public.json
+ regions:
+ - us-west-2
+ template_file: aws-vpc.template
+ 4az-us-east-1:
+ parameter_input: aws-vpc-4az.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ 4az-complete-us-east-1:
+ parameter_input: aws-vpc-4az-complete.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ 4az-public-us-east-1:
+ parameter_input: aws-vpc-4az-public.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ dedicated-us-west-1:
+ parameter_input: aws-vpc-dedicated.json
+ regions:
+ - us-west-1
+ template_file: aws-vpc.template
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
new file mode 100755
index 0000000..56a9482
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
@@ -0,0 +1,9 @@
+# asciidoctor image
+FROM asciidoctor/docker-asciidoctor
+
+LABEL "version"="1.0"
+
+# Setup entrypoint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md
new file mode 100755
index 0000000..d2ed7c4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md
@@ -0,0 +1,33 @@
+# Asciidoctor GitHub Action
+
+To use this action add the below config to **.github/workflows/adocs-build.yml**
+
+```
+name: build adocs
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ adoc_build:
+ runs-on: ubuntu-18.04
+ name: asciidoctor -D docs --backend=html5 -o index.html -a toc2 docs/index.adoc
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+ - name: Get build container
+ id: adocbuild
+ uses: path-to-/.actions/asciidoctor-action
+ with:
+ program: "asciidoctor -D docs --backend=html5 -o index.html docs/index.adoc"
+ - name: Print execution time
+ run: echo "Time ${{ steps.adocbuild.outputs.time }}"
+ - name: Deploy docs to ghpages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ publish_branch: gh-pages
+ publish_dir: ./
+```
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml
new file mode 100755
index 0000000..c713a7e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml
@@ -0,0 +1,20 @@
+name: 'build asciidoctor action'
+author: 'Tony Vattathil'
+description: 'asciidoctor Build action'
+
+branding:
+ icon: 'file'
+ color: 'green'
+inputs:
+ program:
+ description: 'asciidoctor '
+ required: true
+ default: 'asciidoctor -D docs --backend=html5 -o index.html -a toc2 ddocs/index.adoc'
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
new file mode 100755
index 0000000..3ee8495
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+# entrypoint.sh
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile
new file mode 100644
index 0000000..7045074
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile
@@ -0,0 +1,4 @@
+FROM python:3.8-buster
+RUN pip install cfn-lint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml
new file mode 100644
index 0000000..d572407
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml
@@ -0,0 +1,19 @@
+name: 'Customized cfn-lint action for AWS Quick Start org use'
+author: 'Andrew Glenn'
+
+branding:
+ icon: 'file-text'
+ color: 'green'
+
+inputs:
+ program:
+ description: "cfnlint"
+ required: true
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
new file mode 100755
index 0000000..a12bc1e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml
new file mode 100644
index 0000000..fc679da
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml
@@ -0,0 +1,24 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - develop
+jobs:
+ lint:
+ runs-on: ubuntu-18.04
+ name: lint CFN templates
+ steps:
+ - name: Checkout (develop)
+ uses: actions/checkout@v2
+ with:
+ path: checked_out_repo
+ - name: Checkout (custom rules)
+ uses: actions/checkout@v2
+ with:
+ path: team_custom_rules
+ - name: Run local actions
+ id: cfnlint_custom
+ uses: ./docs/boilerplate/.actions/cfnlint-action
+ with:
+ program: "./docs/boilerplate/.utils/cfnlint_custom.sh"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml
new file mode 100644
index 0000000..35b5b5e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml
@@ -0,0 +1,38 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ build-adocs:
+ runs-on: ubuntu-18.04
+ name: asciidoc builder
+ steps:
+ - name: Checkout (main)
+ uses: actions/checkout@v2
+ - name: Get new doc updates
+ run: |
+ wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
+ chmod +x configure_git_env.sh
+ ./configure_git_env.sh
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - name: Generate dynamic content.
+ run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ - name: Run local actions
+ id: adoc
+ uses: ./docs/boilerplate/.actions/asciidoctor-action
+ with:
+ program: "./docs/boilerplate/.utils/build_docs.sh"
+ - name: Stage and Push changes to gh-pages branch.
+ run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Configure gh-pages source and trigger build if necessary.
+ run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg
new file mode 100644
index 0000000..4d23322
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css
new file mode 100644
index 0000000..2b337c0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css
@@ -0,0 +1,771 @@
+
+/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment @import statement to use as custom stylesheet */
+@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:none}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:0}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#34478c;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite::before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt{background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+:not(pre)>code.nobreak{word-wrap:normal}
+:not(pre)>code.nowrap{white-space:nowrap}
+pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
+pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
+pre>code{display:block}
+pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{
+ border-bottom:1px solid #e7e7e9;
+ padding-bottom:.5em;
+ width: 230px;
+}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{
+ font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ text-decoration:none;
+ color:#ccc;
+ display: block;
+ font-size:1rem;
+ line-height: 2rem;
+}
+#toc a:hover{color:#e6e6e6}
+#toc a:active{
+ text-decoration:none;
+ color:#777;
+}
+#toctitle{
+ padding-top:0;
+ overflow:hidden;
+ background:#283e5b;
+ border-bottom: 4px solid #435c7c;
+ width:320px;
+ height:154px;
+ top:0;
+ left:0;
+ color: #283e5b;
+}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background:#1c222a;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;/*! padding:1.25em 1em; */height:100%;overflow:auto;padding-right: 0px;}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{
+ font-size:1.375em;
+ background-repeat: no-repeat;
+ background-size: 160.8px 136.483px;
+ background-position: center;
+ }
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background:#1c222a;padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44;/*! background: #e6e6e6; */}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #e7e7e9}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
+@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.prettyprint{background:#f7f7f8}
+pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
+pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
+pre.prettyprint li code[data-lang]::before{opacity:1}
+pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
+table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
+table.linenotable td.code{padding-left:.75em}
+table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
+pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
+pre.pygments .lineno::before{content:"";margin-right:-.125em}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
+.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
+.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
+.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
+.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
+table.tableblock{max-width:100%;border-collapse:separate}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content>:last-child{margin-bottom:-1.25em}
+td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
+table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
+table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
+table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
+table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
+table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot,table.frame-ends{border-width:1px 0}
+table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
+ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left{margin:.25em .625em 1.25em 0}
+.imageblock.right{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background:#00fafa}
+.black{color:#000}
+.black-background{background:#000}
+.blue{color:#0000bf}
+.blue-background{background:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background:#fa00fa}
+.gray{color:#606060}
+.gray-background{background:#7d7d7d}
+.green{color:#006000}
+.green-background{background:#007d00}
+.lime{color:#00bf00}
+.lime-background{background:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background:#7d0000}
+.navy{color:#000060}
+.navy-background{background:#00007d}
+.olive{color:#606000}
+.olive-background{background:#7d7d00}
+.purple{color:#600060}
+.purple-background{background:#7d007d}
+.red{color:#bf0000}
+.red-background{background:#fa0000}
+.silver{color:#909090}
+.silver-background{background:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+
+/* ------------------------- QS CSS entries ---------------------------- */
+@font-face {
+ font-family: 'Amazon Ember Light';
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-019e0ec3f9b521056e66e31fdcbc8323e5cd1938._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-bc9ed0fce860a46f3cb061034280c23400e6e8b6._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-fd81bacb6a659a8c8c95828226b74594ab985060._V299195749_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-0acf3bc8b64d470d8888d84741a19533394654c6._V299195749_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-af980fe9c64fc17ece72cba4e3e7fdf54babeea6._V299195748_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-4fae4842b3446774d86579b9b024858a848644e8._V299195748_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237381_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237386_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Italic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446113_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446115_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715032_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715033_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Italic'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715033_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715032_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+
+.tip {
+ border-top: 30px solid rgba(92, 184, 92, 0.8);
+ background: #E6F9E6;
+}
+
+.note {
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA;
+}
+
+.warning {
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB;
+}
+
+.caution {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+.important {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+#content {
+ max-width: 100rem;
+ padding-left: 5rem;
+ padding-right: 5rem;
+}
+
+body {
+ font-family: "Amazon Ember Regular", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+}
+
+/* added */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin : 0.85rem 0 1.7rem 0;
+ text-rendering: optimizeLegibility;
+ color: #ec7211;
+}
+
+p {
+ margin: 1rem 0;
+}
+
+/* QS Table of Contents */
+
+#toc {
+ overflow-x: hidden !important;
+}
+
+#toc>ul li {
+ padding : 0.3rem 0.6rem;
+ margin-top : 0;
+ line-height: 1;
+}
+
+#toc>ul li a {
+ line-height: 1.6;
+}
+
+#toc a {
+ /* TOC details */
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ margin-left : -1rem;
+ margin-right : -1rem;
+ padding-left : 1rem;
+ padding-right: 1rem;
+ background : transparent;
+ box-sizing : border-box;
+ cursor : pointer;
+ font-weight : 300 !important;
+}
+
+#toc.toc2 #toctitle{
+ background-image: url('images/AWS-Logo.svg');
+}
+
+/* QS Tables */
+
+table.tableblock .title,
+.imageblock .title {
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ font-size: 1.1rem;
+ color: #34478c;
+}
+table p {
+ margin: 0rem;
+}
+
+/* Add border around hyperlink images */
+a img {
+ border: 1px solid #A4A4A4;
+}
+
+.preview_mode {
+ border-color:#e0e0dc;
+ -webkit-box-shadow:0 1px 4px #e0e0dc;
+ box-shadow:0 1px 4px #e0e0dc;
+ background:#ffffb3;
+ padding-bottom: 2rem;
+}
+.preview_mode .tableblock {
+ background:#ffffb3;
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png
new file mode 100644
index 0000000..769bf7f
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png
new file mode 100644
index 0000000..8efde67
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png
new file mode 100644
index 0000000..5ed57bd
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc
new file mode 100644
index 0000000..e6577d5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc
@@ -0,0 +1,15 @@
+:quickstart-project-name: quickstart-documentation-base
+:partner-product-name: Example Product Name
+:partner-product-short-name: Example Product Name
+:partner-company-name: Example Company Name, Ltd.
+:doc-month: May
+:doc-year: 2020
+:partner-contributors: John Doe and Jane Doe - {partner-company-name}
+:quickstart-contributors: Jim Smith - AWS Global Partner SA, AWS + Joe Jones - Technical Product Manager, AWS
+:deployment_time: 30 minutes / 1 hour
+:default_deployment_region: us-east-1
+// Uncomment these two attributes if you are leveraging
+// - an AWS Marketplace listing.
+// Additional content will be auto-generated based on these attributes.
+// :marketplace_subscription:
+// :marketplace_listing_url: https://example.com/
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc
new file mode 100644
index 0000000..a1250bf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc
@@ -0,0 +1,23 @@
+// Add steps as necessary for accessing the software, post-configuration, and testing. Don’t include full usage instructions for your software, but add links to your product documentation for that information.
+//Should any sections not be applicable, remove them
+
+== Test the deployment
+// If steps are required to test the deployment, add them here. If not, remove the heading
+
+== Post deployment steps
+// If Post-deployment steps are required, add them here. If not, remove the heading
+
+== Best practices for using {partner-product-short-name} on AWS
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any best practices for using the software._
+
+== Security
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any security-related information._
+
+== Other useful information
+//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
+
+_Add any other details that will help the customer use the software on AWS._
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc
new file mode 100644
index 0000000..6dd8947
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc
@@ -0,0 +1,30 @@
+Deploying this Quick Start for a new virtual private cloud (VPC) with
+default parameters builds the following _{partner-product-short-name}_ environment in the
+AWS Cloud.
+
+// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
+[#architecture1]
+.Quick Start architecture for _{partner-product-short-name}_ on AWS
+[link=images/architecture_diagram.png]
+image::../images/architecture_diagram.png[Architecture,width=648,height=439]
+
+As shown in Figure 1, the Quick Start sets up the following:
+
+* A highly available architecture that spans two Availability Zones.*
+* A VPC configured with public and private subnets, according to AWS
+best practices, to provide you with your own virtual network on AWS.*
+
+In the public subnets:
+
+* Managed network address translation (NAT) gateways to allow outbound
+internet access for resources in the private subnets.*
+* A Linux bastion host in an Auto Scaling group to allow inbound Secure
+Shell (SSH) access to EC2 instances in public and private subnets.*
+
+In the private subnets:
+// Add bullet points for any additional components that are included in the deployment. Make sure that the additional components are also represented in the architecture diagram.
+* .
+
+*The template that deploys the Quick Start into an existing VPC skips
+the components marked by asterisks and prompts you for your existing VPC
+configuration.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc
new file mode 100644
index 0000000..520ee86
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc
@@ -0,0 +1,55 @@
+// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
+=== Sign in to your AWS account
+
+. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
+. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
+
+// Optional based on Marketplace listing. Not to be edited
+ifdef::marketplace_subscription[]
+=== Subscribe to the {partner-product-short-name} AMI
+
+This Quick Start requires a subscription to the AMI for {partner-product-short-name} in AWS Marketplace.
+
+. Sign in to your AWS account.
+. {marketplace_listing_url}[Open the page for the {partner-product-short-name} AMI in AWS Marketplace], and then choose *Continue to Subscribe*.
+. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
+ A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
+
+. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
+endif::marketplace_subscription[]
+// \Not to be edited
+
+=== Launch the Quick Start
+
+NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
+
+. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see link:#_deployment_options[deployment options] earlier in this guide.
+
+[cols=2*]
+|===
+^|http://qs_launch_link[Deploy {partner-product-short-name} into a new VPC on AWS^]
+^|http://qs_template_link[View template^]
+
+^|http://qs_launch_link[Deploy {partner-product-short-name} into an existing VPC on AWS^]
+^|http://qs_template_link[View template^]
+|===
+
+WARNING: If you’re deploying {partner-product-short-name} into an existing VPC, make sure that your VPC has two private subnets in different Availability Zones for the workload instances, and that the subnets aren’t shared. This Quick Start doesn’t support https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html[shared subnets^]. These subnets require https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables, to allow the instances to download packages and software without exposing them to the internet.
+
+Also, make sure that the domain name option in the DHCP options is configured as explained in the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[Amazon VPC documentation^]. You provide your VPC settings when you launch the Quick Start.
+
+Each deployment takes about {deployment_time} to complete.
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-short-name} will be built. The template is launched in the {default_deployment_region} Region by default.
+
+// *Note:* This deployment includes Amazon EFS, which isn’t currently supported in all AWS Regions. For a current list of supported Regions, see the https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html[endpoints and quotas webpage].
+
+[start=3]
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary.
+
+// In the following tables, parameters are listed by category and described separately for the two deployment options:
+
+// * Parameters for deploying {partner-product-short-name} into a new VPC
+// * Parameters for deploying {partner-product-short-name} into an existing VPC
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc
new file mode 100644
index 0000000..6ca9d9e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc
@@ -0,0 +1,8 @@
+// There are generally two deployment options. If additional are required, add them here
+
+This Quick Start provides two deployment options:
+
+* *Deploy {partner-product-short-name} into a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys {partner-product-short-name} into this new VPC.
+* *Deploy {partner-product-short-name} into an existing VPC*. This option provisions {partner-product-short-name} in your existing AWS infrastructure.
+
+The Quick Start provides separate templates for these options. It also lets you configure Classless Inter-Domain Routing (CIDR) blocks, instance types, and {partner-product-short-name} settings, as discussed later in this guide.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc
new file mode 100644
index 0000000..37ec473
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc
@@ -0,0 +1,21 @@
+// Add any tips or answers to anticipated questions. This could include the following troubleshooting information. If you don’t have any other Q&A to add, change “FAQ” to “Troubleshooting.”
+
+== FAQ
+
+*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
+
+*A.* If AWS CloudFormation fails to create the stack, we recommend that you relaunch the template with *Rollback on failure* set to *Disabled*. (This setting is under *Advanced* in the AWS CloudFormation console, *Options* page.) With this setting, the stack’s state is retained and the instance is left running, so you can troubleshoot the issue. (For Windows, look at the log files in %ProgramFiles%\Amazon\EC2ConfigService and C:\cfn\log.)
+// If you’re deploying on Linux instances, provide the location for log files on Linux, or omit this sentence.
+
+WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Please make sure to delete the stack when you finish troubleshooting.
+
+For additional information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^] on the AWS website.
+
+*Q.* I encountered a size limitation error when I deployed the AWS CloudFormation templates.
+
+*A.* We recommend that you launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template size limitations. For more information about AWS CloudFormation quotas, see the http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS documentation^].
+
+
+== Troubleshooting
+
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc
new file mode 100644
index 0000000..9706eb6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc
@@ -0,0 +1,13 @@
+// Include details about the license and how they can sign up. If no license is required, clarify that.
+
+These two paragraphs provide an example of the details you can provide. Provide links as appropriate.
+
+
+Example content below:
+
+_This Quick Start requires a license for {partner-product-short-name}. To use the Quick Start in your production environment, sign up for a license at . When you launch the Quick Start, place the license key in an S3 bucket and specify its location._
+
+_If you don’t have a license, the Quick Start deploys with a trial license. The trial license gives you days of free usage in a non-production environment. After this time, you can upgrade to a production license by following the instructions at ._
+
+// Or, if the deployment uses an AMI, update this paragraph. If it doesn’t, remove the paragraph.
+_The Quick Start requires a subscription to the Amazon Machine Image (AMI) for {partner-product-short-name}, which is available from https://aws.amazon.com/marketplace/[AWS Marketplace^]. Additional pricing, terms, and conditions may apply. For instructions, see link:#step-2.-subscribe-to-the-software-ami[step 2] in the deployment section._
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc
new file mode 100644
index 0000000..c3dbbc2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc
@@ -0,0 +1,7 @@
+// Replace the content in <>
+// Identify your target audience and explain how/why they would use this Quick Start.
+//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
+
+This Quick Start reference deployment guide provides step-by-step instructions for deploying {partner-product-short-name} on the AWS Cloud.
+
+This Quick Start is for users who
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc
new file mode 100644
index 0000000..f08b5d9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc
@@ -0,0 +1,13 @@
+// If no preperation is required, remove all content from here
+
+==== Prepare your AWS account
+
+_Describe any setup required in the AWS account prior to template launch_
+
+==== Prepare your {partner-company-name} account
+
+_Describe any setup required in the partner portal/account prior to template launch_
+
+==== Prepare for the deployment
+
+_Describe any preparation required to complete the product build, such as obtaining licenses or placing files in S3_
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc
new file mode 100644
index 0000000..2582a99
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc
@@ -0,0 +1,5 @@
+// Replace the content in <>
+// Briefly describe the software. Use consistent and clear branding.
+// Include the benefits of using the software on AWS, and provide details on usage scenarios.
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc
new file mode 100644
index 0000000..d052fb8
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc
@@ -0,0 +1,4 @@
+The following Regions are currently supported by this Quick Start.
+
+- _us-east-1 (N. Virginia)_ (EXAMPLE)
+- _us-east-2 (Ohio)_ (EXAMPLE)
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc
new file mode 100644
index 0000000..4f1edc5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc
@@ -0,0 +1,14 @@
+// Replace the in each row to specify the number of resources used in this deployment. Remove the rows for resources that aren’t used.
+|===
+|Resource |This deployment uses
+
+// Space needed to maintain table headers
+|VPCs |
+|Elastic IP addresses |
+|AWS Identity and Access Management (IAM) security groups |
+|IAM roles |
+|Auto Scaling groups |
+|Application Load Balancers |
+|Network Load Balancers |
+| instances |
+|===
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc
new file mode 100644
index 0000000..49f63b3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc
@@ -0,0 +1,6 @@
+// Replace the content in <>
+// Describe or link to specific knowledge requirements; for example: “familiarity with basic concepts in the areas of networking, database operations, and data encryption” or “familiarity with .”
+
+This Quick Start assumes familiarity with .
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
new file mode 100644
index 0000000..89b53db
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
@@ -0,0 +1,22 @@
+# Copyright 2020-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Amazon Software License (the "License"). You may not use this file except in compliance with the License.
+# A copy of the License is located at
+#
+# http://aws.amazon.com/asl/
+#
+# or in the "license" file accompanying this file.
+# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
+# See the License for the specific language governing permissions and limitations under the License.
+
+FROM asciidoctor/docker-asciidoctor
+
+RUN apk add --no-cache \
+ aws-cli \
+ py3-pip \
+ python3
+RUN wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/requirements.txt -O /tmp/req.txt
+RUN ln -sf /usr/bin/pip3 /usr/bin/pip
+RUN ln -sf /usr/bin/python3 /usr/bin/python
+RUN pip3 install -r /tmp/req.txt
+ENTRYPOINT ["dockerd-entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh
new file mode 100755
index 0000000..cd18ea1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+ASCIIDOC_ATTRIBUTES=""
+GITHUB_REPO_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
+if [ -d docs/images ]; then
+ mv docs/images images
+fi
+if [ "${GITHUB_REPO_OWNER}" == "aws-quickstart" ]; then
+ cp docs/boilerplate/.css/AWS-Logo.svg images/
+ if [ "${GITHUB_REF}" == "refs/heads/master" ] || [ "${GITHUB_REF}" == "refs/heads/main" ]; then
+ ASCIIDOC_ATTRIBUTES="-a production_build"
+ fi
+fi
+asciidoctor --base-dir docs/ --backend=html5 -o ../index.html -w --failure-level ERROR --doctype=book -a toc2 ${ASCIIDOC_ATTRIBUTES} docs/boilerplate/index.adoc
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh
new file mode 100755
index 0000000..dea5760
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+if [[ -d "${GITHUB_WORKSPACE}/team_custom_rules" ]]; then
+ # Install requirements for custom rules, plus the rules themselves.
+ cd ${GITHUB_WORKSPACE}/team_custom_rules
+ pip install -r requirements.txt
+ python setup.py install
+ cd ${GITHUB_WORKSPACE}
+ # back to normal
+ CFNLINT_ARGS="-a ${GITHUB_WORKSPACE}/team_custom_rules/qs_cfn_lint_rules"
+ echo "Using custom ruleset"
+else
+ echo "NOT using custom ruleset"
+
+fi
+
+CFNLINT_JSON_OUT=$(mktemp)
+set +e
+cfn-lint ${CFNLINT_ARGS} -i W --templates templates/* --format json > ${CFNLINT_JSON_OUT}
+CFNLINT_EXIT_CODE=$?
+set -e
+python docs/boilerplate/.utils/pretty_cfnlint_output.py ${CFNLINT_JSON_OUT}
+exit ${CFNLINT_EXIT_CODE}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
new file mode 100755
index 0000000..c12074e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -eu
+
+repo_uri="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+
+remote_name="doc-upstream"
+main_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+target_branch="gh-pages"
+
+cd "$GITHUB_WORKSPACE"
+git config --local user.email "action@github.com"
+git config --local user.name "GitHub Action"
+git add -A
+git add images
+git add index.html
+git commit -a -m "Updating documentation"
+if [ $? -ne 0 ]; then
+ echo "nothing to commit"
+ exit 0
+fi
+
+git remote set-url origin ${repo_uri}
+git push origin HEAD:${target_branch} --force
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
new file mode 100755
index 0000000..4157868
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+exit 0
+# set -e
+# curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
+# sudo apt-get install jq -y
+# PAGES_STATUS=$(bin/hub api repos/${GITHUB_REPOSITORY}/pages | jq '.status' | sed -e 's/"//g')
+# if [ "${PAGES_STATUS}" != "null" ]; then
+# exit 0
+# fi
+
+# bin/hub api -H Accept:application/vnd.github.switcheroo-preview+json repos/${GITHUB_REPOSITORY}/pages -f {"source":{"branch":"gh-pages"}}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh
new file mode 100755
index 0000000..f6b6eb1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh
@@ -0,0 +1,32 @@
+#!/bin/bash -e
+set -x
+git remote update
+git fetch
+set +e
+git remote set-head origin --auto
+default_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+doc_commit_id=$(git submodule | grep docs/boilerplate | cut -d - -f 2 | cut -f 1 -d " ")
+git rev-parse --verify origin/gh-pages
+CHECK_BRANCH=$?
+set -e
+if [[ $CHECK_BRANCH -ne 0 ]];then
+ git checkout -b gh-pages
+ git push origin gh-pages
+else
+ git checkout gh-pages
+# git checkout --track origin/gh-pages
+fi
+git rm -rf .
+touch .gitmodules
+git restore -s origin/${default_branch} docs
+set +e
+git rm -r docs/boilerplate -r
+rm -rf docs/boilerplate
+set -e
+git restore -s origin/${default_branch} templates
+git submodule add https://github.com/aws-quickstart/quickstart-documentation-base-common.git docs/boilerplate
+cd docs/boilerplate
+git checkout "${doc_commit_id}"
+cd ../../
+rm configure_git_env.sh
+mv docs/images images
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh
new file mode 100755
index 0000000..be6a668
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh
@@ -0,0 +1,34 @@
+#!/bin/bash -e
+# # Work in progress.
+# exit 1
+
+BOILERPLATE_DIR="docs/boilerplate"
+GENERATED_DIR="docs/generated"
+SPECIFIC_DIR="docs/partner_editable"
+# Creating directories.
+mkdir -p ${GENERATED_DIR}/parameters
+mkdir -p ${GENERATED_DIR}/regions
+mkdir -p ${GENERATED_DIR}/services
+mkdir -p ${SPECIFIC_DIR}
+mkdir -p docs/images
+mkdir -p .github/workflows
+
+# Copying content.
+rsync -avP ${BOILERPLATE_DIR}/.images/ docs/images/
+rsync -avP ${BOILERPLATE_DIR}/.specific/ ${SPECIFIC_DIR}
+
+# enabling workflow.
+cp ${BOILERPLATE_DIR}/.actions/main-docs-build.yml .github/workflows/
+
+
+# creating placeholders.
+echo "// placeholder" > ${GENERATED_DIR}/parameters/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/regions/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/metadata.adoc
+
+touch .nojekyll
+
+git add -A docs/
+git add .github/
+git add .nojekyll
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh
new file mode 100644
index 0000000..27bcae7
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh
@@ -0,0 +1,44 @@
+#!/bin/bash -e
+# This file is meant to be the functional equalivent of the github actions workflow.
+#
+# // 5 env vars are required to use this.
+# - DOCBUILD_BOILERPLATE_S3_BUCKET
+# This defines the S3 bucketwhere a zip'd copy of *this repo* is located.
+# Example Value: "my-bucket-name-here"
+# - DOCBUILD_BOILERPLATE_S3_KEY
+# This defines the S3 Object key for the above-mentioned ZIP file.
+# Example Value: /path/to/my/file.zip
+# - DOCBUILD_CONTENT_S3_BUCKET
+# This defines the S3 bucket where a zip'd copy of repo to build is located.
+# (can be the same bucket)
+# Example value: "my-bucket-name-here"
+# - DOCBUILD_CONTENT_S3_KEY
+# This is the key where a ZIP of your content repo is located.
+# Example Value: "/path/to/my/other_file.zip"
+# - DOCBUILD_DESTINATION_S3_BUCKET
+# Bucket to upload the generated content to.
+# - DOCBUILD_DESTINATION_S3_KEY
+# S3 Key prefix for the generated content
+# - GITHUB_REPOSITORY
+# Easy identifier of the project that documentation is being built for.
+# - EX: jim-jimmerson/foobar
+#
+#
+#
+# Structure
+# --- Content repo is unzipped.
+# docs/boilerplate -- Boilerplate repo is unzipped here.
+DL_DIR=$(mktemp -d)
+WORKING_DIR=$(mktemp -d)
+aws s3 cp s3://${DOCBUILD_BOILERPLATE_S3_BUCKET}/${DOCBUILD_BOILERPLATE_S3_KEY} ${DL_DIR}/boilerplate.zip
+aws s3 cp s3://${DOCBUILD_CONTENT_S3_BUCKET}/${DOCBUILD_CONTENT_S3_KEY} ${DL_DIR}/content.zip
+
+unzip ${DL_DIR}/content.zip -d ${WORKING_DIR}
+rm -rf ${WORKING_DIR}/docs/boilerplate
+unzip ${DL_DIR}/boilerplate.zip -d ${WORKING_DIR}/docs/boilerplate
+
+cd ${WORKING_DIR}
+./docs/boilerplate/.utils/generate_dynamic_content.sh
+./docs/boilerplate/.utils/build_docs.sh
+
+aws s3 sync ${WORKING_DIR} s3://${DOCBUILD_DESTINATION_S3_BUCKET}/${DOCBUILD_DESTINATION_S3_KEY}/ --cache-control max-age=0,no-cache,no-store,must-revalidate --acl public-read
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh
new file mode 100755
index 0000000..de89074
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Wrapper to generate parameter tables within asciidoc workflow.
+set -e
+#sudo apt-get install pandoc -y
+pip3 install -r docs/boilerplate/.utils/requirements.txt;
+echo "Gen tables"
+python docs/boilerplate/.utils/generate_parameter_tables.py
+echo "Gen metadata"
+python docs/boilerplate/.utils/generate_metadata_attributes.py
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py
new file mode 100755
index 0000000..940ae45
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+from pathlib import Path
+
+
+def get_cfn(filename):
+ _decoded = cfnlint.decode.decode(filename, False)[0]
+ return _decoded
+
+def fetch_metadata():
+ metadata_attributes = set()
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ template = get_cfn(Path(yaml_cfn_file))
+ if not template:
+ raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
+ _resources = template['Resources']
+ for _resource in _resources.values():
+ _type = _resource['Type'].lower()
+ metadata_attributes.add(_type.split('::')[1])
+ metadata_attributes.add(_type.replace('::','_'))
+ with open('docs/generated/services/metadata.adoc', 'w') as f:
+ f.write('\n')
+ for attr in sorted(metadata_attributes):
+ f.write(f":template_{attr}:\n")
+
+if __name__ == '__main__':
+ fetch_metadata()
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py
new file mode 100755
index 0000000..26434bf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+import datetime
+from pathlib import Path
+
+
+def get_cfn(filename):
+ _decoded = cfnlint.decode.decode(filename, False)[0]
+ return _decoded
+
+def _generate_table_name_and_header(label_name):
+ data = []
+ data.append(f"\n.{label_name}")
+ data.append('[width="100%",cols="16%,11%,73%",options="header",]')
+ data.append("|===")
+ data.append("|Parameter label (name) |Default value|Description")
+ return "\n".join(data)
+
+def _generate_per_label_table_entry(label, param, default, description):
+ data = []
+ if not label:
+ label = "**NO_LABEL**"
+ data.append(f"|{label}")
+ data.append(f"(`{param}`)|`{default}`|{description}")
+ return '\n'.join(data)
+
+def just_pass():
+ template_entrypoints = {}
+ template_order = {}
+ found_files_with_glob_pattern=False
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ found_files_with_glob_pattern=True
+ print(f"Working on {yaml_cfn_file}")
+ template = get_cfn(Path(yaml_cfn_file))
+ if not template:
+ raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
+ entrypoint = template.get('Metadata', {}).get('QuickStartDocumentation', {}).get('EntrypointName')
+ if not entrypoint:
+ print(f"- No documentation entrypoint found. Continuing.")
+ continue
+ order = template.get('Metadata',{}).get('QuickStartDocumentation',{}).get('Order')
+ if not order:
+ print(f"- No documentation order found. Assigning x.")
+ order = 'x'
+ _pf = Path(yaml_cfn_file).stem + ".adoc"
+ p_file = f"docs/generated/parameters/{_pf}"
+ template_entrypoints[p_file.split('/')[-1]] = entrypoint
+ template_order[p_file.split('/')[-1]] = str(order)
+
+ label_mappings = {}
+ reverse_label_mappings = {}
+ parameter_mappings = {}
+ parameter_labels = {}
+ no_groups = {}
+
+ def determine_optional_value(param):
+ optional = template['Metadata'].get('QuickStartDocumentation', {}).get('OptionalParameters')
+ if optional and (param in optional):
+ return '__Optional__'
+ return '**__Requires input__**'
+
+ for label in template['Metadata']['AWS::CloudFormation::Interface']['ParameterGroups']:
+ label_name = label['Label']['default']
+ label_params = label['Parameters']
+ label_mappings[label_name] = label_params
+ for ln in label_params:
+ reverse_label_mappings[ln] = label_name
+
+ for label_name, label_data in template['Metadata']['AWS::CloudFormation::Interface']['ParameterLabels'].items():
+ parameter_labels[label_name] = label_data.get('default')
+
+ for param_name, param_data in template['Parameters'].items():
+ if param_data.get('Default') == '':
+ param_data['Default'] = '**__Blank string__**'
+ parameter_mappings[param_name] = param_data
+ if not reverse_label_mappings.get(param_name):
+ no_groups[param_name] = param_data
+
+ adoc_data = ""
+ for label_name, label_params in label_mappings.items():
+ header = _generate_table_name_and_header(label_name)
+ adoc_data += header
+
+ for lparam in label_params:
+
+ param_data = _generate_per_label_table_entry(
+ parameter_labels.get(lparam, ''),
+ lparam,
+ parameter_mappings[lparam].get('Default', determine_optional_value(lparam)),
+ parameter_mappings[lparam].get('Description', 'NO_DESCRIPTION')
+ )
+ adoc_data += param_data
+ adoc_data += "\n|==="
+
+ print(f"- Generating: {p_file}")
+ with open (p_file, 'w') as p:
+ p.write(adoc_data)
+ if not found_files_with_glob_pattern:
+ raise Exception("No files matching templates/*.template.(json|yaml|yml) were found. Unable to build documentation. Exiting.")
+ if not template_entrypoints:
+ raise Exception("No documentation entrypoints (Metadata => QuickStartDocumentation => EntrypointName) were found. Unable to build documentation. Exiting.")
+ with open('docs/generated/parameters/index.adoc', 'w') as f:
+ for template_file, order in sorted(template_order.items(), key=lambda x: x[1]):
+ print (f"Index - {order} - {template_entrypoints.get(template_file)} - {template_file}")
+ f.write(f"\n=== {template_entrypoints.get(template_file)}\n")
+ f.write(f"include::{template_file}[]\n")
+
+if __name__ == '__main__':
+ print("---")
+ print("> Milton, don't be greedy. Let's pass it along and make sure everyone gets a piece.")
+ print("> Can I keep a piece, because last time I was told that...")
+ print("> Just pass.")
+ print("---")
+ just_pass()
+ print("---")
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py
new file mode 100755
index 0000000..0f66f4f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+import sys
+import json
+
+fn = sys.argv[1]
+
+severity_to_icon = {
+ 'Warning':u'\u270B',
+ 'Error':u'\u274C'
+}
+
+results = {}
+
+with open(fn) as f:
+ x = json.load(f)
+
+for rule_match in x:
+ _fn = rule_match['Filename']
+ _sl = rule_match['Location']['Start']['LineNumber']
+ _el = rule_match['Location']['End']['LineNumber']
+ _msg = rule_match['Message']
+ _lvl = rule_match['Level']
+ _rid = rule_match['Rule']['Id']
+ try:
+ results[_fn][_sl] = (_lvl, _rid, _msg)
+ except KeyError:
+ results[_fn] = {_sl:(_lvl, _rid, _msg)}
+
+for k in sorted(results.keys()):
+ print('\n{}'.format(k))
+ for l,v in results[k].items():
+ print("- {} [{}] ({}) | Line: {} - {}".format(severity_to_icon.get(v[0]), v[0].upper(), v[1], l, v[2]))
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt
new file mode 100644
index 0000000..50f4d98
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt
@@ -0,0 +1,5 @@
+requests
+cfn-lint
+pathlib
+datetime
+ruamel.yaml
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS
new file mode 100644
index 0000000..ea1bf32
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS
@@ -0,0 +1,2 @@
+* @aws-quickstart/sa
+/.specific/* @aws-quickstart/tw @aws-quickstart/sa
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc
new file mode 100644
index 0000000..7800472
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc
@@ -0,0 +1,112 @@
+
+[.text-center]
+[discrete]
+== {partner-product-name} on the AWS Cloud
+:doctitle: {partner-product-name} on the AWS Cloud
+:!toc:
+[.text-left]
+include::../{includedir}/introduction.adoc[]
+
+== Overview
+include::../{includedir}/overview.adoc[]
+
+
+== {partner-product-name} on AWS
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/product_description.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/product_description.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Cost
+include::../{includedir}/cost.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Planning the deployment
+
+include::../{includedir}/planning_deployment.adoc[]
+
+== Deployment steps
+include::../{includedir}/deployment_steps.adoc[]
+
+// == Parameters
+// include::../{generateddir}/parameters/index.adoc[]
+
+// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+ifdef::parameters_as_appendix[]
+== Parameter reference
+
+include::../{generateddir}/parameters/index.adoc[]
+endif::parameters_as_appendix[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. If you’d like to submit code, please review the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
+
+
+== GitHub repository
+
+You can visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, to post your comments,
+and to share your customizations with others.
+
+'''
+include::../{includedir}/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc
new file mode 100644
index 0000000..65629c4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc
@@ -0,0 +1,11 @@
+
+You are responsible for the cost of the AWS services used while running
+this Quick Start. There is no additional cost for
+using the Quick Start.
+
+The AWS CloudFormation template for this Quick Start includes
+configuration parameters that you can customize. Some of the settings,
+such as the instance type, affect the cost of deployment. For cost estimates,
+see the pricing pages for each AWS service you use. Prices are subject to change.
+
+TIP: After you deploy the Quick Start, enable the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-gettingstarted-turnonreports.html[AWS Cost and Usage Report^] to deliver billing metrics to an Amazon Simple Storage Service (Amazon S3) bucket in your account. It provides cost estimates based on usage throughout each month and aggregates the data at the end of the month. For more information about the report, see the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-costusage.html[AWS documentation^].
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc
new file mode 100644
index 0000000..57990be
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc
@@ -0,0 +1,42 @@
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deploy_steps.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{generateddir}/services/metadata.adoc[]
+
+ifndef::disable_regions[]
+// We can also pull in regions automatically.
+==== Supported Regions
+
+ifdef::template_not_all_regions[]
+This deployment includes , which isn’t currently supported in https://aws.amazon.com/about-aws/global-infrastructure/[all AWS Regions^].
+endif::template_not_all_regions[]
+
+ifdef::auto_populate_regions[]
+The following Regions are currently supported by this Quick Start.
+include::../{generateddir}/regions/index.adoc[]
+endif::auto_populate_regions[]
+
+ifndef::auto_populate_regions[]
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/regions.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+endif::auto_populate_regions[]
+
+TIP: Certain Regions are available on an opt-in basis. Refer to the AWS Documentation on https://docs.aws.amazon.com/general/latest/gr/rande-manage.html[Managing Regions^] for more information.
+
+endif::disable_regions[]
+ifdef::template_ec2[]
+==== EC2 key pairs
+ifndef::production_build[====]
+ifndef::production_build[_This section is conditional on EC2 instances being used in the Cloudformation Templates_]
+ifndef::production_build[====]
+Make sure that at least one https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pair^] exists in your AWS account in the Region where you plan to deploy the Quick Start. Make note of the key pair name. You need it during deployment. To create a key pair, follow the https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[instructions in the AWS documentation^].
+
+For testing or proof-of-concept purposes, we recommend creating a new key pair instead of using one that’s already being used by a production instance.
+endif::template_ec2[]
+
+==== IAM permissions
+//todo: scope of least-privilege
+Before launching the Quick Start, you must log in to the AWS Management Console with https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html[IAM permissions^] for the resources and actions the templates deploy.
+
+The _AdministratorAccess_ managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions.
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/pre-reqs.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/pre-reqs.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+==== Deployment options
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deployment_options.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/deployment_options.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/parameters/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/parameters/index.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/parameters/index.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/regions/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/regions/index.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/regions/index.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/index.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/index.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/metadata.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/metadata.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/generated/services/metadata.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/architecture_diagram.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/architecture_diagram.png
new file mode 100644
index 0000000..44926ab
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/architecture_diagram.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/aws-quickstart-graphic.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/aws-quickstart-graphic.png
new file mode 100644
index 0000000..8efde67
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/aws-quickstart-graphic.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/cfn_outputs.png b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/cfn_outputs.png
new file mode 100644
index 0000000..15ac159
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/images/cfn_outputs.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/_settings.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/_settings.adoc
new file mode 100644
index 0000000..e8fc96a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/_settings.adoc
@@ -0,0 +1,14 @@
+:quickstart-project-name: quickstart-aws-vpc
+:partner-product-name: Amazon VPC
+:partner-company-name:
+:doc-month: July
+:doc-year: 2020
+:partner-contributors:
+:quickstart-contributors: Santiago Cardenas, AWS Quick Start team
+:deployment_time: 5 minutes
+:default_deployment_region: us-west-2
+// Uncomment these two attributes if you are leveraging
+// - an AWS Marketplace listing.
+// Additional content will be auto-generated based on these attributes.
+// :marketplace_subscription:
+// :marketplace_listing_url: https://example.com/
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/additional_info.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/additional_info.adoc
new file mode 100644
index 0000000..c031ad1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/additional_info.adoc
@@ -0,0 +1,302 @@
+// Add steps as necessary for accessing the software, post-configuration, and testing. Don’t include full usage instructions for your software, but add links to your product documentation for that information.
+//Should any sections not be applicable, remove them
+
+== Add AWS services or other applications
+// If Post-deployment steps are required, add them here. If not, remove the heading
+
+After you use this Quick Start to build your VPC environment, you can deploy additional
+Quick Starts or deploy your own applications on top of this AWS infrastructure. If you
+decide to extend your AWS environment with https://aws.amazon.com/quickstart/[additional Quick Starts] for trial or production
+use, we recommend that you choose the option to deploy the Quick Start into an existing
+VPC, where that option is available.
+
+If you decide to deploy additional private subnets with dedicated network ACLs, make sure
+you review the configuration and adjust it accordingly. By default, the custom ACLs are
+configured to allow all inbound and outbound traffic to flow in order to facilitate the
+deployment of additional infrastructure. For more information, see https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs] and
+https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_NACLs.html[Recommended Network ACL Rules for Your VPC] in the Amazon VPC documentation.
+
+== Best practices for using {partner-product-name} on AWS
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+The architecture built by this Quick Start supports AWS best practices for high availability
+and security. The Quick Start provides:
+
+* Up to four Availability Zones for high availability and disaster recovery. (AWS
+recommends maximizing your use of Availability Zones to isolate a data center outage.)
+Availability Zones are geographically distributed within a region and spaced for best
+insulation and stability in the event of a natural disaster.
+
+* Separate subnets for unique routing requirements. AWS recommends using public
+subnets for external-facing resources and private subnets for internal resources. For
+each Availability Zone, this Quick Start provisions one public subnet and one private
+subnet by default. (If you need public subnets only, you can disable the creation of the
+private subnets.) For subnet sizing strategies, see the next section.
+
+* Additional layer of security. AWS recommends using network ACLs as firewalls to
+control inbound and outbound traffic at the subnet level. This Quick Start provides an
+option to create a network ACL protected subnet in each Availability Zone. These
+network ACLs provide individual controls that you can customize as a second layer of
+defense.
+
+We recommend that you use network ACLs sparingly for the following reasons: they can
+be complex to manage, they are stateless, every IP address must be explicitly opened in
+each (inbound/outbound) direction, and they affect a complete subnet. We recommend
+that you use security groups more often than network ACLs, and create and apply these
+based on a schema that works for your organization. Some examples are server roles and
+application roles. For more information about security groups and network ACLs, see
+the link:#_security[Security] section later in this guide.
+
+* Independent route tables configured for every private subnet to control the flow of
+traffic within and outside the Amazon VPC. The public subnets share a single routing
+table, because they all use the same Internet gateway as the sole route to communicate
+with the Internet.
+
+* Highly available NAT gateways deployed, that offer major advantages in terms of deployment,
+availability, and maintenance over NAT instances. For more information see the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-comparison.html[comparison]
+provided in the Amazon VPC documentation.
+
+* Spare capacity for additional subnets, to support your environment as it grows or
+changes over time.
+
+For additional information about these best practices, see the following documentation:
+
+* http://d0.awsstatic.com/aws-answers/AWS_Single_VPC_Design.pdf[AWS Single VPC Design] from the AWS Answers website
+* http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html[Your VPC and Subnets] in the Amazon VPC documentation
+* https://medium.com/aws-activate-startup-blog/practical-vpc-design-8412e1a18dcc[Practical VPC Design] in the AWS Startups blog
+* http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs] in the Amazon VPC documentation
+
+=== Subnet Sizing
+
+In this Quick Start, the sizing of CIDR blocks used in the subnets is based on a typical
+deployment, where private subnets would have roughly double the number of instances
+found in public subnets. However, during deployment, you can use the CIDR block
+parameters to resize the CIDR scopes to meet your architectural needs.
+
+In the default subnet allocation, the VPC is divided into subnet types and then further
+segmented per Availability Zone, as illustrated in link:#_architecture[Figure 1]. The Quick Start provides the
+following default CIDR block sizes to maximize capacity:
+
+[cols="60,40a", options="header",grid=none, frame=topbot, stripes=even]
+|===
+| VPC
+^| 10.0.0.0/16
+
+|Private subnets A
+^|10.0.0.0/17
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Availability Zone 1
+^! 10.0.0.0/19
+! Availability Zone 2
+^! 10.0.32.0/19
+! Availability Zone 3
+^! 10.0.64.0/19
+! Availability Zone 4
+^! 10.0.96.0/19
+!===
+|Public subnets
+^|10.0.128.0/18
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Availability Zone 1
+^! 10.0.128.0/20
+! Availability Zone 2
+^! 10.0.144.0/20
+! Availability Zone 3
+^! 10.0.160.0/20
+! Availability Zone 4
+^! 10.0.176.0/20
+!===
+
+|Private subnets B with
+dedicated custom network
+ACL
+^|10.0.192.0/19
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Availability Zone 1
+^! 10.0.192.0/21
+! Availability Zone 2
+^! 10.0.200.0/21
+! Availability Zone 3
+^! 10.0.208.0/21
+! Availability Zone 4
+^! 10.0.216.0/21
+!===
+
+|Spare subnet capacity
+^|10.0.224.0/19
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Availability Zone 1
+^! 10.0.224.0/21
+! Availability Zone 2
+^! 10.0.232.0/21
+! Availability Zone 3
+^! 10.0.240.0/21
+! Availability Zone 4
+^! 10.0.248.0/21
+!===
+|===
+
+Alternatively, there may be situations where you would want to separate the CIDR scopes
+by dividing the VPC into Availability Zones and then into subnet types. The recommended
+CIDR blocks to maximize capacity for this scenario are as follows:
+
+[cols="60,40a", options="header",grid=none, frame=topbot, stripes=even]
+|===
+| VPC
+^| 10.0.0.0/16
+
+|Availability Zone 1
+^|10.0.0.0/18
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Private subnet A
+^! 10.0.0.0/19
+! Public subnet
+^! 10.0.32.0/20
+! Private subnet B
+^! 10.0.48.0/21
+! Spare subnet capacity
+^! 10.0.56.0/21
+!===
+
+|Availability Zone 2
+^|10.0.64.0/18
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Private subnet A
+^! 10.0.64.0/19
+! Public subnet
+^! 10.0.96.0/20
+! Private subnet B
+^! 10.0.112.0/21
+! Spare subnet capacity
+^! 10.0.120.0/21
+!===
+
+|Availability Zone 3
+^|10.0.128.0/18
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Private subnet A
+^! 10.0.128.0/19
+! Public subnet
+^! 10.0.160.0/20
+! Private subnet B
+^! 10.0.176.0/21
+! Spare subnet capacity
+^! 10.0.184.0/21
+!===
+
+|Availability Zone 4
+^|10.0.192.0/18
+|
+|
+[cols="2,1", grid=rows, frame=topbot]
+!===
+! Private subnet A
+^! 10.0.192.0/19
+! Public subnet
+^! 10.0.224.0/20
+! Private subnet B
+^! 10.0.240.0/21
+! Spare subnet capacity
+^! 10.0.248.0/21
+!===
+|===
+
+To customize the CIDR ranges for this scenario or to implement your own segmentation
+strategy, you can configure the Quick Start parameters described in link:#_launch_a_new_vpc[Launch a new VPC]. For more
+information about VPC and subnet sizing, see the https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html#VPC_Sizing[AWS documentation].
+
+
+
+== Security
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+=== Public and Private Subnets
+This Quick Start provisions one public and one private subnet in each Availability Zone by
+default. You can also choose to add additional private subnets with dedicated network
+ACLs.
+
+A public subnet is directly routable to the Internet via a route in the route table that points
+to the Internet gateway. This type of subnet allows the use of Elastic IPs and public IPs, and
+(if the security group and network ACLs permit) a public subnet is reachable from the
+Internet. A public subnet is useful as a DMZ infrastructure for web servers and for Internetfacing Elastic Load Balancing (ELB) load balancers.
+
+Private subnets can indirectly route to the Internet via a NAT gateway.
+NAT Gateways reside in a public subnet in order to route directly to the Internet.
+Instances in a private subnet are not externally reachable from outside the Amazon VPC,
+regardless of whether they have a public or Elastic IP address attached. A private subnet is
+useful for application servers and databases.
+
+=== Using Security Groups and Network ACLs
+The following table describes the differences between security groups and network ACLs:
+
+|===
+|Security group |Network ACL
+
+// Space needed to maintain table headers
+|Operates at the instance level (first layer of defense) |Operates at the subnet level (second layer of defense)
+|Supports allow rules only |Supports allow rules and deny rules
+|Is stateful: Return traffic is automatically allowed, regardless of any rules|Is stateless: Return traffic must be explicitly allowed by rules
+|We evaluate all rules before deciding whether to allow traffic|We process rules in numerical order when deciding whether to allow traffic
+|Applies to an instance only if someone specifies the security group when launching the instance, or associates the security group with the instance later on| Automatically applies to all instances in the subnets it's associated with (backup layer of defense, so you don't have to rely on someone specifying the security group)
+|===
+
+The network ACLs in this Quick Start are configured as follows:
+
+* All public and private subnets are associated with the same default network ACL, which
+is automatically created for all VPCs on AWS. This network ACL allows all inbound and
+outbound traffic. As you deploy instances and services, you should associate them with
+security groups and allow only the traffic and ports needed for your application.
+* Each additional private subnet is associated with a custom network ACL (1:1 ratio).
+These network ACLs are initially configured to allow all inbound and outbound traffic to
+facilitate the deployment of additional instances and services. As with the other subnets,
+you should use security groups to secure the environment internally, and you can lock
+down the custom network ACLs during or after deployment as required by your
+application.
+
+== Other useful information
+//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
+
+=== AWS services
+* http://aws.amazon.com/documentation/cloudformation/[AWS CloudFormation]
+
+* Amazon EC2
+** http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/[User guide for Microsoft Windows]
+** https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/[User guide for Linux:]
+
+* http://aws.amazon.com/documentation/vpc/[Amazon VPC]
+** https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html[Security groups]
+** https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs]
+** http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html[NAT gateways]
+
+* Best practices for implementing VPCs
+** http://d0.awsstatic.com/aws-answers/AWS_Single_VPC_Design.pdf[AWS Single VPC Design]
+** http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html[Your VPC and Subnets]
+** https://medium.com/aws-activate-startup-blog/practical-vpc-design-8412e1a18dcc[Practical VPC Design]
+
+=== Quick Start reference deployments
+* https://aws.amazon.com/quickstart/[AWS Quick Start home page]
+
+=== GitHub Repository
+You can visit our https://fwd.aws/rdXz7[GitHub repository] to download the templates and scripts for this Quick
+Start, to post your comments, and to share your customizations with others.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/architecture.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/architecture.adoc
new file mode 100644
index 0000000..5ed6249
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/architecture.adoc
@@ -0,0 +1,34 @@
+Deploying this Quick Start for a new virtual private cloud (VPC) with
+*default parameters* builds the following _{partner-product-name}_ environment in the
+AWS Cloud.
+
+// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
+[#architecture1]
+.Quick Start architecture for _{partner-product-name}_ on AWS
+[link=images/architecture_diagram.png]
+image::../images/architecture_diagram.png[Architecture,width=648,height=439]
+NOTE: The IP addresses exclude five addresses from each subnet that are reserved and unavailable for use *
+
+As shown in Figure 1, the Quick Start sets up the following:
+
+The AWS CloudFormation template sets up the virtual network and creates networking
+resources.
+
+The template creates a Multi-AZ, multi-subnet VPC infrastructure with managed NAT
+gateways in the public subnet for each Availability Zone. You can also create additional
+private subnets with dedicated custom network access control lists (ACLs). Default subnet
+sizes are based on a typical deployment but can be reconfigured, as discussed in the
+link:#_subnet_sizing[Subnet Sizing] section.
+
+The Quick Start also includes VPC endpoints, which provide a secure, reliable connection to
+Amazon S3 without requiring an Internet gateway, a NAT gateway, or a virtual private
+gateway. With these endpoints, you can access S3 resources from within the VPC created by
+the Quick Start. These endpoints are valid only for the AWS Region in which you launch the
+Quick Start.
+
+The Quick Start uses the default endpoint policy, which gives any user or service within the
+VPC full access to Amazon S3 resources. This policy supplements any IAM user policies or
+S3 bucket policies that you may have in place.
+
+The Quick Start also enables Domain Name System (DNS) resolution in the VPC. For more
+information about VPC endpoints, see the https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html[AWS documentation].
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deploy_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deploy_steps.adoc
new file mode 100644
index 0000000..c1d7251
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deploy_steps.adoc
@@ -0,0 +1,52 @@
+// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
+=== Sign in to your AWS account
+
+. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
+. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
+
+// Optional based on Marketplace listing. Not to be edited
+ifdef::marketplace_subscription[]
+=== Subscribe to the {partner-product-name} AMI
+
+This Quick Start requires a subscription to the AMI for {partner-product-name} in AWS Marketplace.
+
+. Sign in to your AWS account.
+. {marketplace_listing_url}[Open the page for the {partner-product-name} AMI in AWS Marketplace], and then choose *Continue to Subscribe*.
+. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
+ A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
+
+. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
+endif::marketplace_subscription[]
+// \Not to be edited
+
+=== Launch the Quick Start
+
+NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
+
+. Sign in to your AWS account, and choose the following option to launch the AWS CloudFormation template.
+
+[cols=2*]
+|===
+^|https://fwd.aws/mm853[Deploy {partner-product-name} on AWS^]
+^|link:=../../templates/aws-vpc.template.yaml[View template^]
+|===
+
+Also, make sure that the domain name option in the DHCP options is configured as explained in the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[Amazon VPC documentation^]. You provide your VPC settings when you launch the Quick Start.
+
+Each deployment takes about {deployment_time} to complete.
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-name} will be built. The template is launched in the {default_deployment_region} Region by default.
+
+// *Note:* This deployment includes Amazon EFS, which isn’t currently supported in all AWS Regions. For a current list of supported Regions, see the https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html[endpoints and quotas webpage].
+
+[start=3]
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary. For example, you can change the network configuration parameters if you
+want to reconfigure the subnet segmentation used for the VPC, as discussed earlier in
+the link:#_subnet_sizing[Subnet Sizing] section.
+
+// In the following tables, parameters are listed by category and described separately for the two deployment options:
+
+// * Parameters for deploying {partner-product-name} into a new VPC
+// * Parameters for deploying {partner-product-name} into an existing VPC
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deployment_options.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deployment_options.adoc
new file mode 100644
index 0000000..f68540a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/deployment_options.adoc
@@ -0,0 +1,5 @@
+// There are generally two deployment options. If additional are required, add them here
+
+This Quick Start provides one deployment option:
+
+* *Deploy a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, and other infrastructure components.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/faq_troubleshooting.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/faq_troubleshooting.adoc
new file mode 100644
index 0000000..802deea
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/faq_troubleshooting.adoc
@@ -0,0 +1,23 @@
+// Add any tips or answers to anticipated questions. This could include the following troubleshooting information. If you don’t have any other Q&A to add, change “FAQ” to “Troubleshooting.”
+
+== FAQ
+
+*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
+
+*A.* If AWS CloudFormation fails to create the stack, we recommend that you relaunch the template with *Rollback on failure* set to *No*. (This setting is under *Advanced* in the AWS CloudFormation console, *Options* page.) With this setting, the stack’s state is retained and the instance is left running, so you can troubleshoot the issue. (For Windows, look at the log files in %ProgramFiles%\Amazon\EC2ConfigService and C:\cfn\log.)
+// If you’re deploying on Linux instances, provide the location for log files on Linux, or omit this sentence.
+
+WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Please make sure to delete the stack when you finish troubleshooting.
+
+For additional information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^] on the AWS website.
+
+*Q.* I encountered a size limitation error when I deployed the AWS CloudFormation templates.
+
+*A.* We recommend that you launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template size limitations. For more information about AWS CloudFormation quotas, see the http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS documentation^].
+
+
+== Troubleshooting
+
+The following table lists specific *CREATE_FAILED* error messages you might encounter.
+
+If you encounter a template validation error during deployment, check for a mismatch in the values of the *Availability Zones* and *Number of Availability Zones* parameters. If you select more Availability Zones than you request, the AWS CloudFormation template won’t validate. Correct the parameters so that they’re in sync, and redeploy the Quick Start.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/licenses.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/licenses.adoc
new file mode 100644
index 0000000..9ba9d93
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/licenses.adoc
@@ -0,0 +1,3 @@
+// Include details about the license and how they can sign up. If no license is required, clarify that.
+
+There are no licencing requirements for this Quick Start
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/overview_target_and_usage.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/overview_target_and_usage.adoc
new file mode 100644
index 0000000..1adce62
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/overview_target_and_usage.adoc
@@ -0,0 +1,11 @@
+// Replace the content in <>
+// Identify your target audience and explain how/why they would use this Quick Start.
+//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
+
+This Quick Start provides a networking foundation for AWS Cloud infrastructures. It
+deploys an Amazon Virtual Private Cloud (Amazon VPC) according to AWS best practices
+and guidelines. Amazon VPC is the networking layer for Amazon Elastic Compute Cloud
+(Amazon EC2) and provides a private, isolated section of the AWS Cloud where you can
+launch AWS services and other resources in a virtual network. For a discussion of best
+design practices for Amazon VPC environments, see the documentation and articles listed
+in the link:#_other_useful_information[Other useful information] section.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/pre-reqs.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/pre-reqs.adoc
new file mode 100644
index 0000000..8376035
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/pre-reqs.adoc
@@ -0,0 +1 @@
+// If no preperation is required, remove all content from here
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/product_description.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/product_description.adoc
new file mode 100644
index 0000000..5b5b61d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/product_description.adoc
@@ -0,0 +1,17 @@
+// Replace the content in <>
+// Briefly describe the software. Use consistent and clear branding.
+// Include the benefits of using the software on AWS, and provide details on usage scenarios.
+
+The Amazon VPC architecture includes public and private subnets. The first set of private
+subnets share the default network access control list (ACL) from the Amazon VPC, and a
+second, optional set of private subnets includes dedicated custom network ACLs per subnet.
+
+Optionally you may choose to deploy a completely public VPC (no private subnets), or a completely private VPC (no public subnets).
+
+The Quick Start divides the Amazon VPC address space in a predictable manner across
+multiple Availability Zones, and deploys NAT gateways for outbound Internet access.
+
+You can use this Quick Start as a building block for your own deployments. You can scale it
+up or down by adding or removing subnets and Availability Zones according to your needs,
+and add other infrastructure components and software layers to complete your AWS
+environment.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/regions.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/regions.adoc
new file mode 100644
index 0000000..8003267
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/regions.adoc
@@ -0,0 +1,29 @@
+
+[cols=3*,options="header"]
+|===
+|Code
+|Name
+| Opt-in Status
+
+|us-east-2 |US East (Ohio) |Not required
+|us-east-1 |US East (N. Virginia) |Not required
+|us-west-1 |US West (N. California) |Not required
+|us-west-2 |US West (Oregon) |Not required
+|af-south-1 |Africa (Cape Town) |Required
+|ap-east-1 |Asia Pacific (Hong Kong) |Required
+|ap-south-1 |Asia Pacific (Mumbai) |Not required
+|ap-northeast-3 |Asia Pacific (Osaka-Local) |Not required
+|ap-northeast-2 |Asia Pacific (Seoul) |Not required
+|ap-southeast-1 |Asia Pacific (Singapore) |Not required
+|ap-southeast-2 |Asia Pacific (Sydney) |Not required
+|ap-northeast-1 |Asia Pacific (Tokyo) |Not required
+|ca-central-1 |Canada (Central) |Not required
+|eu-central-1 |Europe (Frankfurt) |Not required
+|eu-west-1 |Europe (Ireland) |Not required
+|eu-west-2 |Europe (London) |Not required
+|eu-south-1 |Europe (Milan) |Required
+|eu-west-3 |Europe (Paris) |Not required
+|eu-north-1 |Europe (Stockholm) |Not required
+|me-south-1 |Middle East (Bahrain) |Required
+|sa-east-1 |South America (São Paulo) |Not required
+|===
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/service_limits.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/service_limits.adoc
new file mode 100644
index 0000000..d6b8b90
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/service_limits.adoc
@@ -0,0 +1,7 @@
+// Replace the in each row to specify the number of resources used in this deployment. Remove the rows for resources that aren’t used.
+|===
+|Resource |This deployment uses
+
+// Space needed to maintain table headers
+|VPCs |1
+|===
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/specialized_knowledge.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/specialized_knowledge.adoc
new file mode 100644
index 0000000..1bd75e1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/docs/partner_editable/specialized_knowledge.adoc
@@ -0,0 +1,6 @@
+// Replace the content in <>
+// Describe or link to specific knowledge requirements; for example: “familiarity with basic concepts in the areas of networking, database operations, and data encryption” or “familiarity with .”
+
+This Quick Start assumes familiarity with VPC architecure and CloudFormation.
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template
new file mode 100644
index 0000000..22b23e9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template
@@ -0,0 +1,3636 @@
+{
+ "AWSTemplateFormatVersion": "2010-09-09",
+ "Description":
+ "DEPRECATED: This template has been deprecated in favor of the 'aws-vpc.template.yaml`, and is no longer being maintained. This template
+ creates a Multi-AZ, multi-subnet VPC infrastructure with managed NAT gateways in the public subnet for each Availability Zone. You can also
+ create additional private subnets with dedicated custom network access control lists (ACLs). If you deploy the Quick Start in a region that
+ doesn't support NAT gateways, NAT instances are deployed instead. **WARNING** This template creates AWS resources. You will be billed for the
+ AWS resources used if you create a stack from this template. (qs-1qnnspaap)",
+ "Metadata": {
+ "AWS::CloudFormation::Interface": {
+ "ParameterGroups": [
+ {
+ "Label": {
+ "default": "Availability Zone Configuration"
+ },
+ "Parameters": [
+ "AvailabilityZones",
+ "NumberOfAZs"
+ ]
+ },
+ {
+ "Label": {
+ "default": "Network Configuration"
+ },
+ "Parameters": [
+ "VPCCIDR",
+ "PublicSubnet1CIDR",
+ "PublicSubnet2CIDR",
+ "PublicSubnet3CIDR",
+ "PublicSubnet4CIDR",
+ "PublicSubnetTag1",
+ "PublicSubnetTag2",
+ "PublicSubnetTag3",
+ "CreatePrivateSubnets",
+ "PrivateSubnet1ACIDR",
+ "PrivateSubnet2ACIDR",
+ "PrivateSubnet3ACIDR",
+ "PrivateSubnet4ACIDR",
+ "PrivateSubnetATag1",
+ "PrivateSubnetATag2",
+ "PrivateSubnetATag3",
+ "CreateAdditionalPrivateSubnets",
+ "PrivateSubnet1BCIDR",
+ "PrivateSubnet2BCIDR",
+ "PrivateSubnet3BCIDR",
+ "PrivateSubnet4BCIDR",
+ "PrivateSubnetBTag1",
+ "PrivateSubnetBTag2",
+ "PrivateSubnetBTag3",
+ "VPCTenancy"
+ ]
+ },
+ {
+ "Label": {
+ "default": "Deprecated: NAT Instance Configuration"
+ },
+ "Parameters": [
+ "KeyPairName",
+ "NATInstanceType"
+ ]
+ }
+ ],
+ "ParameterLabels": {
+ "AvailabilityZones": {
+ "default": "Availability Zones"
+ },
+ "CreateAdditionalPrivateSubnets": {
+ "default": "Create additional private subnets with dedicated network ACLs"
+ },
+ "CreatePrivateSubnets": {
+ "default": "Create private subnets"
+ },
+ "KeyPairName": {
+ "default": "Deprecated: Key pair name"
+ },
+ "NATInstanceType": {
+ "default": "Deprecated: NAT instance type"
+ },
+ "NumberOfAZs": {
+ "default": "Number of Availability Zones"
+ },
+ "PrivateSubnet1ACIDR": {
+ "default": "Private subnet 1A CIDR"
+ },
+ "PrivateSubnet1BCIDR": {
+ "default": "Private subnet 1B with dedicated network ACL CIDR"
+ },
+ "PrivateSubnet2ACIDR": {
+ "default": "Private subnet 2A CIDR"
+ },
+ "PrivateSubnet2BCIDR": {
+ "default": "Private subnet 2B with dedicated network ACL CIDR"
+ },
+ "PrivateSubnet3ACIDR": {
+ "default": "Private subnet 3A CIDR"
+ },
+ "PrivateSubnet3BCIDR": {
+ "default": "Private subnet 3B with dedicated network ACL CIDR"
+ },
+ "PrivateSubnet4ACIDR": {
+ "default": "Private subnet 4A CIDR"
+ },
+ "PrivateSubnet4BCIDR": {
+ "default": "Private subnet 4B with dedicated network ACL CIDR"
+ },
+ "PrivateSubnetATag1": {
+ "default": "Tag for Private A Subnets"
+ },
+ "PrivateSubnetATag2": {
+ "default": "Tag for Private A Subnets"
+ },
+ "PrivateSubnetATag3": {
+ "default": "Tag for Private A Subnets"
+ },
+ "PrivateSubnetBTag1": {
+ "default": "Tag for Private B Subnets"
+ },
+ "PrivateSubnetBTag2": {
+ "default": "Tag for Private B Subnets"
+ },
+ "PrivateSubnetBTag3": {
+ "default": "Tag for Private B Subnets"
+ },
+ "PublicSubnet1CIDR": {
+ "default": "Public subnet 1 CIDR"
+ },
+ "PublicSubnet2CIDR": {
+ "default": "Public subnet 2 CIDR"
+ },
+ "PublicSubnet3CIDR": {
+ "default": "Public subnet 3 CIDR"
+ },
+ "PublicSubnet4CIDR": {
+ "default": "Public subnet 4 CIDR"
+ },
+ "PublicSubnetTag1": {
+ "default": "Tag for Public Subnets"
+ },
+ "PublicSubnetTag2": {
+ "default": "Tag for Public Subnets"
+ },
+ "PublicSubnetTag3": {
+ "default": "Tag for Public Subnets"
+ },
+ "VPCCIDR": {
+ "default": "VPC CIDR"
+ },
+ "VPCTenancy": {
+ "default": "VPC Tenancy"
+ }
+ }
+ }
+ },
+ "Parameters": {
+ "AvailabilityZones": {
+ "Description": "List of Availability Zones to use for the subnets in the VPC. Note: The logical order is preserved.",
+ "Type": "List"
+ },
+ "CreateAdditionalPrivateSubnets": {
+ "AllowedValues": [
+ "true",
+ "false"
+ ],
+ "Default": "false",
+ "Description": "Set to true to create a network ACL protected subnet in each Availability Zone. If false, the CIDR parameters for those subnets will be ignored. If true, it also requires that the 'Create private subnets' parameter is also true to have any effect.",
+ "Type": "String"
+ },
+ "CreatePrivateSubnets": {
+ "AllowedValues": [
+ "true",
+ "false"
+ ],
+ "Default": "true",
+ "Description": "Set to false to create only public subnets. If false, the CIDR parameters for ALL private subnets will be ignored.",
+ "Type": "String"
+ },
+ "KeyPairName": {
+ "Description": "Deprecated. NAT gateways are now supported in all regions.",
+ "Type": "String",
+ "Default": "deprecated"
+ },
+ "NATInstanceType": {
+ "Default": "deprecated",
+ "Description": "Deprecated. NAT gateways are now supported in all regions.",
+ "Type": "String"
+ },
+ "NumberOfAZs": {
+ "AllowedValues": [
+ "2",
+ "3",
+ "4"
+ ],
+ "Default": "2",
+ "Description": "Number of Availability Zones to use in the VPC. This must match your selections in the list of Availability Zones parameter.",
+ "Type": "String"
+ },
+ "PrivateSubnet1ACIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.0.0/19",
+ "Description": "CIDR block for private subnet 1A located in Availability Zone 1",
+ "Type": "String"
+ },
+ "PrivateSubnet1BCIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.192.0/21",
+ "Description": "CIDR block for private subnet 1B with dedicated network ACL located in Availability Zone 1",
+ "Type": "String"
+ },
+ "PrivateSubnet2ACIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.32.0/19",
+ "Description": "CIDR block for private subnet 2A located in Availability Zone 2",
+ "Type": "String"
+ },
+ "PrivateSubnet2BCIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.200.0/21",
+ "Description": "CIDR block for private subnet 2B with dedicated network ACL located in Availability Zone 2",
+ "Type": "String"
+ },
+ "PrivateSubnet3ACIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.64.0/19",
+ "Description": "CIDR block for private subnet 3A located in Availability Zone 3",
+ "Type": "String"
+ },
+ "PrivateSubnet3BCIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.208.0/21",
+ "Description": "CIDR block for private subnet 3B with dedicated network ACL located in Availability Zone 3",
+ "Type": "String"
+ },
+ "PrivateSubnet4ACIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.96.0/19",
+ "Description": "CIDR block for private subnet 4A located in Availability Zone 4",
+ "Type": "String"
+ },
+ "PrivateSubnet4BCIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.216.0/21",
+ "Description": "CIDR block for private subnet 4B with dedicated network ACL located in Availability Zone 4",
+ "Type": "String"
+ },
+ "PrivateSubnetATag1": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "Network=Private",
+ "Description": "tag to add to private subnets A, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PrivateSubnetATag2": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to private subnets A, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PrivateSubnetATag3": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to private subnets A, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PrivateSubnetBTag1": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "Network=Private",
+ "Description": "tag to add to private subnets B, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PrivateSubnetBTag2": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to private subnets B, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PrivateSubnetBTag3": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to private subnets B, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PublicSubnet1CIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.128.0/20",
+ "Description": "CIDR block for the public DMZ subnet 1 located in Availability Zone 1",
+ "Type": "String"
+ },
+ "PublicSubnet2CIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.144.0/20",
+ "Description": "CIDR block for the public DMZ subnet 2 located in Availability Zone 2",
+ "Type": "String"
+ },
+ "PublicSubnet3CIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.160.0/20",
+ "Description": "CIDR block for the public DMZ subnet 3 located in Availability Zone 3",
+ "Type": "String"
+ },
+ "PublicSubnet4CIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.176.0/20",
+ "Description": "CIDR block for the public DMZ subnet 4 located in Availability Zone 4",
+ "Type": "String"
+ },
+ "PublicSubnetTag1": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "Network=Public",
+ "Description": "tag to add to public subnets, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PublicSubnetTag2": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to public subnets, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "PublicSubnetTag3": {
+ "AllowedPattern": "^([a-zA-Z0-9+\\-._:/@]+=[a-zA-Z0-9+\\-.,_:/@ *\\\\\"'\\[\\]\\{\\}]*)?$",
+ "ConstraintDescription": "tags must be in format \"Key=Value\" keys can only contain [a-zA-Z0-9+\\-._:/@], values can contain [a-zA-Z0-9+\\-._:/@ *\\\\\"'\\[\\]\\{\\}]",
+ "Default": "",
+ "Description": "tag to add to public subnets, in format Key=Value (Optional)",
+ "Type": "String"
+ },
+ "VPCCIDR": {
+ "AllowedPattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(1[6-9]|2[0-8]))$",
+ "ConstraintDescription": "CIDR block parameter must be in the form x.x.x.x/16-28",
+ "Default": "10.0.0.0/16",
+ "Description": "CIDR block for the VPC",
+ "Type": "String"
+ },
+ "VPCTenancy": {
+ "AllowedValues": [
+ "default",
+ "dedicated"
+ ],
+ "Default": "default",
+ "Description": "The allowed tenancy of instances launched into the VPC",
+ "Type": "String"
+ }
+ },
+ "Conditions": {
+ "3AZCondition": {
+ "Fn::Or": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "NumberOfAZs"
+ },
+ "3"
+ ]
+ },
+ {
+ "Condition": "4AZCondition"
+ }
+ ]
+ },
+ "4AZCondition": {
+ "Fn::Equals": [
+ {
+ "Ref": "NumberOfAZs"
+ },
+ "4"
+ ]
+ },
+ "AdditionalPrivateSubnetsCondition": {
+ "Fn::And": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "CreatePrivateSubnets"
+ },
+ "true"
+ ]
+ },
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "CreateAdditionalPrivateSubnets"
+ },
+ "true"
+ ]
+ }
+ ]
+ },
+ "AdditionalPrivateSubnets&3AZCondition": {
+ "Fn::And": [
+ {
+ "Condition": "AdditionalPrivateSubnetsCondition"
+ },
+ {
+ "Condition": "3AZCondition"
+ }
+ ]
+ },
+ "AdditionalPrivateSubnets&4AZCondition": {
+ "Fn::And": [
+ {
+ "Condition": "AdditionalPrivateSubnetsCondition"
+ },
+ {
+ "Condition": "4AZCondition"
+ }
+ ]
+ },
+ "NVirginiaRegionCondition": {
+ "Fn::Equals": [
+ {
+ "Ref": "AWS::Region"
+ },
+ "us-east-1"
+ ]
+ },
+ "PrivateSubnetsCondition": {
+ "Fn::Equals": [
+ {
+ "Ref": "CreatePrivateSubnets"
+ },
+ "true"
+ ]
+ },
+ "PrivateSubnets&3AZCondition": {
+ "Fn::And": [
+ {
+ "Condition": "PrivateSubnetsCondition"
+ },
+ {
+ "Condition": "3AZCondition"
+ }
+ ]
+ },
+ "PrivateSubnets&4AZCondition": {
+ "Fn::And": [
+ {
+ "Condition": "PrivateSubnetsCondition"
+ },
+ {
+ "Condition": "4AZCondition"
+ }
+ ]
+ },
+ "PrivateSubnetATag1Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetATag1"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PrivateSubnetATag2Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetATag2"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PrivateSubnetATag3Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetATag3"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PrivateSubnetBTag1Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetBTag1"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PrivateSubnetBTag2Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetBTag2"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PrivateSubnetBTag3Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PrivateSubnetBTag3"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PublicSubnetTag1Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PublicSubnetTag1"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PublicSubnetTag2Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PublicSubnetTag2"
+ },
+ ""
+ ]
+ }
+ ]
+ },
+ "PublicSubnetTag3Condition": {
+ "Fn::Not": [
+ {
+ "Fn::Equals": [
+ {
+ "Ref": "PublicSubnetTag3"
+ },
+ ""
+ ]
+ }
+ ]
+ }
+ },
+ "Resources": {
+ "DHCPOptions": {
+ "Type": "AWS::EC2::DHCPOptions",
+ "Properties": {
+ "DomainName": {
+ "Fn::If": [
+ "NVirginiaRegionCondition",
+ "ec2.internal",
+ {
+ "Fn::Sub": "${AWS::Region}.compute.internal"
+ }
+ ]
+ },
+ "DomainNameServers": [
+ "AmazonProvidedDNS"
+ ]
+ }
+ },
+ "VPC": {
+ "Type": "AWS::EC2::VPC",
+ "Properties": {
+ "CidrBlock": {
+ "Ref": "VPCCIDR"
+ },
+ "InstanceTenancy": {
+ "Ref": "VPCTenancy"
+ },
+ "EnableDnsSupport": true,
+ "EnableDnsHostnames": true,
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": {
+ "Ref": "AWS::StackName"
+ }
+ }
+ ]
+ }
+ },
+ "VPCDHCPOptionsAssociation": {
+ "Type": "AWS::EC2::VPCDHCPOptionsAssociation",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "DhcpOptionsId": {
+ "Ref": "DHCPOptions"
+ }
+ }
+ },
+ "InternetGateway": {
+ "Type": "AWS::EC2::InternetGateway",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": {
+ "Ref": "AWS::StackName"
+ }
+ }
+ ]
+ }
+ },
+ "VPCGatewayAttachment": {
+ "Type": "AWS::EC2::VPCGatewayAttachment",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "InternetGatewayId": {
+ "Ref": "InternetGateway"
+ }
+ }
+ },
+ "PrivateSubnet1A": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet1ACIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "0",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 1A"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet1B": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet1BCIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "0",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 1B"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet2A": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet2ACIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "1",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 2A"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet2B": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet2BCIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "1",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 2B"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet3A": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet3ACIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "2",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 3A"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet3B": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet3BCIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "2",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 3B"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet4A": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet4ACIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "3",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 4A"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetATag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetATag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PrivateSubnet4B": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PrivateSubnet4BCIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "3",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 4B"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnetBTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PrivateSubnetBTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "PublicSubnet1": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PublicSubnet1CIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "0",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Public subnet 1"
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ],
+ "MapPublicIpOnLaunch": true
+ }
+ },
+ "PublicSubnet2": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PublicSubnet2CIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "1",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Public subnet 2"
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ],
+ "MapPublicIpOnLaunch": true
+ }
+ },
+ "PublicSubnet3": {
+ "Condition": "3AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PublicSubnet3CIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "2",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Public subnet 3"
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ],
+ "MapPublicIpOnLaunch": true
+ }
+ },
+ "PublicSubnet4": {
+ "Condition": "4AZCondition",
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "CidrBlock": {
+ "Ref": "PublicSubnet4CIDR"
+ },
+ "AvailabilityZone": {
+ "Fn::Select": [
+ "3",
+ {
+ "Ref": "AvailabilityZones"
+ }
+ ]
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Public subnet 4"
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag1Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag1"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag2Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag2"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PublicSubnetTag3Condition",
+ {
+ "Key": {
+ "Fn::Select": [
+ "0",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ },
+ "Value": {
+ "Fn::Select": [
+ "1",
+ {
+ "Fn::Split": [
+ "=",
+ {
+ "Ref": "PublicSubnetTag3"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ],
+ "MapPublicIpOnLaunch": true
+ }
+ },
+ "PrivateSubnet1ARouteTable": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 1A"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet1ARoute": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet1ARouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway1"
+ }
+ }
+ },
+ "PrivateSubnet1ARouteTableAssociation": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet1A"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet1ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet2ARouteTable": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 2A"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet2ARoute": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet2ARouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway2"
+ }
+ }
+ },
+ "PrivateSubnet2ARouteTableAssociation": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet2A"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet2ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet3ARouteTable": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 3A"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet3ARoute": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet3ARouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway3"
+ }
+ }
+ },
+ "PrivateSubnet3ARouteTableAssociation": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet3A"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet3ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet4ARouteTable": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 4A"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet4ARoute": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet4ARouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway4"
+ }
+ }
+ },
+ "PrivateSubnet4ARouteTableAssociation": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet4A"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet4ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet1BRouteTable": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 1B"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet1BRoute": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet1BRouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway1"
+ }
+ }
+ },
+ "PrivateSubnet1BRouteTableAssociation": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet1B"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet1BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet1BNetworkAcl": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAcl",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "NACL Protected subnet 1"
+ },
+ {
+ "Key": "Network",
+ "Value": "NACL Protected"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet1BNetworkAclEntryInbound": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": false,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet1BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet1BNetworkAclEntryOutbound": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": true,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet1BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet1BNetworkAclAssociation": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetNetworkAclAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet1B"
+ },
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet1BNetworkAcl"
+ }
+ }
+ },
+ "PrivateSubnet2BRouteTable": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 2B"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet2BRoute": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet2BRouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway2"
+ }
+ }
+ },
+ "PrivateSubnet2BRouteTableAssociation": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet2B"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet2BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet2BNetworkAcl": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAcl",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "NACL Protected subnet 2"
+ },
+ {
+ "Key": "Network",
+ "Value": "NACL Protected"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet2BNetworkAclEntryInbound": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": false,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet2BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet2BNetworkAclEntryOutbound": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": true,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet2BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet2BNetworkAclAssociation": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Type": "AWS::EC2::SubnetNetworkAclAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet2B"
+ },
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet2BNetworkAcl"
+ }
+ }
+ },
+ "PrivateSubnet3BRouteTable": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 3B"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet3BRoute": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet3BRouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway3"
+ }
+ }
+ },
+ "PrivateSubnet3BRouteTableAssociation": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet3B"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet3BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet3BNetworkAcl": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::NetworkAcl",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "NACL Protected subnet 3"
+ },
+ {
+ "Key": "Network",
+ "Value": "NACL Protected"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet3BNetworkAclEntryInbound": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": false,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet3BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet3BNetworkAclEntryOutbound": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": true,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet3BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet3BNetworkAclAssociation": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Type": "AWS::EC2::SubnetNetworkAclAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet3B"
+ },
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet3BNetworkAcl"
+ }
+ }
+ },
+ "PrivateSubnet4BRouteTable": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Private subnet 4B"
+ },
+ {
+ "Key": "Network",
+ "Value": "Private"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet4BRoute": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PrivateSubnet4BRouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "NATGateway4"
+ }
+ }
+ },
+ "PrivateSubnet4BRouteTableAssociation": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet4B"
+ },
+ "RouteTableId": {
+ "Ref": "PrivateSubnet4BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet4BNetworkAcl": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::NetworkAcl",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "NACL Protected subnet 4"
+ },
+ {
+ "Key": "Network",
+ "Value": "NACL Protected"
+ }
+ ]
+ }
+ },
+ "PrivateSubnet4BNetworkAclEntryInbound": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": false,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet4BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet4BNetworkAclEntryOutbound": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::NetworkAclEntry",
+ "Properties": {
+ "CidrBlock": "0.0.0.0/0",
+ "Egress": true,
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet4BNetworkAcl"
+ },
+ "Protocol": -1,
+ "RuleAction": "allow",
+ "RuleNumber": 100
+ }
+ },
+ "PrivateSubnet4BNetworkAclAssociation": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Type": "AWS::EC2::SubnetNetworkAclAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PrivateSubnet4B"
+ },
+ "NetworkAclId": {
+ "Ref": "PrivateSubnet4BNetworkAcl"
+ }
+ }
+ },
+ "PublicSubnetRouteTable": {
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "VpcId": {
+ "Ref": "VPC"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "Public Subnets"
+ },
+ {
+ "Key": "Network",
+ "Value": "Public"
+ }
+ ]
+ }
+ },
+ "PublicSubnetRoute": {
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "PublicSubnetRouteTable"
+ },
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "InternetGateway"
+ }
+ }
+ },
+ "PublicSubnet1RouteTableAssociation": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PublicSubnet1"
+ },
+ "RouteTableId": {
+ "Ref": "PublicSubnetRouteTable"
+ }
+ }
+ },
+ "PublicSubnet2RouteTableAssociation": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PublicSubnet2"
+ },
+ "RouteTableId": {
+ "Ref": "PublicSubnetRouteTable"
+ }
+ }
+ },
+ "PublicSubnet3RouteTableAssociation": {
+ "Condition": "3AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PublicSubnet3"
+ },
+ "RouteTableId": {
+ "Ref": "PublicSubnetRouteTable"
+ }
+ }
+ },
+ "PublicSubnet4RouteTableAssociation": {
+ "Condition": "4AZCondition",
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "SubnetId": {
+ "Ref": "PublicSubnet4"
+ },
+ "RouteTableId": {
+ "Ref": "PublicSubnetRouteTable"
+ }
+ }
+ },
+ "NAT1EIP": {
+ "Condition": "PrivateSubnetsCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::EIP",
+ "Properties": {
+ "Domain": "vpc"
+ }
+ },
+ "NAT2EIP": {
+ "Condition": "PrivateSubnetsCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::EIP",
+ "Properties": {
+ "Domain": "vpc"
+ }
+ },
+ "NAT3EIP": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::EIP",
+ "Properties": {
+ "Domain": "vpc"
+ }
+ },
+ "NAT4EIP": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::EIP",
+ "Properties": {
+ "Domain": "vpc"
+ }
+ },
+ "NATGateway1": {
+ "Condition": "PrivateSubnetsCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::NatGateway",
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "NAT1EIP",
+ "AllocationId"
+ ]
+ },
+ "SubnetId": {
+ "Ref": "PublicSubnet1"
+ }
+ }
+ },
+ "NATGateway2": {
+ "Condition": "PrivateSubnetsCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::NatGateway",
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "NAT2EIP",
+ "AllocationId"
+ ]
+ },
+ "SubnetId": {
+ "Ref": "PublicSubnet2"
+ }
+ }
+ },
+ "NATGateway3": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::NatGateway",
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "NAT3EIP",
+ "AllocationId"
+ ]
+ },
+ "SubnetId": {
+ "Ref": "PublicSubnet3"
+ }
+ }
+ },
+ "NATGateway4": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "DependsOn": "VPCGatewayAttachment",
+ "Type": "AWS::EC2::NatGateway",
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "NAT4EIP",
+ "AllocationId"
+ ]
+ },
+ "SubnetId": {
+ "Ref": "PublicSubnet4"
+ }
+ }
+ },
+ "S3VPCEndpoint": {
+ "Condition": "PrivateSubnetsCondition",
+ "Type": "AWS::EC2::VPCEndpoint",
+ "Properties": {
+ "PolicyDocument": {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Action": "*",
+ "Effect": "Allow",
+ "Resource": "*",
+ "Principal": "*"
+ }
+ ]
+ },
+ "RouteTableIds": [
+ {
+ "Ref": "PrivateSubnet1ARouteTable"
+ },
+ {
+ "Ref": "PrivateSubnet2ARouteTable"
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnets&3AZCondition",
+ {
+ "Ref": "PrivateSubnet3ARouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "PrivateSubnets&4AZCondition",
+ {
+ "Ref": "PrivateSubnet4ARouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "AdditionalPrivateSubnetsCondition",
+ {
+ "Ref": "PrivateSubnet1BRouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "AdditionalPrivateSubnetsCondition",
+ {
+ "Ref": "PrivateSubnet2BRouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "AdditionalPrivateSubnets&3AZCondition",
+ {
+ "Ref": "PrivateSubnet3BRouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ },
+ {
+ "Fn::If": [
+ "AdditionalPrivateSubnets&4AZCondition",
+ {
+ "Ref": "PrivateSubnet4BRouteTable"
+ },
+ {
+ "Ref": "AWS::NoValue"
+ }
+ ]
+ }
+ ],
+ "ServiceName": {
+ "Fn::Sub": "com.amazonaws.${AWS::Region}.s3"
+ },
+ "VpcId": {
+ "Ref": "VPC"
+ }
+ }
+ }
+ },
+ "Outputs": {
+ "NAT1EIP": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "NAT 1 IP address",
+ "Value": {
+ "Ref": "NAT1EIP"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NAT1EIP"
+ }
+ }
+ },
+ "NAT2EIP": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "NAT 2 IP address",
+ "Value": {
+ "Ref": "NAT2EIP"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NAT2EIP"
+ }
+ }
+ },
+ "NAT3EIP": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Description": "NAT 3 IP address",
+ "Value": {
+ "Ref": "NAT3EIP"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NAT3EIP"
+ }
+ }
+ },
+ "NAT4EIP": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Description": "NAT 4 IP address",
+ "Value": {
+ "Ref": "NAT4EIP"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NAT4EIP"
+ }
+ }
+ },
+ "NATGateway1ID": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "NATGateway 1 ID",
+ "Value": {
+ "Ref": "NATGateway1"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NATGateway1"
+ }
+ }
+ },
+ "NATGateway2ID": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "NATGateway 2 ID",
+ "Value": {
+ "Ref": "NATGateway2"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NATGateway2"
+ }
+ }
+ },
+ "NATGateway3ID": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Description": "NATGateway 3 ID",
+ "Value": {
+ "Ref": "NATGateway3"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NATGateway3"
+ }
+ }
+ },
+ "NATGateway4ID": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Description": "NATGateway 4 ID",
+ "Value": {
+ "Ref": "NATGateway4"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-NATGateway4"
+ }
+ }
+ },
+ "PrivateSubnet1ACIDR": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "Private subnet 1A CIDR in Availability Zone 1",
+ "Value": {
+ "Ref": "PrivateSubnet1ACIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1ACIDR"
+ }
+ }
+ },
+ "PrivateSubnet1AID": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "Private subnet 1A ID in Availability Zone 1",
+ "Value": {
+ "Ref": "PrivateSubnet1A"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1AID"
+ }
+ }
+ },
+ "PrivateSubnet1BCIDR": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Description": "Private subnet 1B CIDR in Availability Zone 1",
+ "Value": {
+ "Ref": "PrivateSubnet1BCIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1BCIDR"
+ }
+ }
+ },
+ "PrivateSubnet1BID": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Description": "Private subnet 1B ID in Availability Zone 1",
+ "Value": {
+ "Ref": "PrivateSubnet1B"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1BID"
+ }
+ }
+ },
+ "PrivateSubnet2ACIDR": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "Private subnet 2A CIDR in Availability Zone 2",
+ "Value": {
+ "Ref": "PrivateSubnet2ACIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2ACIDR"
+ }
+ }
+ },
+ "PrivateSubnet2AID": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "Private subnet 2A ID in Availability Zone 2",
+ "Value": {
+ "Ref": "PrivateSubnet2A"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2AID"
+ }
+ }
+ },
+ "PrivateSubnet2BCIDR": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Description": "Private subnet 2B CIDR in Availability Zone 2",
+ "Value": {
+ "Ref": "PrivateSubnet2BCIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2BCIDR"
+ }
+ }
+ },
+ "PrivateSubnet2BID": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Description": "Private subnet 2B ID in Availability Zone 2",
+ "Value": {
+ "Ref": "PrivateSubnet2B"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2BID"
+ }
+ }
+ },
+ "PrivateSubnet3ACIDR": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Description": "Private subnet 3A CIDR in Availability Zone 3",
+ "Value": {
+ "Ref": "PrivateSubnet3ACIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3ACIDR"
+ }
+ }
+ },
+ "PrivateSubnet3AID": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Description": "Private subnet 3A ID in Availability Zone 3",
+ "Value": {
+ "Ref": "PrivateSubnet3A"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3AID"
+ }
+ }
+ },
+ "PrivateSubnet3BCIDR": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Description": "Private subnet 3B CIDR in Availability Zone 3",
+ "Value": {
+ "Ref": "PrivateSubnet3BCIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3BCIDR"
+ }
+ }
+ },
+ "PrivateSubnet3BID": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Description": "Private subnet 3B ID in Availability Zone 3",
+ "Value": {
+ "Ref": "PrivateSubnet3B"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3BID"
+ }
+ }
+ },
+ "PrivateSubnet4ACIDR": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Description": "Private subnet 4A CIDR in Availability Zone 4",
+ "Value": {
+ "Ref": "PrivateSubnet4ACIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4ACIDR"
+ }
+ }
+ },
+ "PrivateSubnet4AID": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Description": "Private subnet 4A ID in Availability Zone 4",
+ "Value": {
+ "Ref": "PrivateSubnet4A"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4AID"
+ }
+ }
+ },
+ "PrivateSubnet4BCIDR": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Description": "Private subnet 4B CIDR in Availability Zone 4",
+ "Value": {
+ "Ref": "PrivateSubnet4BCIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4BCIDR"
+ }
+ }
+ },
+ "PrivateSubnet4BID": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Description": "Private subnet 4B ID in Availability Zone 4",
+ "Value": {
+ "Ref": "PrivateSubnet4B"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4BID"
+ }
+ }
+ },
+ "PublicSubnet1CIDR": {
+ "Description": "Public subnet 1 CIDR in Availability Zone 1",
+ "Value": {
+ "Ref": "PublicSubnet1CIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet1CIDR"
+ }
+ }
+ },
+ "PublicSubnet1ID": {
+ "Description": "Public subnet 1 ID in Availability Zone 1",
+ "Value": {
+ "Ref": "PublicSubnet1"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet1ID"
+ }
+ }
+ },
+ "PublicSubnet2CIDR": {
+ "Description": "Public subnet 2 CIDR in Availability Zone 2",
+ "Value": {
+ "Ref": "PublicSubnet2CIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet2CIDR"
+ }
+ }
+ },
+ "PublicSubnet2ID": {
+ "Description": "Public subnet 2 ID in Availability Zone 2",
+ "Value": {
+ "Ref": "PublicSubnet2"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet2ID"
+ }
+ }
+ },
+ "PublicSubnet3CIDR": {
+ "Condition": "3AZCondition",
+ "Description": "Public subnet 3 CIDR in Availability Zone 3",
+ "Value": {
+ "Ref": "PublicSubnet3CIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet3CIDR"
+ }
+ }
+ },
+ "PublicSubnet3ID": {
+ "Condition": "3AZCondition",
+ "Description": "Public subnet 3 ID in Availability Zone 3",
+ "Value": {
+ "Ref": "PublicSubnet3"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet3ID"
+ }
+ }
+ },
+ "PublicSubnet4CIDR": {
+ "Condition": "4AZCondition",
+ "Description": "Public subnet 4 CIDR in Availability Zone 4",
+ "Value": {
+ "Ref": "PublicSubnet4CIDR"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet4CIDR"
+ }
+ }
+ },
+ "PublicSubnet4ID": {
+ "Condition": "4AZCondition",
+ "Description": "Public subnet 4 ID in Availability Zone 4",
+ "Value": {
+ "Ref": "PublicSubnet4"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnet4ID"
+ }
+ }
+ },
+ "S3VPCEndpoint": {
+ "Condition": "PrivateSubnetsCondition",
+ "Description": "S3 VPC Endpoint",
+ "Value": {
+ "Ref": "S3VPCEndpoint"
+ },
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-S3VPCEndpoint"
+ }
+ }
+ },
+ "PrivateSubnet1ARouteTable": {
+ "Condition": "PrivateSubnetsCondition",
+ "Value": {
+ "Ref": "PrivateSubnet1ARouteTable"
+ },
+ "Description": "Private subnet 1A route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet1BRouteTable": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Value": {
+ "Ref": "PrivateSubnet1BRouteTable"
+ },
+ "Description": "Private subnet 1B route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet1BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet2ARouteTable": {
+ "Condition": "PrivateSubnetsCondition",
+ "Value": {
+ "Ref": "PrivateSubnet2ARouteTable"
+ },
+ "Description": "Private subnet 2A route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet2BRouteTable": {
+ "Condition": "AdditionalPrivateSubnetsCondition",
+ "Value": {
+ "Ref": "PrivateSubnet2BRouteTable"
+ },
+ "Description": "Private subnet 2B route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet2BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet3ARouteTable": {
+ "Condition": "PrivateSubnets&3AZCondition",
+ "Value": {
+ "Ref": "PrivateSubnet3ARouteTable"
+ },
+ "Description": "Private subnet 3A route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet3BRouteTable": {
+ "Condition": "AdditionalPrivateSubnets&3AZCondition",
+ "Value": {
+ "Ref": "PrivateSubnet3BRouteTable"
+ },
+ "Description": "Private subnet 3B route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet3BRouteTable"
+ }
+ }
+ },
+ "PrivateSubnet4ARouteTable": {
+ "Condition": "PrivateSubnets&4AZCondition",
+ "Value": {
+ "Ref": "PrivateSubnet4ARouteTable"
+ },
+ "Description": "Private subnet 4A route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4ARouteTable"
+ }
+ }
+ },
+ "PrivateSubnet4BRouteTable": {
+ "Condition": "AdditionalPrivateSubnets&4AZCondition",
+ "Value": {
+ "Ref": "PrivateSubnet4BRouteTable"
+ },
+ "Description": "Private subnet 4B route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PrivateSubnet4BRouteTable"
+ }
+ }
+ },
+ "PublicSubnetRouteTable": {
+ "Value": {
+ "Ref": "PublicSubnetRouteTable"
+ },
+ "Description": "Public subnet route table",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-PublicSubnetRouteTable"
+ }
+ }
+ },
+ "VPCCIDR": {
+ "Value": {
+ "Ref": "VPCCIDR"
+ },
+ "Description": "VPC CIDR",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-VPCCIDR"
+ }
+ }
+ },
+ "VPCID": {
+ "Value": {
+ "Ref": "VPC"
+ },
+ "Description": "VPC ID",
+ "Export": {
+ "Name": {
+ "Fn::Sub": "${AWS::StackName}-VPCID"
+ }
+ }
+ }
+ }
+}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template.yaml b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template.yaml
new file mode 100644
index 0000000..e0e5db6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-aws-vpc/templates/aws-vpc.template.yaml
@@ -0,0 +1,1640 @@
+AWSTemplateFormatVersion: '2010-09-09'
+Description: >-
+ This template creates a Multi-AZ, multi-subnet VPC infrastructure with managed NAT gateways in the public subnet for each Availability Zone. You can
+ also create additional private subnets with dedicated custom network access control lists (ACLs). If you deploy the Quick Start in a region that
+ doesn't support NAT gateways, NAT instances are deployed instead. **WARNING** This template creates AWS resources. You will be billed for the AWS
+ resources used if you create a stack from this template. (qs-1qnnspaap)
+Metadata:
+ QuickStartDocumentation:
+ EntrypointName: 'Launch a New VPC'
+ OptionalParameters:
+ - PrivateSubnetATag1
+ - PrivateSubnetATag2
+ - PrivateSubnetATag3
+ - PrivateSubnetBTag1
+ - PrivateSubnetBTag2
+ - PrivateSubnetBTag3
+ - PublicSubnetTag1
+ - PublicSubnetTag2
+ - PublicSubnetTag3
+ AWS::CloudFormation::Interface:
+ ParameterGroups:
+ - Label:
+ default: Availability Zone Configuration
+ Parameters:
+ - AvailabilityZones
+ - NumberOfAZs
+ - Label:
+ default: Network Configuration
+ Parameters:
+ - VPCCIDR
+ - CreatePublicSubnets
+ - PublicSubnet1CIDR
+ - PublicSubnet2CIDR
+ - PublicSubnet3CIDR
+ - PublicSubnet4CIDR
+ - PublicSubnetTag1
+ - PublicSubnetTag2
+ - PublicSubnetTag3
+ - CreatePrivateSubnets
+ - CreateNATGateways
+ - PrivateSubnet1ACIDR
+ - PrivateSubnet2ACIDR
+ - PrivateSubnet3ACIDR
+ - PrivateSubnet4ACIDR
+ - PrivateSubnetATag1
+ - PrivateSubnetATag2
+ - PrivateSubnetATag3
+ - CreateAdditionalPrivateSubnets
+ - PrivateSubnet1BCIDR
+ - PrivateSubnet2BCIDR
+ - PrivateSubnet3BCIDR
+ - PrivateSubnet4BCIDR
+ - PrivateSubnetBTag1
+ - PrivateSubnetBTag2
+ - PrivateSubnetBTag3
+ - VPCTenancy
+ - Label:
+ default: VPC Flow Logs Configuration
+ Parameters:
+ - CreateVPCFlowLogsToCloudWatch
+ - VPCFlowLogsLogFormat
+ - VPCFlowLogsLogGroupRetention
+ - VPCFlowLogsMaxAggregationInterval
+ - VPCFlowLogsTrafficType
+ - VPCFlowLogsCloudWatchKMSKey
+ ParameterLabels:
+ AvailabilityZones:
+ default: Availability Zones
+ CreateAdditionalPrivateSubnets:
+ default: Create additional private subnets with dedicated network ACLs
+ CreateNATGateways:
+ default: Create NAT Gateways
+ CreatePrivateSubnets:
+ default: Create private subnets
+ CreatePublicSubnets:
+ default: Create public subnets
+ CreateVPCFlowLogsToCloudWatch:
+ default: Create VPC Flow Logs (CloudWatch)
+ NumberOfAZs:
+ default: Number of Availability Zones
+ PrivateSubnet1ACIDR:
+ default: Private subnet 1A CIDR
+ PrivateSubnet1BCIDR:
+ default: Private subnet 1B with dedicated network ACL CIDR
+ PrivateSubnet2ACIDR:
+ default: Private subnet 2A CIDR
+ PrivateSubnet2BCIDR:
+ default: Private subnet 2B with dedicated network ACL CIDR
+ PrivateSubnet3ACIDR:
+ default: Private subnet 3A CIDR
+ PrivateSubnet3BCIDR:
+ default: Private subnet 3B with dedicated network ACL CIDR
+ PrivateSubnet4ACIDR:
+ default: Private subnet 4A CIDR
+ PrivateSubnet4BCIDR:
+ default: Private subnet 4B with dedicated network ACL CIDR
+ PrivateSubnetATag1:
+ default: Tag for Private A Subnets
+ PrivateSubnetATag2:
+ default: Tag for Private A Subnets
+ PrivateSubnetATag3:
+ default: Tag for Private A Subnets
+ PrivateSubnetBTag1:
+ default: Tag for Private B Subnets
+ PrivateSubnetBTag2:
+ default: Tag for Private B Subnets
+ PrivateSubnetBTag3:
+ default: Tag for Private B Subnets
+ PublicSubnet1CIDR:
+ default: Public subnet 1 CIDR
+ PublicSubnet2CIDR:
+ default: Public subnet 2 CIDR
+ PublicSubnet3CIDR:
+ default: Public subnet 3 CIDR
+ PublicSubnet4CIDR:
+ default: Public subnet 4 CIDR
+ PublicSubnetTag1:
+ default: Tag for Public Subnets
+ PublicSubnetTag2:
+ default: Tag for Public Subnets
+ PublicSubnetTag3:
+ default: Tag for Public Subnets
+ VPCCIDR:
+ default: VPC CIDR
+ VPCFlowLogsCloudWatchKMSKey:
+ default: CloudWatch Logs KMS Key for VPC flow logs
+ VPCFlowLogsLogFormat:
+ default: VPC Flow Logs - Log Format
+ VPCFlowLogsLogGroupRetention:
+ default: VPC Flow Logs - Log Group Retention
+ VPCFlowLogsMaxAggregationInterval:
+ default: VPC Flow Logs - Max Aggregation Interval
+ VPCFlowLogsTrafficType:
+ default: VPC Flow Logs - Traffic Type
+ VPCTenancy:
+ default: VPC Tenancy
+Parameters:
+ AvailabilityZones:
+ Description: 'List of Availability Zones to use for the subnets in the VPC. Note: The logical order is preserved.'
+ Type: List
+ CreateAdditionalPrivateSubnets:
+ AllowedValues:
+ - 'true'
+ - 'false'
+ Default: 'false'
+ Description: >-
+ Set to true to create a network ACL protected subnet in each Availability Zone. If false, the CIDR parameters for those subnets will be ignored.
+ If true, it also requires that the 'Create private subnets' parameter is also true to have any effect.
+ Type: String
+ CreateNATGateways:
+ AllowedValues:
+ - 'true'
+ - 'false'
+ Default: 'true'
+ Description: Set to false when creating only private subnets. If True, both CreatePublicSubnets and CreatePrivateSubnets must also be true.
+ Type: String
+ CreatePublicSubnets:
+ AllowedValues:
+ - 'true'
+ - 'false'
+ Default: 'true'
+ Description:
+ Set to false to create only private subnets. If false, CreatePrivateSubnets must be True and the CIDR parameters for ALL public subnets will be
+ ignored
+ Type: String
+ CreatePrivateSubnets:
+ AllowedValues:
+ - 'true'
+ - 'false'
+ Default: 'true'
+ Description: Set to false to create only public subnets. If false, the CIDR parameters for ALL private subnets will be ignored.
+ Type: String
+ CreateVPCFlowLogsToCloudWatch:
+ AllowedValues:
+ - 'true'
+ - 'false'
+ Default: 'false'
+ Description: Set to true to create VPC flow logs for the VPC and publish them to CloudWatch. If false, VPC flow logs will not be created.
+ Type: String
+ NumberOfAZs:
+ AllowedValues:
+ - '2'
+ - '3'
+ - '4'
+ Default: '2'
+ Description: Number of Availability Zones to use in the VPC. This must match your selections in the list of Availability Zones parameter.
+ Type: String
+ PrivateSubnet1ACIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.0.0/19
+ Description: CIDR block for private subnet 1A located in Availability Zone 1
+ Type: String
+ PrivateSubnet1BCIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.192.0/21
+ Description: CIDR block for private subnet 1B with dedicated network ACL located in Availability Zone 1
+ Type: String
+ PrivateSubnet2ACIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.32.0/19
+ Description: CIDR block for private subnet 2A located in Availability Zone 2
+ Type: String
+ PrivateSubnet2BCIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.200.0/21
+ Description: CIDR block for private subnet 2B with dedicated network ACL located in Availability Zone 2
+ Type: String
+ PrivateSubnet3ACIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.64.0/19
+ Description: CIDR block for private subnet 3A located in Availability Zone 3
+ Type: String
+ PrivateSubnet3BCIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.208.0/21
+ Description: CIDR block for private subnet 3B with dedicated network ACL located in Availability Zone 3
+ Type: String
+ PrivateSubnet4ACIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.96.0/19
+ Description: CIDR block for private subnet 4A located in Availability Zone 4
+ Type: String
+ PrivateSubnet4BCIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.216.0/21
+ Description: CIDR block for private subnet 4B with dedicated network ACL located in Availability Zone 4
+ Type: String
+ PrivateSubnetATag1:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: Network=Private
+ Description: tag to add to private subnets A, in format Key=Value (Optional)
+ Type: String
+ PrivateSubnetATag2:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to private subnets A, in format Key=Value (Optional)
+ Type: String
+ PrivateSubnetATag3:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to private subnets A, in format Key=Value (Optional)
+ Type: String
+ PrivateSubnetBTag1:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: Network=Private
+ Description: tag to add to private subnets B, in format Key=Value (Optional)
+ Type: String
+ PrivateSubnetBTag2:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to private subnets B, in format Key=Value (Optional)
+ Type: String
+ PrivateSubnetBTag3:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to private subnets B, in format Key=Value (Optional)
+ Type: String
+ PublicSubnet1CIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.128.0/20
+ Description: CIDR block for the public DMZ subnet 1 located in Availability Zone 1
+ Type: String
+ PublicSubnet2CIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.144.0/20
+ Description: CIDR block for the public DMZ subnet 2 located in Availability Zone 2
+ Type: String
+ PublicSubnet3CIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.160.0/20
+ Description: CIDR block for the public DMZ subnet 3 located in Availability Zone 3
+ Type: String
+ PublicSubnet4CIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.176.0/20
+ Description: CIDR block for the public DMZ subnet 4 located in Availability Zone 4
+ Type: String
+ PublicSubnetTag1:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: Network=Public
+ Description: tag to add to public subnets, in format Key=Value (Optional)
+ Type: String
+ PublicSubnetTag2:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to public subnets, in format Key=Value (Optional)
+ Type: String
+ PublicSubnetTag3:
+ AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
+ ConstraintDescription:
+ tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
+ Default: ''
+ Description: tag to add to public subnets, in format Key=Value (Optional)
+ Type: String
+ VPCCIDR:
+ AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
+ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
+ Default: 10.0.0.0/16
+ Description: CIDR block for the VPC
+ Type: String
+ VPCFlowLogsCloudWatchKMSKey:
+ AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*)?:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$'
+ ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
+ Default: ''
+ Description:
+ (Optional) KMS Key ARN to use for encrypting the VPC flow logs data. If empty, encryption is enabled with CloudWatch Logs managing the
+ server-side encryption keys.
+ Type: String
+ VPCFlowLogsLogFormat:
+ AllowedPattern: '^(\$\{[a-z-]+\})$|^((\$\{[a-z-]+\} )*\$\{[a-z-]+\})$'
+ Default:
+ '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action}
+ ${log-status}'
+ Description:
+ The fields to include in the flow log record, in the order in which they should appear. Specify the fields using the ${field-id} format,
+ separated by spaces. Using the Default Format as the default value.
+ Type: String
+ VPCFlowLogsLogGroupRetention:
+ AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653]
+ Default: 14
+ Description: Number of days to retain the VPC Flow Logs in CloudWatch
+ Type: String
+ VPCFlowLogsMaxAggregationInterval:
+ AllowedValues:
+ - 60
+ - 600
+ Default: 600
+ Description:
+ The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. You can specify 60 seconds (1
+ minute) or 600 seconds (10 minutes).
+ Type: String
+ VPCFlowLogsTrafficType:
+ AllowedValues:
+ - ACCEPT
+ - ALL
+ - REJECT
+ Default: REJECT
+ Description: The type of traffic to log. You can log traffic that the resource accepts or rejects, or all traffic.
+ Type: String
+ VPCTenancy:
+ AllowedValues:
+ - default
+ - dedicated
+ Default: default
+ Description: The allowed tenancy of instances launched into the VPC
+ Type: String
+Rules:
+ NAT:
+ RuleCondition: !Equals [!Ref CreateNATGateways, 'true']
+ Assertions:
+ - Assert: !And
+ - !Equals [!Ref CreatePrivateSubnets, 'true']
+ - !Equals [!Ref CreatePublicSubnets, 'true']
+ AssertDescription: To enable NAT gateways you must have both CreatePrivateSubnets and CreatePublicSubnets set to 'true'
+ Subnets:
+ Assertions:
+ - Assert: !Or
+ - !Equals [!Ref CreatePrivateSubnets, 'true']
+ - !Equals [!Ref CreatePublicSubnets, 'true']
+ AssertDescription: At least one of CreatePublicSubnets or CreatePrivateSubnets must be set to 'true'
+Conditions:
+ 3AZCondition: !Or
+ - !Equals [!Ref 'NumberOfAZs', '3']
+ - !Condition '4AZCondition'
+ 4AZCondition: !Equals [!Ref 'NumberOfAZs', '4']
+ AdditionalPrivateSubnetsCondition: !And
+ - !Equals [!Ref 'CreatePrivateSubnets', 'true']
+ - !Equals [!Ref 'CreateAdditionalPrivateSubnets', 'true']
+ AdditionalPrivateSubnets&3AZCondition: !And
+ - !Condition 'AdditionalPrivateSubnetsCondition'
+ - !Condition '3AZCondition'
+ AdditionalPrivateSubnets&4AZCondition: !And
+ - !Condition 'AdditionalPrivateSubnetsCondition'
+ - !Condition '4AZCondition'
+ AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition: !And
+ - !Condition 'AdditionalPrivateSubnetsCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'NATGatewaysCondition'
+ AdditionalPrivateSubnets&PublicSubnets&NatGateways&3AZCondition: !And
+ - !Condition 'AdditionalPrivateSubnets&3AZCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'NATGatewaysCondition'
+ AdditionalPrivateSubnets&PublicSubnets&NatGateways&4AZCondition: !And
+ - !Condition 'AdditionalPrivateSubnets&4AZCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'NATGatewaysCondition'
+ NATGatewaysCondition: !Equals [!Ref 'CreateNATGateways', 'true']
+ NATGateways&PublicSubnets&PrivateSubnetsCondition: !And
+ - !Condition 'NATGatewaysCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'PrivateSubnetsCondition'
+ NATGateways&PublicSubnets&PrivateSubnets&3AZCondition: !And
+ - !Condition 'NATGatewaysCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'PrivateSubnetsCondition'
+ - !Condition '3AZCondition'
+ NATGateways&PublicSubnets&PrivateSubnets&4AZCondition: !And
+ - !Condition 'NATGatewaysCondition'
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition 'PrivateSubnetsCondition'
+ - !Condition '4AZCondition'
+ NVirginiaRegionCondition: !Equals [!Ref 'AWS::Region', us-east-1]
+ PrivateSubnetsCondition: !Equals [!Ref 'CreatePrivateSubnets', 'true']
+ PrivateSubnets&3AZCondition: !And
+ - !Condition 'PrivateSubnetsCondition'
+ - !Condition '3AZCondition'
+ PrivateSubnets&4AZCondition: !And
+ - !Condition 'PrivateSubnetsCondition'
+ - !Condition '4AZCondition'
+ PublicSubnetsCondition: !Equals [!Ref 'CreatePublicSubnets', 'true']
+ PublicSubnets&3AZCondition: !And
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition '3AZCondition'
+ PublicSubnets&4AZCondition: !And
+ - !Condition 'PublicSubnetsCondition'
+ - !Condition '4AZCondition'
+ PrivateSubnetATag1Condition: !Not [!Equals [!Ref 'PrivateSubnetATag1', '']]
+ PrivateSubnetATag2Condition: !Not [!Equals [!Ref 'PrivateSubnetATag2', '']]
+ PrivateSubnetATag3Condition: !Not [!Equals [!Ref 'PrivateSubnetATag3', '']]
+ PrivateSubnetBTag1Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag1', '']]
+ PrivateSubnetBTag2Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag2', '']]
+ PrivateSubnetBTag3Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag3', '']]
+ PublicSubnetTag1Condition: !Not [!Equals [!Ref 'PublicSubnetTag1', '']]
+ PublicSubnetTag2Condition: !Not [!Equals [!Ref 'PublicSubnetTag2', '']]
+ PublicSubnetTag3Condition: !Not [!Equals [!Ref 'PublicSubnetTag3', '']]
+ VPCFlowLogsCloudWatchKMSKeyCondition: !Not [!Equals [!Ref VPCFlowLogsCloudWatchKMSKey, '']]
+ VPCFlowLogsToCloudWatchCondition: !Equals [!Ref 'CreateVPCFlowLogsToCloudWatch', 'true']
+Resources:
+ DHCPOptions:
+ Type: AWS::EC2::DHCPOptions
+ Properties:
+ DomainName: !If [NVirginiaRegionCondition, ec2.internal, !Sub '${AWS::Region}.compute.internal']
+ DomainNameServers:
+ - AmazonProvidedDNS
+ Tags:
+ - Key: Name
+ Value: !Sub ${AWS::StackName} stack DHCPOptions
+ - Key: StackName
+ Value: !Ref AWS::StackName
+ VPC:
+ Type: AWS::EC2::VPC
+ Properties:
+ CidrBlock: !Ref 'VPCCIDR'
+ InstanceTenancy: !Ref 'VPCTenancy'
+ EnableDnsSupport: true
+ EnableDnsHostnames: true
+ Tags:
+ - Key: Name
+ Value: !Ref 'AWS::StackName'
+ VPCDHCPOptionsAssociation:
+ Type: AWS::EC2::VPCDHCPOptionsAssociation
+ Properties:
+ VpcId: !Ref 'VPC'
+ DhcpOptionsId: !Ref 'DHCPOptions'
+ InternetGateway:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::InternetGateway
+ Properties:
+ Tags:
+ - Key: Name
+ Value: !Ref 'AWS::StackName'
+ VPCGatewayAttachment:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::VPCGatewayAttachment
+ Properties:
+ VpcId: !Ref 'VPC'
+ InternetGatewayId: !Ref 'InternetGateway'
+ PrivateSubnet1A:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet1ACIDR'
+ AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 1A
+ - !If
+ - PrivateSubnetATag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet1B:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet1BCIDR'
+ AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 1B
+ - !If
+ - PrivateSubnetBTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet2A:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet2ACIDR'
+ AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 2A
+ - !If
+ - PrivateSubnetATag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet2B:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet2BCIDR'
+ AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 2B
+ - !If
+ - PrivateSubnetBTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet3A:
+ Condition: PrivateSubnets&3AZCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet3ACIDR'
+ AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 3A
+ - !If
+ - PrivateSubnetATag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet3B:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet3BCIDR'
+ AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 3B
+ - !If
+ - PrivateSubnetBTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet4A:
+ Condition: PrivateSubnets&4AZCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet4ACIDR'
+ AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 4A
+ - !If
+ - PrivateSubnetATag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetATag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
+ - !Ref 'AWS::NoValue'
+ PrivateSubnet4B:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::Subnet
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PrivateSubnet4BCIDR'
+ AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Private subnet 4B
+ - !If
+ - PrivateSubnetBTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PrivateSubnetBTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
+ - !Ref 'AWS::NoValue'
+ PublicSubnet1:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W33
+ reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PublicSubnet1CIDR'
+ AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Public subnet 1
+ - !If
+ - PublicSubnetTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
+ - !Ref 'AWS::NoValue'
+ MapPublicIpOnLaunch: true
+ PublicSubnet2:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::Subnet
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W33
+ reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PublicSubnet2CIDR'
+ AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Public subnet 2
+ - !If
+ - PublicSubnetTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
+ - !Ref 'AWS::NoValue'
+ MapPublicIpOnLaunch: true
+ PublicSubnet3:
+ Condition: PublicSubnets&3AZCondition
+ Type: AWS::EC2::Subnet
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W33
+ reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PublicSubnet3CIDR'
+ AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Public subnet 3
+ - !If
+ - PublicSubnetTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
+ - !Ref 'AWS::NoValue'
+ MapPublicIpOnLaunch: true
+ PublicSubnet4:
+ Condition: PublicSubnets&4AZCondition
+ Type: AWS::EC2::Subnet
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W33
+ reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
+ Properties:
+ VpcId: !Ref 'VPC'
+ CidrBlock: !Ref 'PublicSubnet4CIDR'
+ AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
+ Tags:
+ - Key: Name
+ Value: Public subnet 4
+ - !If
+ - PublicSubnetTag1Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag2Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
+ - !Ref 'AWS::NoValue'
+ - !If
+ - PublicSubnetTag3Condition
+ - Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
+ Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
+ - !Ref 'AWS::NoValue'
+ MapPublicIpOnLaunch: true
+ PrivateSubnet1ARouteTable:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 1A
+ - Key: Network
+ Value: Private
+ PrivateSubnet1ARoute:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet1ARouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway1'
+ PrivateSubnet1ARouteTableAssociation:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet1A'
+ RouteTableId: !Ref 'PrivateSubnet1ARouteTable'
+ PrivateSubnet2ARouteTable:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 2A
+ - Key: Network
+ Value: Private
+ PrivateSubnet2ARoute:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet2ARouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway2'
+ PrivateSubnet2ARouteTableAssociation:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet2A'
+ RouteTableId: !Ref 'PrivateSubnet2ARouteTable'
+ PrivateSubnet3ARouteTable:
+ Condition: PrivateSubnets&3AZCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 3A
+ - Key: Network
+ Value: Private
+ PrivateSubnet3ARoute:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet3ARouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway3'
+ PrivateSubnet3ARouteTableAssociation:
+ Condition: PrivateSubnets&3AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet3A'
+ RouteTableId: !Ref 'PrivateSubnet3ARouteTable'
+ PrivateSubnet4ARouteTable:
+ Condition: PrivateSubnets&4AZCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 4A
+ - Key: Network
+ Value: Private
+ PrivateSubnet4ARoute:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet4ARouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway4'
+ PrivateSubnet4ARouteTableAssociation:
+ Condition: PrivateSubnets&4AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet4A'
+ RouteTableId: !Ref 'PrivateSubnet4ARouteTable'
+ PrivateSubnet1BRouteTable:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 1B
+ - Key: Network
+ Value: Private
+ PrivateSubnet1BRoute:
+ Condition: AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet1BRouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway1'
+ PrivateSubnet1BRouteTableAssociation:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet1B'
+ RouteTableId: !Ref 'PrivateSubnet1BRouteTable'
+ PrivateSubnet1BNetworkAcl:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAcl
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: NACL Protected subnet 1
+ - Key: Network
+ Value: NACL Protected
+ PrivateSubnet1BNetworkAclEntryInbound:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: false
+ NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet1BNetworkAclEntryOutbound:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: true
+ NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet1BNetworkAclAssociation:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::SubnetNetworkAclAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet1B'
+ NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
+ PrivateSubnet2BRouteTable:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 2B
+ - Key: Network
+ Value: Private
+ PrivateSubnet2BRoute:
+ Condition: AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet2BRouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway2'
+ PrivateSubnet2BRouteTableAssociation:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet2B'
+ RouteTableId: !Ref 'PrivateSubnet2BRouteTable'
+ PrivateSubnet2BNetworkAcl:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAcl
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: NACL Protected subnet 2
+ - Key: Network
+ Value: NACL Protected
+ PrivateSubnet2BNetworkAclEntryInbound:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: false
+ NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet2BNetworkAclEntryOutbound:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: true
+ NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet2BNetworkAclAssociation:
+ Condition: AdditionalPrivateSubnetsCondition
+ Type: AWS::EC2::SubnetNetworkAclAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet2B'
+ NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
+ PrivateSubnet3BRouteTable:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 3B
+ - Key: Network
+ Value: Private
+ PrivateSubnet3BRoute:
+ Condition: AdditionalPrivateSubnets&PublicSubnets&NatGateways&3AZCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet3BRouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway3'
+ PrivateSubnet3BRouteTableAssociation:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet3B'
+ RouteTableId: !Ref 'PrivateSubnet3BRouteTable'
+ PrivateSubnet3BNetworkAcl:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::NetworkAcl
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: NACL Protected subnet 3
+ - Key: Network
+ Value: NACL Protected
+ PrivateSubnet3BNetworkAclEntryInbound:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: false
+ NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet3BNetworkAclEntryOutbound:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: true
+ NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet3BNetworkAclAssociation:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Type: AWS::EC2::SubnetNetworkAclAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet3B'
+ NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
+ PrivateSubnet4BRouteTable:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Private subnet 4B
+ - Key: Network
+ Value: Private
+ PrivateSubnet4BRoute:
+ Condition: AdditionalPrivateSubnets&PublicSubnets&NatGateways&4AZCondition
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PrivateSubnet4BRouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ NatGatewayId: !Ref 'NATGateway4'
+ PrivateSubnet4BRouteTableAssociation:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet4B'
+ RouteTableId: !Ref 'PrivateSubnet4BRouteTable'
+ PrivateSubnet4BNetworkAcl:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::NetworkAcl
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: NACL Protected subnet 4
+ - Key: Network
+ Value: NACL Protected
+ PrivateSubnet4BNetworkAclEntryInbound:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: false
+ NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet4BNetworkAclEntryOutbound:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::NetworkAclEntry
+ Metadata:
+ cfn_nag:
+ rules_to_suppress:
+ - id: W66
+ reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
+ Properties:
+ CidrBlock: '0.0.0.0/0'
+ Egress: true
+ NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
+ Protocol: -1
+ RuleAction: allow
+ RuleNumber: 100
+ PrivateSubnet4BNetworkAclAssociation:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Type: AWS::EC2::SubnetNetworkAclAssociation
+ Properties:
+ SubnetId: !Ref 'PrivateSubnet4B'
+ NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
+ PublicSubnetRouteTable:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::RouteTable
+ Properties:
+ VpcId: !Ref 'VPC'
+ Tags:
+ - Key: Name
+ Value: Public Subnets
+ - Key: Network
+ Value: Public
+ PublicSubnetRoute:
+ Condition: PublicSubnetsCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::Route
+ Properties:
+ RouteTableId: !Ref 'PublicSubnetRouteTable'
+ DestinationCidrBlock: '0.0.0.0/0'
+ GatewayId: !Ref 'InternetGateway'
+ PublicSubnet1RouteTableAssociation:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PublicSubnet1'
+ RouteTableId: !Ref 'PublicSubnetRouteTable'
+ PublicSubnet2RouteTableAssociation:
+ Condition: PublicSubnetsCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PublicSubnet2'
+ RouteTableId: !Ref 'PublicSubnetRouteTable'
+ PublicSubnet3RouteTableAssociation:
+ Condition: PublicSubnets&3AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PublicSubnet3'
+ RouteTableId: !Ref 'PublicSubnetRouteTable'
+ PublicSubnet4RouteTableAssociation:
+ Condition: PublicSubnets&4AZCondition
+ Type: AWS::EC2::SubnetRouteTableAssociation
+ Properties:
+ SubnetId: !Ref 'PublicSubnet4'
+ RouteTableId: !Ref 'PublicSubnetRouteTable'
+ NAT1EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::EIP
+ Properties:
+ Domain: vpc
+ Tags:
+ - Key: Name
+ Value: NAT1EIP
+ NAT2EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::EIP
+ Properties:
+ Domain: vpc
+ Tags:
+ - Key: Name
+ Value: NAT2EIP
+ NAT3EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
+ Type: AWS::EC2::EIP
+ Properties:
+ Domain: vpc
+ Tags:
+ - Key: Name
+ Value: NAT3EIP
+ NAT4EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::EIP
+ Properties:
+ Domain: vpc
+ Tags:
+ - Key: Name
+ Value: NAT4EIP
+ NATGateway1:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::NatGateway
+ Properties:
+ AllocationId: !GetAtt 'NAT1EIP.AllocationId'
+ SubnetId: !Ref 'PublicSubnet1'
+ Tags:
+ - Key: Name
+ Value: NATGateway1
+ NATGateway2:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::NatGateway
+ Properties:
+ AllocationId: !GetAtt 'NAT2EIP.AllocationId'
+ SubnetId: !Ref 'PublicSubnet2'
+ Tags:
+ - Key: Name
+ Value: NATGateway2
+ NATGateway3:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::NatGateway
+ Properties:
+ AllocationId: !GetAtt 'NAT3EIP.AllocationId'
+ SubnetId: !Ref 'PublicSubnet3'
+ Tags:
+ - Key: Name
+ Value: NATGateway3
+ NATGateway4:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
+ DependsOn: VPCGatewayAttachment
+ Type: AWS::EC2::NatGateway
+ Properties:
+ AllocationId: !GetAtt 'NAT4EIP.AllocationId'
+ SubnetId: !Ref 'PublicSubnet4'
+ Tags:
+ - Key: Name
+ Value: NATGateway4
+ S3VPCEndpoint:
+ Condition: PrivateSubnetsCondition
+ Type: AWS::EC2::VPCEndpoint
+ Properties:
+ PolicyDocument:
+ Version: '2012-10-17'
+ Statement:
+ - Action: '*'
+ Effect: Allow
+ Resource: '*'
+ Principal: '*'
+ RouteTableIds:
+ - !Ref 'PrivateSubnet1ARouteTable'
+ - !Ref 'PrivateSubnet2ARouteTable'
+ - !If [PrivateSubnets&3AZCondition, !Ref 'PrivateSubnet3ARouteTable', !Ref 'AWS::NoValue']
+ - !If [PrivateSubnets&4AZCondition, !Ref 'PrivateSubnet4ARouteTable', !Ref 'AWS::NoValue']
+ - !If [AdditionalPrivateSubnetsCondition, !Ref 'PrivateSubnet1BRouteTable', !Ref 'AWS::NoValue']
+ - !If [AdditionalPrivateSubnetsCondition, !Ref 'PrivateSubnet2BRouteTable', !Ref 'AWS::NoValue']
+ - !If [AdditionalPrivateSubnets&3AZCondition, !Ref 'PrivateSubnet3BRouteTable', !Ref 'AWS::NoValue']
+ - !If [AdditionalPrivateSubnets&4AZCondition, !Ref 'PrivateSubnet4BRouteTable', !Ref 'AWS::NoValue']
+ ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3'
+ VpcId: !Ref 'VPC'
+ VPCFlowLogsRole:
+ Condition: VPCFlowLogsToCloudWatchCondition
+ Type: AWS::IAM::Role
+ Properties:
+ Description: Rights to Publish VPC Flow Logs to CloudWatch Logs
+ AssumeRolePolicyDocument:
+ Version: 2012-10-17
+ Statement:
+ - Effect: Allow
+ Action: sts:AssumeRole
+ Principal:
+ Service:
+ - vpc-flow-logs.amazonaws.com
+ Path: /
+ Policies:
+ - PolicyName: CloudWatchLogGroup
+ PolicyDocument:
+ Version: 2012-10-17
+ Statement:
+ - Sid: CloudWatchLogs
+ Effect: Allow
+ Action:
+ - logs:CreateLogStream
+ - logs:PutLogEvents
+ - logs:DescribeLogGroups
+ - logs:DescribeLogStreams
+ Resource: !GetAtt VPCFlowLogsLogGroup.Arn
+ VPCFlowLogsLogGroup:
+ Condition: VPCFlowLogsToCloudWatchCondition
+ Type: AWS::Logs::LogGroup
+ Properties:
+ RetentionInDays: !Ref VPCFlowLogsLogGroupRetention
+ KmsKeyId: !If
+ - VPCFlowLogsCloudWatchKMSKeyCondition
+ - !Ref VPCFlowLogsCloudWatchKMSKey
+ - !Ref AWS::NoValue
+ VPCFlowLogsToCloudWatch:
+ Condition: VPCFlowLogsToCloudWatchCondition
+ Type: AWS::EC2::FlowLog
+ Properties:
+ LogDestinationType: cloud-watch-logs
+ LogGroupName: !Ref VPCFlowLogsLogGroup
+ DeliverLogsPermissionArn: !GetAtt VPCFlowLogsRole.Arn
+ LogFormat: !Ref VPCFlowLogsLogFormat
+ MaxAggregationInterval: !Ref VPCFlowLogsMaxAggregationInterval
+ ResourceId: !Ref VPC
+ ResourceType: VPC
+ TrafficType: !Ref VPCFlowLogsTrafficType
+ Tags:
+ - Key: Name
+ Value: VPC Flow Logs CloudWatch
+Outputs:
+ NAT1EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Description: NAT 1 IP address
+ Value: !Ref 'NAT1EIP'
+ Export:
+ Name: !Sub '${AWS::StackName}-NAT1EIP'
+ NAT2EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Description: NAT 2 IP address
+ Value: !Ref 'NAT2EIP'
+ Export:
+ Name: !Sub '${AWS::StackName}-NAT2EIP'
+ NAT3EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
+ Description: NAT 3 IP address
+ Value: !Ref 'NAT3EIP'
+ Export:
+ Name: !Sub '${AWS::StackName}-NAT3EIP'
+ NAT4EIP:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
+ Description: NAT 4 IP address
+ Value: !Ref 'NAT4EIP'
+ Export:
+ Name: !Sub '${AWS::StackName}-NAT4EIP'
+ NATGateway1ID:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Description: NATGateway 1 ID
+ Value: !Ref 'NATGateway1'
+ Export:
+ Name: !Sub '${AWS::StackName}-NATGateway1'
+ NATGateway2ID:
+ Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
+ Description: NATGateway 2 ID
+ Value: !Ref 'NATGateway2'
+ Export:
+ Name: !Sub '${AWS::StackName}-NATGateway2'
+ NATGateway3ID:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
+ Description: NATGateway 3 ID
+ Value: !Ref 'NATGateway3'
+ Export:
+ Name: !Sub '${AWS::StackName}-NATGateway3'
+ NATGateway4ID:
+ Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
+ Description: NATGateway 4 ID
+ Value: !Ref 'NATGateway4'
+ Export:
+ Name: !Sub '${AWS::StackName}-NATGateway4'
+ PrivateSubnet1ACIDR:
+ Condition: PrivateSubnetsCondition
+ Description: Private subnet 1A CIDR in Availability Zone 1
+ Value: !Ref 'PrivateSubnet1ACIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1ACIDR'
+ PrivateSubnet1AID:
+ Condition: PrivateSubnetsCondition
+ Description: Private subnet 1A ID in Availability Zone 1
+ Value: !Ref 'PrivateSubnet1A'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1AID'
+ PrivateSubnet1ARouteTable:
+ Condition: PrivateSubnetsCondition
+ Value: !Ref 'PrivateSubnet1ARouteTable'
+ Description: Private subnet 1A route table
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1ARouteTable'
+ PrivateSubnet1BCIDR:
+ Condition: AdditionalPrivateSubnetsCondition
+ Description: Private subnet 1B CIDR in Availability Zone 1
+ Value: !Ref 'PrivateSubnet1BCIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1BCIDR'
+ PrivateSubnet1BID:
+ Condition: AdditionalPrivateSubnetsCondition
+ Description: Private subnet 1B ID in Availability Zone 1
+ Value: !Ref 'PrivateSubnet1B'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1BID'
+ PrivateSubnet1BRouteTable:
+ Condition: AdditionalPrivateSubnetsCondition
+ Value: !Ref 'PrivateSubnet1BRouteTable'
+ Description: Private subnet 1B route table
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet1BRouteTable'
+ PrivateSubnet2ACIDR:
+ Condition: PrivateSubnetsCondition
+ Description: Private subnet 2A CIDR in Availability Zone 2
+ Value: !Ref 'PrivateSubnet2ACIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2ACIDR'
+ PrivateSubnet2AID:
+ Condition: PrivateSubnetsCondition
+ Description: Private subnet 2A ID in Availability Zone 2
+ Value: !Ref 'PrivateSubnet2A'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2AID'
+ PrivateSubnet2ARouteTable:
+ Condition: PrivateSubnetsCondition
+ Value: !Ref 'PrivateSubnet2ARouteTable'
+ Description: Private subnet 2A route table
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2ARouteTable'
+ PrivateSubnet2BCIDR:
+ Condition: AdditionalPrivateSubnetsCondition
+ Description: Private subnet 2B CIDR in Availability Zone 2
+ Value: !Ref 'PrivateSubnet2BCIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2BCIDR'
+ PrivateSubnet2BID:
+ Condition: AdditionalPrivateSubnetsCondition
+ Description: Private subnet 2B ID in Availability Zone 2
+ Value: !Ref 'PrivateSubnet2B'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2BID'
+ PrivateSubnet2BRouteTable:
+ Condition: AdditionalPrivateSubnetsCondition
+ Value: !Ref 'PrivateSubnet2BRouteTable'
+ Description: Private subnet 2B route table
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet2BRouteTable'
+ PrivateSubnet3ACIDR:
+ Condition: PrivateSubnets&3AZCondition
+ Description: Private subnet 3A CIDR in Availability Zone 3
+ Value: !Ref 'PrivateSubnet3ACIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3ACIDR'
+ PrivateSubnet3AID:
+ Condition: PrivateSubnets&3AZCondition
+ Description: Private subnet 3A ID in Availability Zone 3
+ Value: !Ref 'PrivateSubnet3A'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3AID'
+ PrivateSubnet3ARouteTable:
+ Condition: PrivateSubnets&3AZCondition
+ Value: !Ref 'PrivateSubnet3ARouteTable'
+ Description: Private subnet 3A route table
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3ARouteTable'
+ PrivateSubnet3BCIDR:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Description: Private subnet 3B CIDR in Availability Zone 3
+ Value: !Ref 'PrivateSubnet3BCIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3BCIDR'
+ PrivateSubnet3BID:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Description: Private subnet 3B ID in Availability Zone 3
+ Value: !Ref 'PrivateSubnet3B'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3BID'
+ PrivateSubnet3BRouteTable:
+ Condition: AdditionalPrivateSubnets&3AZCondition
+ Description: Private subnet 3B route table
+ Value: !Ref 'PrivateSubnet3BRouteTable'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet3BRouteTable'
+ PrivateSubnet4ACIDR:
+ Condition: PrivateSubnets&4AZCondition
+ Description: Private subnet 4A CIDR in Availability Zone 4
+ Value: !Ref 'PrivateSubnet4ACIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4ACIDR'
+ PrivateSubnet4AID:
+ Condition: PrivateSubnets&4AZCondition
+ Description: Private subnet 4A ID in Availability Zone 4
+ Value: !Ref 'PrivateSubnet4A'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4AID'
+ PrivateSubnet4ARouteTable:
+ Condition: PrivateSubnets&4AZCondition
+ Description: Private subnet 4A route table
+ Value: !Ref 'PrivateSubnet4ARouteTable'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4ARouteTable'
+ PrivateSubnet4BCIDR:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Description: Private subnet 4B CIDR in Availability Zone 4
+ Value: !Ref 'PrivateSubnet4BCIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4BCIDR'
+ PrivateSubnet4BID:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Description: Private subnet 4B ID in Availability Zone 4
+ Value: !Ref 'PrivateSubnet4B'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4BID'
+ PrivateSubnet4BRouteTable:
+ Condition: AdditionalPrivateSubnets&4AZCondition
+ Description: Private subnet 4B route table
+ Value: !Ref 'PrivateSubnet4BRouteTable'
+ Export:
+ Name: !Sub '${AWS::StackName}-PrivateSubnet4BRouteTable'
+ PublicSubnet1CIDR:
+ Condition: PublicSubnetsCondition
+ Description: Public subnet 1 CIDR in Availability Zone 1
+ Value: !Ref 'PublicSubnet1CIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet1CIDR'
+ PublicSubnet1ID:
+ Condition: PublicSubnetsCondition
+ Description: Public subnet 1 ID in Availability Zone 1
+ Value: !Ref 'PublicSubnet1'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet1ID'
+ PublicSubnet2CIDR:
+ Condition: PublicSubnetsCondition
+ Description: Public subnet 2 CIDR in Availability Zone 2
+ Value: !Ref 'PublicSubnet2CIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet2CIDR'
+ PublicSubnet2ID:
+ Condition: PublicSubnetsCondition
+ Description: Public subnet 2 ID in Availability Zone 2
+ Value: !Ref 'PublicSubnet2'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet2ID'
+ PublicSubnet3CIDR:
+ Condition: PublicSubnets&3AZCondition
+ Description: Public subnet 3 CIDR in Availability Zone 3
+ Value: !Ref 'PublicSubnet3CIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet3CIDR'
+ PublicSubnet3ID:
+ Condition: PublicSubnets&3AZCondition
+ Description: Public subnet 3 ID in Availability Zone 3
+ Value: !Ref 'PublicSubnet3'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet3ID'
+ PublicSubnet4CIDR:
+ Condition: PublicSubnets&4AZCondition
+ Description: Public subnet 4 CIDR in Availability Zone 4
+ Value: !Ref 'PublicSubnet4CIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet4CIDR'
+ PublicSubnet4ID:
+ Condition: PublicSubnets&4AZCondition
+ Description: Public subnet 4 ID in Availability Zone 4
+ Value: !Ref 'PublicSubnet4'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnet4ID'
+ PublicSubnetRouteTable:
+ Condition: PublicSubnetsCondition
+ Description: Public subnet route table
+ Value: !Ref 'PublicSubnetRouteTable'
+ Export:
+ Name: !Sub '${AWS::StackName}-PublicSubnetRouteTable'
+ S3VPCEndpoint:
+ Condition: PrivateSubnetsCondition
+ Description: S3 VPC Endpoint
+ Value: !Ref 'S3VPCEndpoint'
+ Export:
+ Name: !Sub '${AWS::StackName}-S3VPCEndpoint'
+ VPCCIDR:
+ Description: VPC CIDR
+ Value: !Ref 'VPCCIDR'
+ Export:
+ Name: !Sub '${AWS::StackName}-VPCCIDR'
+ VPCID:
+ Description: VPC ID
+ Value: !Ref 'VPC'
+ Export:
+ Name: !Sub '${AWS::StackName}-VPCID'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitignore b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitignore
new file mode 100644
index 0000000..9dd6585
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitignore
@@ -0,0 +1,9 @@
+.DS_Store
+taskcat_outputs/*
+packages/
+
+# cfn module build
+cfn-module/*.zip
+cfn-module/*.json
+cfn-module/fragments/
+cfn-module/rpdk.log
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitmodules b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitmodules
new file mode 100644
index 0000000..5d94307
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.gitmodules
@@ -0,0 +1,7 @@
+[submodule "submodules/quickstart-aws-vpc"]
+ path = submodules/quickstart-aws-vpc
+ url = https://github.com/aws-quickstart/quickstart-aws-vpc.git
+ branch = main
+[submodule "docs/boilerplate"]
+ path = docs/boilerplate
+ url = https://github.com/aws-quickstart/quickstart-documentation-base-common.git
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.nojekyll b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.taskcat.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.taskcat.yml
new file mode 100644
index 0000000..4e3f656
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/.taskcat.yml
@@ -0,0 +1,109 @@
+project:
+ name: quickstart-linux-bastion
+ owner: quickstart-eng@amazon.com
+ lambda_source_path: functions/source
+ lambda_zip_path: packages
+ s3_regional_buckets: true
+ regions:
+ - ap-northeast-1
+ - ap-northeast-2
+ - ap-south-1
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-east-1
+ - ca-central-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-west-3
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ # - us-west-1
+ - us-west-2
+ - us-gov-east-1
+ - us-gov-west-1
+ template: templates/linux-bastion-master.template
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ #BastionInstanceType: t3.medium
+ KeyPairName: $[taskcat_getkeypair]
+ PrivateSubnet1CIDR: 10.0.0.0/19
+ PrivateSubnet2CIDR: 10.0.32.0/19
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ QSS3BucketName: $[taskcat_autobucket]
+ RemoteAccessCIDR: 10.0.0.0/16
+ VPCCIDR: 10.0.0.0/16
+ QSS3BucketRegion: $[taskcat_current_region]
+tests:
+ amznlinux2hvm:
+ parameters:
+ BastionAMIOS: Amazon-Linux2-HVM
+ BastionInstanceType: t3.medium
+ regions:
+ - ap-northeast-1
+ - ap-northeast-2
+ - ap-south-1
+ - ap-southeast-1
+ - ap-southeast-2
+ - ca-central-1
+ - eu-central-1
+ - eu-north-1
+ - eu-west-1
+ - eu-west-2
+ - eu-west-3
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ #- us-west-1
+ - us-west-2
+ #- cn-north-1
+ #- cn-northwest-1
+ - us-gov-east-1
+ - us-gov-west-1
+ centos7hvm:
+ parameters:
+ BastionAMIOS: CentOS-7-HVM
+ BastionInstanceType: t3.medium
+ regions:
+ - ap-south-1
+ - ca-central-1
+ - eu-central-1
+ - eu-north-1
+ - eu-west-1
+ - us-east-1
+ sles15hvm:
+ parameters:
+ BastionAMIOS: SUSE-SLES-15-HVM
+ BastionInstanceType: t3.medium
+ regions:
+ - ap-south-1
+ - ca-central-1
+ - eu-central-1
+ - eu-north-1
+ - eu-west-1
+ - us-east-1
+ us2004hvm:
+ parameters:
+ BastionAMIOS: Ubuntu-Server-20.04-LTS-HVM
+ BastionInstanceType: t3.medium
+ regions:
+ - ap-south-1
+ - ca-central-1
+ - eu-central-1
+ - eu-north-1
+ - eu-west-1
+ - us-east-1
+ arminst:
+ parameters:
+ BastionAMIOS: Amazon-Linux2-HVM-ARM
+ BastionInstanceType: t4g.nano
+ regions:
+ - ap-south-1
+ - ca-central-1
+ - eu-central-1
+ - eu-north-1
+ - eu-west-1
+ - us-east-1
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/LICENSE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/LICENSE.txt
new file mode 100644
index 0000000..8f71f43
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/LICENSE.txt
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/NOTICE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/NOTICE.txt
new file mode 100644
index 0000000..9be841c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/NOTICE.txt
@@ -0,0 +1,7 @@
+Copyright 2016-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at
+
+ http://aws.amazon.com/apache2.0/
+
+or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/README.md
new file mode 100644
index 0000000..45cea7e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/README.md
@@ -0,0 +1,7 @@
+# Linux Bastion Host on the AWS Cloud
+
+For architectural details, step-by-step instructions, and customization options, see the [deployment guide](https://fwd.aws/YqpXk).
+
+To post feedback, submit feature ideas, or report bugs, use the **Issues** section of this GitHub repo.
+
+To submit code for this Quick Start, see the [AWS Quick Start Contributor's Kit](https://aws-quickstart.github.io/).
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/cfn-module/.rpdk-config b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/cfn-module/.rpdk-config
new file mode 100644
index 0000000..be15c75
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/cfn-module/.rpdk-config
@@ -0,0 +1,5 @@
+{
+ "artifact_type": "MODULE",
+ "typeName": "AWSQS::EC2::LinuxBastionQS::MODULE",
+ "settings": {}
+}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
new file mode 100755
index 0000000..56a9482
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
@@ -0,0 +1,9 @@
+# asciidoctor image
+FROM asciidoctor/docker-asciidoctor
+
+LABEL "version"="1.0"
+
+# Setup entrypoint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/README.md
new file mode 100755
index 0000000..d2ed7c4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/README.md
@@ -0,0 +1,33 @@
+# Asciidoctor GitHub Action
+
+To use this action add the below config to **.github/workflows/adocs-build.yml**
+
+```
+name: build adocs
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ adoc_build:
+ runs-on: ubuntu-18.04
+ name: asciidoctor -D docs --backend=html5 -o index.html -a toc2 docs/index.adoc
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+ - name: Get build container
+ id: adocbuild
+ uses: path-to-/.actions/asciidoctor-action
+ with:
+ program: "asciidoctor -D docs --backend=html5 -o index.html docs/index.adoc"
+ - name: Print execution time
+ run: echo "Time ${{ steps.adocbuild.outputs.time }}"
+ - name: Deploy docs to ghpages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ publish_branch: gh-pages
+ publish_dir: ./
+```
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/action.yml
new file mode 100755
index 0000000..c713a7e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/action.yml
@@ -0,0 +1,20 @@
+name: 'build asciidoctor action'
+author: 'Tony Vattathil'
+description: 'asciidoctor Build action'
+
+branding:
+ icon: 'file'
+ color: 'green'
+inputs:
+ program:
+ description: 'asciidoctor '
+ required: true
+ default: 'asciidoctor -D docs --backend=html5 -o index.html -a toc2 ddocs/index.adoc'
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
new file mode 100755
index 0000000..3ee8495
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+# entrypoint.sh
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/Dockerfile
new file mode 100644
index 0000000..7045074
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/Dockerfile
@@ -0,0 +1,4 @@
+FROM python:3.8-buster
+RUN pip install cfn-lint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/action.yml
new file mode 100644
index 0000000..d572407
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/action.yml
@@ -0,0 +1,19 @@
+name: 'Customized cfn-lint action for AWS Quick Start org use'
+author: 'Andrew Glenn'
+
+branding:
+ icon: 'file-text'
+ color: 'green'
+
+inputs:
+ program:
+ description: "cfnlint"
+ required: true
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
new file mode 100755
index 0000000..a12bc1e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-develop-branch.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-develop-branch.yml
new file mode 100644
index 0000000..fc679da
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/cfnlint-develop-branch.yml
@@ -0,0 +1,24 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - develop
+jobs:
+ lint:
+ runs-on: ubuntu-18.04
+ name: lint CFN templates
+ steps:
+ - name: Checkout (develop)
+ uses: actions/checkout@v2
+ with:
+ path: checked_out_repo
+ - name: Checkout (custom rules)
+ uses: actions/checkout@v2
+ with:
+ path: team_custom_rules
+ - name: Run local actions
+ id: cfnlint_custom
+ uses: ./docs/boilerplate/.actions/cfnlint-action
+ with:
+ program: "./docs/boilerplate/.utils/cfnlint_custom.sh"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/main-docs-build.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/main-docs-build.yml
new file mode 100644
index 0000000..35b5b5e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.actions/main-docs-build.yml
@@ -0,0 +1,38 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ build-adocs:
+ runs-on: ubuntu-18.04
+ name: asciidoc builder
+ steps:
+ - name: Checkout (main)
+ uses: actions/checkout@v2
+ - name: Get new doc updates
+ run: |
+ wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
+ chmod +x configure_git_env.sh
+ ./configure_git_env.sh
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - name: Generate dynamic content.
+ run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ - name: Run local actions
+ id: adoc
+ uses: ./docs/boilerplate/.actions/asciidoctor-action
+ with:
+ program: "./docs/boilerplate/.utils/build_docs.sh"
+ - name: Stage and Push changes to gh-pages branch.
+ run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Configure gh-pages source and trigger build if necessary.
+ run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/AWS-Logo.svg b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/AWS-Logo.svg
new file mode 100644
index 0000000..4d23322
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/AWS-Logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/quickstart.css b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/quickstart.css
new file mode 100644
index 0000000..bccc421
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.css/quickstart.css
@@ -0,0 +1,774 @@
+
+/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment @import statement to use as custom stylesheet */
+@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:none}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:0}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#34478c;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite::before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt{background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+:not(pre)>code.nobreak{word-wrap:normal}
+:not(pre)>code.nowrap{white-space:nowrap}
+pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
+pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
+pre>code{display:block}
+pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{
+ border-bottom:1px solid #e7e7e9;
+ padding-bottom:.5em;
+ width: 230px;
+}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{
+ font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ text-decoration:none;
+ color:#ccc;
+ display: block;
+ font-size:1rem;
+ line-height: 2rem;
+}
+#toc a:hover{color:#e6e6e6}
+#toc a:active{
+ text-decoration:none;
+ color:#777;
+}
+#toctitle{
+ padding-top:0;
+ overflow:hidden;
+ background:#283e5b;
+ border-bottom: 4px solid #435c7c;
+ width:320px;
+ height:154px;
+ top:0;
+ left:0;
+ color: #283e5b;
+}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background:#1c222a;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;/*! padding:1.25em 1em; */height:100%;overflow:auto;padding-right: 0px;}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{
+ font-size:1.375em;
+ background-repeat: no-repeat;
+ background-size: 160.8px 136.483px;
+ background-position: center;
+ }
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background:#1c222a;padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44;/*! background: #e6e6e6; */}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #e7e7e9}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
+@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.prettyprint{background:#f7f7f8}
+pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
+pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
+pre.prettyprint li code[data-lang]::before{opacity:1}
+pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
+table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
+table.linenotable td.code{padding-left:.75em}
+table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
+pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
+pre.pygments .lineno::before{content:"";margin-right:-.125em}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
+.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
+.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
+.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
+.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
+table.tableblock{max-width:100%;border-collapse:separate}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content>:last-child{margin-bottom:-1.25em}
+td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
+table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
+table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
+table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
+table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
+table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot,table.frame-ends{border-width:1px 0}
+table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
+ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left{margin:.25em .625em 1.25em 0}
+.imageblock.right{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background:#00fafa}
+.black{color:#000}
+.black-background{background:#000}
+.blue{color:#0000bf}
+.blue-background{background:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background:#fa00fa}
+.gray{color:#606060}
+.gray-background{background:#7d7d7d}
+.green{color:#006000}
+.green-background{background:#007d00}
+.lime{color:#00bf00}
+.lime-background{background:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background:#7d0000}
+.navy{color:#000060}
+.navy-background{background:#00007d}
+.olive{color:#606000}
+.olive-background{background:#7d7d00}
+.purple{color:#600060}
+.purple-background{background:#7d007d}
+.red{color:#bf0000}
+.red-background{background:#fa0000}
+.silver{color:#909090}
+.silver-background{background:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+
+/* ------------------------- QS CSS entries ---------------------------- */
+@font-face {
+ font-family: 'Amazon Ember Light';
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-019e0ec3f9b521056e66e31fdcbc8323e5cd1938._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-bc9ed0fce860a46f3cb061034280c23400e6e8b6._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-fd81bacb6a659a8c8c95828226b74594ab985060._V299195749_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-0acf3bc8b64d470d8888d84741a19533394654c6._V299195749_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-af980fe9c64fc17ece72cba4e3e7fdf54babeea6._V299195748_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-4fae4842b3446774d86579b9b024858a848644e8._V299195748_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237381_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237386_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Italic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446113_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446115_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715032_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715033_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Italic'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715033_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715032_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+
+.tip {
+ border-top: 30px solid rgba(92, 184, 92, 0.8);
+ background: #E6F9E6;
+}
+
+.note {
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA;
+}
+
+.warning {
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB;
+}
+
+.caution {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+.important {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+#content {
+ max-width: 100rem;
+ padding-left: 5rem;
+ padding-right: 5rem;
+}
+
+body {
+ font-family: "Amazon Ember Regular", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+}
+
+/* added */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin : 0.85rem 0 1.7rem 0;
+ text-rendering: optimizeLegibility;
+ color: #ec7211;
+}
+
+p {
+ margin: 1rem 0;
+}
+
+/* QS Table of Contents */
+
+#toc {
+ overflow-x: hidden !important;
+}
+
+#toc>ul li {
+ padding : 0.3rem 0.6rem;
+ margin-top : 0;
+ line-height: 1;
+}
+
+#toc>ul li a {
+ line-height: 1.6;
+}
+
+#toc a {
+ /* TOC details */
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ margin-left : -1rem;
+ margin-right : -1rem;
+ padding-left : 1rem;
+ padding-right: 1rem;
+ background : transparent;
+ box-sizing : border-box;
+ cursor : pointer;
+ font-weight : 300 !important;
+}
+
+#toc.toc2 #toctitle{
+ background-image: url('images/AWS-Logo.svg');
+}
+
+/* QS Tables */
+
+table.tableblock .title,
+.imageblock .title {
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ font-size: 1.1rem;
+ color: #34478c;
+}
+table p {
+ margin: 0rem;
+}
+
+/* Add border around hyperlink images */
+a img {
+ border: 1px solid #A4A4A4;
+}
+
+.preview_mode {
+ border-color:#e0e0dc;
+ -webkit-box-shadow:0 1px 4px #e0e0dc;
+ box-shadow:0 1px 4px #e0e0dc;
+ background:#ffffb3;
+ padding-bottom: 2rem;
+}
+.preview_mode .tableblock {
+ background:#ffffb3;
+}
+
+.footer-text{color:rgba(255,255,255,.8);line-height:1.44;background:#1c222a;padding:1.25em;max-width:100%;margin-bottom:unset}
+p.footer-text a{color:#d7d8d8}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/architecture_diagram.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/architecture_diagram.png
new file mode 100644
index 0000000..769bf7f
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/architecture_diagram.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/aws-quickstart-graphic.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/aws-quickstart-graphic.png
new file mode 100644
index 0000000..8efde67
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/aws-quickstart-graphic.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/cfn_outputs.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/cfn_outputs.png
new file mode 100644
index 0000000..5ed57bd
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.images/cfn_outputs.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/_settings.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/_settings.adoc
new file mode 100644
index 0000000..6748ca5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/_settings.adoc
@@ -0,0 +1,27 @@
+// Change the following attributes.
+:quickstart-project-name: quickstart-documentation-base
+:partner-product-name: Example Product Name
+// For the following attribute, if you have no short name, enter the same name as partner-product-name.
+:partner-product-short-name: Example Product Name
+// If there's no partner, comment partner-company-name.
+:partner-company-name: Example Company Name, Ltd.
+:doc-month: Month of launch or significant update (spelled out)
+:doc-year: Year
+// Uncomment the following "contributor" attributes as appropriate. If the partner agrees to include names, enter contributor names for every line we use. If partner doesn't want to include names, delete all placeholder names and keep only "{partner-company-name}" and "AWS Quick Start team."
+//:partner-contributors: Shuai Ye, Michael McConnell, and John Smith, {partner-company-name}
+//:other-contributors: Akua Mansa, Trek10
+//:aws-contributors: Janine Singh, AWS IoT Partner team
+:quickstart-contributors: Toni Jones, AWS Quick Start team
+// For deployment_time, use minutes if deployment takes an hour or less,
+// for example, 30 minutes or 60 minutes.
+// Use hours for deployment times greater than 60 minutes (rounded to a quarter hour),
+// for example, 1.25 hours, 2 hours, 2.5 hours.
+:deployment_time: 15 minutes / 60 minutes / 1.5 hours
+:default_deployment_region: us-east-1
+:parameters_as_appendix:
+// Uncomment the following two attributes if you are using an AWS Marketplace listing.
+// Additional content will be generated automatically based on these attributes.
+// :marketplace_subscription:
+// :marketplace_listing_url: https://example.com/
+// Uncomment the following attribute to add a statement about AWS and our stance on compliance-related Quick Starts.
+// :compliance-statement: Deploying this Quick Start does not guarantee an organization’s compliance with any laws, certifications, policies, or other regulations.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/additional_info.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/additional_info.adoc
new file mode 100644
index 0000000..80efbb2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/additional_info.adoc
@@ -0,0 +1,23 @@
+// Add steps as necessary for accessing the software, post-configuration, and testing. Don’t include full usage instructions for your software, but add links to your product documentation for that information.
+//Should any sections not be applicable, remove them
+
+== Test the deployment
+// If steps are required to test the deployment, add them here. If not, remove the heading
+
+== Post-deployment steps
+// If post-deployment steps are required, add them here. If not, remove the heading
+
+== Best practices for using {partner-product-short-name} on AWS
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any best practices for using the software._
+
+== Security
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any security-related information._
+
+== Other useful information
+//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
+
+_Add any other details that will help the customer use the software on AWS._
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/architecture.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/architecture.adoc
new file mode 100644
index 0000000..7a8d0e3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/architecture.adoc
@@ -0,0 +1,29 @@
+:xrefstyle: short
+
+Deploying this Quick Start for a new virtual private cloud (VPC) with
+default parameters builds the following {partner-product-short-name} environment in the
+AWS Cloud.
+
+// Replace this example diagram with your own. Follow our wiki guidelines: https://w.amazon.com/bin/view/AWS_Quick_Starts/Process_for_PSAs/#HPrepareyourarchitecturediagram. Upload your source PowerPoint file to the GitHub {deployment name}/docs/images/ directory in this repo.
+
+[#architecture1]
+.Quick Start architecture for {partner-product-short-name} on AWS
+image::../images/architecture_diagram.png[Architecture]
+
+As shown in <>, the Quick Start sets up the following:
+
+* A highly available architecture that spans two Availability Zones.*
+* A VPC configured with public and private subnets, according to AWS
+best practices, to provide you with your own virtual network on AWS.*
+* In the public subnets:
+** Managed network address translation (NAT) gateways to allow outbound
+internet access for resources in the private subnets.*
+** A Linux bastion host in an Auto Scaling group to allow inbound Secure
+Shell (SSH) access to EC2 instances in public and private subnets.*
+* In the private subnets:
+** .
+** .
+// Add bullet points for any additional components that are included in the deployment. Make sure that the additional components are also represented in the architecture diagram. End each bullet with a period.
+* .
+
+[.small]#* The template that deploys the Quick Start into an existing VPC skips the components marked by asterisks and prompts you for your existing VPC configuration.#
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deploy_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deploy_steps.adoc
new file mode 100644
index 0000000..5953d24
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deploy_steps.adoc
@@ -0,0 +1,44 @@
+// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
+=== Sign in to your AWS account
+
+. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
+. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
+
+// Optional based on Marketplace listing. Not to be edited
+ifdef::marketplace_subscription[]
+=== Subscribe to the {partner-product-short-name} AMI
+
+This Quick Start requires a subscription to the AMI for {partner-product-short-name} in AWS Marketplace.
+
+. Sign in to your AWS account.
+. Open the page for the {marketplace_listing_url}[{partner-product-short-name} AMI in AWS Marketplace^], and then choose *Continue to Subscribe*.
+. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
+ A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
+
+. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
+endif::marketplace_subscription[]
+// \Not to be edited
+
+=== Launch the Quick Start
+// Adapt the following warning to your Quick Start.
+WARNING: If you’re deploying {partner-product-short-name} into an existing VPC, make sure that your VPC has two private subnets in different Availability Zones for the workload instances and that the subnets aren’t shared. This Quick Start doesn’t support https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html[shared subnets^]. These subnets require https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables to allow the instances to download packages and software without exposing them to the internet. Also make sure that the domain name option in the DHCP options is configured as explained in http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[DHCP options sets^]. You provide your VPC settings when you launch the Quick Start.
+
+Each deployment takes about {deployment_time} to complete.
+
+. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see link:#_deployment_options[Deployment options] earlier in this guide.
+
+[cols="3,1"]
+|===
+^|http://qs_launch_permalink[Deploy {partner-product-short-name} into a new VPC on AWS^]
+^|http://qs_template_permalink[View template^]
+
+^|http://qs_launch_permalink[Deploy {partner-product-short-name} into an existing VPC on AWS^]
+^|http://qs_template_permalink[View template^]
+|===
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This Region is where the network infrastructure for {partner-product-short-name} is built. The template is launched in the {default_deployment_region} Region by default. For other choices, see link:#_supported_regions[Supported Regions] earlier in this guide.
+
+[start=3]
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary. For details on each parameter, see the link:#_parameter_reference[Parameter reference] section of this guide. When you finish reviewing and customizing the parameters, choose *Next*.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deployment_options.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deployment_options.adoc
new file mode 100644
index 0000000..e397c40
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/deployment_options.adoc
@@ -0,0 +1,8 @@
+// Edit this placeholder text to accurately describe your architecture.
+
+This Quick Start provides two deployment options:
+
+* *Deploy {partner-product-short-name} into a new VPC*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys {partner-product-short-name} into this new VPC.
+* *Deploy {partner-product-short-name} into an existing VPC*. This option provisions {partner-product-short-name} in your existing AWS infrastructure.
+
+The Quick Start provides separate templates for these options. It also lets you configure Classless Inter-Domain Routing (CIDR) blocks, instance types, and {partner-product-short-name} settings, as discussed later in this guide.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/faq_troubleshooting.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/faq_troubleshooting.adoc
new file mode 100644
index 0000000..5b66e35
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/faq_troubleshooting.adoc
@@ -0,0 +1,21 @@
+// Add any tips or answers to anticipated questions.
+
+== FAQ
+
+*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
+
+*A.* If AWS CloudFormation fails to create the stack, relaunch the template with *Rollback on failure* set to *Disabled*. This setting is under *Advanced* in the AWS CloudFormation console on the *Configure stack options* page. With this setting, the stack’s state is retained, and the instance keeps running so that you can troubleshoot the issue. (For Windows, look at the log files in `%ProgramFiles%\Amazon\EC2ConfigService` and `C:\cfn\log`.)
+// Customize this answer if needed. For example, if you’re deploying on Linux instances, either provide the location for log files on Linux or omit the final sentence. If the Quick Start has no EC2 instances, revise accordingly (something like "and the assets keep running").
+
+WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Delete the stack when you finish troubleshooting.
+
+For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^].
+
+*Q.* I encountered a size-limitation error when I deployed the AWS CloudFormation templates.
+
+*A.* Launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template-size limitations. For more information, see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS CloudFormation quotas^].
+
+
+== Troubleshooting
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/licenses.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/licenses.adoc
new file mode 100644
index 0000000..53f93af
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/licenses.adoc
@@ -0,0 +1,12 @@
+// Include details about any licenses and how to sign up. Provide links as appropriate. If no licenses are required, clarify that. The following paragraphs provide examples of details you can provide. Remove italics, and rephrase as appropriate.
+
+_No licenses are required to deploy this Quick Start. All AWS service resources consumed during the launch of the Quick Start incur AWS service usage costs._
+
+_Some configurations of the {partner-product-short-name} Quick Start involve the use of third-party software. You are responsible for obtaining a license directly from the software vendor._
+
+_This Quick Start requires a license for {partner-product-short-name}. To use the Quick Start in your production environment, sign up for a license at . When you launch the Quick Start, place the license key in an S3 bucket and specify its location._
+
+_If you don’t have a license, the Quick Start deploys with a trial license. The trial license gives you days of free usage in a non-production environment. After this time, you can upgrade to a production license by following the instructions at ._
+
+// Or, if the deployment uses an AMI, update this paragraph. If it doesn’t, remove the paragraph.
+_The Quick Start requires a subscription to the Amazon Machine Image (AMI) for {partner-product-short-name}, which is available from https://aws.amazon.com/marketplace/[AWS Marketplace^]. Additional pricing, terms, and conditions may apply. For instructions, see link:#step-2.-subscribe-to-the-software-ami[step 2] in the deployment section._
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/overview_target_and_usage.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/overview_target_and_usage.adoc
new file mode 100644
index 0000000..5581b5b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/overview_target_and_usage.adoc
@@ -0,0 +1,7 @@
+// Replace the content in <>
+// Identify your target audience and explain how/why they would use this Quick Start.
+//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
+
+This guide provides instructions for deploying the {partner-product-short-name} Quick Start reference architecture on the AWS Cloud.
+
+This Quick Start is for users who
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/pre-reqs.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/pre-reqs.adoc
new file mode 100644
index 0000000..f08b5d9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/pre-reqs.adoc
@@ -0,0 +1,13 @@
+// If no preperation is required, remove all content from here
+
+==== Prepare your AWS account
+
+_Describe any setup required in the AWS account prior to template launch_
+
+==== Prepare your {partner-company-name} account
+
+_Describe any setup required in the partner portal/account prior to template launch_
+
+==== Prepare for the deployment
+
+_Describe any preparation required to complete the product build, such as obtaining licenses or placing files in S3_
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/product_description.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/product_description.adoc
new file mode 100644
index 0000000..2582a99
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/product_description.adoc
@@ -0,0 +1,5 @@
+// Replace the content in <>
+// Briefly describe the software. Use consistent and clear branding.
+// Include the benefits of using the software on AWS, and provide details on usage scenarios.
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/regions.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/regions.adoc
new file mode 100644
index 0000000..a66b0b9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/regions.adoc
@@ -0,0 +1,6 @@
+This Quick Start supports the following Regions:
+
+* us-east-1, US East (N. Virginia) (EXAMPLE)
+* us-east-2, US East (Ohio) (EXAMPLE)
+
+//Full list: https://docs.aws.amazon.com/general/latest/gr/rande.html
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/service_limits.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/service_limits.adoc
new file mode 100644
index 0000000..755aa33
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/service_limits.adoc
@@ -0,0 +1,14 @@
+// Replace the in each row to specify the number of resources used in this deployment. Remove the rows for resources that aren’t used.
+|===
+|Resource |This deployment uses
+
+// Space needed to maintain table headers
+|VPCs |
+|Elastic IP addresses |
+|Security groups |
+|AWS Identity and Access Management (IAM) roles |
+|Auto Scaling groups |
+|Application Load Balancers |
+|Network Load Balancers |
+| instances |
+|===
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/specialized_knowledge.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/specialized_knowledge.adoc
new file mode 100644
index 0000000..2b414e1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.specific/specialized_knowledge.adoc
@@ -0,0 +1,6 @@
+// Replace the content in <>
+// For example: “familiarity with basic concepts in networking, database operations, and data encryption” or “familiarity with .”
+// Include links if helpful.
+// You don't need to list AWS services or point to general info about AWS; the boilerplate already covers this.
+
+This Quick Start also assumes familiarity with .
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/.blah b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/.blah
new file mode 100644
index 0000000..e69de29
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/Codebuild-Custom.dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
new file mode 100644
index 0000000..ce63be4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
@@ -0,0 +1,24 @@
+# Copyright 2020-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Amazon Software License (the "License"). You may not use this file except in compliance with the License.
+# A copy of the License is located at
+#
+# http://aws.amazon.com/asl/
+#
+# or in the "license" file accompanying this file.
+# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
+# See the License for the specific language governing permissions and limitations under the License.
+
+FROM asciidoctor/docker-asciidoctor
+
+RUN apk add --no-cache \
+ py3-pip \
+ python3 \
+ zip \
+ rsync
+RUN wget https://raw.githubusercontent.com/REPO/BRANCH/.utils/requirements.txt -O /tmp/req.txt
+RUN ln -sf /usr/bin/pip3 /usr/bin/pip
+RUN ln -sf /usr/bin/python3 /usr/bin/python
+RUN pip3 install awscli
+RUN pip3 install -r /tmp/req.txt
+ENTRYPOINT ["dockerd-entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/build_docs.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/build_docs.sh
new file mode 100755
index 0000000..41ea740
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/build_docs.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+set -e
+
+function build_language_docs(){
+ for dir in docs/languages/*/
+ do
+ dir=${dir%*/}
+ lang=$(echo ${dir%*/} | awk -F'[-]' '{print $2}')
+ asciidoctor --base-dir docs/languages/docs-${lang}/ --backend=html5 -o ../../../index-${lang}.html -w --failure-level ERROR --doctype=book -a toc2 ${ASCIIDOC_ATTRIBUTES} docs/languages/docs-${lang}/index.adoc
+ done
+}
+
+function _set_prod_asciidoc_attributes(){
+ export ASCIIDOC_ATTRIBUTES="-a production_build"
+}
+
+function build_docs_with_asciidoc_attributes(){
+ set +x
+ asciidoctor --base-dir docs/ --backend=html5 -o ../${HTML_FILE:-index.html} -w --failure-level ERROR --doctype=book -a toc2 ${ASCIIDOC_ATTRIBUTES} docs/boilerplate/index.adoc
+ set -x
+}
+
+function build_prod_example_docs(){
+ export HTML_FILE="prod_example.html"
+ _set_prod_asciidoc_attributes
+ build_docs_with_asciidoc_attributes
+}
+
+
+ASCIIDOC_ATTRIBUTES=""
+GITHUB_REPO_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
+if [ -d docs/images ]; then
+ rsync -avP docs/images/ images/
+fi
+
+if [ -f docs/index.html ]; then
+ rm docs/index.html
+fi
+
+if [ "${GITHUB_REPO_OWNER}" == "aws-quickstart" ]; then
+ cp docs/boilerplate/.css/AWS-Logo.svg images/
+ if [ "${GITHUB_REF}" == "refs/heads/master" ] || [ "${GITHUB_REF}" == "refs/heads/main" ]; then
+ _set_prod_asciidoc_attributes
+ else
+ PREVIEW_BUILD="true"
+ fi
+fi
+
+build_docs_with_asciidoc_attributes
+
+if [ -d docs/languages ]; then
+ build_language_docs
+fi
+
+if [ "${PREVIEW_BUILD}" == "true" ]; then
+ build_prod_example_docs
+fi
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/cfnlint_custom.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/cfnlint_custom.sh
new file mode 100755
index 0000000..dea5760
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/cfnlint_custom.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+if [[ -d "${GITHUB_WORKSPACE}/team_custom_rules" ]]; then
+ # Install requirements for custom rules, plus the rules themselves.
+ cd ${GITHUB_WORKSPACE}/team_custom_rules
+ pip install -r requirements.txt
+ python setup.py install
+ cd ${GITHUB_WORKSPACE}
+ # back to normal
+ CFNLINT_ARGS="-a ${GITHUB_WORKSPACE}/team_custom_rules/qs_cfn_lint_rules"
+ echo "Using custom ruleset"
+else
+ echo "NOT using custom ruleset"
+
+fi
+
+CFNLINT_JSON_OUT=$(mktemp)
+set +e
+cfn-lint ${CFNLINT_ARGS} -i W --templates templates/* --format json > ${CFNLINT_JSON_OUT}
+CFNLINT_EXIT_CODE=$?
+set -e
+python docs/boilerplate/.utils/pretty_cfnlint_output.py ${CFNLINT_JSON_OUT}
+exit ${CFNLINT_EXIT_CODE}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
new file mode 100755
index 0000000..652785e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+set -eu
+function common_steps(){
+ git add -A
+ git add images
+ git add index.html
+ git rm -r --force templates
+ git commit -a -m "Updating documentation"
+ git status
+}
+
+function github_actions_prod(){
+ repo_uri="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+ remote_name="doc-upstream"
+ main_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+ target_branch="gh-pages"
+ cd "$GITHUB_WORKSPACE"
+ ls -lah
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ common_steps
+ git remote set-url origin ${repo_uri}
+ git status | grep "nothing to commit, working tree clean" || git push origin HEAD:${target_branch} --force
+}
+
+#if [ $? -ne 0 ]; then
+# echo "nothing to commit"
+# exit 0
+#fi
+
+if [ "${DOCBUILD_PROD:-x}" == "true" ]; then
+ common_steps
+else
+ github_actions_prod
+fi
+
+git remote set-url origin ${repo_uri}
+git status | grep "Your branch is up to date" || git push origin HEAD:${target_branch} --force
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
new file mode 100755
index 0000000..4157868
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+exit 0
+# set -e
+# curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
+# sudo apt-get install jq -y
+# PAGES_STATUS=$(bin/hub api repos/${GITHUB_REPOSITORY}/pages | jq '.status' | sed -e 's/"//g')
+# if [ "${PAGES_STATUS}" != "null" ]; then
+# exit 0
+# fi
+
+# bin/hub api -H Accept:application/vnd.github.switcheroo-preview+json repos/${GITHUB_REPOSITORY}/pages -f {"source":{"branch":"gh-pages"}}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/configure_git_env.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/configure_git_env.sh
new file mode 100755
index 0000000..f6b6eb1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/configure_git_env.sh
@@ -0,0 +1,32 @@
+#!/bin/bash -e
+set -x
+git remote update
+git fetch
+set +e
+git remote set-head origin --auto
+default_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+doc_commit_id=$(git submodule | grep docs/boilerplate | cut -d - -f 2 | cut -f 1 -d " ")
+git rev-parse --verify origin/gh-pages
+CHECK_BRANCH=$?
+set -e
+if [[ $CHECK_BRANCH -ne 0 ]];then
+ git checkout -b gh-pages
+ git push origin gh-pages
+else
+ git checkout gh-pages
+# git checkout --track origin/gh-pages
+fi
+git rm -rf .
+touch .gitmodules
+git restore -s origin/${default_branch} docs
+set +e
+git rm -r docs/boilerplate -r
+rm -rf docs/boilerplate
+set -e
+git restore -s origin/${default_branch} templates
+git submodule add https://github.com/aws-quickstart/quickstart-documentation-base-common.git docs/boilerplate
+cd docs/boilerplate
+git checkout "${doc_commit_id}"
+cd ../../
+rm configure_git_env.sh
+mv docs/images images
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/create_repo_structure.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/create_repo_structure.sh
new file mode 100755
index 0000000..b52ca18
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/create_repo_structure.sh
@@ -0,0 +1,88 @@
+#!/bin/bash -e
+# # Work in progress.
+# exit 1
+
+#Adds Help and Second Language options (-h | -l)
+while getopts hl option
+do
+ case "${option}" in
+ h )
+ echo "Usage:"
+ echo "Run './create_repo_structure.sh' with no options for English langauge only."
+ echo "Run './create_repo_structure.sh -l' to add files for second langauge."
+ echo " "
+ echo "(-h) Show usage and brief help"
+ echo "(-l) Use to add files for second language for translation"
+ exit 0
+ ;;
+ l )
+ CREATESECONDLANG="create_second_lang";;
+ * )
+ echo "this is in an invalid flag. Please see "-h" for help on valid flags"
+ exit 0
+ ;;
+ esac
+done
+
+#Creates Standard English directory structure to the repo.
+function create_repo() {
+BOILERPLATE_DIR="docs/boilerplate"
+GENERATED_DIR="docs/generated"
+SPECIFIC_DIR="docs/partner_editable"
+# Creating directories.
+mkdir -p ${GENERATED_DIR}/parameters
+mkdir -p ${GENERATED_DIR}/regions
+mkdir -p ${GENERATED_DIR}/services
+mkdir -p ${SPECIFIC_DIR}
+mkdir -p docs/images
+mkdir -p .github/workflows
+
+# Copying content.
+rsync -avP ${BOILERPLATE_DIR}/.images/ docs/images/
+rsync -avP ${BOILERPLATE_DIR}/.specific/ ${SPECIFIC_DIR}
+
+# enabling workflow.
+cp ${BOILERPLATE_DIR}/.actions/main-docs-build.yml .github/workflows/
+
+
+# creating placeholders.
+echo "// placeholder" > ${GENERATED_DIR}/parameters/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/regions/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/metadata.adoc
+}
+
+#Creates standard English and second language directory structures to the repo.
+function create_second_lang() {
+read -p "Please enter enter 2 character language code: " LANG_CODE
+create_repo
+LANG_DIR="docs/languages"
+SPECIFIC_LANG_DIR="docs/languages/docs-${LANG_CODE}"
+TRANSLATE_ONLY="docs/languages/docs-${LANG_CODE}/translate-only"
+LANG_FOLDER="docs-${LANG_CODE}"
+mkdir -p ${LANG_DIR}
+mkdir -p ${SPECIFIC_LANG_DIR}
+mkdir -p ${TRANSLATE_ONLY}
+rsync -avP ${BOILERPLATE_DIR}/.specific/ ${SPECIFIC_LANG_DIR}/partner_editable
+rsync -avP ${BOILERPLATE_DIR}/*.adoc ${TRANSLATE_ONLY} --exclude *.lang.adoc --exclude index.adoc --exclude _layout_cfn.adoc --exclude planning_deployment.adoc
+rsync -avP ${BOILERPLATE_DIR}/_layout_cfn.lang.adoc ${SPECIFIC_LANG_DIR}/_layout_cfn.adoc
+rsync -avP ${BOILERPLATE_DIR}/index.lang.adoc ${SPECIFIC_LANG_DIR}/index.adoc
+rsync -avP ${BOILERPLATE_DIR}/planning_deployment.lang.adoc ${TRANSLATE_ONLY}/planning_deployment.adoc
+rsync -avP ${BOILERPLATE_DIR}/index-docinfo-footer.html ${TRANSLATE_ONLY}
+rsync -avP ${BOILERPLATE_DIR}/LICENSE ${TRANSLATE_ONLY}
+sed -i "" "s/docs-lang-code/${LANG_FOLDER}/g" ${SPECIFIC_LANG_DIR}/index.adoc
+}
+
+while true
+do
+#clear
+if [ $OPTIND -eq 1 ]; then create_repo; fi
+shift $((OPTIND-1))
+#printf "$# non-option arguments"
+$CREATESECONDLANG
+touch .nojekyll
+git add -A docs/
+git add .github/
+git add .nojekyll
+exit
+done
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/docs_built_in_codebuild.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/docs_built_in_codebuild.sh
new file mode 100644
index 0000000..9c8da88
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/docs_built_in_codebuild.sh
@@ -0,0 +1,84 @@
+#!/bin/bash -e
+# This file is meant to be the functional equalivent of the github actions workflow.
+#
+# // 5 env vars are required to use this.
+# - DOCBUILD_BOILERPLATE_S3_BUCKET
+# This defines the S3 bucketwhere a zip'd copy of *this repo* is located.
+# Example Value: "my-bucket-name-here"
+# - DOCBUILD_BOILERPLATE_S3_KEY
+# This defines the S3 Object key for the above-mentioned ZIP file.
+# Example Value: /path/to/my/file.zip
+# - DOCBUILD_CONTENT_S3_BUCKET
+# This defines the S3 bucket where a zip'd copy of repo to build is located.
+# (can be the same bucket)
+# Example value: "my-bucket-name-here"
+# - DOCBUILD_CONTENT_S3_KEY
+# This is the key where a ZIP of your content repo is located.
+# Example Value: "/path/to/my/other_file.zip"
+# - DOCBUILD_DESTINATION_S3_BUCKET
+# Bucket to upload the generated content to.
+# - DOCBUILD_DESTINATION_S3_KEY
+# S3 Key prefix for the generated content
+# - GITHUB_REPOSITORY
+# Easy identifier of the project that documentation is being built for.
+# - EX: jim-jimmerson/foobar
+#
+#
+#
+# Structure
+# --- Content repo is unzipped.
+# docs/boilerplate -- Boilerplate repo is unzipped here.
+
+function upload_preview_content(){
+ aws s3 sync --delete ${WORKING_DIR} ${DOCBUILD_DESTINATION_S3} --cache-control max-age=0,no-cache,no-store,must-revalidate --acl bucket-owner-full-control
+}
+
+function create_upload_ghpages_branch_archive(){
+ zip ${DL_DIR}/gh-pages.zip -r .
+ aws s3 cp ${DL_DIR}/gh-pages.zip ${DOCBUILD_DESTINATION_S3}
+}
+
+DL_DIR=$(mktemp -d)
+WORKING_DIR=$(mktemp -d)
+echo "${DOCBUILD_BOILERPLATE_S3}"
+echo "${DOCBUILD_CONTENT_S3}"
+aws s3 cp ${DOCBUILD_BOILERPLATE_S3} ${DL_DIR}/boilerplate.zip
+aws s3 cp ${DOCBUILD_CONTENT_S3} ${DL_DIR}/content.zip
+
+unzip ${DL_DIR}/content.zip -d ${WORKING_DIR}
+rm -rf ${WORKING_DIR}/docs/boilerplate
+unzip ${DL_DIR}/boilerplate.zip -d ${WORKING_DIR}/docs/boilerplate || exit 150
+
+cd ${WORKING_DIR}
+doc_commit_id=$(git submodule | grep docs/boilerplate | awk '{print $1}' | sed -e 's/^+//g' -e 's/^-//g')
+echo "${doc_commit_id}"
+if [ -z "${doc_commit_id}" ]; then
+ echo "docs/boilerplate submodule not found. exiting"
+ exit 150
+fi
+cd docs/boilerplate
+echo "Checking out boilerplate at commit ID: ${doc_commit_id}"
+git checkout "${doc_commit_id}"
+cd ../../
+if [ -d templates/ ]; then
+ ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ set -x
+ ./docs/boilerplate/.utils/build_docs.sh
+ set +x
+fi
+
+if [ ! -f index.html ]; then
+ exit 1
+fi
+
+tmpfile=$(mktemp)
+
+echo -e "repo commit:\n$(git -P log -1 | grep 'commit' | awk '{print $2}')\n\nsubmodule config:" >> ${tmpfile}
+git submodule >> ${tmpfile}
+echo -e "\n" >> index.html
+
+if [ "${DOCBUILD_PROD}" == "true" ]; then
+ create_upload_ghpages_branch_archive
+else
+ upload_preview_content
+fi
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_dynamic_content.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_dynamic_content.sh
new file mode 100755
index 0000000..2d6d01e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_dynamic_content.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Wrapper to generate parameter tables within asciidoc workflow.
+set -e
+#sudo apt-get install pandoc -y
+pip3 install -r docs/boilerplate/.utils/requirements.txt;
+set +e
+egrep -qi '^:no_parameters:$' docs/partner_editable/_settings.adoc; EC=$?
+set -e
+if [ ${EC} -ne 0 ]; then
+ echo "Gen tables"
+ python docs/boilerplate/.utils/generate_parameter_tables.py
+fi
+egrep -qi '^:cdk_qs:$' docs/partner_editable/_settings.adoc || ( echo "Gen metadata"; python docs/boilerplate/.utils/generate_metadata_attributes.py )
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_metadata_attributes.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_metadata_attributes.py
new file mode 100755
index 0000000..06b09a9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_metadata_attributes.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+import sys
+from pathlib import Path
+
+custom_attributes = {
+ 'deterministic_ec2_instances':[
+ 'aws_ec2_instance',
+ 'aws_ec2_host',
+ 'aws_ec2fleet',
+ 'aws_autoscaling_autoscalinggroup'
+ ]
+}
+
+def get_cfn(filename):
+ _decoded, _issues = cfnlint.decode.decode(filename)
+ if not _decoded:
+ raise Exception("cfn-lint failed to load {} without errors. Failure".format(filename))
+ return _decoded
+
+def fetch_metadata():
+ metadata_attributes = set()
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ template = get_cfn(Path(yaml_cfn_file))
+ _resources = template['Resources']
+ for _resource in _resources.values():
+ _type = _resource['Type'].lower()
+ metadata_attributes.add(_type.split('::')[1])
+ metadata_attributes.add(_type.replace('::','_'))
+ for attribute, qualifying_conditions in custom_attributes.items():
+ for qc in qualifying_conditions:
+ if qc in metadata_attributes:
+ metadata_attributes.add(attribute)
+ break
+ with open('docs/generated/services/metadata.adoc', 'w') as f:
+ f.write('\n')
+ for attr in sorted(metadata_attributes):
+ f.write(f":template_{attr}:\n")
+
+if __name__ == '__main__':
+ fetch_metadata()
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_parameter_tables.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_parameter_tables.py
new file mode 100755
index 0000000..5abedcc
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/generate_parameter_tables.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+import datetime
+import sys
+import os
+from pathlib import Path, PosixPath
+
+
+def get_cfn(filename):
+ _decoded, _issues = cfnlint.decode.decode(filename)
+ if not _decoded:
+ print(f"Template: {filename} has an error. Run cfn-lint to determine the issue")
+ sys.exit(1)
+ return _decoded
+
+def _generate_table_name_and_header(label_name):
+ data = []
+ data.append(f"\n.{label_name}")
+ data.append('[width="100%",cols="16%,11%,73%",options="header",]')
+ data.append("|===")
+ data.append("|Parameter label (name) |Default value|Description")
+ return "\n".join(data)
+
+def _generate_per_label_table_entry(label, param, default, description):
+ data = []
+ if not label:
+ label = "**NO_LABEL**"
+ data.append(f"|{label}")
+ data.append(f"(`{param}`)|`{default}`|{description}")
+ return '\n'.join(data)
+
+def _determine_file_list():
+ template_files = set()
+ if os.path.exists('./templates/.filename_standard_exception.txt'):
+ with open('./templates/.filename_standard_exception.txt') as f:
+ data = f.readlines()
+ for fn in data:
+ template_files.add(PosixPath(f"templates/{fn.strip()}"))
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ template_files.add(yaml_cfn_file)
+ return template_files
+
+def just_pass():
+ template_entrypoints = {}
+ template_order = {}
+ found_files_with_glob_pattern=False
+ for yaml_cfn_file in _determine_file_list():
+ found_files_with_glob_pattern=True
+ print(f"Working on {yaml_cfn_file}")
+ template = get_cfn(Path(yaml_cfn_file))
+ if not template:
+ raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
+ entrypoint = template.get('Metadata', {}).get('QuickStartDocumentation', {}).get('EntrypointName')
+ if not entrypoint:
+ print(f"- No documentation entrypoint found. Continuing.")
+ continue
+ order = template.get('Metadata',{}).get('QuickStartDocumentation',{}).get('Order')
+ if not order:
+ print(f"- No documentation order found. Assigning x.")
+ order = 'x'
+ _pf = Path(yaml_cfn_file).stem + ".adoc"
+ p_file = f"docs/generated/parameters/{_pf}"
+ template_entrypoints[p_file.split('/')[-1]] = entrypoint
+ template_order[p_file.split('/')[-1]] = str(order)
+
+ label_mappings = {}
+ reverse_label_mappings = {}
+ parameter_mappings = {}
+ parameter_labels = {}
+ no_groups = {}
+
+ def determine_optional_value(param):
+ optional = template['Metadata'].get('QuickStartDocumentation', {}).get('OptionalParameters')
+ if optional and (param in optional):
+ return '__Optional__'
+ return '**__Requires input__**'
+
+ for label in template['Metadata']['AWS::CloudFormation::Interface']['ParameterGroups']:
+ label_name = label['Label']['default']
+ label_params = label['Parameters']
+ label_mappings[label_name] = label_params
+ for ln in label_params:
+ reverse_label_mappings[ln] = label_name
+
+ for label_name, label_data in template['Metadata']['AWS::CloudFormation::Interface']['ParameterLabels'].items():
+ parameter_labels[label_name] = label_data.get('default')
+
+ for param_name, param_data in template['Parameters'].items():
+ if param_data.get('Default') == '':
+ param_data['Default'] = '**__Blank string__**'
+ parameter_mappings[param_name] = param_data
+ if not reverse_label_mappings.get(param_name):
+ no_groups[param_name] = param_data
+
+ adoc_data = ""
+ for label_name, label_params in label_mappings.items():
+ header = _generate_table_name_and_header(label_name)
+ adoc_data += header
+
+ for lparam in label_params:
+
+ param_data = _generate_per_label_table_entry(
+ parameter_labels.get(lparam, ''),
+ lparam,
+ parameter_mappings[lparam].get('Default', determine_optional_value(lparam)),
+ parameter_mappings[lparam].get('Description', 'NO_DESCRIPTION')
+ )
+ adoc_data += param_data
+ adoc_data += "\n|==="
+
+ print(f"- Generating: {p_file}")
+ with open (p_file, 'w') as p:
+ p.write(adoc_data)
+ if not found_files_with_glob_pattern:
+ raise Exception("No files matching templates/*.template.(json|yaml|yml) were found. Unable to build documentation. Exiting.")
+ if not template_entrypoints:
+ raise Exception("No documentation entrypoints (Metadata => QuickStartDocumentation => EntrypointName) were found. Unable to build documentation. Exiting.")
+ with open('docs/generated/parameters/index.adoc', 'w') as f:
+ for template_file, order in sorted(template_order.items(), key=lambda x: x[1]):
+ print (f"Index - {order} - {template_entrypoints.get(template_file)} - {template_file}")
+ f.write(f"\n=== {template_entrypoints.get(template_file)}\n")
+ f.write(f"include::{template_file}[]\n")
+
+if __name__ == '__main__':
+ print("---")
+ print("> Milton, don't be greedy. Let's pass it along and make sure everyone gets a piece.")
+ print("> Can I keep a piece, because last time I was told that...")
+ print("> Just pass.")
+ print("---")
+ just_pass()
+ print("---")
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/pretty_cfnlint_output.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/pretty_cfnlint_output.py
new file mode 100755
index 0000000..0f66f4f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/pretty_cfnlint_output.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+import sys
+import json
+
+fn = sys.argv[1]
+
+severity_to_icon = {
+ 'Warning':u'\u270B',
+ 'Error':u'\u274C'
+}
+
+results = {}
+
+with open(fn) as f:
+ x = json.load(f)
+
+for rule_match in x:
+ _fn = rule_match['Filename']
+ _sl = rule_match['Location']['Start']['LineNumber']
+ _el = rule_match['Location']['End']['LineNumber']
+ _msg = rule_match['Message']
+ _lvl = rule_match['Level']
+ _rid = rule_match['Rule']['Id']
+ try:
+ results[_fn][_sl] = (_lvl, _rid, _msg)
+ except KeyError:
+ results[_fn] = {_sl:(_lvl, _rid, _msg)}
+
+for k in sorted(results.keys()):
+ print('\n{}'.format(k))
+ for l,v in results[k].items():
+ print("- {} [{}] ({}) | Line: {} - {}".format(severity_to_icon.get(v[0]), v[0].upper(), v[1], l, v[2]))
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/requirements.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/requirements.txt
new file mode 100644
index 0000000..c3a26df
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/.utils/requirements.txt
@@ -0,0 +1,5 @@
+requests
+cfn-lint >= 0.39.0
+pathlib
+datetime
+ruamel.yaml
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/CODEOWNERS b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/CODEOWNERS
new file mode 100644
index 0000000..8601303
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/CODEOWNERS
@@ -0,0 +1,3 @@
+* @aws-quickstart/sa
+/.specific/* @aws-quickstart/tw @aws-quickstart/sa
+*.adoc @aws-quickstart/tw @aws-quickstart/sa
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/LICENSE b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/LICENSE
new file mode 100644
index 0000000..e35ba38
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/LICENSE
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.adoc
new file mode 100644
index 0000000..5d90f34
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.adoc
@@ -0,0 +1,117 @@
+
+[.text-center]
+[discrete]
+== {partner-product-name} on the AWS Cloud
+:doctitle: {partner-product-name} on the AWS Cloud
+:!toc:
+[.text-left]
+include::../{includedir}/introduction.adoc[]
+
+== Overview
+include::../{includedir}/overview.adoc[]
+
+
+== {partner-product-name} on AWS
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/product_description.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/product_description.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== AWS costs
+include::../{includedir}/cost.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Planning the deployment
+
+include::../{includedir}/planning_deployment.adoc[]
+
+== Deployment steps
+include::../{includedir}/deployment_steps.adoc[]
+
+// == Parameters
+// include::../{generateddir}/parameters/index.adoc[]
+
+// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+ifndef::no_parameters[]
+ifdef::parameters_as_appendix[]
+== Parameter reference
+
+NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, we recommend that you keep the default settings for the parameters labeled `Quick Start S3 bucket name`, `Quick Start S3 bucket
+Region`, and `Quick Start S3 key prefix`. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributor’s Guide^].
+
+include::../{generateddir}/parameters/index.adoc[]
+endif::parameters_as_appendix[]
+endif::no_parameters[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. To submit code, see the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
+
+
+== GitHub repository
+
+Visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, to post your comments,
+and to share your customizations with others.
+
+'''
+include::../{includedir}/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.lang.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.lang.adoc
new file mode 100644
index 0000000..410389f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn.lang.adoc
@@ -0,0 +1,116 @@
+
+[.text-center]
+[discrete]
+== {partner-product-name} on the AWS Cloud
+:doctitle: {partner-product-name} on the AWS Cloud
+:!toc:
+[.text-left]
+include::translate-only/introduction.adoc[]
+
+== Overview
+include::translate-only/overview.adoc[]
+
+
+== {partner-product-name} on AWS
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/product_description.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::{specificdir}/product_description.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Cost
+include::translate-only/cost.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Planning the deployment
+include::translate-only/planning_deployment.adoc[]
+
+== Deployment steps
+include::translate-only/deployment_steps.adoc[]
+
+// == Parameters
+// include::../{generateddir}/parameters/index.adoc[]
+
+// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+ifndef::no_parameters[]
+ifdef::parameters_as_appendix[]
+== Parameter reference
+
+NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, we recommend that you keep the default settings for the parameters labeled `Quick Start S3 bucket name`, `Quick Start S3 bucket
+Region`, and `Quick Start S3 key prefix`. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributor’s Guide^].
+
+include::../../{generateddir}/parameters/index.adoc[]
+endif::parameters_as_appendix[]
+endif::no_parameters[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. To submit code, see the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
+
+
+== GitHub repository
+
+Visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, to post your comments,
+and to share your customizations with others.
+
+'''
+include::translate-only/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_cdk_module.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_cdk_module.adoc
new file mode 100644
index 0000000..bb4e5e3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_cdk_module.adoc
@@ -0,0 +1,118 @@
+
+[.text-center]
+[discrete]
+== {partner-product-name} on the AWS Cloud
+:doctitle: {partner-product-name} on the AWS Cloud
+:!toc:
+[.text-left]
+include::../{includedir}/introduction.adoc[]
+
+== Overview
+include::../{includedir}/overview.adoc[]
+
+
+== {partner-product-name} on AWS
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/product_description.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/product_description.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== AWS costs
+include::../{includedir}/cost.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+//== Planning the deployment
+
+//include::../{includedir}/planning_deployment.adoc[]
+
+== Deployment steps
+include::../{includedir}/deployment_steps_cdk_module.adoc[]
+
+// == Parameters
+// include::../{generateddir}/parameters/index.adoc[]
+
+// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+//ifndef::no_parameters[]
+//ifdef::parameters_as_appendix[]
+
+//== Parameter reference
+
+//NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, we recommend that you keep the default settings for the parameters labeled `Quick Start S3 bucket name`, `Quick Start S3 bucket
+//Region`, and `Quick Start S3 key prefix`. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributor’s Guide^].
+
+//include::../{generateddir}/parameters/index.adoc[]
+//endif::parameters_as_appendix[]
+//endif::no_parameters[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. To submit code, see the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
+
+
+== GitHub repository
+
+Visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, to post your comments,
+and to share your customizations with others.
+
+'''
+include::../{includedir}/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_eks_module.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_eks_module.adoc
new file mode 100644
index 0000000..90c546f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/_layout_cfn_eks_module.adoc
@@ -0,0 +1,108 @@
+:parameters_as_appendix:
+[.text-center]
+[discrete]
+== {partner-product-name}
+:doctitle: {partner-product-name}
+:!toc:
+[.text-left]
+include::../{includedir}/introduction.adoc[]
+
+== Overview
+include::../{includedir}/overview.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located in `docs/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+Deploying this Quick Start with default parameters into an existing Amazon EKS cluster builds the following environment. For a diagram of the new virtual private cloud (VPC) and Amazon EKS cluster, see https://aws-quickstart.github.io/quickstart-amazon-eks/[Amazon EKS on the AWS Cloud^].
+
+[#architecture1]
+.Quick Start architecture for _{partner-product-name}_
+[link=images/architecture_diagram.png]
+image::../images/architecture_diagram.png[Architecture]
+
+As shown in Figure 1, the Quick Start sets up the following:
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located in `docs/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Planning the deployment
+
+include::../{includedir}/planning_deployment_eks_module.adoc[]
+
+== Deployment steps
+include::../{includedir}/deployment_steps_eks_module.adoc[]
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located in `docs/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located in `docs/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+== Parameter reference
+
+=== Deploy into a new VPC and new Amazon EKS cluster
+
+The full list of parameters for this entrypoint are documented in https://aws-quickstart.github.io/quickstart-amazon-eks/#_launch_into_a_new_vpc[Amazon EKS on the AWS Cloud^].
+
+
+=== Deploy into a new Amazon EKS cluster in an existing VPC
+
+The full list of parameters for this entrypoint are documented in https://aws-quickstart.github.io/quickstart-amazon-eks/#_launch_into_an_existing_vpc[Amazon EKS on the AWS Cloud^].
+
+include::../{generateddir}/parameters/index.adoc[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. If you want to submit code, review the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page^].
+
+
+== GitHub repository
+
+See the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, post comments,
+and share customizations with others.
+
+'''
+include::../{includedir}/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/cost.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/cost.adoc
new file mode 100644
index 0000000..ebf7a08
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/cost.adoc
@@ -0,0 +1,10 @@
+
+You are responsible for the cost of the AWS services and any third-party licenses used while running this Quick Start. There is no additional cost for
+using the Quick Start.
+
+The AWS CloudFormation templates for Quick Starts include
+configuration parameters that you can customize. Some of the settings,
+such as the instance type, affect the cost of deployment. For cost estimates,
+see the pricing pages for each AWS service you use. Prices are subject to change.
+
+TIP: After you deploy the Quick Start, https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-gettingstarted-turnonreports.html[create AWS Cost and Usage Reports^] to deliver billing metrics to an Amazon Simple Storage Service (Amazon S3) bucket in your account. These reports provide cost estimates based on usage throughout each month and aggregate the data at the end of the month. For more information, see https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-costusage.html[What are AWS Cost and Usage Reports?^]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps.adoc
new file mode 100644
index 0000000..0950dc0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps.adoc
@@ -0,0 +1,41 @@
+:xrefstyle: short
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deploy_steps.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+ifndef::custom_number_of_deploy_steps[]
+ifndef::no_parameters[]
+ifndef::parameters_as_appendix[]
+In the following tables, parameters are listed by category and described separately for the deployment options. When you finish reviewing and customizing the parameters, choose *Next*.
+
+NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, keep the default settings for the parameters *Quick Start S3 bucket name*, *Quick Start S3 bucket Region*, and *Quick Start S3 key prefix*. Changing these settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributor’s Guide^].
+
+// Parameter tables linked in here
+include::../{generateddir}/parameters/index.adoc[]
+endif::parameters_as_appendix[]
+endif::no_parameters[]
+
+[start=5]
+. On the *Configure stack options* page, you can https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html[specify tags^] (key-value pairs) for resources in your stack and https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html[set advanced options^]. When you’re finished, choose *Next*.
+. On the *Review* page, review and confirm the template settings. Under *Capabilities*, select the two check boxes to acknowledge that the template creates IAM resources and might require the ability to automatically expand macros.
+. Choose *Create stack* to deploy the stack.
+ifndef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-name} deployment is ready.]
+ifdef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-short-name} deployment is ready.]
+. Use the values displayed in the *Outputs* tab for the stack, as shown in <>, to view the created resources.
+
+[#cfn_outputs]
+ifndef::partner-product-short-name[.{partner-product-name} outputs after successful deployment]
+ifdef::partner-product-short-name[.{partner-product-short-name} outputs after successful deployment]
+[link=images/cfn_outputs.png]
+image::../images/cfn_outputs.png[cfn_outputs,width=100%,height=100%]
+endif::custom_number_of_deploy_steps[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_cdk_module.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_cdk_module.adoc
new file mode 100644
index 0000000..af2238c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_cdk_module.adoc
@@ -0,0 +1,15 @@
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deploy_steps.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_eks_module.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_eks_module.adoc
new file mode 100644
index 0000000..467e8bd
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/deployment_steps_eks_module.adoc
@@ -0,0 +1,60 @@
+:xrefstyle: short
+
+=== Prepare an existing EKS cluster
+NOTE: This step is only required if you launch this Quick Start into an existing Amazon EKS cluster that was not created using the https://aws-quickstart.github.io/quickstart-amazon-eks/[Amazon EKS on the AWS Cloud^] deployment. If you want to create a new EKS cluster with your deployment, skip to step 3.
+
+. Sign in to your AWS account at https://aws.amazon.com[https://aws.amazon.com^] with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment], earlier in this guide.
+. Launch the https://us-east-2.console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/create/template?stackName=Amazon-EKS&templateURL=https://aws-quickstart.s3.us-east-1.amazonaws.com/quickstart-amazon-eks/templates/amazon-eks-entrypoint-existing-cluster.template.yaml[cluster preparation template^].
+. The template launches in the US East (Ohio) Region by default. To change the Region, choose another Region from the list in the upper-right corner of the navigation bar.
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Enter the name of the Amazon EKS cluster you want to deploy to in addition to the subnet IDs and security group ID associated with the cluster. These can be obtained from the EKS cluster console.
+. On the *Options* page, specify the key-value pairs for resources in your stack, and set advanced options. When you’re done, choose *Next*.
+. On the *Review* page, review and confirm your template settings. Under *Capabilities*, select the two check boxes to acknowledge that the template creates IAM resources and might require the ability to automatically expand macros.
+. Choose *Create stack* to deploy the stack.
+. Monitor the stack's status until it is *CREATE_COMPLETE*.
+. From the *Outputs* section of the stack, note the `KubernetesRoleArn` and `HelmRoleArn` roles.
+. Add the roles to the `aws-auth config` map in your cluster, specifying `system:masters` for the groups. This allows the Quick Start to manage your cluster via AWS CloudFormation. For more information, see https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html[Managing users or IAM roles for your cluster^].
+
+NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, we recommend that you keep the default settings for the parameters labeled `Quick Start S3 bucket name`, `Quick Start S3 bucket
+Region`, and `Quick Start S3 key prefix`. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributor’s Guide^].
+
+include::../{specificdir}/pre-launch-steps.adoc[]
+
+
+=== Launch the Quick Start
+
+NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
+
+. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see the link:#_deployment_options[Deployment options] section, earlier in this guide.
+
+[cols=3*]
+|===
+^|{launch_new_vpc}[Deploy into a new VPC and new Amazon EKS cluster^]
+^|{launch_existing_vpc}[Deploy into a new Amazon EKS cluster in an existing VPC^]
+^|{launch_existing_cluster}[Deploy into an existing Amazon EKS cluster^]
+
+^|{template_new_vpc}[View template^]
+^|{template_existing_vpc}[View template^]
+^|{template_existing_cluster}[View template^]
+|===
+New clusters take about 1.5 hours to deploy. Existing clusters take about {deployment_time} to deploy.
+
+WARNING: If you deploy {partner-product-short-name} into an existing VPC, ensure that any private subnets have https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables to allow the Quick Start to download packages and software. Also, ensure that the domain name in the DHCP options is configured. For more information, see http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[DHCP options sets^].
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-short-name} is built. The template launches in the {default_deployment_region} Region by default.
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings, and customize them as necessary. For details on each parameter, see the link:#_parameter_reference[Parameter reference] section of this guide. When you finish reviewing and customizing the parameters, choose *Next*.
+
+. On the *Options* page, specify the https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html[key-value pairs^] for resources in your stack, and https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html[set advanced options^]. When you’re done, choose *Next*.
+. On the *Review* page, review and confirm the template settings. Under *Capabilities*, select the two check boxes to acknowledge that the template creates IAM resources and might require the ability to automatically expand macros.
+. Choose *Create stack* to deploy the stack.
+ifndef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-name} deployment is ready.]
+ifdef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-short-name} deployment is ready.]
+. Use the values displayed in the *Outputs* tab for the stack, as shown in the following figure.
+
+[#cfn_outputs]
+ifndef::partner-product-short-name[.{partner-product-name} outputs after successful deployment]
+ifdef::partner-product-short-name[.{partner-product-short-name} outputs after successful deployment]
+[link=images/cfn_outputs.png]
+image::../images/cfn_outputs.png[cfn_outputs,width=648,height=439]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/disclaimer.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/disclaimer.adoc
new file mode 100644
index 0000000..f736721
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/disclaimer.adoc
@@ -0,0 +1,6 @@
+
+== Notices
+
+This document is provided for informational purposes only. It represents AWS’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of AWS’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from AWS, its affiliates, suppliers, or licensors. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers.
+
+The software included with this paper is licensed under the Apache License, version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at http://aws.amazon.com/apache2.0/[http://aws.amazon.com/apache2.0/^] or in the accompanying "license" file. This code is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. See the License for specific language governing permissions and limitations.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index-docinfo-footer.html b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index-docinfo-footer.html
new file mode 100644
index 0000000..a8cdcce
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index-docinfo-footer.html
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.adoc
new file mode 100644
index 0000000..40b5426
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.adoc
@@ -0,0 +1,40 @@
+:imagesdir: images
+:includedir: boilerplate
+:specificdir: partner_editable
+:generateddir: generated
+:icons: font
+:toc2: left
+:toc-title:
+:toclevels: 2
+:stylesheet: {includedir}/.css/quickstart.css
+:project_cfn:
+:template_services_ec2:
+include::{specificdir}/_settings.adoc[]
+
+// the next two lines are needed for quickstarts that are not built with a partner, if removed, footer text is mangled for those quickstarts. They must be below _settings.adoc
+ifdef::partner-company-name[:partner-company-footer: {sp}and {partner-company-name}]
+ifndef::partner-company-name[:partner-company-footer:]
+
+// the next 3 lines must remain below partner-company-footer definitions
+:nofooter:
+:docinfodir: boilerplate
+:docinfo:
+
+ifndef::custom_title[]
+:title: {partner-product-name} on the AWS Cloud
+endif::custom_title[]
+ifdef::custom_title[]
+:title: {custom_title}
+endif::custom_title[]
+
+ifdef::project_cfn[]
+ifndef::eks_addin,cdk_qs[]
+include::{includedir}/_layout_cfn.adoc[]
+endif::eks_addin,cdk_qs[]
+ifdef::eks_addin[]
+include::{includedir}/_layout_cfn_eks_module.adoc[]
+endif::eks_addin[]
+ifdef::cdk_qs[]
+include::{includedir}/_layout_cfn_cdk_module.adoc[]
+endif::cdk_qs[]
+endif::project_cfn[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.lang.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.lang.adoc
new file mode 100644
index 0000000..c41b20e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/index.lang.adoc
@@ -0,0 +1,25 @@
+:imagesdir: images
+:includedir: boilerplate
+:specificdir: partner_editable
+:generateddir: generated
+:langdir: docs-lang-code
+:icons: font
+:toc2: left
+:toc-title:
+:toclevels: 2
+:stylesheet: ../../{includedir}/.css/quickstart.css
+:project_cfn:
+:template_services_ec2:
+include::{specificdir}/_settings.adoc[]
+
+// the next two lines are needed for quickstarts that are not built with a partner, if removed, footer text is mangled for those quickstarts. They must be below _settings.adoc
+ifdef::partner-company-name[:partner-company-footer: {sp}and {partner-company-name}]
+ifndef::partner-company-name[:partner-company-footer:]
+
+// the next 3 lines must remain below partner-company-footer definitions
+:nofooter:
+:docinfodir: boilerplate
+:docinfo:
+
+:title: {partner-product-name} on the AWS Cloud
+ifdef::project_cfn[include::_layout_cfn.adoc[]]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/introduction.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/introduction.adoc
new file mode 100644
index 0000000..a30fa4e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/introduction.adoc
@@ -0,0 +1,47 @@
+[.text-center]
+[discrete]
+== Quick Start Reference Deployment
+
+// Do not change the URL below. The aws-quickstart-graphic.png icon needs to come from the aws-quickstart S3 bucket.
+[.text-center]
+image::https://aws-quickstart.s3.amazonaws.com/{quickstart-project-name}/docs/boilerplate/.images/aws-quickstart-graphic.png[QS,80,80]
+
+ifndef::production_build[]
+[.text-center]
+[discrete]
+=== DRAFT DOCUMENT / UNOFFICIAL GUIDANCE
+_**This portion of the deployment guide is located at `docs/{specificdir}/__settings_.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+[.text-center]
+*{doc-month} {doc-year}* +
+ifdef::partner-contributors[]
+_{partner-contributors}_ +
+endif::partner-contributors[]
+ifdef::other-contributors[]
+_{other-contributors}_ +
+endif::other-contributors[]
+ifdef::aws-contributors[]
+_{aws-contributors}_ +
+endif::aws-contributors[]
+_{quickstart-contributors}_
+[.text-left]
+
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+TIP: Visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for source files and to post feedback,
+report bugs, or submit feature ideas for this Quick Start.
+
+ifdef::partner-company-name[]
+[.text-left]
+This Quick Start was created by {partner-company-name} in collaboration with Amazon Web Services (AWS). http://aws.amazon.com/quickstart/[Quick Starts^] are automated reference deployments that use AWS CloudFormation templates to deploy key technologies on AWS, following AWS best practices.
+endif::[]
+
+ifndef::partner-company-name[]
+[.text-left]
+This Quick Start was created by Amazon Web Services (AWS). http://aws.amazon.com/quickstart/[Quick Starts^] are automated reference deployments that use AWS CloudFormation templates to deploy key technologies on AWS, following AWS best practices.
+endif::[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/overview.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/overview.adoc
new file mode 100644
index 0000000..f85fb8a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/overview.adoc
@@ -0,0 +1,16 @@
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/overview_target_and_usage.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/overview_target_and_usage.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+ifdef::partner-company-name[]
+NOTE: Amazon may share user-deployment information with the AWS Partner that collaborated with AWS on the Quick Start.
+endif::partner-company-name[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.adoc
new file mode 100644
index 0000000..9df0ab2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.adoc
@@ -0,0 +1,116 @@
+=== Specialized knowledge
+
+This deployment requires a moderate level of familiarity with
+AWS services. If you’re new to AWS, see https://aws.amazon.com/getting-started/[Getting Started Resource Center^]
+and https://aws.amazon.com/training/[AWS Training and Certification^]. These sites provide materials for learning how to design,
+deploy, and operate your infrastructure and applications on the AWS Cloud.
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/specialized_knowledge.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/specialized_knowledge.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+=== AWS account
+
+If you don’t already have an AWS account, create one at https://aws.amazon.com/[https://aws.amazon.com^] by following the on-screen instructions. Part of the sign-up process involves receiving a phone call and entering a PIN using the phone keypad.
+
+Your AWS account is automatically signed up for all AWS services. You are charged only for the services you use.
+
+ifndef::disable_requirements[]
+=== Technical requirements
+
+Before you launch the Quick Start, review the following information and ensure that your account is properly configured. Otherwise, deployment might fail.
+endif::disable_requirements[]
+
+==== Resource quotas
+If necessary, request https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[service quota increases^] for the following resources. You might request quota increases to avoid exceeding the default limits for any resources that are shared across multiple deployments. The https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[Service Quotas console^] displays your usage and quotas for some aspects of some services. For more information, see https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html[What is Service Quotas?^] and https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html[AWS service quotas^].
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/service_limits.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{generateddir}/services/metadata.adoc[]
+
+ifndef::disable_regions[]
+// We can also pull in Regions automatically.
+==== Supported Regions
+
+ifdef::template_not_all_regions[]
+This deployment includes , which isn’t currently supported in all https://aws.amazon.com/about-aws/global-infrastructure/[AWS Regions^].
+endif::template_not_all_regions[]
+
+ifdef::auto_populate_regions[]
+The following Regions are currently supported by this Quick Start.
+include::../{generateddir}/regions/index.adoc[]
+endif::auto_populate_regions[]
+
+ifndef::auto_populate_regions[]
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/regions.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+endif::auto_populate_regions[]
+
+TIP: Certain Regions are available on an opt-in basis. For more information, see https://docs.aws.amazon.com/general/latest/gr/rande-manage.html[Managing AWS Regions^].
+
+endif::disable_regions[]
+ifdef::template_deterministic_ec2_instances[]
+==== EC2 key pairs
+ifndef::production_build[====]
+ifndef::production_build[_This section applies only if the Cloudformation templates include EC2 instances._]
+ifndef::production_build[====]
+Make sure that at least one https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pair^] exists in your AWS account in the Region where you plan to deploy the Quick Start. Make note of the key pair name. You need it during deployment. To create a key pair, see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pairs and Linux instances^].
+
+For testing or proof-of-concept purposes, we recommend creating a new key pair instead of using one that’s already being used by a production instance.
+endif::template_deterministic_ec2_instances[]
+
+==== IAM permissions
+//todo: scope of least-privilege
+Before launching the Quick Start, you must sign in to the AWS Management Console with IAM permissions for the resources that the templates deploy. The _AdministratorAccess_ managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions. For more information, see https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html[AWS managed policies for job functions^].
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/pre-reqs.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/pre-reqs.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+==== Deployment options
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deployment_options.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/deployment_options.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.lang.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.lang.adoc
new file mode 100644
index 0000000..2f6f5b6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment.lang.adoc
@@ -0,0 +1,114 @@
+=== Specialized knowledge
+
+This deployment requires a moderate level of familiarity with AWS services. If you’re new to AWS, visit https://aws.amazon.com/getting-started/[Getting Started with AWS^] and https://aws.amazon.com/training/[Training and Certification^]. These sites provide materials for learning how to design, deploy, and operate your infrastructure and applications on the AWS Cloud.
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/specialized_knowledge.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/specialized_knowledge.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+=== AWS account
+
+If you don’t already have an AWS account, create one at https://aws.amazon.com/[https://aws.amazon.com^] by following the on-screen instructions. Part of the sign-up process involves receiving a phone call and entering a PIN using the phone keypad.
+
+Your AWS account is automatically signed up for all AWS services. You are charged only for the services you use.
+
+ifndef::disable_requirements[]
+=== Technical requirements
+
+Before you launch the Quick Start, review the following information and ensure that your account is properly configured. Otherwise, deployment might fail.
+endif::disable_requirements[]
+
+==== Resource quotas
+If necessary, request https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[service quota increases^] for the following resources. You might need to request increases if your existing deployment currently uses these resources and if this Quick Start deployment could result in exceeding the default quotas. The https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[Service Quotas console^] displays your usage and quotas for some aspects of some services. For more information, see https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html[What is Service Quotas?^] and https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html[AWS service quotas^].
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/service_limits.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../../../{generateddir}/services/metadata.adoc[]
+
+ifndef::disable_regions[]
+// We can also pull in Regions automatically.
+==== Supported Regions
+
+ifdef::template_not_all_regions[]
+This deployment includes , which isn’t currently supported in https://aws.amazon.com/about-aws/global-infrastructure/[all AWS Regions^].
+endif::template_not_all_regions[]
+
+ifdef::auto_populate_regions[]
+The following Regions are currently supported by this Quick Start.
+include::../{generateddir}/regions/index.adoc[]
+endif::auto_populate_regions[]
+
+ifndef::auto_populate_regions[]
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/regions.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+endif::auto_populate_regions[]
+
+TIP: Certain Regions are available on an opt-in basis. See https://docs.aws.amazon.com/general/latest/gr/rande-manage.html[Managing AWS Regions^].
+
+endif::disable_regions[]
+ifdef::template_deterministic_ec2_instances[]
+==== EC2 key pairs
+ifndef::production_build[====]
+ifndef::production_build[_This section applies only if the Cloudformation templates include EC2 instances._]
+ifndef::production_build[====]
+Make sure that at least one https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pair^] exists in your AWS account in the Region where you plan to deploy the Quick Start. Make note of the key pair name. You need it during deployment. To create a key pair, see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pairs and Linux instances^].
+
+For testing or proof-of-concept purposes, we recommend creating a new key pair instead of using one that’s already being used by a production instance.
+endif::template_deterministic_ec2_instances[]
+
+==== IAM permissions
+//todo: scope of least-privilege
+Before launching the Quick Start, you must sign in to the AWS Management Console with IAM permissions for the resources that the templates deploy. The _AdministratorAccess_ managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions. For more information, see https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html[AWS managed policies for job functions^].
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/languages/{langdir}/{specificdir}/pre-reqs.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/pre-reqs.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+==== Deployment options
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `_**This portion of the deployment guide is located at `docs/languages/docs-{LANG_CODE}/{specificdir}/pre-reqs.adoc`**_
+/{specificdir}/deployment_options.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/deployment_options.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment_eks_module.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment_eks_module.adoc
new file mode 100644
index 0000000..5a78cdd
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/boilerplate/planning_deployment_eks_module.adoc
@@ -0,0 +1,42 @@
+=== Specialized knowledge
+
+This deployment guide requires a moderate level of familiarity with
+AWS services. If you’re new to AWS, see the https://aws.amazon.com/getting-started/[Getting Started Resource Center^]
+and https://aws.amazon.com/training/[AWS Training and Certification^]. These sites provide materials for learning how to design,
+deploy, and operate your infrastructure and applications on the AWS Cloud.
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/specialized_knowledge.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/specialized_knowledge.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+=== AWS account
+
+If you don’t already have an AWS account, create one at https://aws.amazon.com/[https://aws.amazon.com^] by following the on-screen instructions. Part of the sign-up process involves receiving a phone call and entering a PIN using your phone's keypad.
+
+Your AWS account is automatically signed up for all AWS services. You are charged only for the services you use.
+
+=== Amazon EKS cluster
+
+If you deploy your cluster into an existing Amazon EKS cluster that was not created by the https://aws-quickstart.github.io/quickstart-amazon-eks/[Amazon EKS on the AWS Cloud^] Quick Start, you must configure your cluster to allow this Quick Start to manage it. For more information, see the link:#_deployment_steps[Deployment steps] section.
+
+
+=== IAM permissions
+//TODO: scope of least-privilege
+Before launching the Quick Start, you must log in to the AWS Management Console with https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html[AWS Identity and Access Management (IAM)^] permissions for the resources and actions that each template deploys.
+
+The _AdministratorAccess_ managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions.
+
+=== Deployment options
+
+This Quick Start provides three deployment options:
+
+* *Deploy {partner-product-short-name} into a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, EKS cluster, a node group, and other infrastructure components. It then deploys {partner-product-short-name} into this new EKS cluster.
+* *Deploy {partner-product-short-name} into a new EKS cluster of an existing VPC*. This option builds a new Amazon EKS cluster, node group, and other infrastructure components into an existing VPC. It then deploys {partner-product-short-name} into this new EKS cluster.
+* *Deploy {partner-product-short-name} into an existing EKS cluster*. This option provisions {partner-product-short-name} in your existing AWS infrastructure. Note that when deploying into an EKS cluster that was not created by the https://aws-quickstart.github.io/quickstart-amazon-eks/[Amazon EKS on the AWS Cloud^] Quick Start, you must prepare the cluster as described in the link:#_deployment_steps[Deployment steps] section.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/index.adoc
new file mode 100644
index 0000000..e71b4b6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/index.adoc
@@ -0,0 +1,6 @@
+
+=== Launch into a new VPC
+include::linux-bastion-master.adoc[]
+
+=== Launch into an existing VPC
+include::linux-bastion.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion-master.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion-master.adoc
new file mode 100644
index 0000000..ab0a953
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion-master.adoc
@@ -0,0 +1,42 @@
+
+.Network configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Availability Zones
+(`AvailabilityZones`)|`**__Requires input__**`|List of Availability Zones to use for the subnets in the VPC.|VPC CIDR
+(`VPCCIDR`)|`10.0.0.0/16`|CIDR Block for the VPC.|Private subnet 1 CIDR
+(`PrivateSubnet1CIDR`)|`10.0.0.0/19`|CIDR block for private subnet 1, located in Availability Zone 1.|Private subnet 2 CIDR
+(`PrivateSubnet2CIDR`)|`10.0.32.0/19`|CIDR block for private subnet 2, located in Availability Zone 2.|Public subnet 1 CIDR
+(`PublicSubnet1CIDR`)|`10.0.128.0/20`|CIDR Block for the public DMZ subnet 1, located in Availability Zone 1.|Public subnet 2 CIDR
+(`PublicSubnet2CIDR`)|`10.0.144.0/20`|CIDR Block for the public DMZ subnet 2, located in Availability Zone 2.|Allowed bastion external access CIDR
+(`RemoteAccessCIDR`)|`**__Requires input__**`|Allowed CIDR block for external SSH access to the bastions|VPC tenancy
+(`VPCTenancy`)|`default`|The allowed tenancy of instances launched into the VPC.
+|===
+.Amazon EC2 configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Key pair name
+(`KeyPairName`)|`**__Requires input__**`|Name of an existing public/private key pair, which allows you to securely connect to your instance after it launches.|Bastion AMI operating system
+(`BastionAMIOS`)|`Amazon-Linux2-HVM`|The Linux distribution for the AMI to be used for the bastion instances.|Bastion instance type
+(`BastionInstanceType`)|`t2.micro`|Amazon EC2 instance type for the bastion instances.
+|===
+.Linux bastion configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Number of bastion hosts
+(`NumBastionHosts`)|`1`|The number of bastion hosts to create. The maximum number is four.|Bastion host name
+(`BastionHostName`)|`LinuxBastion`|The value used for the name tag of the bastion host.|Bastion tenancy
+(`BastionTenancy`)|`default`|Bastion VPC tenancy (dedicated or default).|Bastion banner
+(`EnableBanner`)|`false`|Choose *true* to display a banner when connecting via SSH to the bastion.|Banner text
+(`BastionBanner`)|`**__Blank string__**`|Banner text to display upon login.|TCP forwarding
+(`EnableTCPForwarding`)|`false`|To enable TCP forwarding, choose *true*.|X11 forwarding
+(`EnableX11Forwarding`)|`false`|To enable X11 forwarding, choose *true*.
+|===
+.AWS Quick Start configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Quick Start S3 bucket name
+(`QSS3BucketName`)|`aws-quickstart`|Name of the S3 bucket for your copy of the Quick Start assets. Keep the default name unless you are customizing the template. Changing the name updates code references to point to a new Quick Start location. This name can include numbers, lowercase letters, uppercase letters, and hyphens, but do not start or end with a hyphen (-). See https://aws-quickstart.github.io/option1.html.|Quick Start S3 key prefix
+(`QSS3KeyPrefix`)|`quickstart-linux-bastion/`|S3 key prefix that is used to simulate a directory for your copy of the Quick Start assets. Keep the default prefix unless you are customizing the template. Changing this prefix updates code references to point to a new Quick Start location. This prefix can include numbers, lowercase letters, uppercase letters, hyphens (-), and forward slashes (/). End with a forward slash. See https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html and https://aws-quickstart.github.io/option1.html.|Quick Start S3 bucket Region
+(`QSS3BucketRegion`)|`us-east-1`|AWS Region where the Quick Start S3 bucket (QSS3BucketName) is hosted. Keep the default Region unless you are customizing the template. Changing this Region updates code references to point to a new Quick Start location. When using your own bucket, specify the Region. See https://aws-quickstart.github.io/option1.html.
+|===
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion.adoc
new file mode 100644
index 0000000..6f83736
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/parameters/linux-bastion.adoc
@@ -0,0 +1,48 @@
+
+.Network configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|VPC ID
+(`VPCID`)|`**__Requires input__**`|ID of the VPC (e.g., vpc-0343606e).|Public subnet 1 ID
+(`PublicSubnet1ID`)|`**__Requires input__**`|ID of the public subnet 1 that you want to provision the first bastion into (e.g., subnet-a0246dcd).|Public subnet 2 ID
+(`PublicSubnet2ID`)|`**__Requires input__**`|ID of the public subnet 2 that you want to provision the second bastion into (e.g., subnet-e3246d8e).|Allowed bastion external access CIDR
+(`RemoteAccessCIDR`)|`**__Requires input__**`|Allowed CIDR block for external SSH access to the bastions.
+|===
+.Amazon EC2 configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Key pair name
+(`KeyPairName`)|`**__Requires input__**`|Name of an existing public/private key pair. If you do not have one in this AWS Region, please create it before continuing.|Bastion AMI operating system
+(`BastionAMIOS`)|`Amazon-Linux2-HVM`|The Linux distribution for the AMI to be used for the bastion instances.|Bastion instance type
+(`BastionInstanceType`)|`t2.micro`|Amazon EC2 instance type for the bastion instances.|Root volume size
+(`RootVolumeSize`)|`10`|The size in GB for the root EBS volume.
+|===
+.Linux bastion configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Number of bastion hosts
+(`NumBastionHosts`)|`1`|The number of bastion hosts to create. The maximum number is four.|Bastion host Name
+(`BastionHostName`)|`LinuxBastion`|The value used for the name tag of the bastion host.|Bastion tenancy
+(`BastionTenancy`)|`default`|Bastion VPC tenancy (dedicated or default).|Bastion banner
+(`EnableBanner`)|`false`|Choose *true* to display a banner when connecting via SSH to the bastion.|Banner text
+(`BastionBanner`)|`**__Blank string__**`|Banner text to display upon login.|TCP forwarding
+(`EnableTCPForwarding`)|`false`|To enable TCP forwarding, choose *true*.|X11 forwarding
+(`EnableX11Forwarding`)|`false`|To enable X11 forwarding, choose *true*.
+|===
+.Alternative configurations
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Alternative initialization script
+(`AlternativeInitializationScript`)|`**__Blank string__**`|An alternative initialization script to run during setup.|Operating system override
+(`OSImageOverride`)|`**__Blank string__**`|The Region-specific image to use for the instance.|Alternative IAM role
+(`AlternativeIAMRole`)|`**__Blank string__**`|An existing IAM role name to attach to the bastion. If left blank, a new role will be created.|Environment variables
+(`EnvironmentVariables`)|`**__Blank string__**`|A comma-separated list of environment variables for use in bootstrapping. Variables must be in the format `key=value`. `Value` cannot contain commas.
+|===
+.AWS Quick Start configuration
+[width="100%",cols="16%,11%,73%",options="header",]
+|===
+|Parameter label (name) |Default value|Description|Quick Start S3 bucket name
+(`QSS3BucketName`)|`aws-quickstart`|Name of the S3 bucket for your copy of the Quick Start assets. Keep the default name unless you are customizing the template. Changing the name updates code references to point to a new Quick Start location. This name can include numbers, lowercase letters, uppercase letters, and hyphens, but do not start or end with a hyphen (-). See https://aws-quickstart.github.io/option1.html.|Quick Start S3 key prefix
+(`QSS3KeyPrefix`)|`quickstart-linux-bastion/`|S3 key prefix that is used to simulate a directory for your copy of the Quick Start assets. Keep the default prefix unless you are customizing the template. Changing this prefix updates code references to point to a new Quick Start location. This prefix can include numbers, lowercase letters, uppercase letters, hyphens (-), and forward slashes (/). End with a forward slash. See https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html and https://aws-quickstart.github.io/option1.html.|Quick Start S3 bucket region
+(`QSS3BucketRegion`)|`us-east-1`|The AWS Region where the Quick Start S3 bucket (QSS3BucketName) is hosted. When using your own bucket, you must specify this value.
+|===
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/regions/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/regions/index.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/regions/index.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/index.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/index.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/index.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/metadata.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/metadata.adoc
new file mode 100644
index 0000000..ff7bd09
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/generated/services/metadata.adoc
@@ -0,0 +1 @@
+// placeholder
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/architecture_diagram.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/architecture_diagram.png
new file mode 100644
index 0000000..ff3b4c5
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/architecture_diagram.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/aws-quickstart-graphic.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/aws-quickstart-graphic.png
new file mode 100644
index 0000000..8efde67
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/aws-quickstart-graphic.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/banner.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/banner.png
new file mode 100644
index 0000000..64ce4e5
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/banner.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/cfn_outputs.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/cfn_outputs.png
new file mode 100644
index 0000000..051539b
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/cfn_outputs.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/keypair.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/keypair.png
new file mode 100644
index 0000000..476fb4e
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/keypair.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/logging.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/logging.png
new file mode 100644
index 0000000..e9b1c17
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/logging.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/region.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/region.png
new file mode 100644
index 0000000..fb6edde
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/images/region.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/_settings.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/_settings.adoc
new file mode 100644
index 0000000..7201418
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/_settings.adoc
@@ -0,0 +1,28 @@
+// Change the following attributes.
+:quickstart-project-name: quickstart-linux-bastion
+:partner-product-name: Linux Bastion Hosts
+// For the following attribute, if you have no short name, enter the same name as partner-product-name.
+:partner-product-short-name: Linux bastion hosts
+// If there's no partner, comment partner-company-name and partner-contributors.
+// :partner-company-name: Example Company Name, Ltd.
+:doc-month: March
+:doc-year: 2021
+// For the following two "contributor" attributes, if the partner agrees to include names in the byline,
+// enter names for both partner-contributors and quickstart-contributors.
+// If partner doesn't want to include names, delete all placeholder names and keep only
+// "{partner-company-name}" and "AWS Quick Start team."
+// Use the comma before "and" only when three or more names.
+//:partner-contributors: Shuai Ye, Michael McConnell, and John Smith, {partner-company-name}
+:aws-contributors: Santiago Cardenas, AWS Serverless Partners
+:quickstart-contributors: Tony Vattathil and Ian Hill, AWS Quick Start team
+// For deployment_time, use minutes if deployment takes an hour or less,
+// for example, 30 minutes or 60 minutes.
+// Use hours for deployment times greater than 60 minutes (rounded to a quarter hour),
+// for example, 1.25 hours, 2 hours, 2.5 hours.
+:deployment_time: 5 minutes
+:default_deployment_region: us-west-2
+:parameters_as_appendix:
+// Uncomment the following two attributes if you are using an AWS Marketplace listing.
+// Additional content will be generated automatically based on these attributes.
+// :marketplace_subscription:
+// :marketplace_listing_url: https://example.com/
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/additional_info.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/additional_info.adoc
new file mode 100644
index 0000000..8bf186e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/additional_info.adoc
@@ -0,0 +1,109 @@
+// Add steps as necessary for accessing the software, post-configuration, and testing. Don’t include full usage instructions for your software, but add links to your product documentation for that information.
+//Should any sections not be applicable, remove them
+
+== Post-deployment steps
+// If post-deployment steps are required, add them here. If not, remove the heading
+Log in to the bastion host. Use one of the following user names, depending on your
+choice of Linux distribution:
+
+* Amazon Linux: *ec2-user*
+* CentOS: *centos*
+* Ubuntu: *ubuntu*
+
+The Linux distribution is specified in the *Bastion AMI operating system* parameter when you deploy the templates. For more information, see link:#_parameter_reference[Parameter reference].
+
+=== Enabling and customizing the Linux bastion host banner
+:xrefstyle: short
+This Quick Start provides the default banner illustrated in <> for the Linux bastion
+hosts. The banner is disabled by default. To enable it, set the
+*Bastion banner* parameter to *true* during deployment.
+
+[#banner]
+.Customizing the Linux bastion host banner
+image::../images/banner.png[banner,width=100%,height=100%]
+
+To customize the banner, create an ASCII text file with your own banner content. Then upload it to an S3 bucket or other publicly accessible location, and verify that it is accessible from the host.
+
+=== Bastion logging
+The bastion hosts deployed by this Quick Start provide a command logger in the
+`/var/log/audit/audit.log` file. This log file contains the
+date, SSH client connection IP address, user name, working directory, and the
+commands issued.
+
+For added security, the contents of the `/var/log/audit/audit.log` file is also stored
+in a CloudWatch Logs log group in the AWS Cloud, and remains available in case the
+bastion hosts fail.
+
+The log includes a history of the commands that are run when you log in. <> shows an example.
+
+:xrefstyle: short
+[#logging]
+.Bastion logging
+image::../images/logging.png[Regloggingion,width=100%,height=100%]
+
+To notify your users that all their commands will be monitored and logged, we recommend that you enable the bastion host banner. For more information, see link:#_enabling_and_customizing_the_linux_bastion_host_banner[Enabling and Customizing the Linux bastion host banner]. The default banner text includes the alert shown in <>, which you can customize.
+
+The `bastion.log` file is an immutable file that cannot be easily deleted or tampered with. However, in case this happens, there is a shadow file with a copy of `bastion.log` located in `/var/log/audit/audit.log`. And, the Quick Start also stores the contents of `bastion.log` remotely using the CloudWatch Logs service. Log files can be found under CloudWatch Logs using the instance ID as the log stream name.
+
+
+== Best practices for using {partner-product-short-name} on AWS
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+The architecture built by this Quick Start supports AWS best practices for high availability and security.
+
+* Linux bastion hosts are deployed in two Availability Zones to support immediate access across the VPC. You can configure the number of bastion host instances at launch.
+* An Auto Scaling group ensures that the number of bastion host instances always matches the desired capacity you specify during launch.
+* Bastion hosts are deployed in the public (DMZ) subnets of the VPC.
+* Elastic IP addresses are associated with bastion instances to allow these IP addresses from on-premises firewalls. When an instance is shut down, the Auto Scaling group launches a new instance, and the existing Elastic IP addresses are associated with it. This ensures that the same trusted Elastic IP addresses are used at all times.
+* Inbound access to bastion hosts is locked down to known CIDR scopes. This is achieved by associating the bastion instances with a security group. The Quick Start creates a BastionSecurityGroup resource for this purpose.
+* Ports are limited to allow only the necessary access to the bastion hosts. For Linux bastion hosts, TCP port 22 for SSH connections is typically the only port allowed.
+
+We recommend that you follow these best practices when using the architecture built by the Quick Start:
+
+* When you add new instances to the VPC that require management access from the bastion host, associate a security group inbound rule with each instance. The rule should reference the bastion security group as the source. It is also important to limit access to the required ports for administration.
+* During deployment, the public key from the Amazon EC2 key pair is associated with the user ec2-user in the Linux instance. For additional users, create users with the required permissions and associate them with their individual authorized public keys for SSH connectivity.
+* For the bastion host instances, select the number and type of instances according to the number of users and operations to be performed. The Quick Start creates one bastion host instance and uses the t2.micro instance type by default, but you can change these settings during deployment.
+
+NOTE: You can also change the number and type of bastion host instances after deployment by updating the AWS CloudFormation stack and changing the parameters. Reconfiguring the bastion host instances updates the related Elastic IP addresses and changes the bootstrapping logic in the launch configuration and Auto Scaling group. However, before you update the stack, you must shut down the instances you want to replace while keeping the Elastic IP addresses. When you update the stack, the Auto Scaling group launches the new instances with the updated instance type. Bootstrapping will assign the Elastic IP addresses from the existing pool of IP addresses that were provisioned during the initial deployment.
+
+* Set your desired expiration time directly in the CloudWatch Logs log group for the logs collected from each bastion instance. This ensures that bastion log history is retained only for the amount of time you need.
+* Keep CloudWatch log files for each bastion host instance separate so that you can filter and isolate log messages from individual bastion hosts. Every instance that is launched by the bastion Auto Scaling group will create its own log stream based on the instance ID.
+
+
+== Security
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+This Quick Start provisions one Linux bastion host in each Availability Zone with a single
+security group as a virtual firewall. This security group is required for remote access from
+the Internet. The security group is configured as follows:
+
+=== Inbound
+|===
+|Source|Protocol|Ports
+
+|Remote access CIDR|TCP|22
+|Remote access CIDR|ICMP|N/A
+|===
+
+=== Outbound
+|===
+|Destination|Protocol|Ports
+
+|0.0.0.0/0 |All|All
+|===
+
+For more information, see https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Security.html[Internetwork traffic privacy in Amazon VPC^].
+
+== Other useful information
+//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
+
+* https://aws.amazon.com/documentation/cloudformation/[AWS CloudFormation Documentation^]
+
+* Amazon EC2
+** https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/[What is Amazon EC2?^]
+
+** https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html[Elastic IP addresses^]
+
+* https://aws.amazon.com/documentation/vpc/[Amazon Virtual Private Cloud Documentation^]
+
+** https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html[Security groups for your VPC^]
+
+** https://blogs.aws.amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-instances-running-in-a-private-Amazon-VPC[Securely Connect to Linux Instances Running a Private Amazon VPC^]
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/architecture.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/architecture.adoc
new file mode 100644
index 0000000..fad456f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/architecture.adoc
@@ -0,0 +1,30 @@
+Deploying this Quick Start for a new virtual private cloud (VPC) with
+default parameters builds the following {partner-product-short-name} environment in the
+AWS Cloud.
+
+// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
+:xrefstyle: short
+[#architecture1]
+.Quick Start architecture for {partner-product-short-name} on AWS
+image::../images/architecture_diagram.png[Architecture,width=100%,height=100%]
+
+As shown in <>, the Quick Start sets up the following:
+
+* A highly available architecture that spans two Availability Zones.*
+* A VPC configured with public and private subnets, according to AWS
+best practices, to provide you with your own virtual network on AWS.*
+* An internet gateway to allow access to the internet. This gateway is used by the bastion
+hosts to send and receive traffic.*
+* Managed NAT gateways to allow outbound internet access for resources in the private
+subnets.*
+* A Linux bastion host in each public subnet with an Elastic IP address. These allow inbound
+SSH (Secure Shell) access to EC2 instances in public and private subnets.
+* A security group for fine-grained inbound access control.
+* An Amazon EC2 Auto Scaling group with a configurable number of instances.
+* A set of Elastic IP addresses that match the number of bastion host instances. If the
+Auto Scaling group relaunches any instances, these addresses are reassociated with the
+new instances.
+* An Amazon CloudWatch Logs log group to hold the Linux bastion host shell history logs.
+// Add bullet points for any additional components that are included in the deployment. Make sure that the additional components are also represented in the architecture diagram. End each bullet with a period.
+
+[.small]#*The template that deploys the Quick Start into an existing VPC skips the components marked by asterisks and prompts you for your existing VPC configuration.#
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deploy_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deploy_steps.adoc
new file mode 100644
index 0000000..c5ba0a1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deploy_steps.adoc
@@ -0,0 +1,47 @@
+// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
+=== Sign in to your AWS account
+
+. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
+. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
+
+// Optional based on Marketplace listing. Not to be edited
+ifdef::marketplace_subscription[]
+=== Subscribe to the {partner-product-short-name} AMI
+
+This Quick Start requires a subscription to the AMI for {partner-product-short-name} in AWS Marketplace.
+
+. Sign in to your AWS account.
+. Open the page for the {marketplace_listing_url}[{partner-product-short-name} AMI in AWS Marketplace^], and then choose *Continue to Subscribe*.
+. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
+ A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[Getting started^] in the AWS Marketplace Buyer Guide.
+
+. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
+endif::marketplace_subscription[]
+// \Not to be edited
+
+=== Launch the Quick Start
+// Adapt the following warning to your Quick Start.
+WARNING: If you are using the CentOS operating system, subscribe to the https://aws.amazon.com/marketplace/pp/B00O7WM7QW[CentOS AMI in AWS
+Marketplace.]
+
+WARNING: When deploying this Quick Start into an existing VPC, ensure that your VPC has two private subnets in different Availability Zones for the workload instances and that the subnets are not shared. This Quick Start does not support https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html[shared subnets^]. These subnets require https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables to allow the instances to download packages and software without exposing them to the internet. Also ensure that the domain name option is configured as explained in http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[DHCP options sets^]. You provide your VPC settings when you launch the Quick Start.
+
+Each deployment takes about {deployment_time} to complete.
+
+. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see link:#_deployment_options[Deployment options] earlier in this guide.
+
+[cols="3,1"]
+|===
+^|https://fwd.aws/rQWep[Deploy {partner-product-short-name} into a new VPC on AWS^]
+^|https://fwd.aws/Jrm54[View template^]
+
+^|https://fwd.aws/Jwzqv[Deploy {partner-product-short-name} into an existing VPC on AWS^]
+^|https://fwd.aws/vWMxm[View template^]
+|===
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This Region is where the network infrastructure for {partner-product-short-name} is built. The template is launched in the {default_deployment_region} Region by default. For other choices, see link:#_supported_regions[Supported Regions] earlier in this guide.
+
+[start=3]
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary. For details on each parameter, see the link:#_parameter_reference[Parameter reference] section of this guide. When you finish reviewing and customizing the parameters, choose *Next*.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deployment_options.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deployment_options.adoc
new file mode 100644
index 0000000..6cc63d9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/deployment_options.adoc
@@ -0,0 +1,8 @@
+// Edit this placeholder text to accurately describe your architecture.√
+
+This Quick Start provides two deployment options:
+
+* *Deploy {partner-product-short-name} into a new VPC*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys {partner-product-short-name} into this new VPC.
+* *Deploy {partner-product-short-name} into an existing VPC*. This option provisions {partner-product-short-name} in your existing AWS infrastructure.
+
+The Quick Start provides separate templates for these options. It also lets you configure Classless Inter-Domain Routing (CIDR) blocks, instance types, and Linux bastion host settings, as discussed later in this guide.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/faq_troubleshooting.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/faq_troubleshooting.adoc
new file mode 100644
index 0000000..122ac5a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/faq_troubleshooting.adoc
@@ -0,0 +1,23 @@
+// Add any tips or answers to anticipated questions.
+
+== FAQ
+
+*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
+
+*A.* If AWS CloudFormation fails to create the stack, relaunch the template with *Rollback on failure* set to *Disabled*. This setting is under *Advanced* in the AWS CloudFormation console on the *Configure stack options* page. With this setting, the stack’s state is retained, and you can troubleshoot the issue.
+
+WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Ensure that you delete stack after troubleshooting.
+
+For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^].
+
+*Q.* I encountered a size-limitation error when I deployed the AWS CloudFormation templates.
+
+*A.* Launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template-size limitations. For more information, see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS CloudFormation quotas^].
+
+*Q.* I changed the instance type parameter after deployment and updated the stack, but the
+instance types did not change or the Elastic IP addresses were not reassociated after the stack
+update.
+
+*A.* Terminate your bastion host instances. They will be replaced by Auto Scaling. A bootstrap action is performed on the new
+instances to configure security settings and
+CloudWatch logs and associate Elastic IP addresses.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/licenses.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/licenses.adoc
new file mode 100644
index 0000000..c93af85
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/licenses.adoc
@@ -0,0 +1,3 @@
+// Include details about any licenses and how to sign up. Provide links as appropriate. If no licenses are required, clarify that. The following paragraphs provide examples of details you can provide. Remove italics, and rephrase as appropriate.
+
+No licenses are required to deploy this Quick Start. All AWS service resources consumed during the launch of the Quick Start incur AWS service usage costs.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/overview_target_and_usage.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/overview_target_and_usage.adoc
new file mode 100644
index 0000000..8f9a774
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/overview_target_and_usage.adoc
@@ -0,0 +1,15 @@
+// Replace the content in <>
+// Identify your target audience and explain how/why they would use this Quick Start.
+//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
+
+This Quick Start deployment guide provides instructions for deploying Linux bastion hosts
+in an Amazon Virtual Private Cloud (Amazon VPC) environment on the Amazon Web
+Services (AWS) Cloud. The Quick Start also provides http://aws.amazon.com/cloudformation/[AWS CloudFormation^] templates that
+automate the deployment.
+
+The guide is for IT infrastructure architects, DevOps engineers, and administrators who want to deploy Linux bastion hosts to manage their AWS Cloud deployments remotely.
+
+http://aws.amazon.com/quickstart/[Quick Starts^] are automated reference deployments for AWS Cloud infrastructure
+components and key enterprise workloads on the AWS Cloud. Each Quick Start launches,
+configures, and runs AWS compute, network, storage, and other services, using AWS best
+practices for security and availability.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/pre-reqs.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/pre-reqs.adoc
new file mode 100644
index 0000000..55632fd
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/pre-reqs.adoc
@@ -0,0 +1,37 @@
+// If no preperation is required, remove all content from here
+
+=== Prepare your AWS account
+
+==== Choose a Region
+
+* Before deploying the stack, in the AWS Management Console, choose an AWS Region from the top toolbar.
++
+:xrefstyle: short
+[#region]
+.Selecting an AWS Region
+image::../images/region.png[region,width=25%,height=25%,align="center"]
++
+NOTE: Consider choosing a Region closest to your data center or corporate network to
+reduce network latency between systems running on AWS and the systems and users
+on your corporate network.
+
+==== Create a key pair
+
+To create a http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[key pair] in your preferred Region, do the following:
+
+[start=1]
+. In your AWS Management Console, choose an AWS Region.
+. On the *Services* menu, choose *EC2*.
+. Under *Network and Security*, choose *Key Pairs*.
+. Choose *Create Key Pair*.
+. Enter a name and choose *Create*.
++
+:xrefstyle: short
+[#keypair]
+.Creating a key pair
+image::../images/keypair.png[keypair,width=100%,height=100%]
++
+Amazon EC2 uses public-key cryptography to encrypt and decrypt login information. To
+be able to log in to your instances, you must create a key pair. On Linux, the key pair is
+used to authenticate SSH login.
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/product_description.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/product_description.adoc
new file mode 100644
index 0000000..642878f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/product_description.adoc
@@ -0,0 +1,22 @@
+// Replace the content in <>
+// Briefly describe the software. Use consistent and clear branding.
+// Include the benefits of using the software on AWS, and provide details on usage scenarios.
+
+This Quick Start provides Linux bastion host functionality for AWS Cloud infrastructures. It
+deploys a virtual private cloud (VPC) using the https://fwd.aws/9VdxN[Amazon VPC Quick Start reference
+deployment]. Then, it sets up private and public subnets and deploys Linux bastion instances into
+the VPC. You can also choose to deploy Linux bastion hosts into your existing AWS
+infrastructure.
+
+The bastion hosts provide secure access to Linux instances located in the private and public
+subnets. The Quick Start architecture deploys Linux bastion host instances into every public
+subnet to provide readily available administrative access to the environment. The Quick
+Start sets up a Multi-AZ environment consisting of two Availability Zones. If highly
+available bastion access is not necessary, you can stop the instance in the second
+Availability Zone and start it up when needed.
+
+You can use this Quick Start as a building block for your own Linux-based deployments.
+You can add other infrastructure components and software layers to complete your Linux
+environment in the AWS Cloud. To build an AWS Cloud infrastructure for accessing
+Microsoft Windows-based instances, see the https://fwd.aws/5VrKP[Quick Start for Remote Desktop (RD)
+Gateway].
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/regions.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/regions.adoc
new file mode 100644
index 0000000..178599b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/regions.adoc
@@ -0,0 +1,31 @@
+This Quick Start supports the following Regions:
+
+[cols=2*,options="header"]
+|===
+|Code
+|Name
+
+|us-east-2 |US East (Ohio)
+|us-east-1 |US East (N. Virginia)
+|us-west-1 |US West (N. California)
+|us-west-2 |US West (Oregon)
+|af-south-1 |Africa (Cape Town)
+|ap-east-1 |Asia Pacific (Hong Kong)
+|ap-south-1 |Asia Pacific (Mumbai)
+|ap-northeast-3 |Asia Pacific (Osaka-Local)
+|ap-northeast-2 |Asia Pacific (Seoul)
+|ap-southeast-1 |Asia Pacific (Singapore)
+|ap-southeast-2 |Asia Pacific (Sydney)
+|ap-northeast-1 |Asia Pacific (Tokyo)
+|ca-central-1 |Canada (Central)
+|eu-central-1 |Europe (Frankfurt)
+|eu-west-1 |Europe (Ireland)
+|eu-west-2 |Europe (London)
+|eu-south-1 |Europe (Milan)
+|eu-west-3 |Europe (Paris)
+|eu-north-1 |Europe (Stockholm)
+|me-south-1 |Middle East (Bahrain)
+|sa-east-1 |South America (São Paulo)
+|===
+
+//Full list: https://docs.aws.amazon.com/general/latest/gr/rande.html
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/service_limits.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/service_limits.adoc
new file mode 100644
index 0000000..a696d8f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/service_limits.adoc
@@ -0,0 +1,12 @@
+// Replace the in each row to specify the number of resources used in this deployment. Remove the rows for resources that aren’t used.
+|===
+|Resource |This deployment uses
+
+// Space needed to maintain table headers
+|VPCs |1
+|Elastic IP addresses |1
+|Security groups |1
+|AWS Identity and Access Management (IAM) roles |1
+|Auto Scaling groups |1
+| instances |1
+|===
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/specialized_knowledge.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/specialized_knowledge.adoc
new file mode 100644
index 0000000..5fff40c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/docs/partner_editable/specialized_knowledge.adoc
@@ -0,0 +1,13 @@
+// Replace the content in <>
+// For example: “familiarity with basic concepts in networking, database operations, and data encryption” or “familiarity with .”
+// Include links if helpful.
+// You don't need to list AWS services or point to general info about AWS; the boilerplate already covers this.
+
+This Quick Start also assumes familiarity with the following AWS services and components:
+
+* http://aws.amazon.com/documentation/vpc/[Amazon Virtual Private Cloud (Amazon VPC)]
+* http://aws.amazon.com/documentation/ec2/[Amazon Elastic Compute Cloud (Amazon EC2)]
+* http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html[Amazon Elastic Block Storage (Amazon EBS)]
+* http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html[NAT gateways]
+* http://docs.aws.amazon.com/autoscaling/latest/userguide/[Amazon EC2 Auto Scaling]
+* http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/[Amazon CloudWatch Logs]
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/auditing_configure.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/auditing_configure.sh
new file mode 100644
index 0000000..2a25924
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/auditing_configure.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+function install_stuff_ubuntu(){
+ apt-get -y install auditd
+}
+
+function add_the_rules(){
+ cat /tmp/auditd.rules >> /etc/audit/rules.d/audit.rules
+ rm /tmp/auditd.rules
+}
+
+function restart_services(){
+ case "${BASTION_OS}" in
+ Amazon)
+ /usr/sbin/service auditd restart
+ ;;
+ CentOS|SUSE)
+ /sbin/service auditd restart
+ ;;
+ Ubuntu)
+ service auditd restart
+ ;;
+ esac
+}
+
+case "${BASTION_OS}" in
+ Ubuntu)
+ install_stuff_ubuntu
+ ;;
+esac
+
+add_the_rules
+restart_services
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/banner_message.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/banner_message.txt
new file mode 100644
index 0000000..ad35b1b
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/banner_message.txt
@@ -0,0 +1,12 @@
+
+###############################################################################
+# ___ ______ ___ _ _ ____ _ _ #
+# / \ \ / / ___| / _ \ _ _(_) ___| | __ / ___|| |_ __ _ _ __| |_ #
+# / _ \ \ /\ / /\___ \ | | | | | | | |/ __| |/ / \___ \| __/ _` | '__| __| #
+# / ___ \ V V / ___) | | |_| | |_| | | (__| < ___) | || (_| | | | |_ #
+# /_/ \_\_/\_/ |____/ \__\_\\__,_|_|\___|_|\_\ |____/ \__\__,_|_| \__| #
+#-----------------------------------------------------------------------------#
+# Authorized access only! #
+# Disconnect IMMEDIATELY if you are not an authorized user!!! #
+# All actions will be monitored and recorded. #
+###############################################################################
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/bastion_bootstrap.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/bastion_bootstrap.sh
new file mode 100644
index 0000000..80580fe
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/scripts/bastion_bootstrap.sh
@@ -0,0 +1,383 @@
+#!/bin/bash -e
+# Bastion Bootstrapping
+# authors: tonynv@amazon.com, sancard@amazon.com, ianhill@amazon.com
+# NOTE: This requires GNU getopt. On Mac OS X and FreeBSD you must install GNU getopt and mod the checkos function so that it's supported
+
+
+# Configuration
+PROGRAM='Linux Bastion'
+IMDS_BASE_URL='http://169.254.169.254/latest'
+##################################### Functions Definitions
+function checkos () {
+ platform='unknown'
+ unamestr=`uname`
+ if [[ "${unamestr}" == 'Linux' ]]; then
+ platform='linux'
+ else
+ echo "[WARNING] This script is not supported on MacOS or FreeBSD"
+ exit 1
+ fi
+ echo "${FUNCNAME[0]} Ended"
+}
+
+function imdsv2_token() {
+ curl -X PUT "${IMDS_BASE_URL}/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 600"
+}
+
+function imds_request() {
+ REQUEST_PATH=$1
+ if [[ -z $TOKEN ]]; then
+ TOKEN=$(imdsv2_token)
+ fi
+ curl -sH "X-aws-ec2-metadata-token: $TOKEN" "${IMDS_BASE_URL}/${REQUEST_PATH}"
+}
+
+function setup_environment_variables() {
+ REGION=$(imds_request meta-data/placement/availability-zone/)
+ #ex: us-east-1a => us-east-1
+ REGION=${REGION: :-1}
+
+ ETH0_MAC=$(/sbin/ip link show dev eth0 | /bin/egrep -o -i 'link/ether\ ([0-9a-z]{2}:){5}[0-9a-z]{2}' | /bin/sed -e 's,link/ether\ ,,g')
+
+ _userdata_file="/var/lib/cloud/instance/user-data.txt"
+
+ INSTANCE_ID=$(imds_request meta-data/instance-id)
+ EIP_LIST=$(grep EIP_LIST ${_userdata_file} | sed -e 's/EIP_LIST=//g' -e 's/\"//g')
+
+ LOCAL_IP_ADDRESS=$(imds_request meta-data/network/interfaces/macs/${ETH0_MAC}/local-ipv4s/)
+
+ CWG=$(grep CLOUDWATCHGROUP ${_userdata_file} | sed 's/CLOUDWATCHGROUP=//g')
+
+
+ export REGION ETH0_MAC EIP_LIST CWG LOCAL_IP_ADDRESS INSTANCE_ID
+}
+
+function verify_dependencies(){
+ if [[ "a$(which aws)" == "a" ]]; then
+ pip install awscli==1.19.79
+ fi
+ echo "${FUNCNAME[0]} Ended"
+}
+
+function usage() {
+ echo "$0 "
+ echo " "
+ echo "options:"
+ echo -e "--help \t Show options for this script"
+ echo -e "--banner \t Enable or Disable Bastion Message"
+ echo -e "--enable \t SSH Banner"
+ echo -e "--tcp-forwarding \t Enable or Disable TCP Forwarding"
+ echo -e "--x11-forwarding \t Enable or Disable X11 Forwarding"
+}
+
+function chkstatus () {
+ if [[ $? -eq 0 ]]
+ then
+ echo "Script [PASS]"
+ else
+ echo "Script [FAILED]" >&2
+ exit 1
+ fi
+}
+
+function osrelease () {
+ OS=`cat /etc/os-release | grep '^NAME=' | tr -d \" | sed 's/\n//g' | sed 's/NAME=//g'`
+ if [[ "${OS}" == "Ubuntu" ]]; then
+ echo "Ubuntu"
+ elif [[ "${OS}" == "Amazon Linux AMI" ]] || [[ "${OS}" == "Amazon Linux" ]]; then
+ echo "AMZN"
+ elif [[ "${OS}" == "CentOS Linux" ]]; then
+ echo "CentOS"
+ elif [[ "${OS}" == "SLES" ]]; then
+ echo "SLES"
+ else
+ echo "Operating System Not Found"
+ fi
+ echo "${FUNCNAME[0]} Ended" >> /var/log/cfn-init.log
+}
+
+function setup_logs () {
+
+ echo "${FUNCNAME[0]} Started"
+ URL_SUFFIX="${URL_SUFFIX:-amazonaws.com}"
+ HARDWARE=`uname -m`
+ if [[ "${release}" == "SLES" ]]; then
+ curl "https://amazoncloudwatch-agent-${REGION}.s3.${REGION}.${URL_SUFFIX}/suse/amd64/latest/amazon-cloudwatch-agent.rpm" -O
+ zypper install --allow-unsigned-rpm -y ./amazon-cloudwatch-agent.rpm
+ rm ./amazon-cloudwatch-agent.rpm
+ elif [[ "${release}" == "CentOS" ]]; then
+ curl "https://amazoncloudwatch-agent-${REGION}.s3.${REGION}.${URL_SUFFIX}/centos/amd64/latest/amazon-cloudwatch-agent.rpm" -O
+ rpm -U ./amazon-cloudwatch-agent.rpm
+ rm ./amazon-cloudwatch-agent.rpm
+ elif [[ "${release}" == "Ubuntu" ]]; then
+ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+ curl "https://amazoncloudwatch-agent-${REGION}.s3.${REGION}.${URL_SUFFIX}/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb" -O
+ dpkg -i -E ./amazon-cloudwatch-agent.deb
+ rm ./amazon-cloudwatch-agent.deb
+ elif [[ "${release}" == "AMZN" ]] && [[ "${HARDWARE}" == "x86_64" ]]; then
+ curl "https://amazoncloudwatch-agent-${REGION}.s3.${REGION}.${URL_SUFFIX}/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm" -O
+ rpm -U ./amazon-cloudwatch-agent.rpm
+ rm ./amazon-cloudwatch-agent.rpm
+ elif [[ "${release}" == "AMZN" ]] && [[ "${HARDWARE}" == "aarch64" ]]; then
+ curl "https://amazoncloudwatch-agent-${REGION}.s3.${REGION}.${URL_SUFFIX}/amazon_linux/arm64/latest/amazon-cloudwatch-agent.rpm" -O
+ rpm -U ./amazon-cloudwatch-agent.rpm
+ rm ./amazon-cloudwatch-agent.rpm
+ fi
+
+ cat <> /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
+{
+ "logs": {
+ "force_flush_interval": 5,
+ "logs_collected": {
+ "files": {
+ "collect_list": [
+ {
+ "file_path": "/var/log/audit/audit.log",
+ "log_group_name": "${CWG}",
+ "log_stream_name": "{instance_id}",
+ "timestamp_format": "%Y-%m-%d %H:%M:%S",
+ "timezone": "UTC"
+ }
+ ]
+ }
+ }
+ }
+}
+EOF
+
+ if [ -x /bin/systemctl ] || [ -x /usr/bin/systemctl ]; then
+ systemctl enable amazon-cloudwatch-agent.service
+ systemctl restart amazon-cloudwatch-agent.service
+ else
+ start amazon-cloudwatch-agent
+ fi
+}
+
+function setup_os () {
+
+ echo "${FUNCNAME[0]} Started"
+
+ echo "Defaults env_keep += \"SSH_CLIENT\"" >> /etc/sudoers
+
+ if [[ "${release}" == "Ubuntu" ]]; then
+ user_group="ubuntu"
+ elif [[ "${release}" == "CentOS" ]]; then
+ user_group="centos"
+ elif [[ "${release}" == "SLES" ]]; then
+ user_group="users"
+ else
+ user_group="ec2-user"
+ fi
+
+ if [[ "${release}" == "CentOS" ]]; then
+ /sbin/restorecon -v /etc/ssh/sshd_config
+ systemctl restart sshd
+ fi
+
+ if [[ "${release}" == "SLES" ]]; then
+ echo "0 0 * * * zypper patch --non-interactive" > ~/mycron
+ elif [[ "${release}" == "Ubuntu" ]]; then
+ apt-get install -y unattended-upgrades
+ echo "0 0 * * * unattended-upgrades -d" > ~/mycron
+ else
+ echo "0 0 * * * yum -y update --security" > ~/mycron
+ fi
+
+ crontab ~/mycron
+ rm ~/mycron
+
+ echo "${FUNCNAME[0]} Ended"
+}
+
+function request_eip() {
+
+ # Is the already-assigned Public IP an elastic IP?
+ _query_assigned_public_ip
+
+ set +e
+ _determine_eip_assc_status ${PUBLIC_IP_ADDRESS}
+ set -e
+
+ if [[ ${_eip_associated} -eq 0 ]]; then
+ echo "The Public IP address associated with eth0 (${PUBLIC_IP_ADDRESS}) is already an Elastic IP. Not proceeding further."
+ exit 1
+ fi
+
+ EIP_ARRAY=(${EIP_LIST//,/ })
+ _eip_assigned_count=0
+
+ for eip in "${EIP_ARRAY[@]}"; do
+
+ if [[ "${eip}" == "Null" ]]; then
+ echo "Detected a NULL Value, moving on."
+ continue
+ fi
+
+ # Determine if the EIP has already been assigned.
+ set +e
+ _determine_eip_assc_status ${eip}
+ set -e
+ _determine_eip_allocation ${eip}
+
+ # Attempt to assign EIP to the ENI.
+ set +e
+ aws ec2 associate-address --instance-id ${INSTANCE_ID} --allocation-id ${eip_allocation} --region ${REGION}
+
+ rc=$?
+ set -e
+
+ if [[ ${rc} -ne 0 ]]; then
+ echo "Unable to associate EIP ${eip}. Failure. Exiting"
+ exit 1
+ fi
+ done
+
+ echo "${FUNCNAME[0]} Ended"
+}
+
+function _query_assigned_public_ip() {
+ # Note: ETH0 Only.
+ # - Does not distinguish between EIP and Standard IP. Need to cross-ref later.
+ echo "Querying the assigned public IP"
+ PUBLIC_IP_ADDRESS=$(imds_request meta-data/public-ipv4/${ETH0_MAC}/public-ipv4s/)
+}
+
+function _determine_eip_assc_status(){
+ # Is the provided EIP associated?
+ # Also determines if an IP is an EIP.
+ # 0 => true
+ # 1 => false
+ echo "Determining EIP Association Status for [${1}]"
+ set +e
+ aws ec2 describe-addresses --public-ips ${1} --output text --region ${REGION} 2>/dev/null | grep -o -i eipassoc -q
+ rc=$?
+ set -e
+ if [[ ${rc} -eq 1 ]]; then
+ _eip_associated=1
+ else
+ _eip_associated=0
+ fi
+
+}
+
+function _determine_eip_allocation(){
+ echo "Determining EIP Allocation for [${1}]"
+ resource_id_length=$(aws ec2 describe-addresses --public-ips ${1} --output text --region ${REGION} | head -n 1 | awk {'print $2'} | sed 's/.*eipalloc-//')
+ if [[ "${#resource_id_length}" -eq 17 ]]; then
+ eip_allocation=$(aws ec2 describe-addresses --public-ips ${1} --output text --region ${REGION}| egrep 'eipalloc-([a-z0-9]{17})' -o)
+ else
+ eip_allocation=$(aws ec2 describe-addresses --public-ips ${1} --output text --region ${REGION}| egrep 'eipalloc-([a-z0-9]{8})' -o)
+ fi
+}
+
+function prevent_process_snooping() {
+ # Prevent bastion host users from viewing processes owned by other users.
+ mount -o remount,rw,hidepid=2 /proc
+ awk '!/proc/' /etc/fstab > temp && mv temp /etc/fstab
+ echo "proc /proc proc defaults,hidepid=2 0 0" >> /etc/fstab
+ echo "${FUNCNAME[0]} Ended"
+}
+
+##################################### End Function Definitions
+
+# Call checkos to ensure platform is Linux
+checkos
+# Verify dependencies are installed.
+verify_dependencies
+# Assuming it is, setup environment variables.
+setup_environment_variables
+
+## set an initial value
+SSH_BANNER="LINUX BASTION"
+
+# Read the options from cli input
+TEMP=`getopt -o h --longoptions help,banner:,enable:,tcp-forwarding:,x11-forwarding: -n $0 -- "$@"`
+eval set -- "${TEMP}"
+
+
+if [[ $# == 1 ]] ; then echo "No input provided! type ($0 --help) to see usage help" >&2 ; exit 1 ; fi
+
+# extract options and their arguments into variables.
+while true; do
+ case "$1" in
+ -h | --help)
+ usage
+ exit 1
+ ;;
+ --banner)
+ BANNER_PATH="$2";
+ shift 2
+ ;;
+ --enable)
+ ENABLE="$2";
+ shift 2
+ ;;
+ --tcp-forwarding)
+ TCP_FORWARDING="$2";
+ shift 2
+ ;;
+ --x11-forwarding)
+ X11_FORWARDING="$2";
+ shift 2
+ ;;
+ --)
+ break
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+# BANNER CONFIGURATION
+BANNER_FILE="/etc/ssh_banner"
+if [[ ${ENABLE} == "true" ]];then
+ if [[ -z ${BANNER_PATH} ]];then
+ echo "BANNER_PATH is null skipping ..."
+ else
+ echo "BANNER_PATH = ${BANNER_PATH}"
+ echo "Creating Banner in ${BANNER_FILE}"
+ aws s3 cp "${BANNER_PATH}" "${BANNER_FILE}" --region ${BANNER_REGION}
+ if [[ -e ${BANNER_FILE} ]] ;then
+ echo "[INFO] Installing banner ... "
+ echo -e "\n Banner ${BANNER_FILE}" >>/etc/ssh/sshd_config
+ else
+ echo "[INFO] banner file is not accessible skipping ..."
+ exit 1;
+ fi
+ fi
+else
+ echo "Banner message is not enabled!"
+fi
+
+#Enable/Disable TCP forwarding
+TCP_FORWARDING=`echo "${TCP_FORWARDING}" | sed 's/\\n//g'`
+
+#Enable/Disable X11 forwarding
+X11_FORWARDING=`echo "${X11_FORWARDING}" | sed 's/\\n//g'`
+
+echo "Value of TCP_FORWARDING - ${TCP_FORWARDING}"
+echo "Value of X11_FORWARDING - ${X11_FORWARDING}"
+if [[ ${TCP_FORWARDING} == "false" ]];then
+ awk '!/AllowTcpForwarding/' /etc/ssh/sshd_config > temp && mv temp /etc/ssh/sshd_config
+ echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config
+fi
+
+if [[ ${X11_FORWARDING} == "false" ]];then
+ awk '!/X11Forwarding/' /etc/ssh/sshd_config > temp && mv temp /etc/ssh/sshd_config
+ echo "X11Forwarding no" >> /etc/ssh/sshd_config
+fi
+
+release=$(osrelease)
+if [[ "${release}" == "Operating System Not Found" ]]; then
+ echo "[ERROR] Unsupported Linux Bastion OS"
+ exit 1
+else
+ setup_os
+ setup_logs
+fi
+
+prevent_process_snooping
+request_eip
+
+echo "Bootstrap complete."
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml
new file mode 100644
index 0000000..9911547
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.github/workflows/master-docs-build.yml
@@ -0,0 +1,37 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - main
+jobs:
+ build-adocs:
+ runs-on: ubuntu-18.04
+ name: asciidoc builder
+ steps:
+ - name: Checkout (main)
+ uses: actions/checkout@v2
+ - name: Get new doc updates
+ run: |
+ wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
+ chmod +x configure_git_env.sh
+ ./configure_git_env.sh
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - name: Generate dynamic content.
+ run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ - name: Run local actions
+ id: adoc
+ uses: ./docs/boilerplate/.actions/asciidoctor-action
+ with:
+ program: "./docs/boilerplate/.utils/build_docs.sh"
+ - name: Stage and Push changes to gh-pages branch.
+ run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Configure gh-pages source and trigger build if necessary.
+ run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitignore b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitignore
new file mode 100644
index 0000000..cdc56e6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitignore
@@ -0,0 +1,10 @@
+taskcat_outputs/*
+.taskcat_overrides.yml
+.taskcat/*
+.DS_Store
+
+# cfn module build
+cfn-module/*.zip
+cfn-module/*.json
+cfn-module/fragments/
+cfn-module/rpdk.log
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitmodules b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitmodules
new file mode 100644
index 0000000..0caba64
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "docs/boilerplate"]
+ path = docs/boilerplate
+ url = https://github.com/aws-quickstart/quickstart-documentation-base-common.git
+ branch = main
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.nojekyll b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.taskcat.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.taskcat.yml
new file mode 100644
index 0000000..022c2c0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/.taskcat.yml
@@ -0,0 +1,354 @@
+project:
+ name: quickstart-aws-vpc
+ owner: quickstart@amazon.com
+ package_lambda: false
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ # - cn-north-1
+ # - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+tests:
+ vpc-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-defaults-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-public-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreateNATGateways: 'false'
+ CreatePrivateSubnets: 'false'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ vpc-private-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_2]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePublicSubnets: 'false'
+ CreateNATGateways: 'false'
+ NumberOfAZs: '2'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template.yaml
+ 3az-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_3]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '3'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ - af-south-1
+ - ap-east-1
+ - ap-south-1
+ ## - ap-northeast-3
+ - ap-northeast-2
+ - ap-southeast-1
+ - ap-southeast-2
+ - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - eu-south-1
+ - eu-west-3
+ - eu-north-1
+ - me-south-1
+ - sa-east-1
+ - us-east-1
+ - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
+ 4az-complete-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_4]
+ CreateAdditionalPrivateSubnets: 'true'
+ CreatePrivateSubnets: 'true'
+ NumberOfAZs: '4'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ ## - af-south-1
+ ## - ap-east-1
+ ## - ap-south-1
+ ## - ap-northeast-3
+ ## - ap-northeast-2
+ ## - ap-southeast-1
+ ## - ap-southeast-2
+ ## - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ ## - eu-central-1
+ ## - eu-west-1
+ ## - eu-west-2
+ ## - eu-south-1
+ ## - eu-west-3
+ ## - eu-north-1
+ ## - me-south-1
+ ## - sa-east-1
+ - us-east-1
+ ## - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
+ 4az-public-all-possible-regions:
+ parameters:
+ AvailabilityZones: $[taskcat_getaz_4]
+ CreateAdditionalPrivateSubnets: 'false'
+ CreatePrivateSubnets: 'false'
+ NumberOfAZs: '4'
+ PrivateSubnet1ACIDR: 10.0.0.0/19
+ PrivateSubnet1BCIDR: 10.0.192.0/21
+ PrivateSubnet2ACIDR: 10.0.32.0/19
+ PrivateSubnet2BCIDR: 10.0.200.0/21
+ PrivateSubnet3ACIDR: 10.0.64.0/19
+ PrivateSubnet3BCIDR: 10.0.208.0/21
+ PrivateSubnet4ACIDR: 10.0.96.0/19
+ PrivateSubnet4BCIDR: 10.0.216.0/21
+ PublicSubnet1CIDR: 10.0.128.0/20
+ PublicSubnet2CIDR: 10.0.144.0/20
+ PublicSubnet3CIDR: 10.0.160.0/20
+ PublicSubnet4CIDR: 10.0.176.0/20
+ VPCCIDR: 10.0.0.0/16
+ VPCTenancy: default
+ regions:
+ ## - af-south-1
+ ## - ap-east-1
+ ## - ap-south-1
+ ## - ap-northeast-3
+ ## - ap-northeast-2
+ ## - ap-southeast-1
+ ## - ap-southeast-2
+ ## - ap-northeast-1
+ ## - ca-central-1
+ ## - cn-north-1
+ ## - cn-northwest-1
+ ## - eu-central-1
+ ## - eu-west-1
+ ## - eu-west-2
+ ## - eu-south-1
+ ## - eu-west-3
+ ## - eu-north-1
+ ## - me-south-1
+ ## - sa-east-1
+ - us-east-1
+ ## - us-east-2
+ ## - us-west-1
+ - us-west-2
+ s3_bucket: ''
+ template: templates/aws-vpc.template
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/LICENSE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/LICENSE.txt
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/LICENSE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/NOTICE.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/NOTICE.txt
new file mode 100644
index 0000000..c7169b4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/NOTICE.txt
@@ -0,0 +1,7 @@
+Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at
+
+ http://aws.amazon.com/apache2.0/
+
+or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/README.md
new file mode 100644
index 0000000..449de22
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/README.md
@@ -0,0 +1,9 @@
+# quickstart-aws-vpc
+
+This Quick Start provides a networking foundation for AWS Cloud infrastructures. It deploys an Amazon Virtual Private Cloud (Amazon VPC) according to AWS best practices and guidelines.
+
+The Amazon VPC architecture includes public and private subnets. The first set of private subnets share the default network access control list (ACL) from the Amazon VPC, and a second, optional set of private subnets include dedicated custom network ACLs per subnet. The Quick Start divides the Amazon VPC address space in a predictable manner across multiple Availability Zones, and deploys NAT gateways in each Availability Zone, which provide highly available outbound internet access for the private subnets.
+
+For architectural details, best practices, step-by-step instructions, and customization options, see the [deployment guide](https://fwd.aws/9VdxN).
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config
new file mode 100644
index 0000000..e8ea3b5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/cfn-module/.rpdk-config
@@ -0,0 +1,5 @@
+{
+ "artifact_type": "MODULE",
+ "typeName": "AWSQS::VPC::VPCQS::MODULE",
+ "settings": {}
+}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json
new file mode 100644
index 0000000..58e2891
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json
new file mode 100644
index 0000000..bc07459
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json
new file mode 100644
index 0000000..ee5548a
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-3az.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_3]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "3"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json
new file mode 100644
index 0000000..b9929b4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json
new file mode 100644
index 0000000..a34e72d
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json
new file mode 100644
index 0000000..a543251
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-4az.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_4]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "4"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json
new file mode 100644
index 0000000..d180084
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-complete.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json
new file mode 100644
index 0000000..14186af
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-dedicated.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "dedicated"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json
new file mode 100644
index 0000000..aaca90c
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-defaults.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json
new file mode 100644
index 0000000..86e37a2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-public.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "$[taskcat_getaz_2]"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json
new file mode 100644
index 0000000..e8ee3b0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/aws-vpc-sa-east-1.json
@@ -0,0 +1,74 @@
+[
+ {
+ "ParameterKey": "AvailabilityZones",
+ "ParameterValue": "sa-east-1b,sa-east-1c"
+ },
+ {
+ "ParameterKey": "CreateAdditionalPrivateSubnets",
+ "ParameterValue": "false"
+ },
+ {
+ "ParameterKey": "CreatePrivateSubnets",
+ "ParameterValue": "true"
+ },
+ {
+ "ParameterKey": "NumberOfAZs",
+ "ParameterValue": "2"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1ACIDR",
+ "ParameterValue": "10.0.0.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet1BCIDR",
+ "ParameterValue": "10.0.192.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2ACIDR",
+ "ParameterValue": "10.0.32.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet2BCIDR",
+ "ParameterValue": "10.0.200.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3ACIDR",
+ "ParameterValue": "10.0.64.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet3BCIDR",
+ "ParameterValue": "10.0.208.0/21"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4ACIDR",
+ "ParameterValue": "10.0.96.0/19"
+ },
+ {
+ "ParameterKey": "PrivateSubnet4BCIDR",
+ "ParameterValue": "10.0.216.0/21"
+ },
+ {
+ "ParameterKey": "PublicSubnet1CIDR",
+ "ParameterValue": "10.0.128.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet2CIDR",
+ "ParameterValue": "10.0.144.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet3CIDR",
+ "ParameterValue": "10.0.160.0/20"
+ },
+ {
+ "ParameterKey": "PublicSubnet4CIDR",
+ "ParameterValue": "10.0.176.0/20"
+ },
+ {
+ "ParameterKey": "VPCCIDR",
+ "ParameterValue": "10.0.0.0/16"
+ },
+ {
+ "ParameterKey": "VPCTenancy",
+ "ParameterValue": "default"
+ }
+]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/taskcat.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/taskcat.yml
new file mode 100644
index 0000000..57676dc
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/ci/taskcat.yml
@@ -0,0 +1,70 @@
+global:
+ govcloud: true
+ marketplace-ami: false
+ owner: quickstart@amazon.com
+ qsname: quickstart-aws-vpc
+ regions:
+ - ap-northeast-1
+ - ap-northeast-2
+ - ap-south-1
+ - ap-southeast-1
+ - ap-southeast-2
+ - ca-central-1
+ - eu-central-1
+ - eu-west-1
+ - eu-west-2
+ - us-east-1
+ - us-east-2
+ - us-west-1
+ - us-west-2
+ reporting: true
+tests:
+ vpc-defaults:
+ parameter_input: aws-vpc-defaults.json
+ template_file: aws-vpc.template
+ vpc-complete:
+ parameter_input: aws-vpc-complete.json
+ template_file: aws-vpc.template
+ vpc-defaults-sa-east-1:
+ parameter_input: aws-vpc-sa-east-1.json
+ template_file: aws-vpc.template
+ regions:
+ - sa-east-1
+ vpc-public:
+ parameter_input: aws-vpc-public.json
+ template_file: aws-vpc.template
+ 3az-eu-west-1:
+ parameter_input: aws-vpc-3az.json
+ regions:
+ - eu-west-1
+ template_file: aws-vpc.template
+ 3az-complete-us-east-2:
+ parameter_input: aws-vpc-3az-complete.json
+ regions:
+ - us-east-2
+ template_file: aws-vpc.template
+ 3az-public-us-west-2:
+ parameter_input: aws-vpc-3az-public.json
+ regions:
+ - us-west-2
+ template_file: aws-vpc.template
+ 4az-us-east-1:
+ parameter_input: aws-vpc-4az.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ 4az-complete-us-east-1:
+ parameter_input: aws-vpc-4az-complete.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ 4az-public-us-east-1:
+ parameter_input: aws-vpc-4az-public.json
+ regions:
+ - us-east-1
+ template_file: aws-vpc.template
+ dedicated-us-west-1:
+ parameter_input: aws-vpc-dedicated.json
+ regions:
+ - us-west-1
+ template_file: aws-vpc.template
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
new file mode 100755
index 0000000..56a9482
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/Dockerfile
@@ -0,0 +1,9 @@
+# asciidoctor image
+FROM asciidoctor/docker-asciidoctor
+
+LABEL "version"="1.0"
+
+# Setup entrypoint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md
new file mode 100755
index 0000000..d2ed7c4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/README.md
@@ -0,0 +1,33 @@
+# Asciidoctor GitHub Action
+
+To use this action add the below config to **.github/workflows/adocs-build.yml**
+
+```
+name: build adocs
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ adoc_build:
+ runs-on: ubuntu-18.04
+ name: asciidoctor -D docs --backend=html5 -o index.html -a toc2 docs/index.adoc
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+ - name: Get build container
+ id: adocbuild
+ uses: path-to-/.actions/asciidoctor-action
+ with:
+ program: "asciidoctor -D docs --backend=html5 -o index.html docs/index.adoc"
+ - name: Print execution time
+ run: echo "Time ${{ steps.adocbuild.outputs.time }}"
+ - name: Deploy docs to ghpages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ publish_branch: gh-pages
+ publish_dir: ./
+```
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml
new file mode 100755
index 0000000..c713a7e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/action.yml
@@ -0,0 +1,20 @@
+name: 'build asciidoctor action'
+author: 'Tony Vattathil'
+description: 'asciidoctor Build action'
+
+branding:
+ icon: 'file'
+ color: 'green'
+inputs:
+ program:
+ description: 'asciidoctor '
+ required: true
+ default: 'asciidoctor -D docs --backend=html5 -o index.html -a toc2 ddocs/index.adoc'
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
new file mode 100755
index 0000000..3ee8495
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/asciidoctor-action/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+# entrypoint.sh
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile
new file mode 100644
index 0000000..7045074
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/Dockerfile
@@ -0,0 +1,4 @@
+FROM python:3.8-buster
+RUN pip install cfn-lint
+COPY entrypoint.sh /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml
new file mode 100644
index 0000000..d572407
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/action.yml
@@ -0,0 +1,19 @@
+name: 'Customized cfn-lint action for AWS Quick Start org use'
+author: 'Andrew Glenn'
+
+branding:
+ icon: 'file-text'
+ color: 'green'
+
+inputs:
+ program:
+ description: "cfnlint"
+ required: true
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.program }}
+outputs:
+ time:
+ description: 'Action Completed'
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
new file mode 100755
index 0000000..a12bc1e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-action/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -e
+bash -c "$@"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml
new file mode 100644
index 0000000..fc679da
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/cfnlint-develop-branch.yml
@@ -0,0 +1,24 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - develop
+jobs:
+ lint:
+ runs-on: ubuntu-18.04
+ name: lint CFN templates
+ steps:
+ - name: Checkout (develop)
+ uses: actions/checkout@v2
+ with:
+ path: checked_out_repo
+ - name: Checkout (custom rules)
+ uses: actions/checkout@v2
+ with:
+ path: team_custom_rules
+ - name: Run local actions
+ id: cfnlint_custom
+ uses: ./docs/boilerplate/.actions/cfnlint-action
+ with:
+ program: "./docs/boilerplate/.utils/cfnlint_custom.sh"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml
new file mode 100644
index 0000000..35b5b5e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.actions/main-docs-build.yml
@@ -0,0 +1,38 @@
+name: main-documentation
+
+on:
+ push:
+ branches:
+ - master
+ - main
+jobs:
+ build-adocs:
+ runs-on: ubuntu-18.04
+ name: asciidoc builder
+ steps:
+ - name: Checkout (main)
+ uses: actions/checkout@v2
+ - name: Get new doc updates
+ run: |
+ wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
+ chmod +x configure_git_env.sh
+ ./configure_git_env.sh
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - name: Generate dynamic content.
+ run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
+ - name: Run local actions
+ id: adoc
+ uses: ./docs/boilerplate/.actions/asciidoctor-action
+ with:
+ program: "./docs/boilerplate/.utils/build_docs.sh"
+ - name: Stage and Push changes to gh-pages branch.
+ run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Configure gh-pages source and trigger build if necessary.
+ run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg
new file mode 100644
index 0000000..4d23322
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/AWS-Logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css
new file mode 100644
index 0000000..2b337c0
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.css/quickstart.css
@@ -0,0 +1,771 @@
+
+/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
+/* Uncomment @import statement to use as custom stylesheet */
+@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
+audio,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:none}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:0}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#34478c;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite::before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt{background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+:not(pre)>code.nobreak{word-wrap:normal}
+:not(pre)>code.nowrap{white-space:nowrap}
+pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
+pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
+pre>code{display:block}
+pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
+#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{
+ border-bottom:1px solid #e7e7e9;
+ padding-bottom:.5em;
+ width: 230px;
+}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{
+ font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ text-decoration:none;
+ color:#ccc;
+ display: block;
+ font-size:1rem;
+ line-height: 2rem;
+}
+#toc a:hover{color:#e6e6e6}
+#toc a:active{
+ text-decoration:none;
+ color:#777;
+}
+#toctitle{
+ padding-top:0;
+ overflow:hidden;
+ background:#283e5b;
+ border-bottom: 4px solid #435c7c;
+ width:320px;
+ height:154px;
+ top:0;
+ left:0;
+ color: #283e5b;
+}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background:#1c222a;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;/*! padding:1.25em 1em; */height:100%;overflow:auto;padding-right: 0px;}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{
+ font-size:1.375em;
+ background-repeat: no-repeat;
+ background-size: 160.8px 136.483px;
+ background-position: center;
+ }
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background:#1c222a;padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44;/*! background: #e6e6e6; */}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #e7e7e9}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
+@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
+.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
+.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.prettyprint{background:#f7f7f8}
+pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
+pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
+pre.prettyprint li code[data-lang]::before{opacity:1}
+pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
+table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
+table.linenotable td.code{padding-left:.75em}
+table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
+pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
+pre.pygments .lineno::before{content:"";margin-right:-.125em}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
+.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
+.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
+.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
+.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
+table.tableblock{max-width:100%;border-collapse:separate}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content>:last-child{margin-bottom:-1.25em}
+td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
+table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
+table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
+table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
+table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
+table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot,table.frame-ends{border-width:1px 0}
+table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
+ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left{margin:.25em .625em 1.25em 0}
+.imageblock.right{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background:#00fafa}
+.black{color:#000}
+.black-background{background:#000}
+.blue{color:#0000bf}
+.blue-background{background:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background:#fa00fa}
+.gray{color:#606060}
+.gray-background{background:#7d7d7d}
+.green{color:#006000}
+.green-background{background:#007d00}
+.lime{color:#00bf00}
+.lime-background{background:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background:#7d0000}
+.navy{color:#000060}
+.navy-background{background:#00007d}
+.olive{color:#606000}
+.olive-background{background:#7d7d00}
+.purple{color:#600060}
+.purple-background{background:#7d007d}
+.red{color:#bf0000}
+.red-background{background:#fa0000}
+.silver{color:#909090}
+.silver-background{background:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+
+/* ------------------------- QS CSS entries ---------------------------- */
+@font-face {
+ font-family: 'Amazon Ember Light';
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-019e0ec3f9b521056e66e31fdcbc8323e5cd1938._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-bc9ed0fce860a46f3cb061034280c23400e6e8b6._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Light';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Light'),
+ local('AmazonEmberLight-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-fd81bacb6a659a8c8c95828226b74594ab985060._V299195749_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-0acf3bc8b64d470d8888d84741a19533394654c6._V299195749_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-af980fe9c64fc17ece72cba4e3e7fdf54babeea6._V299195748_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-4fae4842b3446774d86579b9b024858a848644e8._V299195748_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Regular';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Regular'),
+ local('AmazonEmberRegular-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237381_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237386_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-Italic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Medium';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Medium'),
+ local('AmazonEmberMedium-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446113_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446115_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-Italic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Heavy';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Heavy'),
+ local('AmazonEmberHeavy-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715032_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715033_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Bold'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-Italic'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715033_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715032_.woff') format('woff');
+}
+
+@font-face {
+ font-family: 'Amazon Ember Thin';
+ font-style : italic;
+ font-weight: 700;
+ src :
+ local('Amazon Ember Thin'),
+ local('AmazonEmberThin-BoldItalic'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
+ url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
+}
+
+
+.tip {
+ border-top: 30px solid rgba(92, 184, 92, 0.8);
+ background: #E6F9E6;
+}
+
+.note {
+ border-top: 30px solid #6AB0DE;
+ background: #E7F2FA;
+}
+
+.warning {
+ border-top: 30px solid #F0B37E;
+ background: #FFF2DB;
+}
+
+.caution {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+.important {
+ border-top: 30px solid rgba(217, 83, 79, 0.8);
+ background: #FAE2E2;
+}
+
+#content {
+ max-width: 100rem;
+ padding-left: 5rem;
+ padding-right: 5rem;
+}
+
+body {
+ font-family: "Amazon Ember Regular", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+}
+
+/* added */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin : 0.85rem 0 1.7rem 0;
+ text-rendering: optimizeLegibility;
+ color: #ec7211;
+}
+
+p {
+ margin: 1rem 0;
+}
+
+/* QS Table of Contents */
+
+#toc {
+ overflow-x: hidden !important;
+}
+
+#toc>ul li {
+ padding : 0.3rem 0.6rem;
+ margin-top : 0;
+ line-height: 1;
+}
+
+#toc>ul li a {
+ line-height: 1.6;
+}
+
+#toc a {
+ /* TOC details */
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ margin-left : -1rem;
+ margin-right : -1rem;
+ padding-left : 1rem;
+ padding-right: 1rem;
+ background : transparent;
+ box-sizing : border-box;
+ cursor : pointer;
+ font-weight : 300 !important;
+}
+
+#toc.toc2 #toctitle{
+ background-image: url('images/AWS-Logo.svg');
+}
+
+/* QS Tables */
+
+table.tableblock .title,
+.imageblock .title {
+ font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
+ font-size: 1.1rem;
+ color: #34478c;
+}
+table p {
+ margin: 0rem;
+}
+
+/* Add border around hyperlink images */
+a img {
+ border: 1px solid #A4A4A4;
+}
+
+.preview_mode {
+ border-color:#e0e0dc;
+ -webkit-box-shadow:0 1px 4px #e0e0dc;
+ box-shadow:0 1px 4px #e0e0dc;
+ background:#ffffb3;
+ padding-bottom: 2rem;
+}
+.preview_mode .tableblock {
+ background:#ffffb3;
+}
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png
new file mode 100644
index 0000000..769bf7f
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/architecture_diagram.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png
new file mode 100644
index 0000000..8efde67
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/aws-quickstart-graphic.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png
new file mode 100644
index 0000000..5ed57bd
Binary files /dev/null and b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.images/cfn_outputs.png differ
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc
new file mode 100644
index 0000000..e6577d5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/_settings.adoc
@@ -0,0 +1,15 @@
+:quickstart-project-name: quickstart-documentation-base
+:partner-product-name: Example Product Name
+:partner-product-short-name: Example Product Name
+:partner-company-name: Example Company Name, Ltd.
+:doc-month: May
+:doc-year: 2020
+:partner-contributors: John Doe and Jane Doe - {partner-company-name}
+:quickstart-contributors: Jim Smith - AWS Global Partner SA, AWS + Joe Jones - Technical Product Manager, AWS
+:deployment_time: 30 minutes / 1 hour
+:default_deployment_region: us-east-1
+// Uncomment these two attributes if you are leveraging
+// - an AWS Marketplace listing.
+// Additional content will be auto-generated based on these attributes.
+// :marketplace_subscription:
+// :marketplace_listing_url: https://example.com/
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc
new file mode 100644
index 0000000..a1250bf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/additional_info.adoc
@@ -0,0 +1,23 @@
+// Add steps as necessary for accessing the software, post-configuration, and testing. Don’t include full usage instructions for your software, but add links to your product documentation for that information.
+//Should any sections not be applicable, remove them
+
+== Test the deployment
+// If steps are required to test the deployment, add them here. If not, remove the heading
+
+== Post deployment steps
+// If Post-deployment steps are required, add them here. If not, remove the heading
+
+== Best practices for using {partner-product-short-name} on AWS
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any best practices for using the software._
+
+== Security
+// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
+
+_Add any security-related information._
+
+== Other useful information
+//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
+
+_Add any other details that will help the customer use the software on AWS._
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc
new file mode 100644
index 0000000..6dd8947
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/architecture.adoc
@@ -0,0 +1,30 @@
+Deploying this Quick Start for a new virtual private cloud (VPC) with
+default parameters builds the following _{partner-product-short-name}_ environment in the
+AWS Cloud.
+
+// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
+[#architecture1]
+.Quick Start architecture for _{partner-product-short-name}_ on AWS
+[link=images/architecture_diagram.png]
+image::../images/architecture_diagram.png[Architecture,width=648,height=439]
+
+As shown in Figure 1, the Quick Start sets up the following:
+
+* A highly available architecture that spans two Availability Zones.*
+* A VPC configured with public and private subnets, according to AWS
+best practices, to provide you with your own virtual network on AWS.*
+
+In the public subnets:
+
+* Managed network address translation (NAT) gateways to allow outbound
+internet access for resources in the private subnets.*
+* A Linux bastion host in an Auto Scaling group to allow inbound Secure
+Shell (SSH) access to EC2 instances in public and private subnets.*
+
+In the private subnets:
+// Add bullet points for any additional components that are included in the deployment. Make sure that the additional components are also represented in the architecture diagram.
+* .
+
+*The template that deploys the Quick Start into an existing VPC skips
+the components marked by asterisks and prompts you for your existing VPC
+configuration.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc
new file mode 100644
index 0000000..520ee86
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deploy_steps.adoc
@@ -0,0 +1,55 @@
+// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
+=== Sign in to your AWS account
+
+. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
+. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
+
+// Optional based on Marketplace listing. Not to be edited
+ifdef::marketplace_subscription[]
+=== Subscribe to the {partner-product-short-name} AMI
+
+This Quick Start requires a subscription to the AMI for {partner-product-short-name} in AWS Marketplace.
+
+. Sign in to your AWS account.
+. {marketplace_listing_url}[Open the page for the {partner-product-short-name} AMI in AWS Marketplace], and then choose *Continue to Subscribe*.
+. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
+ A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
+
+. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
+endif::marketplace_subscription[]
+// \Not to be edited
+
+=== Launch the Quick Start
+
+NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
+
+. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see link:#_deployment_options[deployment options] earlier in this guide.
+
+[cols=2*]
+|===
+^|http://qs_launch_link[Deploy {partner-product-short-name} into a new VPC on AWS^]
+^|http://qs_template_link[View template^]
+
+^|http://qs_launch_link[Deploy {partner-product-short-name} into an existing VPC on AWS^]
+^|http://qs_template_link[View template^]
+|===
+
+WARNING: If you’re deploying {partner-product-short-name} into an existing VPC, make sure that your VPC has two private subnets in different Availability Zones for the workload instances, and that the subnets aren’t shared. This Quick Start doesn’t support https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html[shared subnets^]. These subnets require https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables, to allow the instances to download packages and software without exposing them to the internet.
+
+Also, make sure that the domain name option in the DHCP options is configured as explained in the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[Amazon VPC documentation^]. You provide your VPC settings when you launch the Quick Start.
+
+Each deployment takes about {deployment_time} to complete.
+
+[start=2]
+. Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-short-name} will be built. The template is launched in the {default_deployment_region} Region by default.
+
+// *Note:* This deployment includes Amazon EFS, which isn’t currently supported in all AWS Regions. For a current list of supported Regions, see the https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html[endpoints and quotas webpage].
+
+[start=3]
+. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
+. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary.
+
+// In the following tables, parameters are listed by category and described separately for the two deployment options:
+
+// * Parameters for deploying {partner-product-short-name} into a new VPC
+// * Parameters for deploying {partner-product-short-name} into an existing VPC
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc
new file mode 100644
index 0000000..6ca9d9e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/deployment_options.adoc
@@ -0,0 +1,8 @@
+// There are generally two deployment options. If additional are required, add them here
+
+This Quick Start provides two deployment options:
+
+* *Deploy {partner-product-short-name} into a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys {partner-product-short-name} into this new VPC.
+* *Deploy {partner-product-short-name} into an existing VPC*. This option provisions {partner-product-short-name} in your existing AWS infrastructure.
+
+The Quick Start provides separate templates for these options. It also lets you configure Classless Inter-Domain Routing (CIDR) blocks, instance types, and {partner-product-short-name} settings, as discussed later in this guide.
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc
new file mode 100644
index 0000000..37ec473
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/faq_troubleshooting.adoc
@@ -0,0 +1,21 @@
+// Add any tips or answers to anticipated questions. This could include the following troubleshooting information. If you don’t have any other Q&A to add, change “FAQ” to “Troubleshooting.”
+
+== FAQ
+
+*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
+
+*A.* If AWS CloudFormation fails to create the stack, we recommend that you relaunch the template with *Rollback on failure* set to *Disabled*. (This setting is under *Advanced* in the AWS CloudFormation console, *Options* page.) With this setting, the stack’s state is retained and the instance is left running, so you can troubleshoot the issue. (For Windows, look at the log files in %ProgramFiles%\Amazon\EC2ConfigService and C:\cfn\log.)
+// If you’re deploying on Linux instances, provide the location for log files on Linux, or omit this sentence.
+
+WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Please make sure to delete the stack when you finish troubleshooting.
+
+For additional information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^] on the AWS website.
+
+*Q.* I encountered a size limitation error when I deployed the AWS CloudFormation templates.
+
+*A.* We recommend that you launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template size limitations. For more information about AWS CloudFormation quotas, see the http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS documentation^].
+
+
+== Troubleshooting
+
+
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc
new file mode 100644
index 0000000..9706eb6
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/licenses.adoc
@@ -0,0 +1,13 @@
+// Include details about the license and how they can sign up. If no license is required, clarify that.
+
+These two paragraphs provide an example of the details you can provide. Provide links as appropriate.
+
+
+Example content below:
+
+_This Quick Start requires a license for {partner-product-short-name}. To use the Quick Start in your production environment, sign up for a license at . When you launch the Quick Start, place the license key in an S3 bucket and specify its location._
+
+_If you don’t have a license, the Quick Start deploys with a trial license. The trial license gives you days of free usage in a non-production environment. After this time, you can upgrade to a production license by following the instructions at ._
+
+// Or, if the deployment uses an AMI, update this paragraph. If it doesn’t, remove the paragraph.
+_The Quick Start requires a subscription to the Amazon Machine Image (AMI) for {partner-product-short-name}, which is available from https://aws.amazon.com/marketplace/[AWS Marketplace^]. Additional pricing, terms, and conditions may apply. For instructions, see link:#step-2.-subscribe-to-the-software-ami[step 2] in the deployment section._
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc
new file mode 100644
index 0000000..c3dbbc2
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/overview_target_and_usage.adoc
@@ -0,0 +1,7 @@
+// Replace the content in <>
+// Identify your target audience and explain how/why they would use this Quick Start.
+//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
+
+This Quick Start reference deployment guide provides step-by-step instructions for deploying {partner-product-short-name} on the AWS Cloud.
+
+This Quick Start is for users who
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc
new file mode 100644
index 0000000..f08b5d9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/pre-reqs.adoc
@@ -0,0 +1,13 @@
+// If no preperation is required, remove all content from here
+
+==== Prepare your AWS account
+
+_Describe any setup required in the AWS account prior to template launch_
+
+==== Prepare your {partner-company-name} account
+
+_Describe any setup required in the partner portal/account prior to template launch_
+
+==== Prepare for the deployment
+
+_Describe any preparation required to complete the product build, such as obtaining licenses or placing files in S3_
\ No newline at end of file
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc
new file mode 100644
index 0000000..2582a99
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/product_description.adoc
@@ -0,0 +1,5 @@
+// Replace the content in <>
+// Briefly describe the software. Use consistent and clear branding.
+// Include the benefits of using the software on AWS, and provide details on usage scenarios.
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc
new file mode 100644
index 0000000..d052fb8
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/regions.adoc
@@ -0,0 +1,4 @@
+The following Regions are currently supported by this Quick Start.
+
+- _us-east-1 (N. Virginia)_ (EXAMPLE)
+- _us-east-2 (Ohio)_ (EXAMPLE)
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc
new file mode 100644
index 0000000..4f1edc5
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/service_limits.adoc
@@ -0,0 +1,14 @@
+// Replace the in each row to specify the number of resources used in this deployment. Remove the rows for resources that aren’t used.
+|===
+|Resource |This deployment uses
+
+// Space needed to maintain table headers
+|VPCs |
+|Elastic IP addresses |
+|AWS Identity and Access Management (IAM) security groups |
+|IAM roles |
+|Auto Scaling groups |
+|Application Load Balancers |
+|Network Load Balancers |
+| instances |
+|===
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc
new file mode 100644
index 0000000..49f63b3
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.specific/specialized_knowledge.adoc
@@ -0,0 +1,6 @@
+// Replace the content in <>
+// Describe or link to specific knowledge requirements; for example: “familiarity with basic concepts in the areas of networking, database operations, and data encryption” or “familiarity with .”
+
+This Quick Start assumes familiarity with .
+
+
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
new file mode 100644
index 0000000..89b53db
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/Codebuild-Custom.dockerfile
@@ -0,0 +1,22 @@
+# Copyright 2020-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Amazon Software License (the "License"). You may not use this file except in compliance with the License.
+# A copy of the License is located at
+#
+# http://aws.amazon.com/asl/
+#
+# or in the "license" file accompanying this file.
+# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
+# See the License for the specific language governing permissions and limitations under the License.
+
+FROM asciidoctor/docker-asciidoctor
+
+RUN apk add --no-cache \
+ aws-cli \
+ py3-pip \
+ python3
+RUN wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/requirements.txt -O /tmp/req.txt
+RUN ln -sf /usr/bin/pip3 /usr/bin/pip
+RUN ln -sf /usr/bin/python3 /usr/bin/python
+RUN pip3 install -r /tmp/req.txt
+ENTRYPOINT ["dockerd-entrypoint.sh"]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh
new file mode 100755
index 0000000..cd18ea1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/build_docs.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+ASCIIDOC_ATTRIBUTES=""
+GITHUB_REPO_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
+if [ -d docs/images ]; then
+ mv docs/images images
+fi
+if [ "${GITHUB_REPO_OWNER}" == "aws-quickstart" ]; then
+ cp docs/boilerplate/.css/AWS-Logo.svg images/
+ if [ "${GITHUB_REF}" == "refs/heads/master" ] || [ "${GITHUB_REF}" == "refs/heads/main" ]; then
+ ASCIIDOC_ATTRIBUTES="-a production_build"
+ fi
+fi
+asciidoctor --base-dir docs/ --backend=html5 -o ../index.html -w --failure-level ERROR --doctype=book -a toc2 ${ASCIIDOC_ATTRIBUTES} docs/boilerplate/index.adoc
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh
new file mode 100755
index 0000000..dea5760
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/cfnlint_custom.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+if [[ -d "${GITHUB_WORKSPACE}/team_custom_rules" ]]; then
+ # Install requirements for custom rules, plus the rules themselves.
+ cd ${GITHUB_WORKSPACE}/team_custom_rules
+ pip install -r requirements.txt
+ python setup.py install
+ cd ${GITHUB_WORKSPACE}
+ # back to normal
+ CFNLINT_ARGS="-a ${GITHUB_WORKSPACE}/team_custom_rules/qs_cfn_lint_rules"
+ echo "Using custom ruleset"
+else
+ echo "NOT using custom ruleset"
+
+fi
+
+CFNLINT_JSON_OUT=$(mktemp)
+set +e
+cfn-lint ${CFNLINT_ARGS} -i W --templates templates/* --format json > ${CFNLINT_JSON_OUT}
+CFNLINT_EXIT_CODE=$?
+set -e
+python docs/boilerplate/.utils/pretty_cfnlint_output.py ${CFNLINT_JSON_OUT}
+exit ${CFNLINT_EXIT_CODE}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
new file mode 100755
index 0000000..c12074e
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -eu
+
+repo_uri="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
+
+remote_name="doc-upstream"
+main_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+target_branch="gh-pages"
+
+cd "$GITHUB_WORKSPACE"
+git config --local user.email "action@github.com"
+git config --local user.name "GitHub Action"
+git add -A
+git add images
+git add index.html
+git commit -a -m "Updating documentation"
+if [ $? -ne 0 ]; then
+ echo "nothing to commit"
+ exit 0
+fi
+
+git remote set-url origin ${repo_uri}
+git push origin HEAD:${target_branch} --force
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
new file mode 100755
index 0000000..4157868
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+exit 0
+# set -e
+# curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
+# sudo apt-get install jq -y
+# PAGES_STATUS=$(bin/hub api repos/${GITHUB_REPOSITORY}/pages | jq '.status' | sed -e 's/"//g')
+# if [ "${PAGES_STATUS}" != "null" ]; then
+# exit 0
+# fi
+
+# bin/hub api -H Accept:application/vnd.github.switcheroo-preview+json repos/${GITHUB_REPOSITORY}/pages -f {"source":{"branch":"gh-pages"}}
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh
new file mode 100755
index 0000000..f6b6eb1
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/configure_git_env.sh
@@ -0,0 +1,32 @@
+#!/bin/bash -e
+set -x
+git remote update
+git fetch
+set +e
+git remote set-head origin --auto
+default_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
+doc_commit_id=$(git submodule | grep docs/boilerplate | cut -d - -f 2 | cut -f 1 -d " ")
+git rev-parse --verify origin/gh-pages
+CHECK_BRANCH=$?
+set -e
+if [[ $CHECK_BRANCH -ne 0 ]];then
+ git checkout -b gh-pages
+ git push origin gh-pages
+else
+ git checkout gh-pages
+# git checkout --track origin/gh-pages
+fi
+git rm -rf .
+touch .gitmodules
+git restore -s origin/${default_branch} docs
+set +e
+git rm -r docs/boilerplate -r
+rm -rf docs/boilerplate
+set -e
+git restore -s origin/${default_branch} templates
+git submodule add https://github.com/aws-quickstart/quickstart-documentation-base-common.git docs/boilerplate
+cd docs/boilerplate
+git checkout "${doc_commit_id}"
+cd ../../
+rm configure_git_env.sh
+mv docs/images images
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh
new file mode 100755
index 0000000..be6a668
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/create_repo_structure.sh
@@ -0,0 +1,34 @@
+#!/bin/bash -e
+# # Work in progress.
+# exit 1
+
+BOILERPLATE_DIR="docs/boilerplate"
+GENERATED_DIR="docs/generated"
+SPECIFIC_DIR="docs/partner_editable"
+# Creating directories.
+mkdir -p ${GENERATED_DIR}/parameters
+mkdir -p ${GENERATED_DIR}/regions
+mkdir -p ${GENERATED_DIR}/services
+mkdir -p ${SPECIFIC_DIR}
+mkdir -p docs/images
+mkdir -p .github/workflows
+
+# Copying content.
+rsync -avP ${BOILERPLATE_DIR}/.images/ docs/images/
+rsync -avP ${BOILERPLATE_DIR}/.specific/ ${SPECIFIC_DIR}
+
+# enabling workflow.
+cp ${BOILERPLATE_DIR}/.actions/main-docs-build.yml .github/workflows/
+
+
+# creating placeholders.
+echo "// placeholder" > ${GENERATED_DIR}/parameters/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/regions/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/index.adoc
+echo "// placeholder" > ${GENERATED_DIR}/services/metadata.adoc
+
+touch .nojekyll
+
+git add -A docs/
+git add .github/
+git add .nojekyll
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh
new file mode 100644
index 0000000..27bcae7
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/docs_built_in_codebuild.sh
@@ -0,0 +1,44 @@
+#!/bin/bash -e
+# This file is meant to be the functional equalivent of the github actions workflow.
+#
+# // 5 env vars are required to use this.
+# - DOCBUILD_BOILERPLATE_S3_BUCKET
+# This defines the S3 bucketwhere a zip'd copy of *this repo* is located.
+# Example Value: "my-bucket-name-here"
+# - DOCBUILD_BOILERPLATE_S3_KEY
+# This defines the S3 Object key for the above-mentioned ZIP file.
+# Example Value: /path/to/my/file.zip
+# - DOCBUILD_CONTENT_S3_BUCKET
+# This defines the S3 bucket where a zip'd copy of repo to build is located.
+# (can be the same bucket)
+# Example value: "my-bucket-name-here"
+# - DOCBUILD_CONTENT_S3_KEY
+# This is the key where a ZIP of your content repo is located.
+# Example Value: "/path/to/my/other_file.zip"
+# - DOCBUILD_DESTINATION_S3_BUCKET
+# Bucket to upload the generated content to.
+# - DOCBUILD_DESTINATION_S3_KEY
+# S3 Key prefix for the generated content
+# - GITHUB_REPOSITORY
+# Easy identifier of the project that documentation is being built for.
+# - EX: jim-jimmerson/foobar
+#
+#
+#
+# Structure
+# --- Content repo is unzipped.
+# docs/boilerplate -- Boilerplate repo is unzipped here.
+DL_DIR=$(mktemp -d)
+WORKING_DIR=$(mktemp -d)
+aws s3 cp s3://${DOCBUILD_BOILERPLATE_S3_BUCKET}/${DOCBUILD_BOILERPLATE_S3_KEY} ${DL_DIR}/boilerplate.zip
+aws s3 cp s3://${DOCBUILD_CONTENT_S3_BUCKET}/${DOCBUILD_CONTENT_S3_KEY} ${DL_DIR}/content.zip
+
+unzip ${DL_DIR}/content.zip -d ${WORKING_DIR}
+rm -rf ${WORKING_DIR}/docs/boilerplate
+unzip ${DL_DIR}/boilerplate.zip -d ${WORKING_DIR}/docs/boilerplate
+
+cd ${WORKING_DIR}
+./docs/boilerplate/.utils/generate_dynamic_content.sh
+./docs/boilerplate/.utils/build_docs.sh
+
+aws s3 sync ${WORKING_DIR} s3://${DOCBUILD_DESTINATION_S3_BUCKET}/${DOCBUILD_DESTINATION_S3_KEY}/ --cache-control max-age=0,no-cache,no-store,must-revalidate --acl public-read
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh
new file mode 100755
index 0000000..de89074
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_dynamic_content.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Wrapper to generate parameter tables within asciidoc workflow.
+set -e
+#sudo apt-get install pandoc -y
+pip3 install -r docs/boilerplate/.utils/requirements.txt;
+echo "Gen tables"
+python docs/boilerplate/.utils/generate_parameter_tables.py
+echo "Gen metadata"
+python docs/boilerplate/.utils/generate_metadata_attributes.py
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py
new file mode 100755
index 0000000..940ae45
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_metadata_attributes.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+from pathlib import Path
+
+
+def get_cfn(filename):
+ _decoded = cfnlint.decode.decode(filename, False)[0]
+ return _decoded
+
+def fetch_metadata():
+ metadata_attributes = set()
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ template = get_cfn(Path(yaml_cfn_file))
+ if not template:
+ raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
+ _resources = template['Resources']
+ for _resource in _resources.values():
+ _type = _resource['Type'].lower()
+ metadata_attributes.add(_type.split('::')[1])
+ metadata_attributes.add(_type.replace('::','_'))
+ with open('docs/generated/services/metadata.adoc', 'w') as f:
+ f.write('\n')
+ for attr in sorted(metadata_attributes):
+ f.write(f":template_{attr}:\n")
+
+if __name__ == '__main__':
+ fetch_metadata()
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py
new file mode 100755
index 0000000..26434bf
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/generate_parameter_tables.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+import io
+import cfnlint
+import datetime
+from pathlib import Path
+
+
+def get_cfn(filename):
+ _decoded = cfnlint.decode.decode(filename, False)[0]
+ return _decoded
+
+def _generate_table_name_and_header(label_name):
+ data = []
+ data.append(f"\n.{label_name}")
+ data.append('[width="100%",cols="16%,11%,73%",options="header",]')
+ data.append("|===")
+ data.append("|Parameter label (name) |Default value|Description")
+ return "\n".join(data)
+
+def _generate_per_label_table_entry(label, param, default, description):
+ data = []
+ if not label:
+ label = "**NO_LABEL**"
+ data.append(f"|{label}")
+ data.append(f"(`{param}`)|`{default}`|{description}")
+ return '\n'.join(data)
+
+def just_pass():
+ template_entrypoints = {}
+ template_order = {}
+ found_files_with_glob_pattern=False
+ for yaml_cfn_file in Path('./templates').glob('*.template*'):
+ found_files_with_glob_pattern=True
+ print(f"Working on {yaml_cfn_file}")
+ template = get_cfn(Path(yaml_cfn_file))
+ if not template:
+ raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
+ entrypoint = template.get('Metadata', {}).get('QuickStartDocumentation', {}).get('EntrypointName')
+ if not entrypoint:
+ print(f"- No documentation entrypoint found. Continuing.")
+ continue
+ order = template.get('Metadata',{}).get('QuickStartDocumentation',{}).get('Order')
+ if not order:
+ print(f"- No documentation order found. Assigning x.")
+ order = 'x'
+ _pf = Path(yaml_cfn_file).stem + ".adoc"
+ p_file = f"docs/generated/parameters/{_pf}"
+ template_entrypoints[p_file.split('/')[-1]] = entrypoint
+ template_order[p_file.split('/')[-1]] = str(order)
+
+ label_mappings = {}
+ reverse_label_mappings = {}
+ parameter_mappings = {}
+ parameter_labels = {}
+ no_groups = {}
+
+ def determine_optional_value(param):
+ optional = template['Metadata'].get('QuickStartDocumentation', {}).get('OptionalParameters')
+ if optional and (param in optional):
+ return '__Optional__'
+ return '**__Requires input__**'
+
+ for label in template['Metadata']['AWS::CloudFormation::Interface']['ParameterGroups']:
+ label_name = label['Label']['default']
+ label_params = label['Parameters']
+ label_mappings[label_name] = label_params
+ for ln in label_params:
+ reverse_label_mappings[ln] = label_name
+
+ for label_name, label_data in template['Metadata']['AWS::CloudFormation::Interface']['ParameterLabels'].items():
+ parameter_labels[label_name] = label_data.get('default')
+
+ for param_name, param_data in template['Parameters'].items():
+ if param_data.get('Default') == '':
+ param_data['Default'] = '**__Blank string__**'
+ parameter_mappings[param_name] = param_data
+ if not reverse_label_mappings.get(param_name):
+ no_groups[param_name] = param_data
+
+ adoc_data = ""
+ for label_name, label_params in label_mappings.items():
+ header = _generate_table_name_and_header(label_name)
+ adoc_data += header
+
+ for lparam in label_params:
+
+ param_data = _generate_per_label_table_entry(
+ parameter_labels.get(lparam, ''),
+ lparam,
+ parameter_mappings[lparam].get('Default', determine_optional_value(lparam)),
+ parameter_mappings[lparam].get('Description', 'NO_DESCRIPTION')
+ )
+ adoc_data += param_data
+ adoc_data += "\n|==="
+
+ print(f"- Generating: {p_file}")
+ with open (p_file, 'w') as p:
+ p.write(adoc_data)
+ if not found_files_with_glob_pattern:
+ raise Exception("No files matching templates/*.template.(json|yaml|yml) were found. Unable to build documentation. Exiting.")
+ if not template_entrypoints:
+ raise Exception("No documentation entrypoints (Metadata => QuickStartDocumentation => EntrypointName) were found. Unable to build documentation. Exiting.")
+ with open('docs/generated/parameters/index.adoc', 'w') as f:
+ for template_file, order in sorted(template_order.items(), key=lambda x: x[1]):
+ print (f"Index - {order} - {template_entrypoints.get(template_file)} - {template_file}")
+ f.write(f"\n=== {template_entrypoints.get(template_file)}\n")
+ f.write(f"include::{template_file}[]\n")
+
+if __name__ == '__main__':
+ print("---")
+ print("> Milton, don't be greedy. Let's pass it along and make sure everyone gets a piece.")
+ print("> Can I keep a piece, because last time I was told that...")
+ print("> Just pass.")
+ print("---")
+ just_pass()
+ print("---")
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py
new file mode 100755
index 0000000..0f66f4f
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/pretty_cfnlint_output.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+import sys
+import json
+
+fn = sys.argv[1]
+
+severity_to_icon = {
+ 'Warning':u'\u270B',
+ 'Error':u'\u274C'
+}
+
+results = {}
+
+with open(fn) as f:
+ x = json.load(f)
+
+for rule_match in x:
+ _fn = rule_match['Filename']
+ _sl = rule_match['Location']['Start']['LineNumber']
+ _el = rule_match['Location']['End']['LineNumber']
+ _msg = rule_match['Message']
+ _lvl = rule_match['Level']
+ _rid = rule_match['Rule']['Id']
+ try:
+ results[_fn][_sl] = (_lvl, _rid, _msg)
+ except KeyError:
+ results[_fn] = {_sl:(_lvl, _rid, _msg)}
+
+for k in sorted(results.keys()):
+ print('\n{}'.format(k))
+ for l,v in results[k].items():
+ print("- {} [{}] ({}) | Line: {} - {}".format(severity_to_icon.get(v[0]), v[0].upper(), v[1], l, v[2]))
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt
new file mode 100644
index 0000000..50f4d98
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/.utils/requirements.txt
@@ -0,0 +1,5 @@
+requests
+cfn-lint
+pathlib
+datetime
+ruamel.yaml
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS
new file mode 100644
index 0000000..ea1bf32
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/CODEOWNERS
@@ -0,0 +1,2 @@
+* @aws-quickstart/sa
+/.specific/* @aws-quickstart/tw @aws-quickstart/sa
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc
new file mode 100644
index 0000000..7800472
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/_layout_cfn.adoc
@@ -0,0 +1,112 @@
+
+[.text-center]
+[discrete]
+== {partner-product-name} on the AWS Cloud
+:doctitle: {partner-product-name} on the AWS Cloud
+:!toc:
+[.text-left]
+include::../{includedir}/introduction.adoc[]
+
+== Overview
+include::../{includedir}/overview.adoc[]
+
+
+== {partner-product-name} on AWS
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/product_description.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/product_description.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Cost
+include::../{includedir}/cost.adoc[]
+
+ifndef::disable_licenses[]
+== Software licenses
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/licenses.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/licenses.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+endif::disable_licenses[]
+
+== Architecture
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/architecture.adoc`**_
+[.preview_mode]
+|===
+a|
+endif::production_build[]
+include::../{specificdir}/architecture.adoc[]
+ifndef::production_build[]
+|===
+endif::production_build[]
+
+== Planning the deployment
+
+include::../{includedir}/planning_deployment.adoc[]
+
+== Deployment steps
+include::../{includedir}/deployment_steps.adoc[]
+
+// == Parameters
+// include::../{generateddir}/parameters/index.adoc[]
+
+// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/additional_info.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{specificdir}/additional_info.adoc[]
+
+
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/faq_troubleshooting.adoc`**_
+++++
+
+++++
+endif::production_build[]
+
+ifdef::parameters_as_appendix[]
+== Parameter reference
+
+include::../{generateddir}/parameters/index.adoc[]
+endif::parameters_as_appendix[]
+
+== Send us feedback
+
+To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. If you’d like to submit code, please review the https://aws-quickstart.github.io/[Quick Start Contributor’s Guide^].
+
+== Quick Start reference deployments
+
+See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
+
+
+== GitHub repository
+
+You can visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
+the templates and scripts for this Quick Start, to post your comments,
+and to share your customizations with others.
+
+'''
+include::../{includedir}/disclaimer.adoc[]
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc
new file mode 100644
index 0000000..65629c4
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/cost.adoc
@@ -0,0 +1,11 @@
+
+You are responsible for the cost of the AWS services used while running
+this Quick Start. There is no additional cost for
+using the Quick Start.
+
+The AWS CloudFormation template for this Quick Start includes
+configuration parameters that you can customize. Some of the settings,
+such as the instance type, affect the cost of deployment. For cost estimates,
+see the pricing pages for each AWS service you use. Prices are subject to change.
+
+TIP: After you deploy the Quick Start, enable the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-gettingstarted-turnonreports.html[AWS Cost and Usage Report^] to deliver billing metrics to an Amazon Simple Storage Service (Amazon S3) bucket in your account. It provides cost estimates based on usage throughout each month and aggregates the data at the end of the month. For more information about the report, see the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-costusage.html[AWS documentation^].
diff --git a/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc
new file mode 100644
index 0000000..57990be
--- /dev/null
+++ b/Amazon/artifactory7/v7273/submodules/quickstart-linux-bastion/submodules/quickstart-aws-vpc/docs/boilerplate/deployment_steps.adoc
@@ -0,0 +1,42 @@
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/deploy_steps.adoc`**_
+++++
+
+++++
+endif::production_build[]
+include::../{generateddir}/services/metadata.adoc[]
+
+ifndef::disable_regions[]
+// We can also pull in regions automatically.
+==== Supported Regions
+
+ifdef::template_not_all_regions[]
+This deployment includes , which isn’t currently supported in https://aws.amazon.com/about-aws/global-infrastructure/[all AWS Regions^].
+endif::template_not_all_regions[]
+
+ifdef::auto_populate_regions[]
+The following Regions are currently supported by this Quick Start.
+include::../{generateddir}/regions/index.adoc[]
+endif::auto_populate_regions[]
+
+ifndef::auto_populate_regions[]
+
+ifndef::production_build[]
+_**This portion of the deployment guide is located at `docs/{specificdir}/regions.adoc`**_
+++++
+