twins
Version:
Digital twin PoC demo
153 lines (123 loc) • 3.51 kB
Plain Text
# -*- makefile -*-
# ex: set tabstop=4 noexpandtab:
# Copyright: 2019-present Samsung Electronics Co., Ltd. and other contributors
# SPDX-License-Identifier: MPL-2.0
default: help
@echo "# log: $@: $<"
name?=twins
revision?=$(shell git describe --tags || echo "0.0.0")
#revision=master
port?=8888
nodePort?=31905
type=NodePort
docker?=docker
k8s?=microk8s
kubectl?=${k8s}.kubectl
topdir?=../../..
username?=tmp
image?=${username}/${name}:${revision}
namespace?=k8s.io
domain?=localhost
host?=${name}.${domain}
url?=http://${host}/
help:
@echo "### Usage: "
@echo "# make setup"
@echo "# make demo"
@echo "# make start"
@echo "# make proxy"
@echo "# make ingress"
@echo "# make host"
@echo "# make client"
@echo "### Config: "
@echo "# revision=${revision}"
@echo "# log: $@: $<"
setup:
sudo snap install ${k8s} --classic
${name}.yml: deployment.yml service.yml Makefile
@echo '#YAML' > $@
@echo '---' >> $@
cat deployment.yml >> $@
@echo '---' >> $@
cat service.yml >> $@
@echo '---' >> $@
spec: ${name}.yml
@echo "# log: $@: $<"
${topdir}: Makefile
@echo "# log: $@: $<"
build: ${topdir} Makefile
${docker} build --tag "${image}" $<
import: build
${docker} save "${image}" \
| ${k8s}.ctr -n ${namespace} image import -
${k8s}.ctr --namespace ${namespace} image list \
| grep "${image}"
save: build
@mkdir -p ${image}.tmp
@rmdir ${image}.tmp
time docker save "${image}" > "${image}.tar"
${k8s}.ctr --namespace ${namespace} image import "${image}.tar"
rm "${image}.tar"
${k8s}.ctr --namespace ${namespace} image list | grep "${image}"
deployment.yml: Makefile
${kubectl} create deployment ${name} \
--image "${image}" \
--dry-run -o yaml > $@
service.yml: deployment.yml Makefile
${kubectl} apply -f $<
${kubectl} expose deployment ${name} \
--type=${type} --port ${port} \
--dry-run -o yaml > $@
apply: ${name}.yml
${kubectl} apply -f $<
${kubectl} describe service/${name}
enable:
microk8s.status | grep enabled
-${k8s}.disable ingress
@echo "TODO check if :80 is used"
-@sudo lsof -i :80
${k8s}.enable ingress
${k8s}.enable dns
ingress: ingress.yml enable
-${kubectl} delete ingress.extensions/${name}
${kubectl} apply -f $<
${kubectl} get ingress.extensions/${name}
${kubectl} describe ingress.extensions/${name} | grep "Address:"
${kubectl} get ing
client:
-ping -c 1 ${host}
curl -kLi ${url}
status:
${MAKE} status/all | grep ${name}
-${kubectl} describe ingress.extensions/${name} | grep "Address:"
-${k8s}.ctr --namespace ${namespace} image list | grep "${image}"
status/all:
-${kubectl} get all
-${kubectl} get all --all-namespaces
-${kubectl} get ingress.extensions
start: help spec import apply ingress
@echo "# log: $@: $<"
run: apply status proxy client
@echo "# make status proxy"
@echo "# make status ingress"
@echo "# make status host"
@echo "# make status client"
demo: start
${MAKE} run \
|| echo "# log: may be failed, try again: make run"
@echo "# log: $@: $<"
patch:
${kubectl} patch service/${name} --type='json' \
--patch="[{\"op\": \"replace\", \"path\": \"/spec/ports/0/nodePort\", \"value\":${nodePort}}]"
proxy:
sPort=$$(${kubectl} get service/${name} \
-o=jsonpath="{.spec.ports[?(@.port==${port})].nodePort}") \
&& echo "sPort=$${sPort}" \
&& sUrl="http://127.0.0.1:$${sPort}" \
&& curl -kLi $${sUrl}
host: /etc/hosts
ping -c1 ${host} || echo "127.0.0.1 ${host}" | sudo tee -a $<
ping -c1 ${host}
purge:
rm -fv deployment.yml service.yml ${name}.yml