diff --git a/Makefile b/Makefile index 2e41c73..1a2a34d 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ clean: @rm -f ./bin/$(BINARY_NAME) build: + @echo Compiling resources/.. for version $(VERSION) + @go-bindata resources/... @echo Building $(BINARY_NAME) version $(VERSION) @go build -a -tags netgo -ldflags '-w' -o ./bin/$(BINARY_NAME)-$(VERSION) @cp ./bin/$(BINARY_NAME)-$(VERSION) ./bin/$(BINARY_NAME) diff --git a/bin/go-deploy b/bin/go-deploy index 99fd021..57bdc6f 100755 Binary files a/bin/go-deploy and b/bin/go-deploy differ diff --git a/bin/go-deploy-0.0.2 b/bin/go-deploy-0.0.2 new file mode 100755 index 0000000..57bdc6f Binary files /dev/null and b/bin/go-deploy-0.0.2 differ diff --git a/bindata.go b/bindata.go index 28c1444..6a9b120 100644 --- a/bindata.go +++ b/bindata.go @@ -69,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _resourcesCloudformationTemplatesWebserver_v1Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x4d\x6f\xe3\x36\x10\x3d\xcb\xbf\x62\xa0\xd3\x2e\x60\xec\x02\xe9\x4d\x37\xdb\xeb\xb4\x46\xdc\x5d\x23\x4a\x13\xa0\x45\x0e\x23\x69\xec\x10\xa6\x49\x81\xa4\xec\xba\x81\xfe\x7b\x21\x4a\x94\x29\xc7\x8a\x62\xec\xea\x48\x71\xe6\xbd\xf9\x7c\x7c\x1d\x05\xe1\x0a\x15\xee\xc8\x90\xd2\x21\x44\xf0\x3a\x1a\x05\x41\x88\x79\xfe\x1d\x77\x54\x1f\x04\x41\x10\x7e\x23\x9d\x2a\x96\x1b\x26\x45\x75\x18\x56\x7f\x41\xae\x61\x92\xe7\x9c\xa5\x58\x9d\x7f\x09\xc7\xf6\xea\xc3\x31\xb7\x86\x61\x6c\x14\x13\x9b\x70\x14\x04\xe5\xd8\x79\x9d\x16\xe9\x96\x4c\xbf\xdf\xfa\x3f\x88\xca\xfd\xe1\x85\x14\x55\x08\x30\x2d\x44\xc6\x09\x98\x06\x2e\x53\x34\x94\x7d\x08\xeb\x8e\x8e\xfd\x40\xb7\x92\x67\xa4\xbe\xde\x32\x4e\xe2\x14\x4b\x83\x34\xec\x9e\xc4\xfe\x63\x09\x32\x2f\x04\x73\xb1\x67\x4a\x8a\x1d\x09\x33\xe8\xd8\x30\x52\xfd\x5e\x3d\x4f\xf0\xc0\x48\xc1\xa7\x03\x25\x9a\xd4\x9e\x14\x48\x05\x07\xa9\xb6\xa4\x3e\xf7\x80\x8c\x1b\x97\x6b\x2c\xb8\x2d\x41\xf8\xe4\x8c\x3d\x02\xfb\x3c\x1d\x8e\x8a\xfe\x65\xda\x30\xb1\x81\xc7\xd5\x0c\x16\xdf\x86\xf3\x95\x2b\xb6\x47\x43\x71\x91\x08\x32\xba\x1f\xa0\xbe\x00\x8b\xec\x93\xfe\x0c\x6b\xa9\x00\x4f\x0d\x06\xa8\x35\xdb\xd8\xe0\x3f\x00\x58\x24\x9c\xa5\xd7\xe3\xcd\x97\xd3\xab\x70\xb4\xe4\x45\xe5\x2d\x36\x98\x6e\xdf\xc1\x69\xae\x81\xbd\x07\x85\xa6\xcc\xc2\x25\x05\xe3\x1f\xe8\x66\xe2\xc9\x4c\x49\xfd\x4e\x20\x4f\x8c\x73\x4b\x3e\xad\xee\x01\xee\x91\x71\x4c\x18\x67\xe6\x08\xff\x49\x41\xfa\x0b\x3c\xa8\x82\xbe\xde\x22\xd7\x04\x53\x29\x39\x61\xef\xc8\xbe\xed\x14\xa3\x0a\x6a\x8e\x27\x9c\xcb\x03\x65\x8f\xc8\x0b\xb2\x84\xfe\x71\xbf\x21\x5c\x57\xde\x43\x78\x3e\x31\xdf\xd2\xf1\x34\x28\x60\xbf\xde\xae\x42\x71\x6a\xac\xf9\xec\x06\xee\xe8\xb8\x42\xa6\xc0\x48\x20\x81\x09\x27\x88\xe3\x3f\x00\xd3\x94\xb4\xae\x0e\xed\x6c\x71\xd4\x86\xa5\x30\x25\x14\xda\x20\xdf\xc2\x8b\xd4\x46\x87\x63\x07\x66\x63\xf3\x72\x5a\x1d\xba\xda\x91\xda\xb3\x94\xee\x25\x7f\x67\x90\x17\x93\x3f\x41\x49\x4e\x75\xcd\x92\xe3\x05\x44\x23\x61\x87\x02\x37\x04\x8d\x47\x3d\x5c\x51\x56\xd9\x8a\x5f\x0a\xee\x5c\xbe\x8b\x3e\xaa\x09\x84\xf7\xa4\x65\xa1\x52\xf2\x96\xbe\xb7\xcb\xdb\x72\x75\xdc\x4c\x9e\xe2\x28\x6a\x18\xb4\x04\xa2\xc8\xb7\x1b\x3b\xa3\x95\x92\x39\x29\xc3\x1c\x40\x5d\x8d\xa0\x0b\xd3\x76\x06\x84\xf7\xb4\xb6\x18\xad\xf2\x94\x8d\xa7\xf2\x94\x33\xcf\xf2\x91\x94\xf6\x78\x5e\x49\xd3\x59\x8f\x47\xfd\x64\x87\xa9\x76\xf2\x55\x8e\x5b\xab\xd8\x26\xb6\x56\x92\xb3\xe0\x83\x30\xfe\xcd\x93\xc0\x4e\xd8\xee\xbc\x1c\x77\xef\x3b\x19\xeb\x5c\xb6\x87\xa5\x83\x2c\x47\xe7\xa9\xf2\x25\xe7\x9a\x5a\x76\xa5\xea\x27\x6b\x79\x29\x41\xb5\x9d\x07\xe3\xec\x7c\xc3\x56\x5d\x3b\x46\xb1\xbf\x6a\x2f\xc0\x9d\xad\xe2\xd2\x0e\x41\x65\xd8\x94\x7b\x89\x09\xf1\x7e\x8a\x6d\x4b\x9d\x0c\x7f\xd8\x49\x8c\xc9\x54\x2b\xa9\xde\x75\xcd\xaf\xe0\xd5\x6e\x2d\x9d\x63\x5a\xe7\x13\x0f\x3a\xa2\xf4\x26\xaa\xe4\x73\x0c\x8d\xa5\x23\x19\x3e\xae\x66\x8b\xac\x3a\xb7\x5b\xf3\x8c\x83\x55\xdc\xb2\x45\xbd\xe8\x1a\x0b\x23\x75\x8a\x9c\x89\x4d\x84\x7a\x73\x01\x62\xe2\x6f\xfc\xbf\xab\x8d\xdf\xc1\x0b\x27\xe2\x08\x37\x5e\x46\x9b\xb4\x5e\x17\x87\xd3\xd3\x9e\x48\xce\x55\xbe\xfc\x39\xb4\xf9\x72\x3a\x04\xd8\x55\xf9\x81\x24\x12\x4f\x22\x2e\x31\x4b\x90\x57\x7b\x52\x5d\x80\xb4\x2a\x5b\x65\xaf\x0f\xf1\xa4\xc4\x83\x60\x76\xb6\x92\x76\xb6\xc8\x1f\xad\xb7\x99\xf5\xb4\xa8\x07\xba\x23\x57\x57\xf4\x0b\xc7\x42\xa4\x2f\xa9\x14\x6b\xb6\x29\x54\xb3\xa7\xdf\x26\x7b\x76\x73\xd7\x68\x75\x0f\x7e\x2b\xe5\xbf\x1c\x7b\x81\xbb\x45\x23\x5e\x2b\x25\xd7\xac\x3f\x07\x5d\xd9\x2c\xcb\x86\xc7\xb3\x2f\x16\x4e\xe2\x7e\x14\x26\x2f\x4e\x8f\xbf\xf0\xaf\xfb\x65\xbf\xd2\x7e\xfb\x1e\x83\x7d\x87\xd8\x47\xa0\xf7\xcc\x5e\x4a\xcc\x60\xda\x74\x8c\x53\x56\x9f\xda\xad\x88\xa2\xdf\xc9\x4c\x8c\x69\x1e\x43\xf3\x6e\xa1\xe7\x22\xcb\x25\x13\xc6\xc2\x3f\x3b\x86\xa3\x72\xf4\x7f\x00\x00\x00\xff\xff\xf7\xb4\x6d\x61\x7d\x0d\x00\x00") +var _resourcesCloudformationTemplatesWebserver_v1Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\xdf\x73\xdb\x2a\x1a\x7d\x76\xfe\x0a\x46\x4f\xf7\xce\xa4\x6d\x9a\xde\x76\x77\xfc\xe6\x24\xee\xad\xa7\x49\xe3\x8d\xd3\x74\x66\xef\xf4\x01\xa3\x2f\x36\x1b\x04\x5a\x40\x4e\xdd\x4e\xfe\xf7\x1d\xfd\x46\x32\x48\x72\x4c\x76\xee\x53\x12\x09\xbe\x73\x40\xf0\x01\xe7\x90\x5f\x47\xa3\x60\x8e\x25\x8e\x40\x83\x54\x01\x1a\xa3\x5f\x47\xa3\x51\x80\xe3\xf8\x0b\x8e\xa0\xfc\x7b\x14\x5c\x80\x22\x92\xc6\x9a\x0a\x9e\x3e\x0c\xd2\xb7\x48\xdc\xa3\x49\x1c\x33\x4a\x70\xfa\xfc\x75\x70\x9c\x15\xbd\xdd\xc6\x59\xc5\x60\xa1\x25\xe5\xab\xe0\x68\x34\x7a\x4a\xdf\x04\x1b\x90\x8a\x0a\x7e\x89\x97\xc0\xfa\x23\xdf\xe5\xa5\x7b\xa3\xe2\x38\x3e\x4b\xc8\x03\x68\x77\xc8\xfc\x3d\xe2\x69\xe4\xc7\x35\x48\x48\x69\xa3\xb3\x84\x87\x0c\x10\x55\x88\x09\x82\x35\x84\x43\xa0\x3e\xc3\xd6\x8d\xf3\x51\xb0\x10\xe4\x9b\x8f\x94\x01\xaf\xfb\xa7\x00\xea\x8d\x0e\x7c\x33\xac\xcf\xf5\x1a\xd0\x94\x6f\xa8\x14\x3c\x02\xae\xfb\xe2\x6a\x0a\xd2\x1d\xd4\x08\x84\x6e\x29\x48\xf4\xdb\x23\x2c\x15\xc8\x0d\x48\x24\x24\x7a\x14\xf2\x01\xe4\xef\x0e\x8c\xe3\x22\xe4\x3d\x4e\x58\xd6\xff\xc1\xb7\xac\xbc\xf1\xcd\x63\x32\x0b\xfb\x9b\x04\x3f\xa8\xd2\x94\xaf\xd0\xdd\xfc\x1c\xcd\x2e\xfa\x87\x52\x4c\xe6\x92\x6e\xb0\x86\x45\xb2\xe4\xa0\x95\x1b\x22\x2f\x80\x66\xe1\x6f\xea\x77\x74\x2f\x24\xc2\xf5\x90\x45\x58\x29\xba\xca\x1a\x3f\x04\x72\xca\x96\xfb\xc3\x4d\x2f\xcf\xf6\x81\x61\x02\x87\x4b\xcc\x30\x27\x20\xcf\xa5\x50\xea\xdf\x82\x77\x8c\x89\x6f\x94\xb1\x0c\x82\xa4\x65\x11\xde\x60\xca\xf0\x92\x32\xaa\xb7\xe8\xa7\xe0\xa0\x5e\xa3\x5b\x99\xc0\x9b\x8f\x98\x29\x40\x67\x42\x30\xc0\xce\x39\xb5\xfb\x39\xb5\x4c\xa0\x78\x3c\x61\x4c\x3c\x42\x78\x87\x59\x02\x59\xfb\xff\x2a\x5f\xa3\xe0\x3e\x8d\x1e\xa0\xef\xd6\x56\x2c\x80\x24\x92\xea\xed\x9f\x52\x24\x71\x47\xcf\xbd\x70\x53\xec\x5d\x7c\x85\x39\x5e\x41\xd8\xe0\xf8\x37\xa0\x08\xf5\xac\x5c\x80\xdc\x50\x02\x37\x82\x75\x0c\x83\xd9\xe4\x0a\x49\xc1\x00\x25\x0a\x42\xb4\xdc\xa2\x29\xc3\x4a\x53\x82\xce\x00\x73\xa5\x31\x7b\x40\x5a\xa0\x28\x6b\x2c\x52\x79\x44\x35\x9c\x18\x7e\x54\xaf\x20\x8f\xb8\x2c\x03\xbe\x2a\xc2\xbc\x4a\x71\x77\xa6\x09\x59\x43\x57\x2a\x9b\x71\x0d\x92\x63\x96\xa6\x98\xe9\x8f\xfc\xf7\xc1\x6c\xca\xca\x0d\xd0\x89\x52\x82\x50\xac\x61\x9e\x2c\x19\x25\xb3\x78\x12\x86\x12\x54\xc7\x78\x1b\x8c\x97\x8f\xee\x67\xcc\x02\xac\x56\x13\x63\x88\xa4\x33\xd9\x07\x9f\x09\xdf\xa2\xd3\xc0\x44\xb9\xa2\x7c\x41\x7f\x76\xf4\x77\x3b\xf6\x97\x24\x5a\x82\xb4\xc4\x7e\xdb\x8c\x8b\x7f\x78\x8a\xfb\x47\x23\xee\xb9\x10\x2c\x14\x8f\xdc\x43\xe0\x77\x1f\x4e\xea\xd0\x4a\xb0\x24\x0d\xb1\xd0\x98\x3c\x74\xe4\xe8\xa2\x18\xca\xca\xe5\x73\x26\x4d\xd5\xcb\x84\xb2\xfe\x5d\x00\xc3\x09\x27\x6b\x22\xf8\x3d\x5d\x4d\xc9\xe9\x67\xd8\x0e\x5b\xb6\x31\xaf\x97\xb9\xe9\xf9\x29\xfa\x0c\xdb\x39\xa6\x32\x9d\x98\xc0\xf1\x92\x01\x5a\x2c\x3e\x21\x4c\x08\x28\x95\x3e\xcc\x96\xf9\x9d\x69\xbc\x16\x4a\x2b\x93\xe2\xc0\x9c\x67\x90\x9e\xa5\xa1\xb8\xd7\x94\x42\x8b\x90\x87\xe6\x14\x20\xa7\xad\x7c\x62\x23\x5e\x06\x77\xe5\x96\xbc\x14\xca\x8a\x0d\xa1\x93\x2e\x74\x6f\x5f\x47\x94\x48\x61\x07\xbe\x12\x9c\x6a\x91\xd6\xcc\x72\xcf\x06\x77\xec\x5f\x07\x77\xc0\x7b\x14\x51\x9e\x68\x47\x5b\x6f\x84\xd0\x77\x82\x25\x51\x4f\x6b\x07\xc3\xad\xe2\xd3\x3e\x24\x5f\x39\xe4\x7d\x0d\x44\x98\x48\xc2\x47\xac\xc9\x7a\xa1\x25\xe0\xe8\x52\xac\xfc\xa5\x64\x0b\xca\x05\x30\xd0\x70\xcd\x6f\x41\x46\x94\x63\xed\xa3\xe7\x9c\x60\x37\xa0\x81\xa7\xf1\x66\xfc\x02\x6f\xf7\x68\x97\xb3\xeb\xfe\x61\xc0\x88\x28\xc2\x3c\xbc\x80\x98\x89\x6d\xba\x11\x98\x0b\x46\x49\xc7\xe9\x63\xf8\xfa\xc1\xd8\x44\x5f\x73\x02\x3b\x60\xb7\x34\x02\x91\x74\x9c\xa4\x06\x63\x7c\x38\x39\xd9\x89\x7e\x96\x0d\x03\xfa\xd3\xd7\x88\x9e\x83\x24\xc0\x35\x5e\xed\x36\xa4\x82\xf2\x31\x9c\x2d\x4d\x99\xad\xb8\x90\xf0\x09\x30\xd3\xeb\xf3\x35\x74\x2d\x36\xcf\x1e\x66\x39\x52\x8e\x41\x52\x8c\x45\x92\xad\x0d\xb7\x6b\x09\x6a\x2d\x58\xc7\xb1\x6a\x30\xe6\xf5\x43\x0d\xb8\xae\x91\x72\xd0\xed\x33\x90\xdc\xeb\xb4\x15\x68\xff\x74\xda\xf1\x99\xac\x08\x7b\x0f\x69\x27\xc0\x7b\x6b\xfc\xaf\x7c\xed\xbf\xb3\x76\xa0\x24\xc4\x42\xa6\x3b\x87\xc5\x56\x69\x88\x3c\x4d\xa0\x25\x56\x94\xd4\x50\x51\xb5\xca\x4d\x12\x2d\x22\xac\x29\xc1\x8c\x6d\xab\x54\x5a\x35\xb5\x5c\x61\x7d\x64\xf2\x6c\xf3\x5c\x51\x90\x82\x31\xca\x57\x49\x1c\x62\x0d\x57\x94\x57\x48\x33\x5e\x9c\x83\x3c\xf4\xee\x89\x03\x6f\x9a\xed\xc2\x7c\x4c\xab\xd6\x54\x6e\xa0\x78\xfa\x76\xe9\xb8\x76\x21\x78\xcb\xe2\xf3\xdb\x77\x27\x57\x0d\xfd\xab\x54\x4e\x8c\xb4\xf4\x55\xfa\xd8\x0d\x59\xcf\xbe\x97\x02\x87\x67\xc5\x49\xdd\x53\xbf\x11\x86\x55\x63\xd4\x1b\x70\x9e\x20\x0c\xd6\xa1\x71\x36\xf9\xaf\x0a\x73\x75\xec\x5f\x09\x24\xe0\xbb\xd7\xd2\xf0\x9f\xb4\x8e\xe7\x58\xaf\x3d\x04\x7e\xd3\x8c\x7c\x45\xbd\xed\x43\x8d\x41\xf4\xe6\x3f\x4a\xf0\xdd\x26\x9c\x0b\xce\x81\xa4\x05\x7c\x24\x18\x73\x37\x9a\x22\x14\xd1\xfd\x4d\x92\x56\xfc\x19\xc7\x44\xd3\x0d\xd5\x5b\x7f\x10\x6f\xff\x79\xd2\x04\xb9\xa3\x8a\xe6\xa2\x82\x3f\x90\x77\x27\x2d\x90\xa9\x94\x42\x1e\x80\xe4\x4c\xc0\xa7\x4d\x9c\x6a\x1b\x3d\x07\x49\x85\x97\xcd\xc6\x1f\xef\x3f\xb4\x5b\x73\x85\x7f\xdc\x80\x96\x74\x9f\x55\xab\x6f\xb3\x71\x94\xc6\x3f\x1a\x05\x37\xa0\x44\x22\x8d\x05\x31\x30\x7c\x91\xc2\xc8\xc8\x5f\x21\xd4\x00\x98\x7c\x5b\x8c\xc7\xc5\xc1\xba\x3a\x57\x8f\xc7\x96\xda\xc7\x45\xd5\xb9\x14\x31\x48\x5d\x35\x03\xa1\xfc\xb9\x51\xa5\x92\x23\x50\x70\x03\xf7\xe5\xa4\xcb\x9f\x66\xfd\xd1\x6e\x7a\xa3\x68\xd3\xa5\x79\x3a\xae\x10\x16\x59\x13\x73\x33\xa3\xc6\xce\xde\x8d\x82\xc5\x3b\xc3\x84\x69\xe0\x96\xcf\x8b\x48\x55\xf9\xd2\x49\x69\x14\xce\x1e\x3e\x95\x90\x4f\x47\xc5\x8f\x51\xde\xcf\x23\xd3\xad\xa8\x28\x0c\xe9\xd0\xa6\x5d\x82\xdc\x5d\xb9\x6f\x67\xd6\x75\x0c\x88\xb2\x8e\x59\xa9\x72\x77\x1a\x95\x16\xa6\x60\x65\x81\x6a\x09\x5a\xe5\xd7\x1b\x05\x77\x6d\x2f\xad\xae\x63\x1b\x7a\x75\xc5\xeb\xec\x93\x2f\x40\xa7\xbb\xc9\x5c\xc1\x2c\x5e\x8d\x7e\x65\x52\x95\x8a\x71\xbe\xcb\x0a\xf0\xa3\x1a\x03\x39\x1d\x6f\x62\x12\x1c\xa3\xa2\x66\x49\x32\xb8\x9b\x9f\xcf\xc2\xf4\x79\xa6\x85\xb6\x38\x14\xb6\xcf\x53\x85\xbb\x67\xf0\xd2\x66\x71\x87\x6f\xdb\x3f\xcf\x86\x9a\x5e\x9e\xf5\xa3\x99\xce\xcf\x41\x48\xb9\x2e\xde\x0d\x54\x68\xe7\xcf\xc6\x71\x4a\xe1\x6e\x58\xb7\x7a\xde\xc3\x02\x27\x5a\x28\x82\xd3\xcd\xe7\x18\xab\x95\x8d\x8d\x69\x92\xe4\x12\xb8\x83\x87\x5d\x2e\x3f\x98\x40\x29\x8e\xbb\x51\x2b\xf9\xfc\x70\xac\x42\x30\xef\xc0\x2a\x25\xf5\x83\xb1\x2a\x11\xdd\x0d\x56\xeb\xec\x7b\xa0\x99\xda\x60\x22\xb3\x3c\x62\x1b\xcc\xe7\x95\xf2\xed\xc0\x77\xe9\xe4\xde\xa9\xcc\x70\x54\x9e\x13\xe7\x52\xdc\x53\xd6\xa2\x64\x65\xd4\x10\xc1\xfd\x53\x32\x95\xea\x01\xfd\xd3\x54\xb6\xbd\xd3\xb1\xe8\xd7\x03\x48\xd9\x54\x6f\xef\xd4\x5a\xea\xf3\x00\x5a\x6d\xbd\xfa\x05\x29\x0d\xfd\x7c\x6d\xb1\xbe\x2f\x75\xb7\x6c\x8f\x71\x2d\x29\x8f\x99\x58\x29\xdb\x82\x58\xab\xe7\x0e\x3e\x76\xa5\xdd\x3f\x93\x5d\x85\xbd\x97\x90\x45\x94\xf7\xcf\xab\x2d\xc6\xf7\xb2\xda\x51\xef\xf7\xe6\x94\x2b\xb4\xd6\x3e\x6a\x89\xf6\x2e\x32\x2e\x8d\xdf\x1f\x95\xf2\xd4\xd6\xcd\xa0\x3a\xdb\xf9\x03\x6e\xaa\xfd\xdd\xf0\x2d\x67\xe0\x05\x48\x0c\x25\xe0\x13\x7c\xd7\x24\xe8\x26\x61\x31\x15\xfc\x91\x31\xc2\xee\xf8\x08\xdd\xb4\x3a\x1d\x88\x5e\x82\xcb\xb1\x21\x96\x3b\x79\x6d\x7b\xc9\x74\xba\x13\x07\xb3\xe8\x5b\x16\xad\x96\xc5\xc1\xa8\x3d\x73\xd3\xe6\x62\x1c\x8c\x69\xf1\x2b\xfa\xe1\x6d\x26\xc7\xbe\x43\xb3\x65\x64\x8c\x55\xe6\x64\xd8\x96\xba\xda\xe2\xe8\x64\x66\xf5\x44\xf6\x65\x55\x7b\x1e\xb6\xa3\x8b\x69\x83\xa0\x6a\xf5\x42\x55\x77\xa0\xda\x09\x71\x50\x7d\x8e\xa7\xb2\xc7\x86\x26\x17\xfc\xe3\x6c\xd5\x18\x37\x4c\x00\xfb\x41\xc8\xe2\xa7\x38\x88\x0f\x71\x62\x5e\x8a\xe8\x4d\xfe\xfe\x6b\xc3\x95\x19\xc2\xb3\x72\x70\xfe\x2f\xcc\xba\x86\xa8\xc5\xf2\x79\x29\x4e\x3d\x59\xc4\x6e\x0d\xed\x3b\x4f\x0c\xd5\xde\x36\x51\x8c\x2b\xb5\xc6\x72\x81\xbe\xde\x5c\x3a\x4f\xa7\x6e\x2f\x69\x5f\x6e\x60\x8a\x7b\xbb\xe9\xc4\xb8\x3f\xe9\xe0\xe2\xba\x6d\xe9\x97\xc8\x8e\x99\xd5\xcf\x66\xd7\xff\xf2\x4b\x69\xda\xf2\xbe\xfa\x19\x0d\x64\xb1\x1c\x9b\x97\x6c\x6d\xe2\x45\x75\xb5\xd9\x75\xbc\xb2\xdf\x83\x3e\x1c\xb9\x75\x1d\x79\x00\x7c\xfb\x02\xf3\xe1\x1c\xac\xb7\x8e\x07\x30\xb1\xdf\x56\x7e\x7a\x2a\xe8\x7c\x3f\x42\xb5\x60\x9e\x79\x13\xa3\xe0\x3a\xd1\x71\x52\x5f\x58\x0f\xd2\x29\xe9\xf4\x3f\x2e\xbe\x2c\x50\x76\x5d\x31\xbb\xb8\x6e\xfc\x67\x40\x3a\x10\x51\x39\x12\xcb\x3b\x7e\x26\xdb\x8f\x7c\x3c\xfe\x13\xf4\x44\x67\xba\xfc\x5f\x8d\xa1\x95\xb6\x6c\xca\xc3\x58\x50\xae\x33\xf8\xef\x25\xc1\xa3\xa7\xa3\xff\x05\x00\x00\xff\xff\x24\x46\x79\xa0\x81\x32\x00\x00") func resourcesCloudformationTemplatesWebserver_v1JsonBytes() ([]byte, error) { return bindataRead( @@ -84,12 +84,12 @@ func resourcesCloudformationTemplatesWebserver_v1Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "resources/cloudformation/templates/webserver_v1.json", size: 3453, mode: os.FileMode(420), modTime: time.Unix(1489441985, 0)} + info := bindataFileInfo{name: "resources/cloudformation/templates/webserver_v1.json", size: 12929, mode: os.FileMode(420), modTime: time.Unix(1490306705, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _resourcesCloudformationTemplatesWorker_v1Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\x4d\x6f\x22\x39\x13\x3e\x77\xff\x8a\x92\x4f\x33\x52\x6b\x22\xe5\xbd\x71\x03\x26\xd1\xa0\xcc\xbb\xcb\xa6\x51\x22\xed\x6a\x0e\xd5\xa6\x20\x16\xc6\x6e\xd9\x6e\x58\x36\xea\xff\xbe\xb2\xfb\x3b\x43\x07\xb2\x1a\x2e\x48\xd5\x55\xcf\x53\x5f\x7e\xea\x35\x8e\xd8\x12\x0d\xee\xc9\x91\xb1\x0c\x26\xf0\x1a\xc7\x51\xc4\x30\xcf\x7f\xc3\x3d\x55\x86\x28\x8a\xd8\x57\xb2\xdc\x88\xdc\x09\xad\xbc\x91\xf9\xaf\xa0\x37\x30\xcd\x73\x29\x38\x7a\xfb\x17\x96\x04\xd7\xd5\x29\x0f\x81\x2c\x75\x46\xa8\x2d\x8b\xa3\xa8\x4c\x1a\xd4\x59\xc1\x77\xe4\xc6\x71\xab\xef\xa0\x3c\xfc\xf1\x85\x0c\x79\x06\x98\x15\x6a\x2d\x09\x84\x05\xa9\x39\x3a\x5a\x5f\xc5\xf5\x40\xa7\x71\xa2\x7b\x2d\xd7\x64\x6e\xee\x85\x24\xd5\xd5\x52\x33\x5d\x86\x27\x75\xb8\xae\x41\xee\x85\xe0\x4e\x1d\x84\xd1\x6a\x4f\xca\x5d\x04\x76\x82\xcc\x38\x6a\x0f\x09\x56\x82\x0c\x7c\x3a\x52\x66\xc9\x1c\xc8\x80\x36\x70\xd4\x66\x47\xe6\xf3\x08\x49\x52\x43\x6e\xb0\x90\x61\x04\xec\x39\xf8\xf7\xd8\x0f\x39\xbf\x5c\x12\xfd\x2d\xac\x13\x6a\x0b\x4f\xcb\x39\x2c\xbe\x5e\x6e\x56\x6e\xc4\x01\x1d\xa5\x45\xa6\xc8\xd9\x71\x82\xca\x01\x16\xeb\x4f\xf6\x33\x6c\xb4\x01\xec\xb6\x0b\xd0\x5a\xb1\x0d\x95\x5f\x41\x58\x64\x52\xf0\x8f\xf3\xdd\x7d\x9f\x7d\x88\x87\x64\x36\x37\xda\xbe\x43\xf1\x2c\xa4\x0c\xb0\xdc\xfb\x01\x1e\x50\x48\xcc\x84\x14\xee\x04\xff\x68\x45\xf6\x0b\xac\x4c\x41\x37\xf7\x28\x2d\xc1\x4c\x6b\x49\x38\xfa\x92\x7e\x1e\xa0\x33\x05\xd5\xe6\xa9\x94\xfa\x48\xeb\x27\x94\x05\x85\x84\xfe\x6a\x3e\x03\xdb\x78\x74\x06\x3f\xba\xcc\xad\x96\x85\x4f\x32\x75\xc8\x77\xef\x74\xa8\x76\x83\xe0\x07\x85\xa5\x75\x68\x54\x56\x08\x79\xc5\x23\xdc\xd1\xa9\x7b\x25\x10\x7e\xa3\x5b\x85\xaa\x5b\xac\xbb\xf9\x2d\x3c\xd0\x69\x89\xc2\x80\xd3\x40\x0a\x33\x49\x90\xa6\xdf\x00\x39\x27\x6b\xbd\x31\x3c\x2c\x89\xd6\x09\x0e\x33\x42\x65\x1d\xca\x1d\xbc\x68\xeb\x2c\x4b\x1a\xb2\x90\x5a\x2f\x33\x6f\x6c\x3a\x40\xe6\x20\x38\x3d\x6a\xf9\xce\x2b\x5e\x4c\xff\x0f\x46\x4b\xaa\x2a\xcf\x4e\x67\x18\x9d\x86\x3d\x2a\xdc\x12\xd4\x88\xf6\x72\x5f\x84\x8f\x55\xbf\x94\xbc\x81\x7c\x97\x3d\xae\x12\x60\x8f\x64\x75\x61\x38\xb5\x8b\xcb\x7a\x3a\xfe\x44\xc6\xd6\x29\xf8\xa1\x0d\xb0\xa6\xcf\xe9\x64\x52\xa7\xd1\x66\x31\x99\x9c\x89\x4e\xea\xd0\xa5\xd1\x39\x19\x27\x1a\x2e\x3f\x81\x68\x48\xd8\xae\x08\xb0\x47\xda\x04\x9e\xf6\xfe\x94\x49\x1b\x91\x86\x94\x2b\x81\xee\x6f\x54\x14\x3e\xfe\xaf\x77\x59\x06\x38\x8d\xbd\x4c\x86\xfe\xcd\x75\x18\x38\x07\x63\xd9\x50\x96\x71\xfd\xd7\x0e\xae\xaf\xe4\x4d\x0a\xd7\x34\x68\x78\x01\x60\xbc\x35\xff\xa5\x39\x55\x4c\x8f\xa2\x89\xe9\x07\xb5\x07\x6b\x10\x94\xf6\x65\xe0\x0c\xd5\x1b\x99\x28\xc3\x6a\xf9\xc0\x7a\xcc\xdf\x31\x23\xf9\x26\xe6\xdc\x2a\x75\x81\xfe\x6a\xb1\x7a\xe3\x83\xa1\x61\x6d\x8e\x51\xd2\x7e\xe9\x36\xf8\x8f\xf4\xe6\xdb\x6a\xb5\x64\xf5\xa7\x0e\xed\xf7\xf0\x5a\x52\x72\x5e\x36\x2a\xd5\x6b\xc2\x5f\x03\xb2\xcd\x91\x57\x20\x78\xb4\x13\xe2\xb7\x13\x7f\xe2\x12\xa8\x23\x5b\xf2\xa7\xe5\x7c\xb1\xf6\xf6\xa0\x9f\x6f\x2a\x0a\x57\xb1\x6c\x59\xcf\x42\x63\xe1\xb4\xe5\x28\x85\xda\x4e\xd0\x6e\xcf\x50\x4c\xfb\xda\xff\xa7\xd7\xfe\x01\x1f\x9b\xaa\x13\xdc\xf6\xe6\x53\x0f\xe9\x63\x75\x34\x37\x6f\xa4\x92\xb7\x97\xf8\x42\x51\x54\x2d\x72\xd6\x2e\x32\xf5\xf7\xf8\x67\xf2\x9e\xa4\x8e\x24\x30\x50\xdd\x0f\xb4\x54\x62\xa1\xf8\x0b\xd7\x6a\x23\xb6\x85\x09\xcb\x75\x26\x81\xbb\xf9\xed\x43\x7d\x72\x46\xf8\xdb\x8b\xf4\xcb\xb9\x17\xb8\x5f\xd4\x1a\xbc\x34\x7a\x23\xc6\x7b\x30\x54\xff\xb2\xac\xf3\xf8\x11\x43\x27\x37\x71\x54\xc6\x65\xfc\x6f\x00\x00\x00\xff\xff\x59\xee\xb5\xc3\x9f\x0b\x00\x00") +var _resourcesCloudformationTemplatesWorker_v1Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x5d\x6f\xdb\x38\x16\x7d\xb6\x7f\x05\xa1\xa7\x19\x20\x6d\xd3\x74\xda\x5d\xf8\xcd\x49\xdc\xad\xd1\x64\xea\x89\xdd\x14\xd8\xc5\x3c\xd0\xd4\x8d\xcd\x0d\x4d\x6a\x48\xca\xa9\x5b\xe4\xbf\x2f\xf4\x4d\x49\xa4\x24\x27\xcc\x62\x9e\xda\x48\xe4\x3d\x87\xd4\xe5\x25\x79\x8e\x7f\x8e\x47\xc1\x02\x4b\xbc\x03\x0d\x52\x05\x68\x82\x7e\x8e\x47\xa3\x00\x47\xd1\xef\x78\x07\xc5\xdf\xa3\xe0\x12\x14\x91\x34\xd2\x54\xf0\xe4\x61\x90\xbc\x45\xe2\x0e\x4d\xa3\x88\x51\x82\x93\xe7\xaf\x83\x93\xb4\xe9\xea\x10\xa5\x1d\x83\xa5\x96\x94\x6f\x82\xf1\x68\xf4\x98\xbc\x09\xf6\x20\x15\x15\xfc\x0a\xaf\x81\xf5\x47\xbe\xcd\x5a\xf7\x46\xc5\x51\x74\x1e\x93\x7b\xd0\xee\x90\xd9\x7b\xc4\x93\xc8\x0f\x5b\x90\x90\xd0\x46\xe7\x31\x0f\x19\x20\xaa\x10\x13\x04\x6b\x08\x87\x40\x7d\x86\x83\x1b\xe7\xa3\x60\x21\xc8\x37\x1f\x29\x03\x5e\xcd\x4f\x0e\xd4\x1b\x1d\xf8\x7e\xd8\x9c\xeb\x2d\xa0\x19\xdf\x53\x29\xf8\x0e\xb8\xee\x8b\xab\x29\x48\x77\x50\x23\x10\x5a\x51\x90\xe8\x97\x07\x58\x2b\x90\x7b\x90\x48\x48\xf4\x20\xe4\x3d\xc8\x5f\x1d\x18\x27\x79\xc8\x3b\x1c\xb3\x74\xfe\x83\x6f\x69\x7b\xe3\x9b\x47\x64\x1e\xf6\x0f\x09\xbe\x53\xa5\x29\xdf\xa0\xdb\xc5\x05\x9a\x5f\xf6\xa7\x52\x44\x16\x92\xee\xb1\x86\x65\xbc\xe6\xa0\x95\x1b\x22\x6b\x80\xe6\xe1\x2f\xea\x57\x74\x27\x24\xc2\x55\xca\x22\xac\x14\xdd\xa4\x83\x1f\x02\x39\x63\xeb\xe3\xe1\x66\x57\xe7\xc7\xc0\x30\x81\xc3\x35\x66\x98\x13\x90\x17\x52\x28\xf5\x6f\xc1\x3b\x72\xe2\x1b\x65\x2c\x85\x20\x49\x5b\x84\xf7\x98\x32\xbc\xa6\x8c\xea\x03\xfa\x21\x38\xa8\xd7\x68\x25\x63\x78\xf3\x11\x33\x05\xe8\x5c\x08\x06\xd8\xb9\xa6\xda\x9f\x53\xcb\x18\xf2\xc7\x53\xc6\xc4\x03\x84\xb7\x98\xc5\x90\x8e\xff\x3f\xc5\x6b\x14\xdc\x25\xd1\x03\xf4\xa7\x75\x14\x4b\x20\xb1\xa4\xfa\xf0\x2f\x29\xe2\xa8\x63\xe6\x5e\x78\x28\xf6\x29\xbe\xc6\x1c\x6f\x20\xac\x71\xfc\x1b\x50\x84\x6a\x55\x2e\x41\xee\x29\x81\x1b\xc1\x3a\xd2\x60\x3e\xbd\x46\x52\x30\x40\xb1\x82\x10\xad\x0f\x68\xc6\xb0\xd2\x94\xa0\x73\xc0\x5c\x69\xcc\xee\x91\x16\x68\x97\x0e\x16\xa9\x2c\xa2\x1a\x4e\x0c\x3f\xa8\x57\x90\x45\x5c\x17\x01\x5f\xe5\x61\x5e\x25\xb8\xad\x65\x42\xb6\xd0\x55\xca\xe6\x5c\x83\xe4\x98\x25\x25\x66\xf6\x3d\xfb\xff\x60\x36\x45\xe7\x1a\xe8\x54\x29\x41\x28\xd6\xb0\x88\xd7\x8c\x92\x79\x34\x0d\x43\x09\xaa\x23\xdf\x06\xe3\x65\xd9\xfd\x84\x55\x80\xd5\x66\x6a\xa4\x48\xb2\x92\x7d\xf0\x99\xf2\x03\x3a\x0b\x4c\x94\x6b\xca\x97\xf4\x47\xc7\x7c\x37\x63\xff\x1e\xef\xd6\x20\x2d\xb1\xdf\xd6\xe3\xe2\xef\x9e\xe2\xfe\x56\x8b\x7b\x21\x04\x0b\xc5\x03\xf7\x10\xf8\xdd\x87\xd3\x2a\xb4\x12\x2c\x4e\x42\x2c\x35\x26\xf7\x1d\x35\x3a\x6f\x86\xd2\x76\xd9\x9a\x49\x4a\xf5\x3a\xa6\xac\xff\x14\xc0\x70\xcc\xc9\x96\x08\x7e\x47\x37\x33\x72\xf6\x19\x0e\xc3\xb6\x6d\xcc\xab\x6d\x6e\x76\x71\x86\x3e\xc3\x61\x81\xa9\x4c\x16\x26\x70\xbc\x66\x80\x96\xcb\x4f\x08\x13\x02\x4a\x25\x0f\xd3\x6d\xbe\xb5\x8c\xb7\x42\x69\x65\x52\x1c\x58\xf3\x0c\xd2\xf3\x24\x14\xf7\x5a\x52\x68\x1e\xf2\xb9\x35\x05\xc8\x59\xa3\x9e\xd8\x88\x17\xc1\x5d\xb5\x25\x6b\x85\xd2\x66\x43\xe8\x24\x1b\xdd\xdb\xd7\x3b\x4a\xa4\xb0\x03\x5f\x0b\x4e\xb5\x48\x7a\xa6\xb5\x67\x8f\x3b\xce\xaf\x83\x27\xe0\x3d\xda\x51\x1e\x6b\xc7\x58\x6f\x84\xd0\xb7\x82\xc5\xbb\x9e\xd1\x0e\x86\xdb\x44\x67\x7d\x48\xbe\x6a\xc8\xfb\x0a\x88\x30\x11\x87\x0f\x58\x93\xed\x52\x4b\xc0\xbb\x2b\xb1\xf1\x57\x92\x2d\x28\x97\xc0\x40\xc3\x17\xbe\x02\xb9\xa3\x1c\x6b\x1f\x33\xe7\x04\xbb\x01\x0d\x3c\x89\x37\xe7\x97\xf8\x70\xc4\xb8\x9c\x53\xf7\x0f\x03\x46\xec\x76\x98\x87\x97\x10\x31\x71\x48\x0e\x02\x0b\xc1\x28\xe9\xb8\x7d\x0c\xdf\x3f\x18\x9b\xea\x2f\x9c\x40\x0b\x6c\x45\x77\x20\xe2\x8e\x9b\xd4\x60\x8c\x0f\xa7\xa7\xad\xe8\xe7\x69\x1a\xd0\x1f\xbe\x32\x7a\x01\x92\x00\xd7\x78\xd3\x1e\x48\x09\xe5\x23\x9d\x2d\x43\x99\x6f\xb8\x90\xf0\x09\x30\xd3\xdb\x8b\x2d\x74\x6d\x36\x4f\x4e\xb3\x0c\x29\xc3\x20\x09\xc6\x32\x4e\xf7\x86\xd5\x56\x82\xda\x0a\xd6\x71\xad\x1a\x8c\xf9\xe5\xbe\x02\xdc\x56\x48\x19\xe8\xe1\x09\x48\xee\x7d\xda\x0a\x74\x7c\x39\xed\xf8\x4c\x56\x84\xa3\x53\xda\x09\xf0\xde\x1a\xff\x2b\xdf\xfa\x9f\xac\x16\x94\x84\x48\xc8\xe4\xe4\xb0\x3c\x28\x0d\x3b\x4f\x0b\x68\x8d\x15\x25\x15\xd4\xae\xdc\xe5\xa6\xb1\x16\x3b\xac\x29\xc1\x8c\x1d\xca\x52\x5a\x0e\xb5\xd8\x61\x7d\x54\xf2\xf4\xf0\x5c\x52\x90\x82\x31\xca\x37\x71\x14\x62\x0d\xd7\x94\x97\x48\x73\x9e\xdf\x83\x3c\xcc\xee\xa9\x03\x6f\x96\x9e\xc2\x7c\x2c\xab\xc6\x52\xae\xa1\x78\xfa\x76\x49\x5e\xbb\x10\xbc\x55\xf1\xc5\xea\xdd\xe9\x75\x4d\xff\x2a\x94\x13\xa3\x2c\x7d\x95\x3e\x4e\x43\xd6\xbb\xef\x95\xc0\xe1\x79\x7e\x53\xf7\x34\x6f\x84\x61\x55\xcb\x7a\x03\xce\x13\x84\xc1\x3a\x34\xee\x26\x7f\xa9\x30\x53\xc7\xfe\x88\x21\x06\xdf\xb3\x96\x84\xff\xa4\x75\xb4\xc0\x7a\xeb\x21\xf0\x9b\x7a\xe4\x6b\xea\xed\x1c\x6a\x24\xd1\x9b\xff\x2a\xc1\xdb\x43\xb8\x10\x9c\x03\x49\x1a\xf8\x28\x30\xe6\x69\x34\x41\xc8\xa3\xfb\x5b\x24\x8d\xf8\x73\x8e\x89\xa6\x7b\xaa\x0f\xfe\x20\xde\xfe\xf3\xb4\x0e\x72\x4b\x15\xcd\x44\x05\x7f\x20\xef\x4e\x1b\x20\x33\x29\x85\x7c\x06\x92\xb3\x00\x9f\xd5\x71\xca\x63\xf4\x02\x24\x15\x5e\x0e\x1b\xbf\xbd\xff\xd0\x1c\xcd\x35\xfe\x7e\x03\x5a\xd2\x63\x76\xad\xbe\xc3\xc6\x38\x89\x3f\x1e\x05\x37\xa0\x44\x2c\x8d\x0d\x31\x30\x7c\x91\xdc\xc8\xc8\x5e\x21\x54\x03\x98\x7e\x5b\x4e\x26\xf9\xc5\xba\xbc\x57\x4f\x26\x96\xde\x27\x79\xd7\x85\x14\x11\x48\x5d\x0e\x03\xa1\xec\xb9\xd1\xa5\x94\x23\x50\x70\x03\x77\xc5\xa2\xcb\x9e\xa6\xf3\xd1\x1c\x7a\xad\x69\xdd\xa5\x79\x3c\x29\x11\x96\xe9\x10\x33\x33\xa3\xc2\x4e\xdf\x8d\x82\xe5\x3b\xc3\x84\xa9\xe1\x16\xcf\xf3\x48\x65\xfb\xc2\x49\xa9\x35\x4e\x1f\x3e\x16\x90\x8f\xe3\xfc\x9f\x51\x36\xcf\x23\xd3\xad\x28\x29\x0c\x99\xd0\xba\x5d\x82\xdc\x53\x79\xec\x64\x56\x7d\x0c\x88\xa2\x8f\xd9\xa9\x74\x77\x6a\x9d\x96\xa6\x60\x65\x81\x6a\x08\x5a\xc5\xd7\x1b\x05\xb7\x4d\x2f\xad\xea\x63\x4b\xbd\xaa\xe3\x8a\x82\x0c\xf2\xfc\x4f\x1f\x14\xa8\x85\x75\x73\x52\xbe\xa9\x4a\xc6\x1f\xcb\x37\x9f\x56\xab\x45\x90\xbf\xaa\xa2\x7d\x49\x13\x68\x09\x3a\x39\x9b\x66\x7a\x68\xd1\xfd\x67\x1a\x59\x45\x38\x3b\xb3\x05\xf8\x41\x4d\x80\x9c\x4d\xf6\x11\x09\x4e\x50\xde\xb3\x04\xbf\x5d\x5c\xcc\xc3\xe4\x79\xaa\xac\x36\x46\x94\x9b\x48\x8f\x25\xee\x91\xc1\x0b\xd3\xc6\x1d\xbe\x69\x26\x3d\x19\x6a\x76\x75\xde\x8f\x66\xfa\x48\xcf\x42\xca\x54\xf6\x6e\xa0\x5c\x89\x7f\x32\x8e\x53\x58\x77\xc3\xba\xb5\xf8\x1e\x16\x38\xd6\x42\x11\x9c\x1c\x65\x27\x58\x6d\x6c\x6c\x4c\xcb\x25\x13\xd4\x1d\x3c\xec\xe2\xfb\xb3\x09\x14\x52\xbb\x1b\xb5\x14\xe3\x9f\x8f\x95\xcb\xef\x1d\x58\x85\x40\xff\x6c\xac\x52\x92\x77\x83\x55\xaa\xfd\x11\x68\xa6\xd2\x18\xcb\xb4\x2a\xd9\x92\xf9\xa2\xd4\xd1\x1d\xf8\x2e\xd5\xdd\x3b\x95\x39\xde\x15\xb7\xce\x85\x14\x77\x94\x35\x28\x59\x19\xd5\x24\x75\xff\x94\x4c\xdd\x7b\xc0\xfc\xd4\x75\x72\xef\x74\x2c\x6a\xf8\x00\x52\x36\x0d\xdd\x3b\xb5\x86\x96\x3d\x80\x56\x53\xfd\x7e\x41\x4a\x43\x3f\x5f\x53\xfa\xef\x2b\xdd\x0d\x13\x65\x52\x09\xd4\x13\x26\x36\xca\xb6\x21\x56\x5a\xbc\x83\x8f\x5d\xb7\xf7\xcf\xa4\xad\xd7\xf7\x12\xb2\x48\xfc\xfe\x79\x35\xa5\xfd\x5e\x56\x2d\x2f\xe0\x68\x4e\x99\xde\x6b\x9d\xa3\x86\x05\xe0\x22\xe3\x72\x0c\xfc\x51\x29\xee\x80\xdd\x0c\xca\x9b\xa2\x3f\xe0\xba\x77\xd0\x0d\xdf\xf0\x19\x5e\x80\xc4\x50\x02\x3e\xc1\xdb\x96\x43\x37\x09\x8b\x45\xe1\x8f\x8c\x11\xb6\xe5\x4a\x74\xd3\xea\xf4\x33\x7a\x09\xae\x27\x86\xf4\xee\xe4\x75\xe8\x25\xd3\xe9\x75\x3c\x9b\x45\xdf\xb6\x68\x35\x40\x9e\x8d\xda\xb3\x36\x6d\x9e\xc8\xb3\x31\x2d\xee\x47\x3f\xbc\xcd\x32\x39\x36\x35\x1b\xb6\xc8\x44\xa5\xbe\x88\x6d\xab\xab\x0c\x93\x4e\x66\x56\x87\xe5\x58\x56\x95\x83\x62\xbb\xba\x98\xa6\x0a\x2a\x77\x2f\x54\x4e\x07\xaa\x7c\x15\x07\xd5\xa7\x38\x34\x47\x1c\x68\x32\xfb\x20\x4a\x77\x8d\x49\xcd\x52\xb0\x5f\x84\x2c\xee\x8c\x83\xf8\x10\x5f\xe7\xa5\x88\xde\x64\xef\xbf\xd6\x3c\x9e\x21\x3c\x4b\x3f\xe8\xff\xc2\xac\x2b\x45\x2d\x06\xd2\x4b\x71\xea\xa9\x22\x76\xa3\xe9\xd8\x75\x62\x78\x00\xb6\x85\x62\xfc\x40\xd7\xd8\x2e\xd0\xd7\x9b\x2b\xe7\xed\xd4\xed\x4c\x1d\xcb\x0d\x4c\xa9\xb0\x5d\x4e\x8c\x5f\x63\x3a\xb8\xb8\x7e\xbb\xe9\x97\x48\xcb\x1a\xeb\x67\xd3\x76\xd3\xfc\x52\x9a\x35\x9c\xb4\x7e\x46\x4f\x63\xa1\xfe\x52\xb6\x33\x89\x69\xae\xb9\x33\xc5\x66\xc3\x79\x22\x50\xda\x6f\x1d\xd0\x95\x45\xe7\x09\xb4\x74\xe6\x3a\x40\x2b\xf7\xce\xe3\x48\x4d\x97\xae\x67\xc0\x35\x43\xcf\x13\x85\x86\x8d\xd7\xc1\xa0\x69\xf8\x79\x22\xd0\xf6\xf9\x3a\x38\x58\x4c\x41\x4f\x34\xda\xfe\x5c\x07\x0d\x8b\x99\xe7\x89\x86\xc3\x2b\xec\xe0\xe2\x72\x17\x3d\x11\x6a\x9a\x8a\x1d\x4c\x5a\xfe\xa3\xaf\xa5\x59\x39\x8e\x5d\x8b\xd3\xf0\x25\x1f\x1f\x73\xdc\x3f\xc7\xa8\xb2\xbe\xc6\xa3\xc7\xf1\xe3\xf8\x7f\x01\x00\x00\xff\xff\x5a\x87\xb7\xae\xaa\x35\x00\x00") func resourcesCloudformationTemplatesWorker_v1JsonBytes() ([]byte, error) { return bindataRead( @@ -104,7 +104,7 @@ func resourcesCloudformationTemplatesWorker_v1Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "resources/cloudformation/templates/worker_v1.json", size: 2975, mode: os.FileMode(420), modTime: time.Unix(1489442003, 0)} + info := bindataFileInfo{name: "resources/cloudformation/templates/worker_v1.json", size: 13738, mode: os.FileMode(420), modTime: time.Unix(1490241241, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/lib/aws/cloudformation/api.go b/lib/aws/cloudformation/api.go index 81b27ba..bc74349 100644 --- a/lib/aws/cloudformation/api.go +++ b/lib/aws/cloudformation/api.go @@ -10,23 +10,158 @@ import ( "github.com/segmentio/go-camelcase" ) +// DescribeStack describes the specified Cloudformation Stack. +// +// Example: +// // Describe a Cloudformation stack. +// svc := cloudformation.DescribeStack(stackName) +// +func (c *CloudFormation) DescribeStack(stackName string) bool { + if stackName == "" { + return false + } + + params := &cloudformation.DescribeStacksInput{ + NextToken: aws.String("NextToken"), + StackName: aws.String(stackName), + } + + resp, err := c.Service.DescribeStacks(params) + + if err != nil { + fmt.Println(err.Error()) + return false + } + + fmt.Println(resp) + + if len(resp.Stacks) > 0 { + return true + } + return false +} + +// UpdateStack updates an existing Cloudformation Stack +// +// Example: +// // Update a Cloudformation Stack. +// svc := cloudformation.UpdateStack(paramaters, template) +// +func (c *CloudFormation) UpdateStack(paramaters map[string]string, template []byte, usePreviousTemplate bool) { + var cfParameters []*cloudformation.Parameter + + if usePreviousTemplate { + delete(paramaters, "VPC_PRIVATE_SUBNETS") + delete(paramaters, "SOLUTION_STACK") + delete(paramaters, "VPC_ELB_SUBNETS") + delete(paramaters, "VPC_ID") + + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("vpcPrivateSubnets"), + UsePreviousValue: aws.Bool(true), + }) + + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("solutionStack"), + UsePreviousValue: aws.Bool(true), + }) + + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("vpcElbSubnets"), + UsePreviousValue: aws.Bool(true), + }) + + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("vpcId"), + UsePreviousValue: aws.Bool(true), + }) + } + + if paramaters["VersionLabel"] == "" { + delete(paramaters, "VersionLabel") + delete(paramaters, "AppBucket") + delete(paramaters, "AppKey") + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("versionLabel"), + UsePreviousValue: aws.Bool(true), + }) + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("appBucket"), + UsePreviousValue: aws.Bool(true), + }) + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("appKey"), + UsePreviousValue: aws.Bool(true), + }) + } + if paramaters["AppBucket"] == "" { + delete(paramaters, "AppBucket") + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("appBucket"), + UsePreviousValue: aws.Bool(true), + }) + } + if paramaters["AppKey"] == "" { + delete(paramaters, "AppKey") + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String("appKey"), + UsePreviousValue: aws.Bool(true), + }) + } + + for k, v := range paramaters { + cfParameters = append(cfParameters, &cloudformation.Parameter{ + ParameterKey: aws.String(camelcase.Camelcase(k)), + ParameterValue: aws.String(fmt.Sprintf("%s", v)), + }) + } + + fmt.Printf("%s", cfParameters) + + params := &cloudformation.UpdateStackInput{ + StackName: aws.String(fmt.Sprintf("%s-%s-%s", paramaters["AppName"], paramaters["EnvName"], paramaters["Tier"])), // Required + Parameters: cfParameters, + } + + if usePreviousTemplate { + params.UsePreviousTemplate = aws.Bool(usePreviousTemplate) + } else { + params.TemplateBody = aws.String(fmt.Sprintf("%s", template)) + } + + resp, err := c.Service.UpdateStack(params) + + if err != nil { + fmt.Println(err.Error()) + return + } + + fmt.Println(resp) +} + +// CreateStack creates a new Cloudformation Stack +// +// Example: +// // Create a Cloudformation Stack. +// svc := cloudformation.CreateStack(paramaters, template) +// func (c *CloudFormation) CreateStack(paramaters map[string]string, template []byte) { - var cf_parameters []*cloudformation.Parameter + var cfParameters []*cloudformation.Parameter for k, v := range paramaters { - cf_parameters = append(cf_parameters, &cloudformation.Parameter{ + cfParameters = append(cfParameters, &cloudformation.Parameter{ ParameterKey: aws.String(camelcase.Camelcase(k)), ParameterValue: aws.String(fmt.Sprintf("%s", v)), }) } - fmt.Printf("%s", cf_parameters) + fmt.Printf("%s", cfParameters) params := &cloudformation.CreateStackInput{ StackName: aws.String(fmt.Sprintf("%s-%s-%s", paramaters["AppName"], paramaters["EnvName"], paramaters["Tier"])), // Required DisableRollback: aws.Bool(false), //OnFailure: aws.String("OnFailure"), - Parameters: cf_parameters, + Parameters: cfParameters, TemplateBody: aws.String(fmt.Sprintf("%s", template)), TimeoutInMinutes: aws.Int64(25), } @@ -41,9 +176,15 @@ func (c *CloudFormation) CreateStack(paramaters map[string]string, template []by fmt.Println(resp) } -func (c *CloudFormation) DeleteStack(stack_name string) { +// DeleteStack deletes a specified Stack +// +// Example: +// // Delete a Cloudformation stack. +// svc := cloudformation.DeleteStack(stackName) +// +func (c *CloudFormation) DeleteStack(stackName string) { params := &cloudformation.DeleteStackInput{ - StackName: aws.String(stack_name), + StackName: aws.String(stackName), } resp, err := c.Service.DeleteStack(params) diff --git a/lib/aws/cloudformation/service.go b/lib/aws/cloudformation/service.go index 65bcafc..3c8f77d 100644 --- a/lib/aws/cloudformation/service.go +++ b/lib/aws/cloudformation/service.go @@ -7,6 +7,29 @@ import ( "github.com/aws/aws-sdk-go/service/cloudformation" ) +// CloudFormation allows you to create and manage AWS infrastructure deployments +// predictably and repeatedly. You can use AWS CloudFormation to leverage AWS +// products, such as Amazon Elastic Compute Cloud, Amazon Elastic Block Store, +// Amazon Simple Notification Service, Elastic Load Balancing, and Auto Scaling +// to build highly-reliable, highly scalable, cost-effective applications without +// creating or configuring the underlying AWS infrastructure. +// +// With AWS CloudFormation, you declare all of your resources and dependencies +// in a template file. The template defines a collection of resources as a single +// unit called a stack. AWS CloudFormation creates and deletes all member resources +// of the stack together and manages all dependencies between the resources +// for you. +// +// For more information about AWS CloudFormation, see the AWS CloudFormation +// Product Page (http://aws.amazon.com/cloudformation/). +// +// Amazon CloudFormation makes use of other AWS products. For additional technical +// information about a specific AWS product, see its technical documentation +// (http://docs.aws.amazon.com/). +// The service client's operations are safe to be used concurrently. +// It is not safe to mutate any of the client's properties though. +// Please also see https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15 +// type CloudFormation struct { AwsConfig *config.Config Service *cloudformation.CloudFormation diff --git a/main.go b/main.go index 4fa26aa..9d09c5b 100644 --- a/main.go +++ b/main.go @@ -25,17 +25,17 @@ var ( create = kingpin.Command("create", "Create EB") // Application createApplication = create.Command("application", "Create Application") - createApplicationNameArg = createApplication.Flag("app-name", "Application Name to create").Required().Short('a').String() + createApplicationNameArg = createApplication.Flag("app-name", "Application Name to create").Required().Short('a').Envar("APP_NAME").String() // Environment createEnvironment = create.Command("environment", "Create Environment") - createEnvironmentApplicationNameArg = createEnvironment.Flag("app-name", "Application Name").Required().Short('a').String() - createEnvironmentNameArg = createEnvironment.Flag("env-name", "Environment Name to create").Short('e').String() - createEnvironmentTierArg = createEnvironment.Flag("tier", "Environment Tier").Required().Short('t').String() - createEnvironmentS3Arg = createEnvironment.Flag("bucket", "S3 bucket name").Short('b').String() - createEnvironmentConfigArg = createEnvironment.Flag("config", "Config yml file").Short('c').String() - createEnvironmentVersionArg = createEnvironment.Flag("version-label", "Version").Short('l').String() - createEnvironmentLocalFilePathArg = createEnvironment.Flag("local-file-prefix", "The directory (prefix) of the file to upload.").Short('d').String() - createEnvironmentDescriptionArg = createEnvironment.Flag("desc", "Description of Version").String() + createEnvironmentApplicationNameArg = createEnvironment.Flag("app-name", "Application Name").Envar("APP_NAME").Required().Short('a').String() + createEnvironmentNameArg = createEnvironment.Flag("env-name", "Environment Name to create").Short('e').Envar("ENV_NAME").String() + createEnvironmentTierArg = createEnvironment.Flag("tier", "Environment Tier").Required().Short('t').Envar("ENV_TIER").String() + createEnvironmentS3Arg = createEnvironment.Flag("bucket", "S3 bucket name").Short('b').Envar("ENV_S3_BUCKET_LOCATION").String() + createEnvironmentConfigArg = createEnvironment.Flag("config", "Config yml file").Short('c').Envar("ENV_CONFIG_PATH").String() + createEnvironmentVersionArg = createEnvironment.Flag("version-label", "Version").Short('l').Envar("ENV_VERSION_LABEL").String() + createEnvironmentLocalFilePathArg = createEnvironment.Flag("local-file-prefix", "The directory (prefix) of the file to upload.").Short('d').Envar("ENV_LOCAL_FILE_PREFIX").String() + createEnvironmentDescriptionArg = createEnvironment.Flag("desc", "Description of Version").Envar("ENV_DESCRIPTION").String() delete = kingpin.Command("delete", "Destroy EB") // Application @@ -44,30 +44,31 @@ var ( // Environment deleteEnvironment = delete.Command("environment", "Destroy environment") - deleteEnvironmentApplicationNameArg = deleteEnvironment.Flag("app-name", "Environment's application name").Required().Short('a').String() - deleteEnvironmentNameArg = deleteEnvironment.Flag("env-name", "Environment to delete").Required().Short('e').String() - deleteEnvironmentTierArg = deleteEnvironment.Flag("tier", "Tier Name (worker | webserver)").Required().Short('t').String() + deleteEnvironmentApplicationNameArg = deleteEnvironment.Flag("app-name", "Environment's application name").Required().Short('a').Envar("APP_NAME").String() + deleteEnvironmentNameArg = deleteEnvironment.Flag("env-name", "Environment to delete").Required().Short('e').Envar("ENV_NAME").String() + deleteEnvironmentTierArg = deleteEnvironment.Flag("tier", "Tier Name (worker | webserver)").Required().Short('t').Envar("ENV_TIER").String() update = kingpin.Command("update", "Deploy EB") updateEnvironment = update.Command("environment", "Envrionment") - updateEnvironmentApplicationNameArg = updateEnvironment.Flag("app-name", "The Application in which the environment lives under").Required().Short('a').String() - updateEnvironmentNameArg = updateEnvironment.Flag("env-name", "Envionment name").Required().Short('e').String() - updateEnvironmentVersionArg = updateEnvironment.Flag("version-label", "Version").Required().Short('l').String() - updateEnvironmentTierArg = updateEnvironment.Flag("tier", "Environment Tier").Required().Short('t').String() - updateEnvironmentS3Arg = updateEnvironment.Flag("bucket", "S3 Bucket Name + path").Short('b').String() - updateEnvironmentLocalFilePathArg = updateEnvironment.Flag("local-file-prefix", "The directory (prefix) of the file to upload.").Short('d').String() - updateEnvironmentDescriptionArg = updateEnvironment.Flag("desc", "Description of Version").String() + updateEnvironmentApplicationNameArg = updateEnvironment.Flag("app-name", "The Application in which the environment lives under").Required().Short('a').Envar("APP_NAME").String() + updateEnvironmentNameArg = updateEnvironment.Flag("env-name", "Envionment name").Required().Short('e').Envar("ENV_NAME").String() + updateEnvironmentVersionArg = updateEnvironment.Flag("version-label", "Version").Short('l').Envar("ENV_VERSION_LABEL").String() + updateEnvironmentTierArg = updateEnvironment.Flag("tier", "Environment Tier").Required().Short('t').Envar("ENV_TIER").String() + updateEnvironmentS3Arg = updateEnvironment.Flag("bucket", "S3 Bucket Name + path").Short('b').Envar("ENV_S3_BUCKET_LOCATION").String() + updateEnvironmentLocalFilePathArg = updateEnvironment.Flag("local-file-prefix", "The directory (prefix) of the file to upload.").Short('d').Envar("ENV_LOCAL_FILE_PREFIX").String() + updateEnvironmentDescriptionArg = updateEnvironment.Flag("desc", "Description of Version").Envar("ENV_DESCRIPTION").String() + updateEnvironmentConfigArg = updateEnvironment.Flag("config", "Config yml file").Short('c').Envar("ENV_CONFIG_PATH").String() rollback = kingpin.Command("rollback", "Rollback EB") // General Flags - awsRegion = kingpin.Flag("region", "AWS Region").Short('r').String() - awsAccessKeyID = kingpin.Flag("access-key-id", "AWS Access Key ID").Short('k').String() - awsSecretAccessKey = kingpin.Flag("secret-access-key", "AWS Secret Access Key").Short('s').String() - awsProfile = kingpin.Flag("profile", "Aws Profile").Short('p').String() - awsCredPath = kingpin.Flag("cred-path", "Aws Cred Path").String() + awsRegion = kingpin.Flag("region", "AWS Region").Short('r').Envar("AWS_REGION").String() + awsAccessKeyID = kingpin.Flag("access-key-id", "AWS Access Key ID").Short('k').Envar("AWS_ACCESS_KEY_ID").String() + awsSecretAccessKey = kingpin.Flag("secret-access-key", "AWS Secret Access Key").Short('s').Envar("AWS_SECRET_ACCESS_KEY").String() + awsProfile = kingpin.Flag("profile", "Aws Profile").Short('p').Envar("AWS_PROFILE").String() + awsCredPath = kingpin.Flag("cred-path", "Aws Cred Path").Envar("AWS_CRED_PATH").String() - verbose = kingpin.Flag("verbose", "Verbose mode").Short('v').Bool() + verbose = kingpin.Flag("verbose", "Verbose mode").Short('v').Envar("VERBOSE_MODE").Bool() //Command Regex Section createRegex = regexp.MustCompile(`^create`) @@ -77,7 +78,7 @@ var ( rollbackRegex = regexp.MustCompile(`^rollback`) //Global Vars - cliVersion = "0.0.1" + cliVersion = "0.0.2" ) // listFunction operation for Elastic Beanstalk Environment @@ -140,6 +141,7 @@ func createFunction(createMethod string, awsConfig config.Config) { additionalConfigOptions["AppName"] = *createEnvironmentApplicationNameArg additionalConfigOptions["AppBucket"] = bucketInfo[0] additionalConfigOptions["AppKey"] = bucketInfo[1] + "/" + *createEnvironmentVersionArg + ".zip" + additionalConfigOptions["VersionLabel"] = *createEnvironmentVersionArg additionalConfigOptions["Tier"] = *createEnvironmentTierArg configOptions := utils.GetConfig(*createEnvironmentConfigArg) @@ -186,19 +188,40 @@ func updateFunction(updateMethod string, awsConfig config.Config) { bucketInfo := s3Service.ParseS3Bucket(*updateEnvironmentS3Arg) - svc := elasticbeanstalk.New( - *updateEnvironmentApplicationNameArg, *updateEnvironmentNameArg, - *updateEnvironmentVersionArg, *updateEnvironmentDescriptionArg, - bucketInfo, "versions/"+*updateEnvironmentVersionArg+".zip", - *updateEnvironmentTierArg, awsConfig, - ) - switch updateMethod { case "update environment": - if *updateEnvironmentS3Arg != "" { + environment := utils.GetDefault(*updateEnvironmentNameArg, *updateEnvironmentApplicationNameArg) + asset, err := Asset(fmt.Sprintf("resources/cloudformation/templates/%s_v1.json", *updateEnvironmentTierArg)) + + if err != nil { + log.Fatalf("Asset not found: %s", err) + return + } + + if *updateEnvironmentVersionArg != "" { s3Service.UploadSingleFile(*updateEnvironmentS3Arg, *updateEnvironmentLocalFilePathArg+"/"+*updateEnvironmentVersionArg+".zip", *updateEnvironmentVersionArg) } - svc.UpdateEnvironment() + + configOptions := make(map[string]string) + configOptions["EnvName"] = environment + configOptions["AppName"] = *updateEnvironmentApplicationNameArg + if len(bucketInfo) > 0 { + configOptions["AppBucket"] = bucketInfo[0] + configOptions["AppKey"] = bucketInfo[1] + "/" + *updateEnvironmentVersionArg + ".zip" + } + configOptions["VersionLabel"] = *updateEnvironmentVersionArg + configOptions["Tier"] = *updateEnvironmentTierArg + + usePreviousTemplate := true + + if *updateEnvironmentConfigArg != "" { + configOptions = utils.CombineConfigOptions(utils.GetConfig(*updateEnvironmentConfigArg), configOptions) + usePreviousTemplate = false + } + + cfServcie := cloudformation.New(awsConfig) + + cfServcie.UpdateStack(configOptions, asset, usePreviousTemplate) } } diff --git a/resources/cloudformation/templates/webserver_v1.json b/resources/cloudformation/templates/webserver_v1.json index 2b5ab62..a2908b6 100644 --- a/resources/cloudformation/templates/webserver_v1.json +++ b/resources/cloudformation/templates/webserver_v1.json @@ -1,88 +1,296 @@ { "Parameters" : { - "appName" : { "Description" : "Name of Application.", "Type" : "String" }, - + "versionLabel" : { + "Description" : "Name of Version.", + "Type" : "String" + }, "appBucket" : { "Description" : "Bucket name where App Bundle is located.", "Type" : "String" }, - "appKey" : { "Description" : "Folder/Filename of App Bundle.", "Type" : "String" }, - "envName" : { "Description" : "Name of the Environment", "Type" : "String" }, - "tier" : { "Description" : "Environment Tier (webserver or worker)", "Type" : "String", - "Default" : "Webserver" + "Default" : "Worker" }, - - "vpc" : { + "vpcId" : { "Description" : "Name of existing VPC ID.", "Type" : "String" }, - - "privateSubnets" : { + "vpcPrivateSubnets" : { "Description" : "Subnet Id(s) for application assignment.", "Type" : "String" }, - - "publicSubnets" : { + "vpcElbSubnets" : { "Description" : "Subnet Id(s) for ELB assignment.", "Type" : "String" }, - - "solutionStack" : { - "Description" : "Solution Stack used for build.", - "Type" : "String" - }, - - "elbCross" : { + "loadbalancerCrossZone" : { "Description" : "Will ELB cross availability zones. True/False Boolean.", "Type" : "String", "Default" : "true", "AllowedValues" : [ "true", "false" ] }, - - "keyName" : { - "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the Elastic Beanstalk hosts", - "Type": "String" - }, - - "serviceRole" : { + "loadbalancerSecurityGroups" : { + "Description" : "Will ELB cross availability zones. True/False Boolean.", + "Type" : "String", + "Default" : "" + }, + "loadbalancerManagedSecurityGroup" : { + "Description" : "Will ELB cross availability zones. True/False Boolean.", + "Type" : "String", + "Default" : "" + }, + "environmentServiceRole" : { "Description" : "IAM role used by Elastic Beanstalk to manage services.", + "Type" : "String", + "Default" : "aws-elasticbeanstalk-service-role" + }, + "vpcElbScheme" : { + "Description" : "Internal or External", + "Type" : "String", + "Default" : "Internal" + }, + "vpcAssociatePublicIpAddress" : { + "Description" : "", + "Type" : "String", + "Default" : "false", + "AllowedValues" : [ "true", "false" ] + }, + "asgAvailabilityZones" : { + "Description" : "", + "Type" : "String", + "Default" : "Any 2" + }, + "asgMinSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "1" + }, + "asgMaxSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "4" + }, + "asgCooldown" : { + "Description" : "", + "Type" : "Number", + "Default" : "360" + }, + "solutionStack" : { + "Description" : "Solution Stack used for build.", "Type" : "String" }, - - "instanceRole" : { + "launchconfigEc2KeyName" : { + "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the Elastic Beanstalk hosts", + "Type": "String", + "Default" : "" + }, + "launchconfigInstanceRole" : { "Description" : "IAM role used by Elastic Beanstalk to manage instances.", - "Type" : "String" + "Type" : "String", + "Default" : "aws-elasticbeanstalk-ec2-role" + }, + "launchconfigInstanceType" : { + "Description" : "Instance Type", + "Type" : "String", + "Default": "t1.micro" + }, + "launchconfigMonitoringInterval" : { + "Description" : "", + "Type" : "String", + "Default" : "5 minute" + }, + "launchconfigRootVolumeType" : { + "Description" : "", + "Type" : "String", + "Default" : "gp2" + }, + "launchconfigRootVolumeSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "15" + }, + "cloudwatchStreamLogs" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "cloudwatchDeleteOnTerminate" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "cloudwatchRetentionInDays" : { + "Description" : "", + "Type" : "Number", + "Default" : "7" + }, + "commandDeploymentPolicy" : { + "Description" : "", + "Type" : "String", + "Default" : "AllAtOnce" + }, + "commandTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "600" + }, + "commandBatchSizeType" : { + "Description" : "", + "Type" : "String", + "Default" : "Percentage" + }, + "commandBatchSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "100" + }, + "commandIgnoreHealthCheck" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "commandHealthcheckSuccessThreshold" : { + "Description" : "", + "Type" : "String", + "Default" : "Ok" + }, + "healthcheckHealthyThreshold" : { + "Description" : "", + "Type" : "Number", + "Default" : "3" + }, + "healthcheckInterval" : { + "Description" : "", + "Type" : "Number", + "Default" : "10" + }, + "healthcheckTimeout" : { + "Description" : "", + "Type" : "Number", + "Default" : "5" + }, + "healthcheckUnhealthyThreshold" : { + "Description" : "", + "Type" : "Number", + "Default" : "5" + }, + "healthreportingSystemType" : { + "Description" : "", + "Type" : "String", + "Default" : "basic" + }, + "monitoringAutomaticallyTerminateUnhealthyInstances" : { + "Description" : "", + "Type" : "String", + "Default" : "true" + }, + "rollingupdateMinInstancesInService" : { + "Description" : "", + "Type" : "Number", + "Default" : "0" + }, + "rollingupdateEnabled" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "rollingupdateType" : { + "Description" : "", + "Type" : "String", + "Default" : "Time" + }, + "rollingupdateTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "PT30M" + }, + "applicationHealthcheckUrl" : { + "Description" : "", + "Type" : "String", + "Default" : "" + }, + "environmentLoadBalancerType" : { + "Description" : "", + "Type" : "String", + "Default" : "classic" + }, + "environmentType" : { + "Description" : "", + "Type" : "String", + "Default" : "LoadBalanced" + }, + "sqsdWorkerQueueUrl" : { + "Description" : "", + "Type" : "String", + "Default" : "" + }, + "sqsdHttpPath" : { + "Description" : "", + "Type" : "String", + "Default" : "/" + }, + "sqsdMimeType" : { + "Description" : "", + "Type" : "String", + "Default" : "application/json" + }, + "sqsdHttpConnections" : { + "Description" : "", + "Type" : "String", + "Default" : "15" + }, + "sqsdConnectTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "5" + }, + "sqsdInactivityTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "180" + }, + "sqsdVisibilityTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "300" + }, + "sqsdErrorVisibilityTimeout" : { + "Description" : "", + "Type" : "Number", + "Default" : "2" + }, + "sqsdRetentionPeriod" : { + "Description" : "", + "Type" : "Number", + "Default" : "345600" + }, + "sqsdMaxRetries" : { + "Description" : "", + "Type" : "Number", + "Default" : "10" } }, "Resources" : { - - "Application" : { - "Type" : "AWS::ElasticBeanstalk::Application", - "Properties" : { - "ApplicationName" : { "Ref" : "appName" } - } - }, - "ApplicationVersion" : { "Type" : "AWS::ElasticBeanstalk::ApplicationVersion", "Properties" : { - "ApplicationName" : { "Ref" : "Application" }, + "ApplicationName" : { "Ref" : "appName" }, + "Description": { "Ref" : "versionLabel" }, "SourceBundle" : { "S3Bucket" : { "Ref" : "appBucket" }, "S3Key" : { "Ref" : "appKey" } @@ -93,24 +301,56 @@ "Environment" : { "Type" : "AWS::ElasticBeanstalk::Environment", "Properties" : { - "ApplicationName" : { "Ref" : "Application" }, + "ApplicationName" : { "Ref" : "appName" }, "EnvironmentName" : { "Ref" : "envName" }, "SolutionStackName" : { "Ref" : "solutionStack" }, "VersionLabel" : { "Ref" : "ApplicationVersion" }, "OptionSettings" : [ - {"Namespace" : "aws:ec2:vpc", "OptionName" : "VPCId", "Value" : { "Ref" : "vpc" }}, - {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Availability Zones", "Value" : "Any 2" }, - {"Namespace" : "aws:ec2:vpc", "OptionName" : "Subnets", "Value" : { "Ref" : "privateSubnets" }}, - {"Namespace" : "aws:ec2:vpc", "OptionName" : "ELBSubnets", "Value" : { "Ref" : "publicSubnets" }}, - {"Namespace" : "aws:elb:loadbalancer", "OptionName" : "CrossZone", "Value" : { "Ref" : "elbCross" }}, - {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "ServiceRole", "Value" : { "Ref" : "serviceRole" }}, - {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "keyName" }}, - {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : { "Ref" : "instanceRole" }} + {"Namespace" : "aws:ec2:vpc", "OptionName" : "VPCId", "Value" : { "Ref" : "vpcId" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "Subnets", "Value" : { "Ref" : "vpcPrivateSubnets" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "ELBSubnets", "Value" : { "Ref" : "vpcElbSubnets" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "ELBScheme", "Value" : { "Ref" : "vpcElbScheme" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "AssociatePublicIpAddress", "Value" : { "Ref" : "vpcAssociatePublicIpAddress" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Availability Zones", "Value" : { "Ref" : "asgAvailabilityZones" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "MinSize", "Value" : { "Ref" : "asgMinSize" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "MaxSize", "Value" : { "Ref" : "asgMaxSize" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Cooldown", "Value" : { "Ref" : "asgCooldown" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "launchconfigEc2KeyName" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : {"Ref" : "launchconfigInstanceRole"}}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "InstanceType", "Value" : { "Ref" : "launchconfigInstanceType" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "MonitoringInterval", "Value" : { "Ref" : "launchconfigMonitoringInterval" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "RootVolumeSize", "Value" : { "Ref" : "launchconfigRootVolumeSize" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "RootVolumeType", "Value" : { "Ref" : "launchconfigRootVolumeType" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "StreamLogs", "Value" : { "Ref" : "cloudwatchStreamLogs" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "DeleteOnTerminate", "Value" : { "Ref" : "cloudwatchDeleteOnTerminate" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "RetentionInDays", "Value" : { "Ref" : "cloudwatchRetentionInDays" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "DeploymentPolicy", "Value" : { "Ref" : "commandDeploymentPolicy" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "Timeout", "Value" : { "Ref" : "commandTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "BatchSizeType", "Value" : { "Ref" : "commandBatchSizeType" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "BatchSize", "Value" : { "Ref" : "commandBatchSize" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "IgnoreHealthCheck", "Value" : { "Ref" : "commandIgnoreHealthCheck" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "HealthCheckSuccessThreshold", "Value" : { "Ref" : "commandHealthcheckSuccessThreshold" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "HealthyThreshold", "Value" : { "Ref" : "healthcheckHealthyThreshold" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "Interval", "Value" : { "Ref" : "healthcheckInterval" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "Timeout", "Value" : { "Ref" : "healthcheckTimeout" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "UnhealthyThreshold", "Value" : { "Ref" : "healthcheckUnhealthyThreshold" }}, + {"Namespace" : "aws:elasticbeanstalk:healthreporting:system", "OptionName" : "SystemType", "Value" : { "Ref" : "healthreportingSystemType" }}, + {"Namespace" : "aws:elasticbeanstalk:monitoring", "OptionName" : "Automatically Terminate Unhealthy Instances", "Value" : { "Ref" : "monitoringAutomaticallyTerminateUnhealthyInstances" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "MinInstancesInService", "Value" : { "Ref" : "rollingupdateMinInstancesInService" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "RollingUpdateEnabled", "Value" : { "Ref" : "rollingupdateEnabled" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "RollingUpdateType", "Value" : { "Ref" : "rollingupdateType" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "Timeout", "Value" : { "Ref" : "rollingupdateTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:application", "OptionName" : "Application Healthcheck URL", "Value" : { "Ref" : "applicationHealthcheckUrl" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "ServiceRole", "Value" : { "Ref" : "environmentServiceRole" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "LoadBalancerType", "Value" : { "Ref" : "environmentLoadBalancerType" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : { "Ref" : "environmentType" }}, + {"Namespace" : "aws:elb:loadbalancer", "OptionName" : "CrossZone", "Value" : { "Ref" : "loadbalancerCrossZone" }}, + {"Namespace" : "aws:elb:loadbalancer", "OptionName" : "SecurityGroups", "Value" : { "Ref" : "loadbalancerSecurityGroups" }}, + {"Namespace" : "aws:elb:loadbalancer", "OptionName" : "ManagedSecurityGroup", "Value" : { "Ref" : "loadbalancerManagedSecurityGroup" }} ] } } }, - "Outputs" : { "URL" : { "Description" : "DNS Name for Environment Load Balancer.", diff --git a/resources/cloudformation/templates/worker_v1.json b/resources/cloudformation/templates/worker_v1.json index d8929ef..19e14d6 100644 --- a/resources/cloudformation/templates/worker_v1.json +++ b/resources/cloudformation/templates/worker_v1.json @@ -1,72 +1,287 @@ { "Parameters" : { - "appName" : { "Description" : "Name of Application.", "Type" : "String" }, - + "versionLabel" : { + "Description" : "Name of Version.", + "Type" : "String" + }, "appBucket" : { "Description" : "Bucket name where App Bundle is located.", "Type" : "String" }, - "appKey" : { "Description" : "Folder/Filename of App Bundle.", "Type" : "String" }, - "envName" : { "Description" : "Name of the Environment", "Type" : "String" }, - "tier" : { "Description" : "Environment Tier (webserver or worker)", "Type" : "String", "Default" : "Worker" }, - - "vpc" : { + "vpcId" : { "Description" : "Name of existing VPC ID.", "Type" : "String" }, - - "privateSubnets" : { + "vpcPrivateSubnets" : { "Description" : "Subnet Id(s) for application assignment.", "Type" : "String" }, - - "publicSubnets" : { + "vpcElbSubnets" : { "Description" : "Subnet Id(s) for ELB assignment.", "Type" : "String" }, - - "elbCross" : { + "loadbalancerCrossZone" : { "Description" : "Will ELB cross availability zones. True/False Boolean.", "Type" : "String", "Default" : "true", "AllowedValues" : [ "true", "false" ] }, - + "loadbalancerSecurityGroups" : { + "Description" : "Will ELB cross availability zones. True/False Boolean.", + "Type" : "String", + "Default" : "" + }, + "loadbalancerManagedSecurityGroup" : { + "Description" : "Will ELB cross availability zones. True/False Boolean.", + "Type" : "String", + "Default" : "" + }, + "environmentServiceRole" : { + "Description" : "IAM role used by Elastic Beanstalk to manage services.", + "Type" : "String", + "Default" : "aws-elasticbeanstalk-service-role" + }, + "vpcElbScheme" : { + "Description" : "Internal or External", + "Type" : "String", + "Default" : "Internal" + }, + "vpcAssociatePublicIpAddress" : { + "Description" : "", + "Type" : "String", + "Default" : "false", + "AllowedValues" : [ "true", "false" ] + }, + "asgAvailabilityZones" : { + "Description" : "", + "Type" : "String", + "Default" : "Any 2" + }, + "asgMinSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "1" + }, + "asgMaxSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "4" + }, + "asgCooldown" : { + "Description" : "", + "Type" : "Number", + "Default" : "360" + }, "solutionStack" : { "Description" : "Solution Stack used for build.", "Type" : "String" }, - - "keyName" : { - "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the Elastic Beanstalk hosts", - "Type": "String" - }, - - "serviceRole" : { - "Description" : "IAM role used by Elastic Beanstalk to manage services.", - "Type" : "String" + "launchconfigEc2KeyName" : { + "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the Elastic Beanstalk hosts", + "Type": "String", + "Default" : "" }, - - "instanceRole" : { + "launchconfigInstanceRole" : { "Description" : "IAM role used by Elastic Beanstalk to manage instances.", - "Type" : "String" + "Type" : "String", + "Default" : "aws-elasticbeanstalk-ec2-role" + }, + "launchconfigInstanceType" : { + "Description" : "Instance Type", + "Type" : "String", + "Default": "t1.micro" + }, + "launchconfigMonitoringInterval" : { + "Description" : "", + "Type" : "String", + "Default" : "5 minute" + }, + "launchconfigRootVolumeType" : { + "Description" : "", + "Type" : "String", + "Default" : "gp2" + }, + "launchconfigRootVolumeSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "15" + }, + "cloudwatchStreamLogs" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "cloudwatchDeleteOnTerminate" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "cloudwatchRetentionInDays" : { + "Description" : "", + "Type" : "Number", + "Default" : "7" + }, + "commandDeploymentPolicy" : { + "Description" : "", + "Type" : "String", + "Default" : "AllAtOnce" + }, + "commandTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "600" + }, + "commandBatchSizeType" : { + "Description" : "", + "Type" : "String", + "Default" : "Percentage" + }, + "commandBatchSize" : { + "Description" : "", + "Type" : "Number", + "Default" : "100" + }, + "commandIgnoreHealthCheck" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "commandHealthcheckSuccessThreshold" : { + "Description" : "", + "Type" : "String", + "Default" : "Ok" + }, + "healthcheckHealthyThreshold" : { + "Description" : "", + "Type" : "Number", + "Default" : "3" + }, + "healthcheckInterval" : { + "Description" : "", + "Type" : "Number", + "Default" : "10" + }, + "healthcheckTimeout" : { + "Description" : "", + "Type" : "Number", + "Default" : "5" + }, + "healthcheckUnhealthyThreshold" : { + "Description" : "", + "Type" : "Number", + "Default" : "5" + }, + "healthreportingSystemType" : { + "Description" : "", + "Type" : "String", + "Default" : "basic" + }, + "monitoringAutomaticallyTerminateUnhealthyInstances" : { + "Description" : "", + "Type" : "String", + "Default" : "true" + }, + "rollingupdateMinInstancesInService" : { + "Description" : "", + "Type" : "Number", + "Default" : "0" + }, + "rollingupdateEnabled" : { + "Description" : "", + "Type" : "String", + "Default" : "false" + }, + "rollingupdateType" : { + "Description" : "", + "Type" : "String", + "Default" : "Time" + }, + "rollingupdateTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "PT30M" + }, + "applicationHealthcheckUrl" : { + "Description" : "", + "Type" : "String", + "Default" : "" + }, + "environmentLoadBalancerType" : { + "Description" : "", + "Type" : "String", + "Default" : "classic" + }, + "environmentType" : { + "Description" : "", + "Type" : "String", + "Default" : "LoadBalanced" + }, + "sqsdWorkerQueueUrl" : { + "Description" : "", + "Type" : "String", + "Default" : "" + }, + "sqsdHttpPath" : { + "Description" : "", + "Type" : "String", + "Default" : "/" + }, + "sqsdMimeType" : { + "Description" : "", + "Type" : "String", + "Default" : "application/json" + }, + "sqsdHttpConnections" : { + "Description" : "", + "Type" : "String", + "Default" : "15" + }, + "sqsdConnectTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "5" + }, + "sqsdInactivityTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "180" + }, + "sqsdVisibilityTimeout" : { + "Description" : "", + "Type" : "String", + "Default" : "300" + }, + "sqsdErrorVisibilityTimeout" : { + "Description" : "", + "Type" : "Number", + "Default" : "2" + }, + "sqsdRetentionPeriod" : { + "Description" : "", + "Type" : "Number", + "Default" : "345600" + }, + "sqsdMaxRetries" : { + "Description" : "", + "Type" : "Number", + "Default" : "10" } }, @@ -75,6 +290,7 @@ "Type" : "AWS::ElasticBeanstalk::ApplicationVersion", "Properties" : { "ApplicationName" : { "Ref" : "appName" }, + "Description": { "Ref" : "versionLabel" }, "SourceBundle" : { "S3Bucket" : { "Ref" : "appBucket" }, "S3Key" : { "Ref" : "appKey" } @@ -94,12 +310,54 @@ "Type" : "SQS/HTTP" }, "OptionSettings" : [ - {"Namespace" : "aws:ec2:vpc", "OptionName" : "VPCId", "Value" : { "Ref" : "vpc" }}, - {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Availability Zones", "Value" : "Any 2" }, - {"Namespace" : "aws:ec2:vpc", "OptionName" : "Subnets", "Value" : { "Ref" : "privateSubnets" }}, - {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "ServiceRole", "Value" : { "Ref" : "serviceRole" }}, - {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "keyName" }}, - {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : { "Ref" : "instanceRole" }} + {"Namespace" : "aws:ec2:vpc", "OptionName" : "VPCId", "Value" : { "Ref" : "vpcId" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "Subnets", "Value" : { "Ref" : "vpcPrivateSubnets" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "ELBSubnets", "Value" : { "Ref" : "vpcElbSubnets" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "ELBScheme", "Value" : { "Ref" : "vpcElbScheme" }}, + {"Namespace" : "aws:ec2:vpc", "OptionName" : "AssociatePublicIpAddress", "Value" : { "Ref" : "vpcAssociatePublicIpAddress" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Availability Zones", "Value" : { "Ref" : "asgAvailabilityZones" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "MinSize", "Value" : { "Ref" : "asgMinSize" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "MaxSize", "Value" : { "Ref" : "asgMaxSize" }}, + {"Namespace" : "aws:autoscaling:asg", "OptionName" : "Cooldown", "Value" : { "Ref" : "asgCooldown" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "launchconfigEc2KeyName" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : {"Ref" : "launchconfigInstanceRole"}}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "InstanceType", "Value" : { "Ref" : "launchconfigInstanceType" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "MonitoringInterval", "Value" : { "Ref" : "launchconfigMonitoringInterval" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "RootVolumeSize", "Value" : { "Ref" : "launchconfigRootVolumeSize" }}, + {"Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "RootVolumeType", "Value" : { "Ref" : "launchconfigRootVolumeType" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "StreamLogs", "Value" : { "Ref" : "cloudwatchStreamLogs" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "DeleteOnTerminate", "Value" : { "Ref" : "cloudwatchDeleteOnTerminate" }}, + {"Namespace" : "aws:elasticbeanstalk:cloudwatch:logs", "OptionName" : "RetentionInDays", "Value" : { "Ref" : "cloudwatchRetentionInDays" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "DeploymentPolicy", "Value" : { "Ref" : "commandDeploymentPolicy" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "Timeout", "Value" : { "Ref" : "commandTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "BatchSizeType", "Value" : { "Ref" : "commandBatchSizeType" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "BatchSize", "Value" : { "Ref" : "commandBatchSize" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "IgnoreHealthCheck", "Value" : { "Ref" : "commandIgnoreHealthCheck" }}, + {"Namespace" : "aws:elasticbeanstalk:command", "OptionName" : "HealthCheckSuccessThreshold", "Value" : { "Ref" : "commandHealthcheckSuccessThreshold" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "HealthyThreshold", "Value" : { "Ref" : "healthcheckHealthyThreshold" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "Interval", "Value" : { "Ref" : "healthcheckInterval" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "Timeout", "Value" : { "Ref" : "healthcheckTimeout" }}, + {"Namespace" : "aws:elb:healthcheck", "OptionName" : "UnhealthyThreshold", "Value" : { "Ref" : "healthcheckUnhealthyThreshold" }}, + {"Namespace" : "aws:elasticbeanstalk:healthreporting:system", "OptionName" : "SystemType", "Value" : { "Ref" : "healthreportingSystemType" }}, + {"Namespace" : "aws:elasticbeanstalk:monitoring", "OptionName" : "Automatically Terminate Unhealthy Instances", "Value" : { "Ref" : "monitoringAutomaticallyTerminateUnhealthyInstances" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "MinInstancesInService", "Value" : { "Ref" : "rollingupdateMinInstancesInService" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "RollingUpdateEnabled", "Value" : { "Ref" : "rollingupdateEnabled" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "RollingUpdateType", "Value" : { "Ref" : "rollingupdateType" }}, + {"Namespace" : "aws:autoscaling:updatepolicy:rollingupdate", "OptionName" : "Timeout", "Value" : { "Ref" : "rollingupdateTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:application", "OptionName" : "Application Healthcheck URL", "Value" : { "Ref" : "applicationHealthcheckUrl" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "ServiceRole", "Value" : { "Ref" : "environmentServiceRole" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "LoadBalancerType", "Value" : { "Ref" : "environmentLoadBalancerType" }}, + {"Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : { "Ref" : "environmentType" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "WorkerQueueURL", "Value" : { "Ref" : "sqsdWorkerQueueUrl" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "HttpPath", "Value" : { "Ref" : "sqsdHttpPath" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "MimeType", "Value" : { "Ref" : "sqsdMimeType" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "HttpConnections", "Value" : { "Ref" : "sqsdHttpConnections" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "ConnectTimeout", "Value" : { "Ref" : "sqsdConnectTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "InactivityTimeout", "Value" : { "Ref" : "sqsdInactivityTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "VisibilityTimeout", "Value" : { "Ref" : "sqsdVisibilityTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "ErrorVisibilityTimeout", "Value" : { "Ref" : "sqsdErrorVisibilityTimeout" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "RetentionPeriod", "Value" : { "Ref" : "sqsdRetentionPeriod" }}, + {"Namespace" : "aws:elasticbeanstalk:sqsd", "OptionName" : "MaxRetries", "Value" : { "Ref" : "sqsdMaxRetries" }} ] } }