Make aws scripts work with all latest instance types that are
equiped with instance-stores.

Change-Id: I16efff22a029e316c7a7dc0402c0131e0c0bdea4
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1603
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
BAD: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ian Maxon <imaxon@apache.org>
diff --git a/asterixdb/asterix-server/src/main/opt/ansible/yaml/instance_start.yml b/asterixdb/asterix-server/src/main/opt/ansible/yaml/instance_start.yml
index 13de7cd..d6661ca 100644
--- a/asterixdb/asterix-server/src/main/opt/ansible/yaml/instance_start.yml
+++ b/asterixdb/asterix-server/src/main/opt/ansible/yaml/instance_start.yml
@@ -19,7 +19,7 @@
 
 - hosts: [localhost,]
   vars:
-       temp_dir: "/tmp/asterixdb"
+       temp_dir: "{{ playbook_dir }}/../conf/instance"
        inventory: "{{ temp_dir }}/inventory"
        ccconf: "{{ temp_dir }}/cc.conf"
   tasks:
diff --git a/asterixdb/asterix-server/src/main/opt/ansible/yaml/start_cc.yml b/asterixdb/asterix-server/src/main/opt/ansible/yaml/start_cc.yml
index 9d371d2..66fd79c 100644
--- a/asterixdb/asterix-server/src/main/opt/ansible/yaml/start_cc.yml
+++ b/asterixdb/asterix-server/src/main/opt/ansible/yaml/start_cc.yml
@@ -19,7 +19,7 @@
 
 - name: Copy cluster config to CC
   synchronize:
-    src: /tmp/asterixdb/cc.conf
+    src: ../conf/instance/cc.conf
     dest: "{{ binarydir }}/cc.conf"
 
 - name: Update cluster config
diff --git a/asterixdb/asterix-server/src/main/opt/aws/bin/gen_volumes.sh b/asterixdb/asterix-server/src/main/opt/aws/bin/gen_volumes.sh
new file mode 100755
index 0000000..82ab685
--- /dev/null
+++ b/asterixdb/asterix-server/src/main/opt/aws/bin/gen_volumes.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+# ------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+# ------------------------------------------------------------
+
+# Number of instance-store volumes
+count=$1
+
+# Destination of the generated file for the volume list
+dest=$2
+
+# There is no instance-stores.
+if [ $count -le 0 ]
+then
+    printf "vols: []\n" >$dest
+    exit 0
+fi
+
+# Generates a list of instance-local volumes.
+printf "vols:\n" >$dest
+
+for i in $(seq 1 $count)
+do
+  printf '  - { device_name: /dev/xvd%c, ephemeral: ephemeral%d }\n' `printf "\x$(printf %x \`expr 97 + $i\`)"` \
+    $(($i-1)) >> $dest
+done
diff --git a/asterixdb/asterix-server/src/main/opt/aws/bin/start.sh b/asterixdb/asterix-server/src/main/opt/aws/bin/start.sh
index a836b4e..8bffaa4 100755
--- a/asterixdb/asterix-server/src/main/opt/aws/bin/start.sh
+++ b/asterixdb/asterix-server/src/main/opt/aws/bin/start.sh
@@ -30,7 +30,7 @@
 ansible-playbook -i "localhost," $AWS_PATH/yaml/aws_start.yml
 
 # Generates an Ansible inventory file and an AsterixDB configuration file.
-temp=/tmp/asterixdb
+temp=$AWS_PATH/conf/instance
 inventory=$temp/inventory
 
 # Installs asterixdb on all AWS instances.
diff --git a/asterixdb/asterix-server/src/main/opt/aws/conf/aws_types.yml b/asterixdb/asterix-server/src/main/opt/aws/conf/aws_types.yml
index e0a060e..72b3d63 100644
--- a/asterixdb/asterix-server/src/main/opt/aws/conf/aws_types.yml
+++ b/asterixdb/asterix-server/src/main/opt/aws/conf/aws_types.yml
@@ -1,37 +1,50 @@
-one_ephemeral:
-  - { device_name: /dev/xvdb, ephemeral: ephemeral0 }
-two_ephemeral:
-  - { device_name: /dev/xvdb, ephemeral: ephemeral0 }
-  - { device_name: /dev/xvdc, ephemeral: ephemeral1 }
-three_ephemeral:
-  - { device_name: /dev/xvdb, ephemeral: ephemeral0 }
-  - { device_name: /dev/xvdc, ephemeral: ephemeral1 }
-  - { device_name: /dev/xvdd, ephemeral: ephemeral2 }
-four_ephemeral:
-  - { device_name: /dev/xvdb, ephemeral: ephemeral0 }
-  - { device_name: /dev/xvdc, ephemeral: ephemeral1 }
-  - { device_name: /dev/xvdd, ephemeral: ephemeral2 }
-  - { device_name: /dev/xvde, ephemeral: ephemeral3 }
+# ------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+# ------------------------------------------------------------
 
 ephemeral_volumes:
