-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
148 lines (120 loc) · 4.76 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Multi-arch docker container instance of the open-source Node-RED project intended for Open Horizon Linux edge nodes
export DOCKER_HUB_ID ?= docker.io/walicki
export HZN_ORG_ID ?= examples
export SERVICE_NAME ?= service-node-red-object-detection
export SERVICE_VERSION ?= 1.2.0
export SERVICE_ORG_ID ?= $(HZN_ORG_ID)
export PATTERN_NAME ?= policy-node-red-object-detection
# Don't allow the ARCH to be overridden at this time since only arm64 supported today
export ARCH := amd64
export CONTAINER_IMAGE_BASE ?= $(DOCKER_HUB_ID)/$(SERVICE_NAME)
export CONTAINER_IMAGE_VERSION ?= $(SERVICE_VERSION)
# Detect Operating System running Make
OS := $(shell uname -s)
default: run browse
init:
# ensure you are logged in so that you can push built images to DockerHub
docker login
# enable cross-arch builds using buildx from Docker Desktop
@docker buildx create --name mybuilder
@docker buildx use mybuilder
@docker buildx inspect --bootstrap
build:
# build arm64 container on x86_64 host machine and push to DockerHub
# NOTE: takes about 15 minutes to build on MacBook Pro
@docker build --platform linux/arm64 -t $(CONTAINER_IMAGE_BASE)_arm64:$(CONTAINER_IMAGE_VERSION) -f ./Dockerfile
@docker build --platform linux/amd64 -t $(CONTAINER_IMAGE_BASE)_amd64:$(CONTAINER_IMAGE_VERSION) -f ./Dockerfile
@docker image prune --filter label=stage=builder --force
push:
docker push $(CONTAINER_IMAGE_BASE)_arm64:$(SERVICE_VERSION)
docker push $(CONTAINER_IMAGE_BASE)_amd64:$(SERVICE_VERSION)
clean:
-docker rmi $(CONTAINER_IMAGE_BASE)_arm64:$(CONTAINER_IMAGE_VERSION) 2> /dev/null || :
-docker rmi $(CONTAINER_IMAGE_BASE)_amd64:$(CONTAINER_IMAGE_VERSION) 2> /dev/null || :
@docker image prune --filter label=stage=builder --force
distclean: agent-stop remove-deployment-policy remove-service-policy remove-service clean
stop:
@docker rm -f $(SERVICE_NAME) >/dev/null 2>&1 || :
run: stop
@docker run -d \
--name $(SERVICE_NAME) \
-p 1880:1880 \
$(CONTAINER_IMAGE_BASE)_$(ARCH):$(CONTAINER_IMAGE_VERSION)
attach:
@docker exec -it \
`docker ps -aqf "name=$(SERVICE_NAME)"` \
/bin/bash
dev: run attach
test:
@curl -sS http://127.0.0.1:1880/diagnostics | jq
browse:
ifeq ($(OS),Darwin)
@open http://127.0.0.1:1880/
else
@xdg-open http://127.0.0.1:1880/
endif
publish: publish-service publish-service-policy publish-deployment-policy agent-run browse
publish-service:
@echo "=================="
@echo "PUBLISHING SERVICE"
@echo "=================="
@ARCH=amd64 \
hzn exchange service publish -O --dont-change-image-tag --json-file=horizon/service.definition.json
@ARCH=arm64 \
hzn exchange service publish -O --dont-change-image-tag --json-file=horizon/service.definition.json
@echo ""
remove-service:
@echo "=================="
@echo "REMOVING SERVICE"
@echo "=================="
@hzn exchange service remove -f $(HZN_ORG_ID)/$(SERVICE_NAME)_$(SERVICE_VERSION)_$(ARCH)
@echo ""
publish-service-policy:
@echo "========================="
@echo "PUBLISHING SERVICE POLICY"
@echo "========================="
@hzn exchange service addpolicy -f horizon/service.policy.json $(HZN_ORG_ID)/$(SERVICE_NAME)_$(SERVICE_VERSION)_$(ARCH)
@echo ""
remove-service-policy:
@echo "======================="
@echo "REMOVING SERVICE POLICY"
@echo "======================="
@hzn exchange service removepolicy -f $(HZN_ORG_ID)/$(SERVICE_NAME)_$(SERVICE_VERSION)_$(ARCH)
@echo ""
publish-deployment-policy:
@echo "============================"
@echo "PUBLISHING DEPLOYMENT POLICY"
@echo "============================"
@hzn exchange deployment addpolicy -f horizon/deployment.policy.json $(HZN_ORG_ID)/policy-$(SERVICE_NAME)_$(SERVICE_VERSION)
@echo ""
remove-deployment-policy:
@echo "=========================="
@echo "REMOVING DEPLOYMENT POLICY"
@echo "=========================="
@hzn exchange deployment removepolicy -f $(HZN_ORG_ID)/policy-$(SERVICE_NAME)_$(SERVICE_VERSION)
@echo ""
agent-run:
@echo "================"
@echo "REGISTERING NODE"
@echo "================"
@hzn register -v --policy=horizon/node.policy.json
@watch hzn agreement list
agent-stop:
@echo "==================="
@echo "UN-REGISTERING NODE"
@echo "==================="
@hzn unregister -f
@echo ""
deploy-check:
@hzn deploycheck all -t device -B horizon/deployment.policy.json --service=horizon/service.definition.json --service-pol=horizon/service.policy.json --node-pol=horizon/node.policy.json
log:
@echo "========="
@echo "EVENT LOG"
@echo "========="
@hzn eventlog list
@echo ""
@echo "==========="
@echo "SERVICE LOG"
@echo "==========="
@hzn service log -f $(SERVICE_NAME)
.PHONY: build clean distclean init default stop run dev attach test browse push publish publish-service publish-service-policy publish-deployment-policy agent-run distclean deploy-check log remove-deployment-policy remove-service-policy remove-service