wip
This commit is contained in:
parent
d6d1299ae2
commit
e1f9ef7de9
|
@ -7,3 +7,14 @@ host_key_checking = False
|
||||||
[ssh_connection]
|
[ssh_connection]
|
||||||
scp_if_ssh = smart
|
scp_if_ssh = smart
|
||||||
pipelining =True
|
pipelining =True
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
changed = purple
|
||||||
|
debug = dark gray
|
||||||
|
deprecate = purple
|
||||||
|
error = bright red
|
||||||
|
ok = green
|
||||||
|
skip = cyan
|
||||||
|
unreachable = red
|
||||||
|
verbose = blue
|
||||||
|
warn = bright purple
|
||||||
|
|
|
@ -27,7 +27,7 @@ ANSIBLE_SERVER_NAME ?= $(SERVER_NAME)
|
||||||
ANSIBLE_USERNAME ?= $(USER)
|
ANSIBLE_USERNAME ?= $(USER)
|
||||||
ANSIBLE_VERBOSE ?= $(if $(DEBUG),-vvvv,$(if $(VERBOSE),-v))
|
ANSIBLE_VERBOSE ?= $(if $(DEBUG),-vvvv,$(if $(VERBOSE),-v))
|
||||||
CMDS += ansible ansible-playbook
|
CMDS += ansible ansible-playbook
|
||||||
DOCKER_RUN_OPTIONS += --add-host=host.docker.internal:$(DOCKER_INTERNAL_DOCKER_HOST)
|
DOCKER_RUN_OPTIONS += $(if $(DOCKER_INTERNAL_DOCKER_HOST),--add-host=host.docker.internal:$(DOCKER_INTERNAL_DOCKER_HOST))
|
||||||
ENV_VARS += ANSIBLE_AWS_ACCESS_KEY_ID ANSIBLE_AWS_DEFAULT_OUTPUT ANSIBLE_AWS_DEFAULT_REGION ANSIBLE_AWS_SECRET_ACCESS_KEY ANSIBLE_CONFIG ANSIBLE_DISKS_NFS_DISK ANSIBLE_DISKS_NFS_OPTIONS ANSIBLE_DISKS_NFS_PATH ANSIBLE_DOCKER_IMAGE_TAG ANSIBLE_DOCKER_REGISTRY ANSIBLE_EXTRA_VARS ANSIBLE_GIT_DIRECTORY ANSIBLE_GIT_KEY_FILE ANSIBLE_GIT_REPOSITORY ANSIBLE_GIT_VERSION ANSIBLE_INVENTORY ANSIBLE_PLAYBOOK ANSIBLE_SSH_AUTHORIZED_KEYS ANSIBLE_SSH_BASTION_HOSTNAME ANSIBLE_SSH_BASTION_USERNAME ANSIBLE_SSH_PRIVATE_IP_RANGE ANSIBLE_SSH_PRIVATE_KEYS ANSIBLE_SSH_PUBLIC_HOSTS ANSIBLE_SSH_USERNAME ANSIBLE_USERNAME ANSIBLE_VERBOSE
|
ENV_VARS += ANSIBLE_AWS_ACCESS_KEY_ID ANSIBLE_AWS_DEFAULT_OUTPUT ANSIBLE_AWS_DEFAULT_REGION ANSIBLE_AWS_SECRET_ACCESS_KEY ANSIBLE_CONFIG ANSIBLE_DISKS_NFS_DISK ANSIBLE_DISKS_NFS_OPTIONS ANSIBLE_DISKS_NFS_PATH ANSIBLE_DOCKER_IMAGE_TAG ANSIBLE_DOCKER_REGISTRY ANSIBLE_EXTRA_VARS ANSIBLE_GIT_DIRECTORY ANSIBLE_GIT_KEY_FILE ANSIBLE_GIT_REPOSITORY ANSIBLE_GIT_VERSION ANSIBLE_INVENTORY ANSIBLE_PLAYBOOK ANSIBLE_SSH_AUTHORIZED_KEYS ANSIBLE_SSH_BASTION_HOSTNAME ANSIBLE_SSH_BASTION_USERNAME ANSIBLE_SSH_PRIVATE_IP_RANGE ANSIBLE_SSH_PRIVATE_KEYS ANSIBLE_SSH_PUBLIC_HOSTS ANSIBLE_SSH_USERNAME ANSIBLE_USERNAME ANSIBLE_VERBOSE
|
||||||
|
|
||||||
# function ansible: Call run ansible ANSIBLE_ARGS with arg 1
|
# function ansible: Call run ansible ANSIBLE_ARGS with arg 1
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
---
|
---
|
||||||
# file: tasks/myos.yml
|
# file: tasks/myos.yml
|
||||||
|
|
||||||
- name: myos - register myos
|
- name: myos - register myos.tags
|
||||||
lookup:
|
set_fact:
|
||||||
file: ~/.env
|
myos_tags: "{{ lookup('env', 'MYOS_TAGS_JSON')|from_json or lookup('file', '~/.env') }}"
|
||||||
register: myos
|
tags: debug
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: "{{myos_tags|to_nice_json}}"
|
||||||
|
tags: debug
|
||||||
|
|
||||||
- name: myos - check AWS meta-data URI
|
- name: myos - check AWS meta-data URI
|
||||||
uri:
|
uri:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# file rc_functions.sh: Define shell functions
|
# file rc_functions.sh: Define shell functions
|
||||||
## author: Yann "aya" Autissier
|
## author: Yann "aya" Autissier
|
||||||
## license: MIT
|
## license: MIT
|
||||||
## version: 20210620
|
## version: 20210711
|
||||||
|
|
||||||
# function force: Run a command sine die
|
# function force: Run a command sine die
|
||||||
force() {
|
force() {
|
||||||
|
@ -213,7 +213,7 @@ ssh_add() {
|
||||||
else
|
else
|
||||||
GREP_RECURSIVE_CHAR="*"
|
GREP_RECURSIVE_CHAR="*"
|
||||||
fi
|
fi
|
||||||
SSH_PRIVATE_KEYS="${SSH_PRIVATE_KEYS:-} ${dir}/id_rsa $(grep -l${GREP_RECURSIVE_FLAG:-} 'PRIVATE KEY' "${dir}"/"${GREP_RECURSIVE_CHAR:-}" 2>/dev/null |grep -vw "${dir}"/id_rsa)"
|
SSH_PRIVATE_KEYS="${SSH_PRIVATE_KEYS:-} ${dir}/id_rsa $(grep -l${GREP_RECURSIVE_FLAG:-} 'PRIVATE KEY' "${dir}/"${GREP_RECURSIVE_CHAR:-} 2>/dev/null |grep -vw "${dir}"/id_rsa)"
|
||||||
done
|
done
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
printf '%s\n' ${SSH_PRIVATE_KEYS} |while read -r file; do
|
printf '%s\n' ${SSH_PRIVATE_KEYS} |while read -r file; do
|
||||||
|
@ -239,7 +239,7 @@ ssh_del() {
|
||||||
else
|
else
|
||||||
GREP_RECURSIVE_CHAR="*"
|
GREP_RECURSIVE_CHAR="*"
|
||||||
fi
|
fi
|
||||||
SSH_PRIVATE_KEYS="${SSH_PRIVATE_KEYS:-} ${dir}/id_rsa $(grep -l${GREP_RECURSIVE_FLAG:-} 'PRIVATE KEY' "${dir}"/"${GREP_RECURSIVE_CHAR:-}" 2>/dev/null |grep -vw "${dir}"/id_rsa)"
|
SSH_PRIVATE_KEYS="${SSH_PRIVATE_KEYS:-} ${dir}/id_rsa $(grep -l${GREP_RECURSIVE_FLAG:-} 'PRIVATE KEY' "${dir}/"${GREP_RECURSIVE_CHAR:-} 2>/dev/null |grep -vw "${dir}"/id_rsa)"
|
||||||
done
|
done
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
printf '%s\n' ${SSH_PRIVATE_KEYS} |while read -r file; do
|
printf '%s\n' ${SSH_PRIVATE_KEYS} |while read -r file; do
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
# file: tasks/group.yml
|
||||||
|
|
||||||
|
- name: group - create dns group
|
||||||
|
group: gid="11" name="dns" state="present" system="yes"
|
||||||
|
become: yes
|
||||||
|
when: ansible_os_family|lower != "alpine"
|
||||||
|
|
||||||
|
- name: group - add me to the dns group
|
||||||
|
user: name="{{ansible_user_id}}" groups=dns append=yes
|
||||||
|
become: yes
|
||||||
|
when: ansible_os_family|lower != "alpine" and ansible_user_uid != "0"
|
|
@ -52,6 +52,7 @@
|
||||||
- name: user - update ~/.bashrc
|
- name: user - update ~/.bashrc
|
||||||
with_items:
|
with_items:
|
||||||
- PS1="╭∩╮$PS1"
|
- PS1="╭∩╮$PS1"
|
||||||
|
- source .shrc
|
||||||
- unset user_count process_count
|
- unset user_count process_count
|
||||||
lineinfile: dest=~/.bashrc create=yes line='{{item}}'
|
lineinfile: dest=~/.bashrc create=yes line='{{item}}'
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ package:
|
||||||
installed: true
|
installed: true
|
||||||
groff:
|
groff:
|
||||||
installed: true
|
installed: true
|
||||||
|
ncurses:
|
||||||
|
installed: true
|
||||||
openssh-client:
|
openssh-client:
|
||||||
installed: true
|
installed: true
|
||||||
py3-pip:
|
py3-pip:
|
||||||
|
|
|
@ -7,8 +7,12 @@ package:
|
||||||
installed: true
|
installed: true
|
||||||
openssh-client:
|
openssh-client:
|
||||||
installed: true
|
installed: true
|
||||||
|
pass:
|
||||||
|
installed: true
|
||||||
python-pip:
|
python-pip:
|
||||||
installed: true
|
installed: true
|
||||||
|
rclone:
|
||||||
|
installed: true
|
||||||
util-linux:
|
util-linux:
|
||||||
installed: true
|
installed: true
|
||||||
vim-nox:
|
vim-nox:
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
hosts_packages_distro:
|
hosts_packages_distro:
|
||||||
- { "name": "coreutils", "state": "present" }
|
- { "name": "coreutils", "state": "present" }
|
||||||
- { "name": "groff", "state": "present" }
|
- { "name": "groff", "state": "present" }
|
||||||
|
- { "name": "ncurses", "state": "present" }
|
||||||
- { "name": "openssh-client", "state": "present" }
|
- { "name": "openssh-client", "state": "present" }
|
||||||
- { "name": "py3-pip", "state": "present" }
|
- { "name": "py3-pip", "state": "present" }
|
||||||
- { "name": "util-linux", "state": "present" }
|
- { "name": "util-linux", "state": "present" }
|
||||||
|
|
|
@ -5,7 +5,9 @@ hosts_packages_distro:
|
||||||
- { "name": "coreutils", "state": "present" }
|
- { "name": "coreutils", "state": "present" }
|
||||||
- { "name": "groff", "state": "present" }
|
- { "name": "groff", "state": "present" }
|
||||||
- { "name": "openssh-client", "state": "present" }
|
- { "name": "openssh-client", "state": "present" }
|
||||||
|
- { "name": "pass", "state": "present" }
|
||||||
- { "name": "python-pip", "state": "present" }
|
- { "name": "python-pip", "state": "present" }
|
||||||
|
- { "name": "rclone", "state": "present" }
|
||||||
- { "name": "util-linux", "state": "present" }
|
- { "name": "util-linux", "state": "present" }
|
||||||
- { "name": "vim-nox", "state": "present" }
|
- { "name": "vim-nox", "state": "present" }
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ connect@%:
|
||||||
|
|
||||||
# target deploy: Fire deploy@% for ENV
|
# target deploy: Fire deploy@% for ENV
|
||||||
.PHONY: deploy
|
.PHONY: deploy
|
||||||
deploy: deploy@$(ENV) ## Deploy application dockers
|
deploy: $(if $(filter $(ENV),$(ENV_DEPLOY)),deploy-localhost,deploy@$(ENV)) ## Deploy application dockers
|
||||||
|
|
||||||
# target down: Remove application dockers
|
# target down: Remove application dockers
|
||||||
# on local host
|
# on local host
|
||||||
|
|
|
@ -63,8 +63,8 @@ endif
|
||||||
ifeq ($(OPERATING_SYSTEM),Darwin)
|
ifeq ($(OPERATING_SYSTEM),Darwin)
|
||||||
DOCKER_HOST_IFACE ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 route list match 0/0 2>/dev/null |awk '{print $$5}' |awk '!seen[$$0]++' |head -1)
|
DOCKER_HOST_IFACE ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 route list match 0/0 2>/dev/null |awk '{print $$5}' |awk '!seen[$$0]++' |head -1)
|
||||||
DOCKER_HOST_INET ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 addr show $(DOCKER_HOST_IFACE) 2>/dev/null |awk '$$1 == "inet" {sub(/\/.*/,"",$$2); print $$2}')
|
DOCKER_HOST_INET ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 addr show $(DOCKER_HOST_IFACE) 2>/dev/null |awk '$$1 == "inet" {sub(/\/.*/,"",$$2); print $$2}')
|
||||||
DOCKER_INTERNAL_DOCKER_GATEWAY ?= $(shell docker run --rm -it alpine getent hosts gateway.docker.internal |awk '{print $$1}' |head -1)
|
DOCKER_INTERNAL_DOCKER_GATEWAY ?= $(shell docker run --rm -it alpine getent hosts gateway.docker.internal 2>/dev/null |awk '{print $$1}' |head -1)
|
||||||
DOCKER_INTERNAL_DOCKER_HOST ?= $(shell docker run --rm -it alpine getent hosts host.docker.internal |awk '{print $$1}' |head -1)
|
DOCKER_INTERNAL_DOCKER_HOST ?= $(shell docker run --rm -it alpine getent hosts host.docker.internal 2>/dev/null |awk '{print $$1}' |head -1)
|
||||||
else
|
else
|
||||||
DOCKER_HOST_IFACE ?= $(shell /sbin/ip -4 route list match 0/0 2>/dev/null |awk '{print $$5}' |awk '!seen[$$0]++' |head -1)
|
DOCKER_HOST_IFACE ?= $(shell /sbin/ip -4 route list match 0/0 2>/dev/null |awk '{print $$5}' |awk '!seen[$$0]++' |head -1)
|
||||||
DOCKER_HOST_INET ?= $(shell /sbin/ip -4 addr show $(DOCKER_HOST_IFACE) 2>/dev/null |awk '$$1 == "inet" {sub(/\/.*/,"",$$2); print $$2}')
|
DOCKER_HOST_INET ?= $(shell /sbin/ip -4 addr show $(DOCKER_HOST_IFACE) 2>/dev/null |awk '$$1 == "inet" {sub(/\/.*/,"",$$2); print $$2}')
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
.PHONY: deploy@%
|
.PHONY: deploy@%
|
||||||
deploy@%: myos-base build@% ## Deploy application docker images
|
deploy@%: myos-base build@% ## Deploy application docker images
|
||||||
$(call make,docker-login docker-tag docker-push)
|
$(call make,docker-login docker-tag docker-push)
|
||||||
$(call make,myos-ansible-pull@$(ENV) ANSIBLE_DOCKER_IMAGE_TAG=$(VERSION) ANSIBLE_TAGS=aws AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID) AWS_SECRET_ACCESS_KEY=$(AWS_SECRET_ACCESS_KEY),,APP)
|
$(call make,myos-ansible-pull@$(ENV) ANSIBLE_DOCKER_IMAGE_TAG=$(VERSION) ANSIBLE_TAGS=deploy AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID) AWS_SECRET_ACCESS_KEY=$(AWS_SECRET_ACCESS_KEY),,APP)
|
||||||
$(call make,docker-tag-latest docker-push-latest)
|
$(call make,docker-tag-latest docker-push-latest)
|
||||||
|
|
||||||
# target deploy-hook: Fire app-deploy deploy-hook-ping
|
# target deploy-hook: Fire app-deploy deploy-hook-ping
|
||||||
|
@ -27,3 +27,14 @@ deploy-hook-ping-curl:
|
||||||
'payload={"text": "$(DEPLOY_HOOK_TEXT)"}' \
|
'payload={"text": "$(DEPLOY_HOOK_TEXT)"}' \
|
||||||
$(DEPLOY_HOOK_URL) \
|
$(DEPLOY_HOOK_URL) \
|
||||||
||: )
|
||: )
|
||||||
|
|
||||||
|
# target deploy-localhost@%: Deploy application docker images
|
||||||
|
## it tags and pushes docker images to docker registry
|
||||||
|
## it runs ansible-pull on localhost to pull docker images from the registry
|
||||||
|
## it tags and pushes docker images as latest to docker registry
|
||||||
|
.PHONY: deploy-localhost
|
||||||
|
deploy-localhost: myos-base build@$(ENV) ## Deploy application docker images
|
||||||
|
$(call make,docker-login docker-tag docker-push)
|
||||||
|
$(call make,myos-ansible-pull ANSIBLE_DOCKER_IMAGE_TAG=$(VERSION) ANSIBLE_TAGS=deploy,,APP MYOS_TAGS_JSON)
|
||||||
|
$(call make,docker-tag-latest docker-push-latest)
|
||||||
|
deploy-localhost: app-deploy deploy-hook-ping
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
CMDS += ssh-run
|
CMDS += ssh-run
|
||||||
COMPOSE_IGNORE_ORPHANS := true
|
COMPOSE_IGNORE_ORPHANS := true
|
||||||
ENV_VARS += COMPOSE_IGNORE_ORPHANS DOCKER_IMAGE_CLI DOCKER_IMAGE_SSH DOCKER_NAME_CLI DOCKER_NAME_SSH
|
ENV_VARS += COMPOSE_IGNORE_ORPHANS MYOS_TAGS_JSON
|
||||||
HOME ?= /home/$(USER)
|
HOME ?= /home/$(USER)
|
||||||
|
MYOS_TAGS_VARS ?= env user
|
||||||
|
MYOS_TAGS_ARGS ?= $(foreach var,$(filter $(MYOS_TAGS_VARS),$(MAKE_FILE_VARS)),$(if $($(var)),$(var)='$($(var))'))
|
||||||
|
MYOS_TAGS_JSON ?= "{$(foreach var,$(filter $(MYOS_TAGS_VARS),$(MAKE_FILE_VARS)),$(if $($(var)), '$(var)': '$($(var))'$(comma))) }"
|
||||||
NFS_DISK ?= $(NFS_HOST):/$(notdir $(SHARED))
|
NFS_DISK ?= $(NFS_HOST):/$(notdir $(SHARED))
|
||||||
NFS_OPTIONS ?= rw,rsize=8192,wsize=8192,bg,hard,intr,nfsvers=3,noatime,nodiratime,actimeo=3
|
NFS_OPTIONS ?= rw,rsize=8192,wsize=8192,bg,hard,intr,nfsvers=3,noatime,nodiratime,actimeo=3
|
||||||
NFS_PATH ?= /srv/$(subst $(space),/,$(strip $(call reverse,$(subst ., ,$(NFS_HOST)))))$(subst ..,,$(SHARED))
|
NFS_PATH ?= /srv/$(subst $(space),/,$(strip $(call reverse,$(subst ., ,$(NFS_HOST)))))$(subst ..,,$(SHARED))
|
||||||
SHELL ?= /bin/sh
|
SHELL ?= /bin/sh
|
||||||
STACK ?= base
|
STACK ?= base
|
||||||
|
|
||||||
|
env ?= $(ENV)
|
||||||
|
user ?= $(USER)
|
||||||
|
|
|
@ -8,7 +8,7 @@ debug:
|
||||||
|
|
||||||
# target debug-%: Print value of %
|
# target debug-%: Print value of %
|
||||||
.PHONY: debug-%
|
.PHONY: debug-%
|
||||||
debug-%: context-% ;
|
debug-%: $(if $(DEBUG),context-%) ;
|
||||||
|
|
||||||
# target profile: Print timing informations
|
# target profile: Print timing informations
|
||||||
.PHONY: profile
|
.PHONY: profile
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
COMPOSE_PROJECT_NAME_MYOS ?= $(USER_ENV)_myos
|
COMPOSE_PROJECT_NAME_MYOS ?= $(USER_ENV)_myos
|
||||||
COMPOSE_PROJECT_NAME_NODE ?= node
|
COMPOSE_PROJECT_NAME_NODE ?= node
|
||||||
COMPOSE_VERSION ?= 1.29.2
|
COMPOSE_VERSION ?= 1.29.2
|
||||||
DOCKER_ENV ?= $(env.docker)
|
DOCKER_ENV_ARGS ?= $(docker_env_args)
|
||||||
DOCKER_EXEC_OPTIONS ?=
|
DOCKER_EXEC_OPTIONS ?=
|
||||||
DOCKER_GID ?= $(call gid,docker)
|
DOCKER_GID ?= $(call gid,docker)
|
||||||
DOCKER_IMAGE ?= $(DOCKER_IMAGE_CLI)
|
DOCKER_IMAGE ?= $(DOCKER_IMAGE_CLI)
|
||||||
|
@ -21,7 +21,7 @@ DOCKER_RUN_OPTIONS += --rm -it
|
||||||
DOCKER_RUN_VOLUME += -v /var/run/docker.sock:/var/run/docker.sock
|
DOCKER_RUN_VOLUME += -v /var/run/docker.sock:/var/run/docker.sock
|
||||||
DOCKER_RUN_WORKDIR ?= -w $(PWD)
|
DOCKER_RUN_WORKDIR ?= -w $(PWD)
|
||||||
DOCKER_VOLUME_SSH ?= $(COMPOSE_PROJECT_NAME_MYOS)_ssh
|
DOCKER_VOLUME_SSH ?= $(COMPOSE_PROJECT_NAME_MYOS)_ssh
|
||||||
ENV_VARS += DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DOCKER_REPOSITORY_MYOS DOCKER_REPOSITORY_NODE DOCKER_VOLUME_SSH
|
ENV_VARS += DOCKER_IMAGE_CLI DOCKER_IMAGE_SSH DOCKER_NAME_CLI DOCKER_NAME_SSH DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DOCKER_REPOSITORY_MYOS DOCKER_REPOSITORY_NODE DOCKER_VOLUME_SSH
|
||||||
|
|
||||||
ifeq ($(DRONE), true)
|
ifeq ($(DRONE), true)
|
||||||
DOCKER_RUN_OPTIONS := --rm --network $(DOCKER_NETWORK)
|
DOCKER_RUN_OPTIONS := --rm --network $(DOCKER_NETWORK)
|
||||||
|
@ -52,14 +52,14 @@ else
|
||||||
# function exec: Exec arg 1 in docker DOCKER_NAME
|
# function exec: Exec arg 1 in docker DOCKER_NAME
|
||||||
define exec
|
define exec
|
||||||
$(call INFO,exec,$(1))
|
$(call INFO,exec,$(1))
|
||||||
$(RUN) docker exec $(DOCKER_ENV) $(DOCKER_EXEC_OPTIONS) $(DOCKER_RUN_WORKDIR) $(DOCKER_NAME) $(or $(1),$(SHELL))
|
$(RUN) docker exec $(DOCKER_ENV_ARGS) $(DOCKER_EXEC_OPTIONS) $(DOCKER_RUN_WORKDIR) $(DOCKER_NAME) $(or $(1),$(SHELL))
|
||||||
endef
|
endef
|
||||||
endif
|
endif
|
||||||
# function run: Run docker run with arg 1 and docker repository 2
|
# function run: Run docker run with arg 1 and docker repository 2
|
||||||
## attention: arg 2 should end with slash or space
|
## attention: arg 2 should end with slash or space
|
||||||
define run
|
define run
|
||||||
$(call INFO,run,$(1)$(comma) $(2))
|
$(call INFO,run,$(1)$(comma) $(2))
|
||||||
$(RUN) docker run $(DOCKER_ENV) $(DOCKER_RUN_OPTIONS) $(DOCKER_RUN_VOLUME) $(DOCKER_RUN_WORKDIR) $(DOCKER_SSH_AUTH) $(2)$(1)
|
$(RUN) docker run $(DOCKER_ENV_ARGS) $(DOCKER_RUN_OPTIONS) $(DOCKER_RUN_VOLUME) $(DOCKER_RUN_WORKDIR) $(DOCKER_SSH_AUTH) $(2)$(1)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -68,7 +68,7 @@ SHELL := /bin/bash
|
||||||
# function docker-run DOCKER=false: Run docker image 2 with arg 1
|
# function docker-run DOCKER=false: Run docker image 2 with arg 1
|
||||||
define docker-run
|
define docker-run
|
||||||
$(call INFO,docker-run,$(1)$(comma) $(2))
|
$(call INFO,docker-run,$(1)$(comma) $(2))
|
||||||
$(RUN) docker run $(DOCKER_ENV) $(DOCKER_RUN_OPTIONS) $(DOCKER_RUN_VOLUME) $(DOCKER_RUN_WORKDIR) $(or $(2),$(DOCKER_IMAGE)) $(1)
|
$(RUN) docker run $(DOCKER_ENV_ARGS) $(DOCKER_RUN_OPTIONS) $(DOCKER_RUN_VOLUME) $(DOCKER_RUN_WORKDIR) $(or $(2),$(DOCKER_IMAGE)) $(1)
|
||||||
endef
|
endef
|
||||||
# function exec DOCKER=false: Call env-exec with arg 1 or SHELL
|
# function exec DOCKER=false: Call env-exec with arg 1 or SHELL
|
||||||
define exec
|
define exec
|
||||||
|
@ -92,15 +92,3 @@ define docker-volume-copy
|
||||||
$(RUN) docker volume inspect $(to) >/dev/null 2>&1 || $(RUN) docker volume create $(to) >/dev/null
|
$(RUN) docker volume inspect $(to) >/dev/null 2>&1 || $(RUN) docker volume create $(to) >/dev/null
|
||||||
$(RUN) docker run --rm -v $(from):/from -v $(to):/to alpine ash -c "cd /from; cp -a . /to"
|
$(RUN) docker run --rm -v $(from):/from -v $(to):/to alpine ash -c "cd /from; cp -a . /to"
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# function env-run: Call env-exec with arg 1
|
|
||||||
define env-run
|
|
||||||
$(call INFO,env-run,$(1))
|
|
||||||
$(call env-exec,$(or $(1),$(SHELL)))
|
|
||||||
endef
|
|
||||||
|
|
||||||
# function env-exec: Exec arg 1 with custom env
|
|
||||||
define env-exec
|
|
||||||
$(call INFO,env-exec,$(1))
|
|
||||||
IFS=$$'\n'; env $(env_reset) $(env) $(1)
|
|
||||||
endef
|
|
||||||
|
|
118
make/def.mk
118
make/def.mk
|
@ -40,7 +40,7 @@ CONFIG_REPOSITORY_SCHEME ?= $(shell printf '$(CONFIG_REPOSITORY_URL)\n' |
|
||||||
CONFIG_REPOSITORY_URI ?= $(shell printf '$(CONFIG_REPOSITORY_URL)\n' |sed 's|.*://||;')
|
CONFIG_REPOSITORY_URI ?= $(shell printf '$(CONFIG_REPOSITORY_URL)\n' |sed 's|.*://||;')
|
||||||
CONFIG_REPOSITORY_URL ?= $(call pop,$(APP_UPSTREAM_REPOSITORY))/$(notdir $(CONFIG))
|
CONFIG_REPOSITORY_URL ?= $(call pop,$(APP_UPSTREAM_REPOSITORY))/$(notdir $(CONFIG))
|
||||||
CONTEXT ?= ENV $(shell awk 'BEGIN {FS="="}; $$1 !~ /^(\#|$$)/ {print $$1}' .env.dist 2>/dev/null)
|
CONTEXT ?= ENV $(shell awk 'BEGIN {FS="="}; $$1 !~ /^(\#|$$)/ {print $$1}' .env.dist 2>/dev/null)
|
||||||
CONTEXT_DEBUG ?= MAKEFILE_LIST env env.docker APPS GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME MAKE_DIR MAKE_SUBDIRS MAKE_CMD_ARGS MAKE_ENV_ARGS UID USER
|
CONTEXT_DEBUG ?= MAKEFILE_LIST DOCKER_ENV_ARGS ENV_ARGS APPS GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME MAKE_DIR MAKE_SUBDIRS MAKE_CMD_ARGS MAKE_ENV_ARGS UID USER
|
||||||
DEBUG ?=
|
DEBUG ?=
|
||||||
DOCKER ?= $(shell type -p docker)
|
DOCKER ?= $(shell type -p docker)
|
||||||
DOCKER_RUN ?= $(if $(filter-out false False FALSE,$(DOCKER)),$(DOCKER))
|
DOCKER_RUN ?= $(if $(filter-out false False FALSE,$(DOCKER)),$(DOCKER))
|
||||||
|
@ -50,7 +50,7 @@ DRYRUN ?= false
|
||||||
DRYRUN_RECURSIVE ?= false
|
DRYRUN_RECURSIVE ?= false
|
||||||
ELAPSED_TIME = $(shell $(call TIME))
|
ELAPSED_TIME = $(shell $(call TIME))
|
||||||
ENV ?= local
|
ENV ?= local
|
||||||
ENV_ARGS = $(if $(DOCKER_RUN),$(env.docker.args) $(env.docker.dist),$(env.args) $(env.dist))
|
ENV_ARGS ?= $(env_args)
|
||||||
ENV_FILE ?= $(wildcard $(CONFIG)/$(ENV)/$(APP)/.env .env)
|
ENV_FILE ?= $(wildcard $(CONFIG)/$(ENV)/$(APP)/.env .env)
|
||||||
ENV_LIST ?= $(shell ls .git/refs/heads/ 2>/dev/null)
|
ENV_LIST ?= $(shell ls .git/refs/heads/ 2>/dev/null)
|
||||||
ENV_RESET ?= false
|
ENV_RESET ?= false
|
||||||
|
@ -143,35 +143,6 @@ endif
|
||||||
# include .env files
|
# include .env files
|
||||||
include $(wildcard $(ENV_FILE))
|
include $(wildcard $(ENV_FILE))
|
||||||
|
|
||||||
# function conf: Extract variable=value line from configuration files
|
|
||||||
## it prints the line with variable 3 definition from block 2 in file 1
|
|
||||||
define conf
|
|
||||||
$(call INFO,conf,$(1)$(comma) $(2)$(comma) $(3))
|
|
||||||
$(eval file := $(1))
|
|
||||||
$(eval block := $(2))
|
|
||||||
$(eval variable := $(3))
|
|
||||||
[ -r "$(file)" ] && while IFS='=' read -r key value; do \
|
|
||||||
case $${key} in \
|
|
||||||
\#*) \
|
|
||||||
continue; \
|
|
||||||
;; \
|
|
||||||
\[*\]) \
|
|
||||||
current_bloc="$${key##\[}"; \
|
|
||||||
current_bloc="$${current_bloc%%\]}"; \
|
|
||||||
[ -z "$(block)" ] && [ -z "$(variable)" ] && printf '%s\n' "$${current_bloc}" ||:; \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
key=$${key%$${key##*[![:space:]]}}; \
|
|
||||||
value=$${value#$${value%%[![:space:]]*}}; \
|
|
||||||
if [ "$(block)" = "$${current_bloc}" ] && [ "$${key}" ]; then \
|
|
||||||
[ -z "$(variable)" ] && printf '%s=%s\n' "$${key}" "$${value}" ||:; \
|
|
||||||
[ "$(variable)" = "$${key}" ] && printf '%s\n' "$${value}" ||:; \
|
|
||||||
fi \
|
|
||||||
;; \
|
|
||||||
esac \
|
|
||||||
done < "$(file)"
|
|
||||||
endef
|
|
||||||
|
|
||||||
ERROR_FD := 2
|
ERROR_FD := 2
|
||||||
# macro ERROR: print colorized warning
|
# macro ERROR: print colorized warning
|
||||||
ERROR = \
|
ERROR = \
|
||||||
|
@ -221,6 +192,69 @@ INFO = $(if $(VERBOSE),$(if $(filter-out true,$(IGNORE_VERBOSE)), \
|
||||||
&& printf '\n' >&$(INFO_FD) \
|
&& printf '\n' >&$(INFO_FD) \
|
||||||
))
|
))
|
||||||
|
|
||||||
|
# macro pop: Return last word of string 1 according to separator 2
|
||||||
|
pop = $(patsubst %$(or $(2),/)$(lastword $(subst $(or $(2),/), ,$(1))),%,$(1))
|
||||||
|
|
||||||
|
# macro sed: Run sed script 1 on file 2
|
||||||
|
sed = $(RUN) sed -i $(SED_SUFFIX) '$(1)' $(2)
|
||||||
|
|
||||||
|
# macro TIME: Print time elapsed since unixtime 1
|
||||||
|
TIME = awk '{printf "%02d:%02d:%02d\n",int($$1/3600),int(($$1%3600)/60),int($$1%60)}' \
|
||||||
|
<<< $(shell awk 'BEGIN {current=$(or $(2),$(MAKE_UNIXTIME_CURRENT)); start=$(or $(1),$(MAKE_UNIXTIME_START)); print (current - start)}' 2>/dev/null)
|
||||||
|
|
||||||
|
WARNING_FD := 2
|
||||||
|
# macro WARNING: print colorized warning
|
||||||
|
WARNING = \
|
||||||
|
printf '${COLOR_WARNING}WARNING:${COLOR_RESET} ${COLOR_INFO}$(APP)${COLOR_RESET}[${COLOR_VALUE}$(MAKELEVEL)${COLOR_RESET}]$(if $@, ${COLOR_VALUE}$@${COLOR_RESET}):${COLOR_RESET} ' >&$(WARNING_FD) \
|
||||||
|
$(if $(2), \
|
||||||
|
&& printf '$(1) ${COLOR_HIGHLIGHT}$(2)${COLOR_RESET}' >&$(WARNING_FD) \
|
||||||
|
$(if $(3),&& printf ' $(3)$(if $(4), ${COLOR_VALUE}$(4)${COLOR_RESET})' >&$(WARNING_FD)) \
|
||||||
|
, \
|
||||||
|
&& $(strip $(call PRINTF,$(1)) >&$(WARNING_FD)) \
|
||||||
|
) \
|
||||||
|
&& printf '\n' >&$(WARNING_FD)
|
||||||
|
|
||||||
|
# function conf: Extract variable=value line from configuration files
|
||||||
|
## it prints the line with variable 3 definition from block 2 in file 1
|
||||||
|
define conf
|
||||||
|
$(call INFO,conf,$(1)$(comma) $(2)$(comma) $(3))
|
||||||
|
$(eval file := $(1))
|
||||||
|
$(eval block := $(2))
|
||||||
|
$(eval variable := $(3))
|
||||||
|
[ -r "$(file)" ] && while IFS='=' read -r key value; do \
|
||||||
|
case $${key} in \
|
||||||
|
\#*) \
|
||||||
|
continue; \
|
||||||
|
;; \
|
||||||
|
\[*\]) \
|
||||||
|
current_bloc="$${key##\[}"; \
|
||||||
|
current_bloc="$${current_bloc%%\]}"; \
|
||||||
|
[ -z "$(block)" ] && [ -z "$(variable)" ] && printf '%s\n' "$${current_bloc}" ||:; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
key=$${key%$${key##*[![:space:]]}}; \
|
||||||
|
value=$${value#$${value%%[![:space:]]*}}; \
|
||||||
|
if [ "$(block)" = "$${current_bloc}" ] && [ "$${key}" ]; then \
|
||||||
|
[ -z "$(variable)" ] && printf '%s=%s\n' "$${key}" "$${value}" ||:; \
|
||||||
|
[ "$(variable)" = "$${key}" ] && printf '%s\n' "$${value}" ||:; \
|
||||||
|
fi \
|
||||||
|
;; \
|
||||||
|
esac \
|
||||||
|
done < "$(file)"
|
||||||
|
endef
|
||||||
|
|
||||||
|
# function env-exec: Exec arg 1 with custom env
|
||||||
|
define env-exec
|
||||||
|
$(call INFO,env-exec,$(1))
|
||||||
|
IFS=$$'\n'; env $(env_reset) $(env_args) $(1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
# function env-run: Call env-exec with arg 1
|
||||||
|
define env-run
|
||||||
|
$(call INFO,env-run,$(1))
|
||||||
|
$(call env-exec,$(or $(1),$(SHELL)))
|
||||||
|
endef
|
||||||
|
|
||||||
# function install-app: Run 'git clone url 1 dir 2' or Call update-app with url 1 dir 2
|
# function install-app: Run 'git clone url 1 dir 2' or Call update-app with url 1 dir 2
|
||||||
define install-app
|
define install-app
|
||||||
$(call INFO,install-app,$(1)$(comma) $(2))
|
$(call INFO,install-app,$(1)$(comma) $(2))
|
||||||
|
@ -258,16 +292,6 @@ define make
|
||||||
$(if $(filter true,$(DRYRUN_RECURSIVE)),$(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" DRYRUN=$(DRYRUN) RECURSIVE=$(RECURSIVE) $(MAKE_ARGS) $(cmd))
|
$(if $(filter true,$(DRYRUN_RECURSIVE)),$(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" DRYRUN=$(DRYRUN) RECURSIVE=$(RECURSIVE) $(MAKE_ARGS) $(cmd))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# macro pop: Return last word of string 1 according to separator 2
|
|
||||||
pop = $(patsubst %$(or $(2),/)$(lastword $(subst $(or $(2),/), ,$(1))),%,$(1))
|
|
||||||
|
|
||||||
# macro sed: Run sed script 1 on file 2
|
|
||||||
sed = $(RUN) sed -i $(SED_SUFFIX) '$(1)' $(2)
|
|
||||||
|
|
||||||
# macro TIME: Print time elapsed since unixtime 1
|
|
||||||
TIME = awk '{printf "%02d:%02d:%02d\n",int($$1/3600),int(($$1%3600)/60),int($$1%60)}' \
|
|
||||||
<<< $(shell awk 'BEGIN {current=$(or $(2),$(MAKE_UNIXTIME_CURRENT)); start=$(or $(1),$(MAKE_UNIXTIME_START)); print (current - start)}' 2>/dev/null)
|
|
||||||
|
|
||||||
# function update-app: Run 'cd dir 1 && git pull' or Call install-app
|
# function update-app: Run 'cd dir 1 && git pull' or Call install-app
|
||||||
define update-app
|
define update-app
|
||||||
$(call INFO,update-app,$(1)$(comma) $(2))
|
$(call INFO,update-app,$(1)$(comma) $(2))
|
||||||
|
@ -289,18 +313,6 @@ $(TARGET):
|
||||||
$$(call make,$$*,,ENV_FILE)
|
$$(call make,$$*,,ENV_FILE)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
WARNING_FD := 2
|
|
||||||
# macro WARNING: print colorized warning
|
|
||||||
WARNING = \
|
|
||||||
printf '${COLOR_WARNING}WARNING:${COLOR_RESET} ${COLOR_INFO}$(APP)${COLOR_RESET}[${COLOR_VALUE}$(MAKELEVEL)${COLOR_RESET}]$(if $@, ${COLOR_VALUE}$@${COLOR_RESET}):${COLOR_RESET} ' >&$(WARNING_FD) \
|
|
||||||
$(if $(2), \
|
|
||||||
&& printf '$(1) ${COLOR_HIGHLIGHT}$(2)${COLOR_RESET}' >&$(WARNING_FD) \
|
|
||||||
$(if $(3),&& printf ' $(3)$(if $(4), ${COLOR_VALUE}$(4)${COLOR_RESET})' >&$(WARNING_FD)) \
|
|
||||||
, \
|
|
||||||
&& $(strip $(call PRINTF,$(1)) >&$(WARNING_FD)) \
|
|
||||||
) \
|
|
||||||
&& printf '\n' >&$(WARNING_FD)
|
|
||||||
|
|
||||||
# set ENV=env for targets ending with :env
|
# set ENV=env for targets ending with :env
|
||||||
## for each env in ENV_LIST
|
## for each env in ENV_LIST
|
||||||
## it overrides value of ENV with env
|
## it overrides value of ENV with env
|
||||||
|
|
11
make/env.mk
11
make/env.mk
|
@ -18,15 +18,14 @@ ifneq (,$(filter true,$(ENV_RESET)))
|
||||||
env_reset := -i
|
env_reset := -i
|
||||||
endif
|
endif
|
||||||
|
|
||||||
env = $(env.args) $(env.dist) $(env.file)
|
docker.env.args = $(foreach var,$(ENV_VARS),$(if $($(var)),-e $(var)='$($(var))'))
|
||||||
env.docker = $(env.docker.args) $(env.docker.dist) $(env.docker.file)
|
docker.env.dist ?= $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A) {print "-e "$$0}' .env.dist - 2>/dev/null)
|
||||||
|
docker.env.file ?= $(patsubst %,--env-file %,$(wildcard $(ENV_FILE)))
|
||||||
|
docker_env_args = $(docker.env.args) $(docker.env.dist) $(docker.env.file)
|
||||||
env.args = $(foreach var,$(ENV_VARS),$(if $($(var)),$(var)='$($(var))'))
|
env.args = $(foreach var,$(ENV_VARS),$(if $($(var)),$(var)='$($(var))'))
|
||||||
env.dist ?= $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A)' .env.dist - 2>/dev/null)
|
env.dist ?= $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A)' .env.dist - 2>/dev/null)
|
||||||
env.file ?= $(shell cat $(or $(ENV_FILE),/dev/null) 2>/dev/null |sed '/^[ \t]*$$/d;/^[ \t]*\#/d;s/='\''/=/;s/'\''$$//;s/='\"'/=/;s/'\"'$$//;' |awk -F '=' '{print $$1"='\''"$$2"'\''"}')
|
env.file ?= $(shell cat $(or $(ENV_FILE),/dev/null) 2>/dev/null |sed '/^[ \t]*$$/d;/^[ \t]*\#/d;s/='\''/=/;s/'\''$$//;s/='\"'/=/;s/'\"'$$//;' |awk -F '=' '{print $$1"='\''"$$2"'\''"}')
|
||||||
env.docker.args = $(foreach var,$(ENV_VARS),$(if $($(var)),-e $(var)='$($(var))'))
|
env_args = $(env.args) $(env.dist) $(env.file)
|
||||||
env.docker.dist ?= $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A) {print "-e "$$0}' .env.dist - 2>/dev/null)
|
|
||||||
env.docker.file ?= $(patsubst %,--env-file %,$(wildcard $(ENV_FILE)))
|
|
||||||
|
|
||||||
SHELL:=/bin/bash
|
SHELL:=/bin/bash
|
||||||
|
|
||||||
|
|
16
make/help.mk
16
make/help.mk
|
@ -9,20 +9,20 @@ blank1 blank2:
|
||||||
# target context: Print Context and Call contexts target
|
# target context: Print Context and Call contexts target
|
||||||
.PHONY: context
|
.PHONY: context
|
||||||
context:
|
context:
|
||||||
printf "${COLOR_INFO}Context:${COLOR_RESET}\n"
|
@printf "${COLOR_INFO}Context:${COLOR_RESET}\n"
|
||||||
$(MAKE) contexts
|
$(MAKE) contexts
|
||||||
|
|
||||||
# target context: Fire context-% target for each CONTEXT
|
# target context: Fire context-% target for each CONTEXT
|
||||||
.PHONY: contexts
|
.PHONY: contexts
|
||||||
contexts: $(foreach var,$(CONTEXT),context-$(var))
|
contexts: $(foreach var,$(CONTEXT),context-$(var))
|
||||||
|
|
||||||
# target context-%: Print % value
|
# target context-% print-%: Print % value
|
||||||
.PHONY: context-%
|
.PHONY: context-% print-%
|
||||||
context-%:
|
context-% print-%:
|
||||||
printf "${COLOR_HIGHLIGHT}%-37s${COLOR_RESET}" $*
|
@printf "${COLOR_HIGHLIGHT}%-37s${COLOR_RESET}" $*
|
||||||
printf "${COLOR_VALUE}"
|
@printf "${COLOR_VALUE}"
|
||||||
$(call PRINTF,$($*))
|
@$(call PRINTF,$($*))
|
||||||
printf "${COLOR_RESET}\n"
|
@printf "${COLOR_RESET}\n"
|
||||||
|
|
||||||
# target doc: Fire functions macros target variables
|
# target doc: Fire functions macros target variables
|
||||||
doc: functions macros targets variables ;
|
doc: functions macros targets variables ;
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
default ?= memcached mysql rabbitmq redis
|
||||||
|
|
||||||
|
# target default: Fire stack-default-up
|
||||||
|
default: stack-default-up;
|
|
@ -1,4 +0,0 @@
|
||||||
services ?= elastic memcached mysql rabbitmq redis
|
|
||||||
|
|
||||||
# target services: Fire stack-service-up
|
|
||||||
services: stack-services-up;
|
|
Loading…
Reference in New Issue