openstudio-aws 0.1.26 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +33 -34
- data/lib/openstudio/aws/aws.rb +148 -24
- data/lib/openstudio/aws/config.rb +1 -0
- data/lib/openstudio/aws/version.rb +1 -1
- data/lib/openstudio/lib/ami_list.rb +1 -1
- data/lib/openstudio/lib/openstudio_aws_instance.rb +260 -26
- data/lib/openstudio/lib/openstudio_aws_logger.rb +0 -18
- data/lib/openstudio/lib/openstudio_aws_wrapper.rb +111 -75
- data/lib/openstudio/lib/os-aws.rb +14 -6
- data/lib/openstudio/lib/server_script.sh +40 -26
- data/lib/openstudio/lib/worker_script.sh.template +26 -16
- data/lib/openstudio-aws.rb +2 -0
- data/spec/aws_instances/aws_spec_api.rb +80 -4
- data/spec/openstudio-aws/aws_instance_spec.rb +19 -0
- data/spec/openstudio-aws/aws_spec.rb +32 -11
- data/spec/openstudio-aws/aws_wrapper_spec.rb +5 -5
- data/spec/openstudio-aws/config_spec.rb +1 -1
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.1.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.10.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.11.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.12.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.13.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.3.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.4.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.5.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.6.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.7.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.8.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.9.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.0.xml +26 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.xml +35 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-ebs-storage.0.xml +14 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-ebs-storage.xml +14 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.0.xml +14 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.1.xml +21 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.3.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.4.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.5.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.6.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.xml +16 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.0.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.1.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.10.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.11.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.12.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.13.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.2.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.3.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.4.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.5.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.6.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.7.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.8.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.9.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.13.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.13.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-workers-before-server.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-workers-before-server.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.12.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.13.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.14.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.15.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.12.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.0.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.1.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.10.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.11.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.12.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.13.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.2.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.3.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.4.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.5.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.6.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.7.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.8.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.9.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.13.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.12.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.13.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.0.xml +21 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.1.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.10.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.11.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.3.xml +25 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.4.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.5.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.6.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.7.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.8.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.9.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance-processors.xml +25 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsInstance.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.1.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.1.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.10.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.11.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.12.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.13.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.3.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.4.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.5.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.6.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.7.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.8.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.9.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.1.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.10.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.11.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.12.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.13.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.3.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.4.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.5.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.7.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.8.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.9.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.13.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.0.xml +103 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.1.xml +103 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.10.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.11.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.12.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.2.xml +103 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.3.xml +103 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.4.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.5.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.6.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.7.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.8.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.9.xml +107 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.xml +103 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.0.xml +1111 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.1.xml +1111 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.10.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.11.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.12.xml +1133 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.2.xml +1111 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.3.xml +1111 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.4.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.5.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.6.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.7.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.8.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.9.xml +1113 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.xml +1111 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.12.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.13.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.1.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.10.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.11.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.12.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.13.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.8.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.9.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.1.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.10.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.11.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.12.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.13.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.2.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.3.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.4.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.5.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.6.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.7.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.8.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.9.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.xml +7 -0
- data/spec/resources/upload_me.sh +5 -0
- metadata +664 -7
- data/lib/openstudio/lib/openstudio_aws_methods.rb +0 -237
- data/spec/openstudio-aws/aws_methods_spec.rb +0 -24
|
@@ -48,17 +48,20 @@ class OpenStudioAwsWrapper
|
|
|
48
48
|
attr_reader :workers
|
|
49
49
|
attr_reader :proxy
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
]
|
|
51
|
+
attr_accessor :private_key_file_name
|
|
52
|
+
|
|
53
|
+
VALID_OPTIONS = [:proxy, :credentials]
|
|
55
54
|
|
|
56
55
|
def initialize(options = {}, group_uuid = nil)
|
|
57
|
-
@group_uuid = group_uuid ||
|
|
56
|
+
@group_uuid = group_uuid || (SecureRandom.uuid).gsub('-', '')
|
|
58
57
|
|
|
59
58
|
@security_group_name = nil
|
|
60
59
|
@key_pair_name = nil
|
|
61
|
-
@
|
|
60
|
+
@private_key_file_name = nil
|
|
61
|
+
|
|
62
|
+
@private_key = nil # Private key data
|
|
63
|
+
|
|
64
|
+
# List of instances
|
|
62
65
|
@server = nil
|
|
63
66
|
@workers = []
|
|
64
67
|
|
|
@@ -66,7 +69,7 @@ class OpenStudioAwsWrapper
|
|
|
66
69
|
@proxy = options[:proxy] ? options[:proxy] : nil
|
|
67
70
|
|
|
68
71
|
# need to remove the prxoy information here
|
|
69
|
-
@aws = Aws::EC2.new(options[:credentials])
|
|
72
|
+
@aws = Aws::EC2::Client.new(options[:credentials])
|
|
70
73
|
end
|
|
71
74
|
|
|
72
75
|
def create_or_retrieve_security_group(sg_name = nil)
|
|
@@ -77,21 +80,17 @@ class OpenStudioAwsWrapper
|
|
|
77
80
|
logger.info 'server group not found --- will create a new one'
|
|
78
81
|
@aws.create_security_group(group_name: tmp_name, description: "group dynamically created by #{__FILE__}")
|
|
79
82
|
@aws.authorize_security_group_ingress(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
]
|
|
85
|
-
|
|
83
|
+
group_name: tmp_name,
|
|
84
|
+
ip_permissions: [
|
|
85
|
+
{ ip_protocol: 'tcp', from_port: 1, to_port: 65_535, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
|
|
86
|
+
]
|
|
86
87
|
)
|
|
87
88
|
@aws.authorize_security_group_ingress(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
]
|
|
94
|
-
|
|
89
|
+
group_name: tmp_name,
|
|
90
|
+
ip_permissions: [
|
|
91
|
+
{ ip_protocol: 'icmp', from_port: -1, to_port: -1, ip_ranges: [cidr_ip: '0.0.0.0/0']
|
|
92
|
+
}
|
|
93
|
+
]
|
|
95
94
|
)
|
|
96
95
|
|
|
97
96
|
# reload group information
|
|
@@ -131,34 +130,40 @@ class OpenStudioAwsWrapper
|
|
|
131
130
|
resp = nil
|
|
132
131
|
if group_uuid
|
|
133
132
|
resp = @aws.describe_instances(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
# {:name => "tag-value", :values => [group_uuid.to_s, "OpenStudio#{@openstudio_instance_type.capitalize}"]}
|
|
140
|
-
# {:name => "tag:key=value", :values => ["GroupUUID=#{group_uuid.to_s}"]}
|
|
141
|
-
]
|
|
142
|
-
|
|
133
|
+
filters: [
|
|
134
|
+
{ name: 'instance-state-code', values: [0.to_s, 16.to_s] }, # running or pending
|
|
135
|
+
{ name: 'tag-key', values: ['GroupUUID'] },
|
|
136
|
+
{ name: 'tag-value', values: [group_uuid.to_s] }
|
|
137
|
+
]
|
|
143
138
|
)
|
|
144
139
|
else
|
|
145
|
-
# todo: need to restrict this to only the current user
|
|
146
140
|
resp = @aws.describe_instances
|
|
147
141
|
end
|
|
148
142
|
|
|
149
143
|
instance_data = nil
|
|
150
144
|
if resp
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
145
|
+
instance_data = []
|
|
146
|
+
resp.reservations.each do |r|
|
|
147
|
+
r.instances.each do |i|
|
|
148
|
+
i_h = i.to_hash
|
|
149
|
+
if group_uuid && openstudio_instance_type
|
|
150
|
+
# {:key=>"Purpose", :value=>"OpenStudioWorker"}
|
|
151
|
+
if i_h[:tags].any? { |h| (h[:key] == 'Purpose') && (h[:value] == "OpenStudio#{openstudio_instance_type.capitalize}") } &&
|
|
152
|
+
i_h[:tags].any? { |h|(h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
|
|
153
|
+
instance_data << i_h
|
|
154
|
+
end
|
|
155
|
+
elsif group_uuid
|
|
156
|
+
if i_h[:tags].any? { |h|(h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
|
|
157
|
+
instance_data << i_h
|
|
158
|
+
end
|
|
159
|
+
elsif openstudio_instance_type
|
|
160
|
+
if i_h[:tags].any? { |h| (h[:key] == 'Purpose') && (h[:value] == "OpenStudio#{openstudio_instance_type.capitalize}") }
|
|
161
|
+
instance_data << i_h
|
|
162
|
+
end
|
|
163
|
+
else
|
|
164
|
+
instance_data << i_h
|
|
157
165
|
end
|
|
158
|
-
|
|
159
166
|
end
|
|
160
|
-
else
|
|
161
|
-
logger.info 'no running instances found'
|
|
162
167
|
end
|
|
163
168
|
end
|
|
164
169
|
|
|
@@ -201,7 +206,29 @@ class OpenStudioAwsWrapper
|
|
|
201
206
|
resp
|
|
202
207
|
end
|
|
203
208
|
|
|
204
|
-
def
|
|
209
|
+
def stop_instances(ids)
|
|
210
|
+
resp = @aws.stop_instances(
|
|
211
|
+
instance_ids: ids,
|
|
212
|
+
force: true
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
resp
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def terminate_instances(ids)
|
|
219
|
+
begin
|
|
220
|
+
resp = @aws.terminate_instances(
|
|
221
|
+
instance_ids: ids,
|
|
222
|
+
)
|
|
223
|
+
rescue Aws::EC2::Errors::InvalidInstanceIDNotFound
|
|
224
|
+
# Log that the instances couldn't be found?
|
|
225
|
+
return resp = {error: 'instances could not be found'}
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
resp
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def create_or_retrieve_key_pair(key_pair_name = nil)
|
|
205
232
|
tmp_name = key_pair_name || "os-key-pair-#{@group_uuid}"
|
|
206
233
|
|
|
207
234
|
# the describe_key_pairs method will raise an expection if it can't find the keypair, so catch it
|
|
@@ -226,23 +253,25 @@ class OpenStudioAwsWrapper
|
|
|
226
253
|
logger.info "found existing keypair #{resp.key_pairs.first}"
|
|
227
254
|
@key_pair_name = resp.key_pairs.first[:key_name]
|
|
228
255
|
|
|
229
|
-
|
|
230
|
-
@private_key = File.read(private_key_file, 'r')
|
|
231
|
-
else
|
|
232
|
-
# should we raise?
|
|
233
|
-
logger.error "Could not find the private key file to load from #{private_key_file}"
|
|
234
|
-
end
|
|
256
|
+
# This will not set the private key because it doesn't live on the remote system
|
|
235
257
|
end
|
|
236
258
|
|
|
237
259
|
logger.info("create key pair: #{@key_pair_name}")
|
|
238
260
|
end
|
|
239
261
|
|
|
262
|
+
def load_private_key(filename)
|
|
263
|
+
fail "Could not find private key #{filename}" unless File.exist? filename
|
|
264
|
+
@private_key_file_name = File.expand_path filename
|
|
265
|
+
@private_key = File.read(filename)
|
|
266
|
+
end
|
|
267
|
+
|
|
240
268
|
def save_private_key(filename)
|
|
241
269
|
if @private_key
|
|
270
|
+
@private_key_file_name = File.expand_path filename
|
|
242
271
|
File.open(filename, 'w') { |f| f << @private_key }
|
|
243
272
|
File.chmod(0600, filename)
|
|
244
273
|
else
|
|
245
|
-
|
|
274
|
+
fail "No private key found in which to persist with filename #{filename}"
|
|
246
275
|
end
|
|
247
276
|
end
|
|
248
277
|
|
|
@@ -251,11 +280,13 @@ class OpenStudioAwsWrapper
|
|
|
251
280
|
options = defaults.merge(options)
|
|
252
281
|
|
|
253
282
|
user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/server_script.sh')
|
|
254
|
-
@server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key, @proxy)
|
|
283
|
+
@server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key, @private_key_file_name, @proxy)
|
|
284
|
+
|
|
285
|
+
# create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
|
|
255
286
|
|
|
256
287
|
fail 'image_id is nil' unless image_id
|
|
257
288
|
fail 'instance type is nil' unless instance_type
|
|
258
|
-
@server.launch_instance(image_id, instance_type, user_data, options[:user_id])
|
|
289
|
+
@server.launch_instance(image_id, instance_type, user_data, options[:user_id], options[:ebs_volume_size])
|
|
259
290
|
end
|
|
260
291
|
|
|
261
292
|
def launch_workers(image_id, instance_type, num, options = {})
|
|
@@ -271,13 +302,14 @@ class OpenStudioAwsWrapper
|
|
|
271
302
|
# thread the launching of the workers
|
|
272
303
|
|
|
273
304
|
num.times do
|
|
274
|
-
@workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_group_name, @group_uuid, @private_key, @proxy)
|
|
305
|
+
@workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_group_name, @group_uuid, @private_key, @private_key_file_name, @proxy)
|
|
275
306
|
end
|
|
276
307
|
|
|
277
308
|
threads = []
|
|
278
309
|
@workers.each do |worker|
|
|
279
310
|
threads << Thread.new do
|
|
280
|
-
|
|
311
|
+
# create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
|
|
312
|
+
worker.launch_instance(image_id, instance_type, user_data, options[:user_id], options[:ebs_volume_size])
|
|
281
313
|
end
|
|
282
314
|
end
|
|
283
315
|
threads.each { |t| t.join }
|
|
@@ -289,45 +321,45 @@ class OpenStudioAwsWrapper
|
|
|
289
321
|
# blocking method that waits for servers and workers to be fully configured (i.e. execution of user_data has
|
|
290
322
|
# occured on all nodes)
|
|
291
323
|
def configure_server_and_workers
|
|
292
|
-
# todo: add a timeout here!
|
|
293
324
|
logger.info('waiting for server user_data to complete')
|
|
294
|
-
@server.wait_command(
|
|
295
|
-
|
|
296
|
-
@workers.each { |worker| worker.wait_command(
|
|
325
|
+
@server.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"')
|
|
326
|
+
logger.info('waiting for worker user_data to complete')
|
|
327
|
+
@workers.each { |worker| worker.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"') }
|
|
297
328
|
|
|
298
329
|
ips = "master|#{@server.data.ip}|#{@server.data.dns}|#{@server.data.procs}|ubuntu|ubuntu|true\n"
|
|
299
330
|
@workers.each { |worker| ips << "worker|#{worker.data.ip}|#{worker.data.dns}|#{worker.data.procs}|ubuntu|ubuntu|true\n" }
|
|
300
331
|
file = Tempfile.new('ip_addresses')
|
|
301
332
|
file.write(ips)
|
|
302
333
|
file.close
|
|
303
|
-
@server.upload_file(
|
|
334
|
+
@server.upload_file(file.path, 'ip_addresses')
|
|
304
335
|
file.unlink
|
|
305
336
|
logger.info("ips #{ips}")
|
|
306
|
-
@server.shell_command(
|
|
307
|
-
@server.shell_command(
|
|
308
|
-
@server.shell_command(
|
|
337
|
+
@server.shell_command('chmod 664 /home/ubuntu/ip_addresses')
|
|
338
|
+
@server.shell_command('~/setup-ssh-keys.sh')
|
|
339
|
+
@server.shell_command('~/setup-ssh-worker-nodes.sh ip_addresses')
|
|
309
340
|
|
|
310
341
|
mongoid = File.read(File.expand_path(File.dirname(__FILE__)) + '/mongoid.yml.template')
|
|
311
342
|
mongoid.gsub!(/SERVER_IP/, @server.data.ip)
|
|
312
343
|
file = Tempfile.new('mongoid.yml')
|
|
313
344
|
file.write(mongoid)
|
|
314
345
|
file.close
|
|
315
|
-
@server.upload_file(
|
|
316
|
-
@workers.each { |worker| worker.upload_file(
|
|
346
|
+
@server.upload_file(file.path, '/mnt/openstudio/rails-models/mongoid.yml')
|
|
347
|
+
@workers.each { |worker| worker.upload_file(file.path, '/mnt/openstudio/rails-models/mongoid.yml') }
|
|
317
348
|
file.unlink
|
|
318
349
|
|
|
319
|
-
|
|
320
|
-
@
|
|
321
|
-
@workers.each { |worker| worker.shell_command(worker.data.ip, 'chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
|
|
350
|
+
@server.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml')
|
|
351
|
+
@workers.each { |worker| worker.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
|
|
322
352
|
|
|
353
|
+
sleep 60 # wait 60 more seconds for everything -- this is cheesy
|
|
323
354
|
true
|
|
324
355
|
end
|
|
325
356
|
|
|
326
357
|
# method to query the amazon api to find the server (if it exists), based on the group id
|
|
327
358
|
# if it is found, then it will set the @server member variable.
|
|
328
359
|
# Note that the information around keys and security groups is pulled from the instance information.
|
|
329
|
-
def find_server(
|
|
330
|
-
group_uuid =
|
|
360
|
+
def find_server(server_data_hash)
|
|
361
|
+
group_uuid = server_data_hash[:group_id] || @group_uuid
|
|
362
|
+
load_private_key(server_data_hash[:server][:private_key_file_name])
|
|
331
363
|
|
|
332
364
|
logger.info "finding the server for groupid of #{group_uuid}"
|
|
333
365
|
fail 'no group uuid defined either in member variable or method argument' if group_uuid.nil?
|
|
@@ -338,7 +370,7 @@ class OpenStudioAwsWrapper
|
|
|
338
370
|
resp = resp.first
|
|
339
371
|
if !@server
|
|
340
372
|
logger.info "Server found and loading data into object [instance id is #{resp[:instance_id]}]"
|
|
341
|
-
@server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key)
|
|
373
|
+
@server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name)
|
|
342
374
|
@server.load_instance_data(resp)
|
|
343
375
|
else
|
|
344
376
|
logger.info "Server instance is already defined with instance #{resp[:instance_id]}"
|
|
@@ -346,6 +378,9 @@ class OpenStudioAwsWrapper
|
|
|
346
378
|
else
|
|
347
379
|
fail 'could not find a running server instance'
|
|
348
380
|
end
|
|
381
|
+
|
|
382
|
+
# Really don't need to return anything because this sets the class instance variable
|
|
383
|
+
@server
|
|
349
384
|
end
|
|
350
385
|
|
|
351
386
|
# method to hit the existing list of available amis and compare to the list of AMIs on Amazon and then generate the
|
|
@@ -393,14 +428,15 @@ class OpenStudioAwsWrapper
|
|
|
393
428
|
|
|
394
429
|
def to_os_worker_hash
|
|
395
430
|
worker_hash = []
|
|
396
|
-
@workers.each
|
|
431
|
+
@workers.each do |worker|
|
|
397
432
|
worker_hash.push(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
433
|
+
id: worker.data.id,
|
|
434
|
+
ip: "http://#{worker.data.ip}",
|
|
435
|
+
dns: worker.data.dns,
|
|
436
|
+
procs: worker.data.procs,
|
|
437
|
+
private_key_file_name: worker.private_key_file_name
|
|
438
|
+
)
|
|
439
|
+
end
|
|
404
440
|
|
|
405
441
|
out = { workers: worker_hash }
|
|
406
442
|
logger.info out
|
|
@@ -515,7 +551,7 @@ class OpenStudioAwsWrapper
|
|
|
515
551
|
end
|
|
516
552
|
|
|
517
553
|
# sort the openstudio server version
|
|
518
|
-
amis[:openstudio_server] = Hash[amis[:openstudio_server].sort_by { |
|
|
554
|
+
amis[:openstudio_server] = Hash[amis[:openstudio_server].sort_by { |_k, v| v[:openstudio_server_version].to_version }.reverse]
|
|
519
555
|
|
|
520
556
|
# now sort the openstudio section & determine the defaults
|
|
521
557
|
amis[:openstudio].keys.each do |key|
|
|
@@ -84,7 +84,7 @@ end
|
|
|
84
84
|
Aws.config = { access_key_id: ARGV[0], secret_access_key: ARGV[1], region: ARGV[2], ssl_verify_peer: false }
|
|
85
85
|
|
|
86
86
|
if ARGV[3] == 'EC2'
|
|
87
|
-
@aws = Aws::EC2.new
|
|
87
|
+
@aws = Aws::EC2::Client.new
|
|
88
88
|
elsif ARGV[3] == 'CloudWatch'
|
|
89
89
|
@aws = AWS::CloudWatch.new
|
|
90
90
|
else
|
|
@@ -166,7 +166,7 @@ begin
|
|
|
166
166
|
@server_instance_type = @params['instance_type']
|
|
167
167
|
begin
|
|
168
168
|
os_aws.launch_server(@server_image_id, @server_instance_type)
|
|
169
|
-
rescue
|
|
169
|
+
rescue => e
|
|
170
170
|
error(-1, "Server status: #{e.message}")
|
|
171
171
|
end
|
|
172
172
|
|
|
@@ -180,6 +180,7 @@ begin
|
|
|
180
180
|
|
|
181
181
|
# find the private key in the users home directory, or crash
|
|
182
182
|
if File.exist?(SERVER_PEM_FILENAME)
|
|
183
|
+
# TODO: this will no longer work. need to refactor this file to be more like the OpenSTudio analysis spreadsheet
|
|
183
184
|
os_aws.create_or_retrieve_key_pair(nil, SERVER_PEM_FILENAME)
|
|
184
185
|
else
|
|
185
186
|
fail "Could not find previous private key which should be here: #{SERVER_PEM_FILENAME}"
|
|
@@ -196,7 +197,7 @@ begin
|
|
|
196
197
|
begin
|
|
197
198
|
# this will launch and configure with threads inside os_aws
|
|
198
199
|
os_aws.launch_workers(@worker_image_id, @worker_instance_type, @params['num'])
|
|
199
|
-
rescue
|
|
200
|
+
rescue => e
|
|
200
201
|
error(-1, "Server status: #{e.message}")
|
|
201
202
|
end
|
|
202
203
|
|
|
@@ -263,7 +264,14 @@ begin
|
|
|
263
264
|
when 'estimated_charges'
|
|
264
265
|
endTime = Time.now.utc
|
|
265
266
|
startTime = endTime - 86_400
|
|
266
|
-
resp = @aws.client.get_metric_statistics(dimensions: [{ name: 'ServiceName', value: 'AmazonEC2' },
|
|
267
|
+
resp = @aws.client.get_metric_statistics(dimensions: [{ name: 'ServiceName', value: 'AmazonEC2' },
|
|
268
|
+
{ name: 'Currency', value: 'USD' }],
|
|
269
|
+
metric_name: 'EstimatedCharges',
|
|
270
|
+
namespace: 'AWS/Billing',
|
|
271
|
+
start_time: startTime.iso8601,
|
|
272
|
+
end_time: endTime.iso8601,
|
|
273
|
+
period: 300,
|
|
274
|
+
statistics: ['Maximum'])
|
|
267
275
|
error(-1, 'No Billing Data') if resp.data[:datapoints].length == 0
|
|
268
276
|
datapoints = resp.data[:datapoints]
|
|
269
277
|
datapoints.sort! { |a, b| a[:timestamp] <=> b[:timestamp] }
|
|
@@ -273,9 +281,9 @@ begin
|
|
|
273
281
|
else
|
|
274
282
|
error(-1, "Unknown command: #{ARGV[4]} (#{ARGV[3]})")
|
|
275
283
|
end
|
|
276
|
-
|
|
284
|
+
# puts \"Status: #{resp.http_response.status}\"
|
|
277
285
|
rescue SystemExit => e
|
|
278
|
-
rescue
|
|
286
|
+
rescue => e
|
|
279
287
|
if e.message == 'getaddrinfo: No such host is known. '
|
|
280
288
|
error(503, 'Offline')
|
|
281
289
|
elsif defined? e.http_response
|
|
@@ -11,9 +11,12 @@ FILE=/etc/hosts
|
|
|
11
11
|
if grep -q "$ENTRY" $FILE; then
|
|
12
12
|
echo "entry already exists"
|
|
13
13
|
else
|
|
14
|
-
|
|
14
|
+
sh -c "echo $ENTRY >> /etc/hosts"
|
|
15
15
|
fi
|
|
16
16
|
|
|
17
|
+
rm -rf /mnt
|
|
18
|
+
mkdir /mnt
|
|
19
|
+
|
|
17
20
|
# copy all the setup scripts to the appropriate home directory
|
|
18
21
|
# the scripts are called by the AWS connector for passwordless ssh config
|
|
19
22
|
cp /data/launch-instance/setup* /home/ubuntu/
|
|
@@ -21,55 +24,66 @@ chmod 775 /home/ubuntu/setup*
|
|
|
21
24
|
chown ubuntu:ubuntu /home/ubuntu/setup*
|
|
22
25
|
|
|
23
26
|
# stop the various services that use mongo
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
service delayed_job stop
|
|
28
|
+
service apache2 stop
|
|
29
|
+
service mongodb stop
|
|
27
30
|
|
|
28
31
|
# remove mongo db & add it back
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
mkdir -p /mnt/mongodb/data
|
|
33
|
+
chown mongodb:nogroup /mnt/mongodb/data
|
|
34
|
+
rm -rf /var/lib/mongodb
|
|
32
35
|
|
|
33
36
|
# restart mongo
|
|
34
|
-
|
|
37
|
+
service mongodb start
|
|
35
38
|
# delay the continuation because mongo is a forked process and when it initializes
|
|
36
39
|
# it has to create the preallocated journal files (takes ~ 90 seconds on a slower system)
|
|
37
40
|
sleep 2m
|
|
38
41
|
|
|
39
42
|
# restart the rails application
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
service apache2 stop
|
|
44
|
+
service apache2 start
|
|
42
45
|
|
|
43
46
|
# Add in the database indexes after making the db directory
|
|
44
|
-
|
|
45
|
-
cd /var/www/rails/openstudio
|
|
46
|
-
rake db:
|
|
47
|
-
|
|
47
|
+
chmod 777 /var/www/rails/openstudio/public
|
|
48
|
+
su - ubuntu -c 'cd /var/www/rails/openstudio && bundle exec rake db:purge'
|
|
49
|
+
su - ubuntu -c 'cd /var/www/rails/openstudio && bundle exec rake db:mongoid:create_indexes'
|
|
50
|
+
|
|
51
|
+
## Worker Data Configuration -- On Vagrant this is a separate file
|
|
48
52
|
|
|
49
|
-
## Worker Data Configuration
|
|
50
53
|
# Force the generation of various directories that are in the EBS mnt
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
rm -rf /mnt/openstudio
|
|
55
|
+
mkdir -p /mnt/openstudio
|
|
56
|
+
chown -R ubuntu:www-data /mnt/openstudio
|
|
57
|
+
chmod -R 775 /mnt/openstudio
|
|
55
58
|
|
|
56
59
|
# save application files into the right directory
|
|
57
60
|
cp -rf /data/worker-nodes/* /mnt/openstudio/
|
|
58
61
|
|
|
62
|
+
# install workflow dependencies
|
|
63
|
+
su - ubuntu -c 'cd /mnt/openstudio && rm -f'
|
|
64
|
+
rm -f /mnt/openstudio/Gemfile.lock
|
|
65
|
+
cd /mnt/openstudio && bundle update
|
|
66
|
+
su - ubuntu -c 'cd /mnt/openstudio && bundle update'
|
|
67
|
+
|
|
59
68
|
# copy over the models needed for mongo
|
|
60
|
-
cd /mnt/openstudio/rails-models && unzip -o rails-models.zip
|
|
69
|
+
cd /mnt/openstudio/rails-models && unzip -o rails-models.zip -d models
|
|
61
70
|
|
|
62
71
|
# rerun the permissions after unzipping the files
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
chown -R ubuntu:www-data /mnt/openstudio
|
|
73
|
+
find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
|
|
74
|
+
find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
|
|
75
|
+
|
|
76
|
+
## End Worker Data Configuration
|
|
67
77
|
|
|
68
78
|
# restart rserve
|
|
69
|
-
|
|
79
|
+
service Rserve restart
|
|
70
80
|
|
|
71
81
|
# restart delayed jobs
|
|
72
|
-
|
|
82
|
+
service delayed_job start
|
|
83
|
+
|
|
84
|
+
# Delay 1 minutes to make sure everything had tme to start.
|
|
85
|
+
# This is a hack, sorry.
|
|
86
|
+
sleep 1m
|
|
73
87
|
|
|
74
88
|
#file flag the user_data has completed
|
|
75
89
|
cat /dev/null > /home/ubuntu/user_data_done
|
|
@@ -10,7 +10,7 @@ FILE=/etc/hosts
|
|
|
10
10
|
if grep -q "$ENTRY" $FILE; then
|
|
11
11
|
echo "entry already exists"
|
|
12
12
|
else
|
|
13
|
-
|
|
13
|
+
sh -c "echo $ENTRY >> /etc/hosts"
|
|
14
14
|
fi
|
|
15
15
|
|
|
16
16
|
# copy all the setup scripts to the appropriate home directory
|
|
@@ -18,31 +18,41 @@ cp /data/launch-instance/setup* /home/ubuntu/
|
|
|
18
18
|
chmod 775 /home/ubuntu/setup*
|
|
19
19
|
chown ubuntu:ubuntu /home/ubuntu/setup*
|
|
20
20
|
|
|
21
|
-
## Worker Data Configuration
|
|
21
|
+
## Worker Data Configuration -- On Vagrant this is a separate file
|
|
22
|
+
|
|
22
23
|
# Force the generation of various directories that are in the EBS mnt
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
rm -rf /mnt/openstudio
|
|
25
|
+
mkdir -p /mnt/openstudio
|
|
26
|
+
chown -R ubuntu:www-data /mnt/openstudio
|
|
27
|
+
chmod -R 775 /mnt/openstudio
|
|
27
28
|
|
|
28
29
|
# save application files into the right directory
|
|
29
30
|
cp -rf /data/worker-nodes/* /mnt/openstudio/
|
|
30
31
|
|
|
32
|
+
# install workflow dependencies
|
|
33
|
+
su - ubuntu -c 'cd /mnt/openstudio && rm -f'
|
|
34
|
+
rm -f /mnt/openstudio/Gemfile.lock
|
|
35
|
+
cd /mnt/openstudio && bundle update
|
|
36
|
+
su - ubuntu -c 'cd /mnt/openstudio && bundle update'
|
|
37
|
+
|
|
31
38
|
# copy over the models needed for mongo
|
|
32
|
-
cd /mnt/openstudio/rails-models && unzip -o rails-models.zip
|
|
39
|
+
cd /mnt/openstudio/rails-models && unzip -o rails-models.zip -d models
|
|
33
40
|
|
|
34
41
|
# rerun the permissions after unzipping the files
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
chown -R ubuntu:www-data /mnt/openstudio
|
|
43
|
+
find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
|
|
44
|
+
find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
|
|
45
|
+
|
|
46
|
+
## End Worker Data Configuration
|
|
39
47
|
|
|
40
48
|
#turn off hyperthreading
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
# NL: do not turn off hyperthreading, rather, just limit the number of cores and see if it
|
|
50
|
+
# makes a difference.
|
|
51
|
+
#for cpunum in $(
|
|
52
|
+
# cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
|
|
53
|
+
# cut -s -d, -f2- | tr ',' '\n' | sort -un); do
|
|
54
|
+
# echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
|
|
55
|
+
#done
|
|
46
56
|
|
|
47
57
|
#file flag the user_data has completed
|
|
48
58
|
cat /dev/null > /home/ubuntu/user_data_done
|
data/lib/openstudio-aws.rb
CHANGED
|
@@ -3,6 +3,7 @@ require 'net/scp'
|
|
|
3
3
|
require 'net/http'
|
|
4
4
|
require 'yaml'
|
|
5
5
|
require 'logger'
|
|
6
|
+
require 'securerandom'
|
|
6
7
|
require 'semantic'
|
|
7
8
|
require 'semantic/core_ext'
|
|
8
9
|
|
|
@@ -15,6 +16,7 @@ rescue LoadError
|
|
|
15
16
|
exit
|
|
16
17
|
end
|
|
17
18
|
|
|
19
|
+
require 'openstudio/lib/openstudio_aws_logger'
|
|
18
20
|
require 'openstudio/aws/aws'
|
|
19
21
|
require 'openstudio/aws/config'
|
|
20
22
|
require 'openstudio/aws/version'
|