# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of this # software and associated documentation files (the "Software"), to deal in the Software # without restriction, including without limitation the rights to use, copy, modify, # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # portions of this makefile were based from https://gist.github.com/mpneuried/0594963ad38e68917ef189b4e6a269db ifndef APP_NAME APP_NAME = lambda endif ZIP_FILE = lambda.zip S3_BUCKET_NAME = devint-bryawood-lambda S3_OBJECT_NAME = lambda5.zip #cnf ?= config.env #include $(cnf) #export $(shell sed 's/=.*//' $(cnf)) # HELP # This will output the help for each task # thanks to https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html .PHONY: help help: ## Print this help (default target) @awk 'BEGIN {FS = ":.*?## "} /^[a-z\/\.A-Z_-]+:.*?## / {printf "%s|%s\n", $$1, $$2}' \ $(MAKEFILE_LIST) | column -ts\| .DEFAULT_GOAL := help .ONESHELL: .INTERMEDIATE: build # DOCKER TASKS clean: docker stop $(APP_NAME) docker rm $(APP_NAME) docker rmi $(APP_NAME) rm -f docker/Dockerfile \ docker/.docker-install-touchfile \ docker/.s3copy-touchfile \ docker/container_volume/$(ZIP_FILE) rm -rf docker/vsphere-automation-sdk-python sudo rm -rf docker/container_volume/__pycache__ docker/.docker-install-touchfile: sudo yum update -y sudo yum install -y docker git sudo usermod -a -G docker $(USER) mkdir -p docker/container_volume touch docker/.docker-install-touchfile docker/vsphere-automation-sdk-python: cd docker && \ git clone https://github.com/vmware/vsphere-automation-sdk-python.git docker/Dockerfile: Makefile cat <<-EOB > docker/Dockerfile FROM python:3.6 COPY vsphere-automation-sdk-python /vsphere-automation-sdk-python RUN mkdir -p /lambda /container_volume # Install dependencies under /lambda: RUN apt-get update -y RUN apt-get install zip -y RUN pip install -t /lambda --upgrade pip RUN pip install -t /lambda requests retry tabulate RUN pip install -t /lambda --upgrade \ --force-reinstall \ -r /vsphere-automation-sdk-python/requirements.txt \ --extra-index-url file:///vsphere-automation-sdk-python/lib # zip all dependencies, to be used as Lambda deployment package: RUN cd /lambda && zip -r9 /$(ZIP_FILE) . WORKDIR /container_volume # add /lambda to PYTHONPATH for ad-hoc/interactive work: ENV PYTHONPATH $PYTHONPATH:/lambda CMD ["/bin/bash"] # Example Session: # # [ec2-user@ip-10-51-3-121 ~]$ make run # docker run -iv /home/ec2-user/docker/d/docker/container_volume:/container_volume -t --rm --name="lambda-run" lambda # root@41615cf1f660:/container_volume# python3 # Python 3.6.6 (default, Jul 4 2018, 02:29:03) # [GCC 6.3.0 20170516] on linux # Type "help", "copyright", "credits" or "license" for more information. # >>> # >>> import awsvmc # >>> # >>> v = awsvmc.VMC('your_OAuth_refresh_token') # >>> o = awsvmc.ORG(v,'00000000-0000-0000-0000-000000000000') # >>> o.listSddcs() # # SddcId Name Created Updated State # ------------------------------------ ------------------ ---------- ---------- ------- # 312e7e05-60eb-4311-a596-f606e0ef03b5 HAL9000 06/25/2018 07/04/2018 READY # # >>> # >>> s = awsvmc.SDDC(o,'312e7e05-60eb-4311-a596-f606e0ef03b5') # >>> vc = awsvmc.VC(s) # >>> vc.listContentLibraries() # # Name Created Synced SubscriptionURL # ------------------------ ---------- ---------- ----------------------------------------------- # Lab Content Library 06/22/2018 07/04/2018 https://s3-us-west-2.amazonaws.com/.../lib.json # # >>> EOB docker/container_volume/$(ZIP_FILE) : | build build: docker/.docker-install-touchfile docker/Dockerfile docker/vsphere-automation-sdk-python ## Build the container image cd docker && \ docker build -t $(APP_NAME) . docker run -v $(PWD)/docker/container_volume:/container_volume \ --rm --name="$(APP_NAME)-run" $(APP_NAME) cp /$(ZIP_FILE) /container_volume build-nc: docker/.docker-install-touchfile docker/Dockerfile docker/vsphere-automation-sdk-python ## Build the container image without caching cd docker && \ docker build --no-cache -t $(APP_NAME) . docker run -v $(PWD)/docker/container_volume:/container_volume \ --rm --name="$(APP_NAME)-run" $(APP_NAME) cp /$(ZIP_FILE) /container_volume s3copy: docker/container_volume/$(ZIP_FILE) ## Copy deployment package to S3 aws s3 cp docker/container_volume/$(ZIP_FILE) s3://$(S3_BUCKET_NAME)/$(S3_OBJECT_NAME) && \ touch docker/.s3copy-touchfile create: docker/container_volume/$(ZIP_FILE) ## Create container from image docker create -iv $(PWD)/docker/container_volume:/container_volume \ --name $(APP_NAME) $(APP_NAME) /bin/bash docker start $(APP_NAME) run: docker/container_volume/$(ZIP_FILE) ## Run container from image docker run -iv $(PWD)/docker/container_volume:/container_volume -t \ --rm --name="$(APP_NAME)-run" $(APP_NAME) interact: docker/container_volume/$(ZIP_FILE) ## Run container, launch ./interact.py script docker run -iv $(PWD)/docker/container_volume:/container_volume -t \ --rm --name="$(APP_NAME)-run" $(APP_NAME) ./interact.py up: docker/container_volume/$(ZIP_FILE) run ## Build then run container stop: ## Stop and remove a running container docker stop $(APP_NAME); docker rm $(APP_NAME) status: | docker/container_status docker/image_status ## Run docker container ls -a ; docker container image ls -a docker/container_status: docker container ls -a docker/image_status: docker image ls -a