@@ -13,28 +13,22 @@ ACCTEST_COUNT = 1
1313TEST ?= ./...
1414SWAGGER_VERSION ?= 8.7
1515
16- GOVERSION ?= $(shell grep -e '^go' go.mod | cut -f 2 -d ' ')
17-
18- STACK_VERSION ?= 9.1.3
16+ USE_TLS ?= 0
17+ COMPOSE_FILE := docker-compose.yml
18+ ifeq ($(USE_TLS ) ,1)
19+ COMPOSE_FILE := docker-compose.tls.yml
20+ endif
1921
20- ELASTICSEARCH_NAME ?= terraform-elasticstack-es
21- ELASTICSEARCH_ENDPOINTS ?= http://$(ELASTICSEARCH_NAME ) :9200
2222ELASTICSEARCH_USERNAME ?= elastic
2323ELASTICSEARCH_PASSWORD ?= password
24- ELASTICSEARCH_NETWORK ?= elasticstack-network
25- ELASTICSEARCH_MEM ?= 2048m
2624
27- KIBANA_NAME ?= terraform-elasticstack-kb
28- KIBANA_ENDPOINT ?= http://$(KIBANA_NAME ) :5601
2925KIBANA_SYSTEM_USERNAME ?= kibana_system
3026KIBANA_SYSTEM_PASSWORD ?= password
3127KIBANA_API_KEY_NAME ?= kibana-api-key
3228
3329FLEET_NAME ?= terraform-elasticstack-fleet
3430FLEET_ENDPOINT ?= https://$(FLEET_NAME ) :8220
3531
36- SOURCE_LOCATION ?= $(shell pwd)
37-
3832export GOBIN = $(shell pwd) /bin
3933
4034
@@ -60,143 +54,32 @@ testacc: ## Run acceptance tests
6054test : # # Run unit tests
6155 go test -v $(TEST ) $(TESTARGS ) -timeout=5m -parallel=4
6256
63- # Retry command - first argument is how many attempts are required, second argument is the command to run
64- # Backoff starts with 1 second and double with next iteration
65- retry = until [ $$(if [ -z "$$attempt" ]; then echo -n "0"; else echo -n "$$attempt"; fi) -ge $(1 ) ]; do \
66- backoff=$$(if [ -z "$$backoff" ]; then echo "1"; else echo "$$backoff"; fi) ; \
67- sleep $$backoff; \
68- $(2 ) && break; \
69- attempt=$$((attempt + 1 ) ); \
70- backoff=$$((backoff * 2 ) ); \
71- done
72-
73- # wait_until_healthy command - first argument is the container name
74- wait_until_healthy = $(call retry, 5, [ "$$(docker inspect -f '{{ .State.Health.Status }}' $(1 ) ) " == "healthy" ])
75-
7657CURL_OPTS = -sS --retry 5 --retry-all-errors -X POST -u $(ELASTICSEARCH_USERNAME ) :$(ELASTICSEARCH_PASSWORD ) -H "Content-Type: application/json"
7758
7859# To run specific test (e.g. TestAccResourceActionConnector) execute `make docker-testacc TESTARGS='-run ^TestAccResourceActionConnector$$'`
7960# To enable tracing (or debugging), execute `make docker-testacc TF_LOG=TRACE`
8061.PHONY : docker-testacc
81- docker-testacc : docker-elasticsearch docker-kibana docker-fleet # # Run acceptance tests in the docker container
82- @ docker run --rm \
83- -e ELASTICSEARCH_ENDPOINTS=" $( ELASTICSEARCH_ENDPOINTS) " \
84- -e KIBANA_ENDPOINT=" $( KIBANA_ENDPOINT) " \
85- -e ELASTICSEARCH_USERNAME=" $( ELASTICSEARCH_USERNAME) " \
86- -e ELASTICSEARCH_PASSWORD=" $( ELASTICSEARCH_PASSWORD) " \
87- -e TF_LOG=" $( TF_LOG) " \
88- --network $(ELASTICSEARCH_NETWORK ) \
89- -w " /provider" \
90- -v " $( SOURCE_LOCATION) :/provider" \
91- golang:$(GOVERSION ) make testacc TESTARGS=" $( TESTARGS) "
62+ docker-testacc : docker-fleet # # Run acceptance tests in the docker container
63+ @ docker compose -f $(COMPOSE_FILE ) --profile acceptance-tests up --quiet-pull acceptance-tests
9264
9365# To run specific test (e.g. TestAccResourceActionConnector) execute `make docker-testacc TESTARGS='-run ^TestAccResourceActionConnector$$'`
9466# To enable tracing (or debugging), execute `make docker-testacc TF_LOG=TRACE`
9567.PHONY : docker-testacc-with-token
96- docker-testacc-with-token :
97- @ docker run --rm \
98- -e ELASTICSEARCH_ENDPOINTS=" $( ELASTICSEARCH_ENDPOINTS) " \
99- -e KIBANA_ENDPOINT=" $( KIBANA_ENDPOINT) " \
100- -e ELASTICSEARCH_BEARER_TOKEN=" $( ELASTICSEARCH_BEARER_TOKEN) " \
101- -e KIBANA_USERNAME=" $( ELASTICSEARCH_USERNAME) " \
102- -e KIBANA_PASSWORD=" $( ELASTICSEARCH_PASSWORD) " \
103- -e TF_LOG=" $( TF_LOG) " \
104- --network $(ELASTICSEARCH_NETWORK ) \
105- -w " /provider" \
106- -v " $( SOURCE_LOCATION) :/provider" \
107- golang:$(GOVERSION ) make testacc TESTARGS=" $( TESTARGS) "
68+ docker-testacc-with-token : docker-fleet
69+ @ export ELASTICSEARCH_BEARER_TOKEN=$(shell $(MAKE ) create-es-bearer-token | jq -r .access_token) ; \
70+ docker compose -f $(COMPOSE_FILE ) --profile token-acceptance-tests up --quiet-pull token-acceptance-tests;
10871
10972.PHONY : docker-elasticsearch
110- docker-elasticsearch : docker-network # # Start Elasticsearch single node cluster in docker container
111- @ docker rm -f $(ELASTICSEARCH_NAME ) & > /dev/null || true
112- @ docker run -d \
113- --memory $(ELASTICSEARCH_MEM ) \
114- -p 9200:9200 -p 9300:9300 \
115- -e " discovery.type=single-node" \
116- -e " xpack.security.enabled=true" \
117- -e " xpack.security.authc.api_key.enabled=true" \
118- -e " xpack.security.authc.token.enabled=true" \
119- -e " xpack.watcher.enabled=true" \
120- -e " xpack.license.self_generated.type=trial" \
121- -e " repositories.url.allowed_urls=https://example.com/*" \
122- -e " path.repo=/tmp" \
123- -e ELASTIC_PASSWORD=$(ELASTICSEARCH_PASSWORD ) \
124- --name $(ELASTICSEARCH_NAME ) \
125- --network $(ELASTICSEARCH_NETWORK ) \
126- --health-cmd=" curl http://localhost:9200/_cluster/health" \
127- --health-interval=10s --health-timeout=5s --health-retries=10 \
128- docker.elastic.co/elasticsearch/elasticsearch:$(STACK_VERSION )
129- @ $(call wait_until_healthy, $(ELASTICSEARCH_NAME ) )
73+ docker-elasticsearch : # # Start Elasticsearch single node cluster in docker container
74+ @ docker compose -f $(COMPOSE_FILE ) up --quiet-pull -d elasticsearch
13075
13176.PHONY : docker-kibana
132- docker-kibana : docker-network docker-elasticsearch set-kibana-password # # Start Kibana node in docker container
133- @ docker rm -f $(KIBANA_NAME ) & > /dev/null || true
134- @ docker run -d \
135- -p 5601:5601 \
136- -e SERVER_NAME=kibana \
137- -e ELASTICSEARCH_HOSTS=$(ELASTICSEARCH_ENDPOINTS ) \
138- -e ELASTICSEARCH_USERNAME=$(KIBANA_SYSTEM_USERNAME ) \
139- -e ELASTICSEARCH_PASSWORD=$(KIBANA_SYSTEM_PASSWORD ) \
140- -e XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=a7a6311933d3503b89bc2dbc36572c33a6c10925682e591bffcab6911c06786d \
141- -e LOGGING_ROOT_LEVEL=debug \
142- --name $(KIBANA_NAME ) \
143- --network $(ELASTICSEARCH_NETWORK ) \
144- --health-cmd=" curl http://localhost:5601/api/status" \
145- --health-interval=10s --health-timeout=5s --health-retries=10 \
146- docker.elastic.co/kibana/kibana:$(STACK_VERSION )
147- @ $(call wait_until_healthy, $(KIBANA_NAME ) )
148-
149- .PHONY : docker-kibana-with-tls
150- docker-kibana-with-tls : docker-network docker-elasticsearch set-kibana-password
151- @ docker rm -f $(KIBANA_NAME ) & > /dev/null || true
152- @ mkdir -p certs
153- @ CAROOT=certs mkcert localhost $(KIBANA_NAME )
154- @ mv localhost* .pem certs/
155- @ docker run -d \
156- -p 5601:5601 \
157- -v $(shell pwd) /certs:/certs \
158- -e SERVER_NAME=kibana \
159- -e ELASTICSEARCH_HOSTS=$(ELASTICSEARCH_ENDPOINTS ) \
160- -e ELASTICSEARCH_USERNAME=$(KIBANA_SYSTEM_USERNAME ) \
161- -e ELASTICSEARCH_PASSWORD=$(KIBANA_SYSTEM_PASSWORD ) \
162- -e XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=a7a6311933d3503b89bc2dbc36572c33a6c10925682e591bffcab6911c06786d \
163- -e SERVER_SSL_CERTIFICATE=/certs/localhost+1.pem \
164- -e SERVER_SSL_KEY=/certs/localhost+1-key.pem \
165- -e SERVER_SSL_ENABLED=true \
166- -e LOGGING_ROOT_LEVEL=debug \
167- --name $(KIBANA_NAME ) \
168- --network $(ELASTICSEARCH_NETWORK ) \
169- --health-cmd=" curl -k https://localhost:5601/api/status" \
170- --health-interval=10s --health-timeout=5s --health-retries=10 \
171- docker.elastic.co/kibana/kibana:$(STACK_VERSION )
172- @ $(call wait_until_healthy, $(KIBANA_NAME ) )
77+ docker-kibana : # # Start Kibana node in docker container
78+ @ docker compose -f $(COMPOSE_FILE ) up --quiet-pull -d kibana
17379
17480.PHONY : docker-fleet
175- docker-fleet : docker-network docker-elasticsearch docker-kibana setup-kibana-fleet # # Start Fleet node in docker container
176- @ docker rm -f $(FLEET_NAME ) & > /dev/null || true
177- @ docker run -d \
178- -p 8220:8220 \
179- -e SERVER_NAME=fleet \
180- -e FLEET_ENROLL=1 \
181- -e FLEET_URL=$(FLEET_ENDPOINT) \
182- -e FLEET_INSECURE=true \
183- -e FLEET_SERVER_ENABLE=1 \
184- -e FLEET_SERVER_POLICY_ID=fleet-server \
185- -e FLEET_SERVER_ELASTICSEARCH_HOST=$(ELASTICSEARCH_ENDPOINTS) \
186- -e FLEET_SERVER_ELASTICSEARCH_INSECURE=true \
187- -e FLEET_SERVER_INSECURE_HTTP=true \
188- -e KIBANA_HOST=$(KIBANA_ENDPOINT) \
189- -e KIBANA_FLEET_SETUP=1 \
190- -e KIBANA_FLEET_USERNAME=$(ELASTICSEARCH_USERNAME) \
191- -e KIBANA_FLEET_PASSWORD=$(ELASTICSEARCH_PASSWORD) \
192- --name $(FLEET_NAME) \
193- --network $(ELASTICSEARCH_NETWORK) \
194- elastic/elastic-agent:$(STACK_VERSION)
195-
196-
197- .PHONY : docker-network
198- docker-network : # # Create a dedicated network for ES and test runs
199- @ docker network inspect $(ELASTICSEARCH_NETWORK ) > /dev/null 2>&1 || docker network create $(ELASTICSEARCH_NETWORK )
81+ docker-fleet : # # Start Fleet node in docker container
82+ @ docker compose -f $(COMPOSE_FILE ) up --quiet-pull -d fleet
20083
20184.PHONY : set-kibana-password
20285set-kibana-password : # # Sets the ES KIBANA_SYSTEM_USERNAME's password to KIBANA_SYSTEM_PASSWORD. This expects Elasticsearch to be available at localhost:9200
@@ -218,9 +101,11 @@ setup-kibana-fleet: ## Creates the agent and integration policies required to ru
218101
219102.PHONY : docker-clean
220103docker-clean : # # Try to remove provisioned nodes and assigned network
221- @ docker rm -f $(ELASTICSEARCH_NAME ) $(KIBANA_NAME ) $(FLEET_NAME ) || true
222- @ docker network rm $(ELASTICSEARCH_NETWORK ) || true
104+ @ docker compose -f $(COMPOSE_FILE ) down
223105
106+ .PHONY : copy-kibana-ca
107+ copy-kibana-ca : # # Copy Kibana CA certificate to local machine
108+ @ docker compose -f $(COMPOSE_FILE ) cp kibana:/certs/rootCA.pem ./kibana-ca.pem
224109
225110.PHONY : docs-generate
226111docs-generate : tools # # Generate documentation for the provider
0 commit comments