Auto-config SSDs for the AWS installtion.
Change-Id: I584cc0a9e7420b2b9144635fee107494cb3fa487
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1598
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>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
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
new file mode 100644
index 0000000..e0a060e
--- /dev/null
+++ b/asterixdb/asterix-server/src/main/opt/aws/conf/aws_types.yml
@@ -0,0 +1,37 @@
+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 }
+
+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 }}"
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 802abcd..5287e34 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
@@ -25,8 +25,12 @@
inventory: "{{ temp_dir }}/inventory"
ccconf: "{{ temp_dir }}/cc.conf"
home_dir: "/home/{{ user }}"
+ vols: "{{ ephemeral_volumes[instance_type]|default([]) }}"
tasks:
- include_vars: ../conf/aws_settings.yml
+ - include_vars: ../conf/aws_types.yml
+ - debug:
+ msg: "{{ vols }}"
- name: Launch all instances
ec2:
key_name: "{{ keypair }}"
@@ -40,6 +44,7 @@
count: "{{ count }}"
instance_tags:
Name: "{{ tag }}"
+ volumes: "{{ vols }}"
register: ec2
- name: Create local temporary directory
@@ -97,6 +102,25 @@
- name: Populate NC iodevices to the cluster configuration file {{ ccconf }}
shell: printf "iodevices={{ home_dir }}/iodevice\n" >> "{{ ccconf }}"
+ when: vols|length == 0
+
+ - name: Generates multiple iodevice paths
+ shell: printf "devices:\n" >> "{{ temp_dir }}/devices"
+ when: vols|length > 0
+
+ - name: Populate multiple iodevices
+ shell: printf " - /data{{ vol.0 + 1 }}/iodevice\n" >> "{{ temp_dir }}/devices"
+ with_indexed_items: vols
+ loop_control:
+ loop_var: vol
+ when: vols|length > 0
+
+ - include_vars: "{{ temp_dir }}/devices"
+ when: vols|length > 0
+
+ - name: Populate multiple NC iodevices to the cluster configuration file {{ ccconf }}
+ shell: printf "iodevices={{ devices| join(',') }}\n" >> "{{ ccconf }}"
+ when: vols|length > 0
- name: Populate the NC command to the cluster configuration file {{ ccconf }}
shell: printf "command=asterixnc\n" >> "{{ ccconf }}"
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 7a5a840..cf09b69 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
@@ -24,6 +24,14 @@
- hosts: all
tasks:
+ - include_vars: ../conf/aws_settings.yml
+ - include_vars: ../conf/aws_types.yml
+
+ - name: Mount instance local stores
+ include: mount.yml
+
+- hosts: all
+ tasks:
- include: install_jdk.yml
- include_vars: ../conf/instance_settings.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
new file mode 100644
index 0000000..2e16476
--- /dev/null
+++ b/asterixdb/asterix-server/src/main/opt/aws/yaml/mount.yml
@@ -0,0 +1,28 @@
+# ------------------------------------------------------------
+# 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.
+# ------------------------------------------------------------
+
+- name: Set up all instance storage devices
+ shell: |
+ sudo umount "{{ vol.1.device_name }}"
+ 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([]) }}"
+ loop_control:
+ loop_var: vol