-  c1.medium: "{{ one_ephemeral }}"
-  c1.xlarge: "{{ four_ephemeral }}"
-  c3.large: "{{ two_ephemeral }}"
-  c3.xlarge: "{{ two_ephemeral }}"
-  c3.2xlarge: "{{ two_ephemeral }}"
-  c3.4xlarge: "{{ two_ephemeral }}"
-  c3.8xlarge: "{{ two_ephemeral }}"
-  i2.xlarge: "{{ one_ephemeral }}"
-  i2.2xlarge: "{{ two_ephemeral }}"
-  i2.4xlarge: "{{ four_ephemeral }}"
-  m1.small: "{{ one_ephemeral }}"
-  m1.medium: "{{ one_ephemeral }}"
-  m1.large: "{{ two_ephemeral }}"
-  m1.xlarge: "{{ four_ephemeral }}"
-  m2.xlarge: "{{ one_ephemeral }}"
-  m2.2xlarge: "{{ one_ephemeral }}"
-  m2.4xlarge: "{{ two_ephemeral }}"
-  m3.medium: "{{ one_ephemeral }}"
-  m3.large: "{{ one_ephemeral }}"
-  m3.xlarge: "{{ two_ephemeral }}"
-  m3.2xlarge: "{{ two_ephemeral }}"
+  c3.large: 2
+  c3.xlarge: 2
+  c3.2xlarge: 2
+  c3.4xlarge: 2
+  c3.8xlarge: 2
+  d2.xlarge: 3
+  d2.2xlarge: 6
+  d2.4xlarge: 12
+  d2.8xlarge: 24
+  i3.large: 1
+  i3.xlarge: 1
+  i3.2xlarge: 1
+  i3.4xlarge: 2
+  i3.8xlarge: 4
+  i3.16xlarge: 8
+  f1.2xlarge: 1
+  f1.16xlarge: 4
+  g2.2xlarge: 1
+  g2.8xlarge: 2
+  m3.medium: 1
+  m3.large: 1
+  m3.xlarge: 2
+  m3.2xlarge: 2
+  r3.large: 1
+  r3.xlarge: 1
+  r3.2xlarge: 1
+  r3.4xlarge: 1
+  r3.8xlarge: 2
+  x1.16xlarge: 1
+  x1.32xlarge: 2
diff --git a/asterixdb/asterix-server/src/main/opt/aws/yaml/aws_start.yml b/asterixdb/asterix-server/src/main/opt/aws/yaml/aws_start.yml
index 344bfd5..a35cf12 100644
--- a/asterixdb/asterix-server/src/main/opt/aws/yaml/aws_start.yml
+++ b/asterixdb/asterix-server/src/main/opt/aws/yaml/aws_start.yml
@@ -21,17 +21,31 @@
   hosts: localhost
   gather_facts: false
   vars:
-     temp_dir: "/tmp/asterixdb"
+     temp_dir: "{{ playbook_dir }}/../conf/instance"
+     bin_dir: "{{ playbook_dir }}/../bin"
      inventory: "{{ temp_dir }}/inventory"
      ccconf: "{{ temp_dir }}/cc.conf"
      home_dir: "/home/{{ user }}"
-     vols: "{{ ephemeral_volumes[instance_type]|default([]) }}"
+     num_vols: "{{ ephemeral_volumes[instance_type]|default(0) }}"
   tasks:
     - include_vars: ../conf/aws_settings.yml
     - include_vars: ../conf/aws_types.yml
 
     - name: Clean the temporary directory
-      shell: rm -rf "{{ temp_dir }}"
+      file:
+        path: "{{ temp_dir }}"
+        state: absent
+
+    - name: Create local temporary directory
+      file:
+        path: "{{ temp_dir }}"
+        state: directory
+
+    - name: Generate instance-store volumes for AWS instances
+      shell: "{{ playbook_dir }}/../bin/gen_volumes.sh {{ num_vols }} {{ temp_dir }}/volumes.yml"
+
+    - name: Load generated volumes
+      include_vars: "{{ temp_dir }}/volumes.yml"
 
     - name: Launch all instances
       ec2:
@@ -49,11 +63,6 @@
         volumes: "{{ vols }}"
       register: ec2
 
-    - name: Create local temporary directory
-      file:
-        path: "{{ temp_dir }}"
-        state: directory
-
     - name: Set CC node
       set_fact:
         cc: "{{ ec2.instances[0] }}"
@@ -107,7 +116,7 @@
       when: vols|length == 0
 
     - name: Generates multiple iodevice paths
-      shell: printf "devices:\n" >> "{{ temp_dir }}/devices"
+      shell: printf "devices:\n" > "{{ temp_dir }}/devices"
       when: vols|length > 0
 
     - name: Populate multiple iodevices
diff --git a/asterixdb/asterix-server/src/main/opt/aws/yaml/instance_start.yml b/asterixdb/asterix-server/src/main/opt/aws/yaml/instance_start.yml
index cf09b69..3a9fd5a 100644
--- a/asterixdb/asterix-server/src/main/opt/aws/yaml/instance_start.yml
+++ b/asterixdb/asterix-server/src/main/opt/aws/yaml/instance_start.yml
@@ -25,7 +25,7 @@
 - hosts: all
   tasks:
     - include_vars: ../conf/aws_settings.yml
-    - include_vars: ../conf/aws_types.yml
+    - include_vars: ../conf/instance/volumes.yml
 
     - name: Mount instance local stores
       include: mount.yml
diff --git a/asterixdb/asterix-server/src/main/opt/aws/yaml/mount.yml b/asterixdb/asterix-server/src/main/opt/aws/yaml/mount.yml
index 2e16476..03a740b 100644
--- a/asterixdb/asterix-server/src/main/opt/aws/yaml/mount.yml
+++ b/asterixdb/asterix-server/src/main/opt/aws/yaml/mount.yml
@@ -23,6 +23,6 @@
     sudo mkdir "/data{{ vol.0 + 1 }}"
     sudo mount "{{ vol.1.device_name }}" "/data{{ vol.0 + 1 }}"
     sudo chown -R $USER "/data{{ vol.0 + 1 }}"
-  with_indexed_items: "{{ ephemeral_volumes[instance_type]|default([]) }}"
+  with_indexed_items: "{{ vols }}"
   loop_control:
     loop_var: vol