Fix API gw installation issue and use local .wskprops files (#200)

* Improvements to make quick-start.

* Use local wskproperties file instead of overwriting the users file if it exists.
diff --git a/.gitignore b/.gitignore
index 3cdf0a8..3d8fc6e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 openwhisk-src
+.wskprops
 
 *.iml
 .idea
diff --git a/docker-compose/Makefile b/docker-compose/Makefile
index 15dd0b1..7d60234 100644
--- a/docker-compose/Makefile
+++ b/docker-compose/Makefile
@@ -19,9 +19,10 @@
 DOCKER_REGISTRY ?= ""
 DOCKER_IMAGE_PREFIX ?= openwhisk
 OPENWHISK_VERSION ?= master
-OPENWHISK_PROJECT_HOME ?= ./openwhisk-src
-OPENWHISK_CATALOG_HOME ?= ./openwhisk-catalog
+OPENWHISK_PROJECT_HOME ?= $(CURDIR)/openwhisk-src
+OPENWHISK_CATALOG_HOME ?= $(CURDIR)/openwhisk-catalog
 WSK_CLI ?= $(OPENWHISK_PROJECT_HOME)/bin/wsk
+WSK_CONFIG_FILE=$(CURDIR)/.wskprops
 OPEN_WHISK_DB_PREFIX ?= local_
 
 DOCKER_KERNEL ?= $(shell docker version --format "{{.Server.KernelVersion}}")
@@ -46,10 +47,10 @@
 
 .PHONY: download-src
 download-src:
-	if [ ! $(OPENWHISK_PROJECT_HOME) = "./openwhisk-src" ]; then \
+	if [ ! $(OPENWHISK_PROJECT_HOME) = "$(CURDIR)/openwhisk-src" ]; then \
 		echo "Skipping downloading the code as OPENWHISK_PROJECT_HOME is set to " $(OPENWHISK_PROJECT_HOME); \
 	else \
-		rm -rf ./openwhisk-src; \
+		rm -rf $(CURDIR)/openwhisk-src; \
 		curl -o ./openwhisk-src.tar.gz -L https://github.com/apache/incubator-openwhisk/archive/$(OPENWHISK_VERSION).tar.gz; \
 		echo "Unpacking tarball."; \
 	    mkdir -p $(OPENWHISK_PROJECT_HOME); \
@@ -59,8 +60,8 @@
 
 .PHONY: download-catalog
 download-catalog:
-	if [ "$(OPENWHISK_CATALOG_HOME)" = "./openwhisk-catalog" ]; then \
-	    rm -rf ./openwhisk-catalog*; \
+	if [ "$(OPENWHISK_CATALOG_HOME)" = "$(CURDIR)/openwhisk-catalog" ]; then \
+	    rm -rf $(CURDIR)/openwhisk-catalog*; \
 	    curl -O ./openwhisk-catalog.tar.gz -L https://api.github.com/repos/apache/incubator-openwhisk-catalog/tarball/master > ./openwhisk-catalog.tar.gz; \
 	    mkdir openwhisk-catalog; \
 	    tar -xf ./openwhisk-catalog.tar.gz --strip 1 -C openwhisk-catalog; \
@@ -77,9 +78,10 @@
 
 .PHONY: quick-start-info
 quick-start-info:
-	echo "$$(tput setaf 2)To invoke the function again use: $$(tput setaf 4)make hello-world$$(tput sgr0)"
-	echo "$$(tput setaf 2)To stop OpenWhisk use: $$(tput setaf 4)make destroy$$(tput sgr0)"
-
+	echo "$$(tput setaf 2)To invoke the function again use: $$(tput setaf 6)make hello-world$$(tput sgr0)"
+	echo "$$(tput setaf 2)To stop OpenWhisk use: $$(tput setaf 6)make destroy$$(tput sgr0)"
+	echo "$$(tput setaf 2)To use the wsk CLI: $$(tput setaf 6)export WSK_CONFIG_FILE=$(WSK_CONFIG_FILE)$$(tput sgr0)"
+	echo "                    $$(tput setaf 6)or copy the file to $(HOME)/.wskprops$$(tput sgr0)"
 # deprecated commands
 .PHONY: docker_build
 docker_build:
@@ -292,15 +294,17 @@
 init-whisk-cli:
 	echo "waiting for the Whisk controller to come up ... "
 	until $$(curl --output /dev/null --silent --head --fail http://$(DOCKER_HOST_IP):8888/ping); do printf '.'; sleep 5; done
-	echo "initializing CLI ... "
-	$(WSK_CLI) -v property set --namespace guest --auth `cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.guest` --apihost https://$(DOCKER_HOST_IP) -i
+	echo "initializing CLI properties into $(WSK_CONFIG_FILE)"
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) property set --namespace guest --auth `cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.guest` --apihost https://$(DOCKER_HOST_IP) -i
 
 .PHONY: init-api-management
 init-api-management:
-	$(WSK_CLI) -v property set --namespace whisk.system --auth `cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.whisk.system` --apihost $(DOCKER_HOST_IP) -i
-	GW_USER="" GW_PWD="" GW_HOST_V2="http://$(DOCKER_HOST_IP):9000/v2" OPENWHISK_HOME=$(OPENWHISK_PROJECT_HOME) \
-		$(OPENWHISK_PROJECT_HOME)/ansible/roles/routemgmt/files/installRouteMgmt.sh $(shell cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.whisk.system) $(DOCKER_HOST_IP) /whisk.system $(WSK_CLI)
-	$(WSK_CLI) -v property set --namespace guest --auth `cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.guest` --apihost $(DOCKER_HOST_IP) -i
+	touch $(OPENWHISK_PROJECT_HOME)/whisk.properties
+	GW_USER="" \
+	GW_PWD="" \
+	GW_HOST_V2="http://$(DOCKER_HOST_IP):9000/v2" \
+	OPENWHISK_HOME=$(OPENWHISK_PROJECT_HOME) \
+	$(OPENWHISK_PROJECT_HOME)/ansible/roles/routemgmt/files/installRouteMgmt.sh $(shell cat $(OPENWHISK_PROJECT_HOME)/ansible/files/auth.whisk.system) $(DOCKER_HOST_IP) /whisk.system $(WSK_CLI)
 
 .PHONY: init-catalog
 init-catalog:
@@ -331,25 +335,25 @@
 	echo "invoking the hello-world function ... "
 
 	echo "$$(tput setaf 4)adding the function to whisk ...$$(tput sgr0)"
-	$(WSK_CLI) -i action create hello hello.js
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action create hello hello.js
 
 	echo "$$(tput setaf 4)invoking the function ...$$(tput sgr0)"
-	res=`$(WSK_CLI) -i action invoke hello --blocking --result` \
+	res=`WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action invoke hello --blocking --result` \
 	    && echo "invocation result:" $$res \
-	    && (echo $$res | grep "Hello, World") || ($(WSK_CLI) -i action delete hello && tail -n 200 ~/tmp/openwhisk/invoker/logs/invoker-local_logs.log ~/tmp/openwhisk/controller/logs/controller-local_logs.log && exit 1)
+	    && (echo $$res | grep "Hello, World") || (WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action delete hello && tail -n 200 ~/tmp/openwhisk/invoker/logs/invoker-local_logs.log ~/tmp/openwhisk/controller/logs/controller-local_logs.log && exit 1)
 
 	echo "$$(tput setaf 4)creating an API from the hello function ...$$(tput sgr0)"
-	$(WSK_CLI) -i action update "/guest/hello" --web true
-	web_action=`$(WSK_CLI) -i api create /hello /world get hello --response-type json | tail -n 1` \
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action update "/guest/hello" --web true
+	web_action=`WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i api create /hello /world get hello --response-type json | tail -n 1` \
 	    && echo "invoking: " $$web_action \
 	    && (echo $$web_action | xargs curl -sS | grep "Hello, World") || (echo "Error invoking the web action" && tail -n 200 ~/tmp/openwhisk/invoker/logs/invoker-local_logs.log ~/tmp/openwhisk/controller/logs/controller-local_logs.log && exit 1)
-	$(WSK_CLI) -i api list /hello
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i api list /hello
 
 	echo "$$(tput setaf 1)deleting the API ...$$(tput sgr0)"
-	$(WSK_CLI) -i api delete /hello
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i api delete /hello
 
 	echo "$$(tput setaf 1)deleting the function ...$$(tput sgr0)"
-	$(WSK_CLI) -i action delete hello
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action delete hello
 	rm hello.js
 
 .PHONY: create-hello-world-function
@@ -360,7 +364,7 @@
 # Using the hello-world function this task executes a performance test using Apache Benchmark
 .PHONY: hello-world-perf-test
 hello-world-perf-test: create-hello-world-function
-	$(WSK_CLI) -i action create hello-perf hello.js
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action create hello-perf hello.js
 
 	docker run --rm \
 	    --net openwhisk_default \
@@ -369,7 +373,7 @@
 	            -H "Content-Type:application/json" \
 	            http://controller:8888/api/v1/namespaces/guest/actions/hello-perf?blocking=true
 
-	$(WSK_CLI) -i action delete hello-perf
+	WSK_CONFIG_FILE=$(WSK_CONFIG_FILE) $(WSK_CLI) -i action delete hello-perf
 	rm hello.js
 
 .PHONY: pull