Newer
Older
SHELL := /bin/bash
DOCKER_IMAGE_NAME := registry.ubicast.net/mediaserver/envsetup
VENV := /tmp/pyvensetup
ANSIBLE_CONFIG := ansible/ansible.cfg
PIP_BIN = $(shell command -v $(VENV)/bin/pip3 || command -v pip3 || echo pip3)
PIP_COMPILE_BIN = $(shell command -v $(VENV)/bin/pip-compile || command -v pip-compile)
ANSIBLE_BIN = $(shell command -v ansible || command -v $(VENV)/bin/ansible)
ANSIBLE_PLAYBOOK_BIN = $(shell command -v ansible-playbook || command -v $(VENV)/bin/ansible-playbook)
ANSIBLE_LINT_BIN = $(shell command -v ansible-lint || command -v $(VENV)/bin/ansible-lint)
ANSIBLE_GALAXY_BIN = $(shell command -v ansible-galaxy || command -v $(VENV)/bin/ansible-galaxy || echo ansible-galaxy)
YAMLLINT_BIN = $(shell command -v yamllint || command -v $(VENV)/bin/yamllint)
FLAKE8_BIN = $(shell command -v flake8 || command -v $(VENV)/bin/flake8)
# molecule tests flags
ifdef debug
MOLECULE_FLAGS += --debug
endif
ifdef keep
MOLECULE_TEST_FLAGS += --destroy=never --parallel
ifdef ha-pgsql
MOLECULE_TEST_FLAGS += --scenario-name ha-pgsql
endif
ifdef mediaserver-ha
MOLECULE_TEST_FLAGS += --scenario-name mediaserver-ha
endif
.PHONY: all
## TARGET: DESCRIPTION: ARGS
all: help
.PHONY: venv
## venv: Install python3-venv and create a temporary virtualenv
venv:
-@command -v apt-get >/dev/null && apt-get update && apt-get install -y python3-venv
@command -v $(PIP_BIN) > /dev/null || python3 -m venv $(VENV)
## ansible/requirements.txt: Update requirements and their dependencies
## ansible/requirements.dev.txt: Update development requirements and their dependencies
%.txt: %.in
$(PIP_COMPILE_BIN) -U $^ -o $@
chmod 644 $@
.PHONY: install
## install: Install requirements
install: venv
$(PIP_BIN) install -U pip wheel
$(PIP_BIN) install -r ansible/requirements.txt
## ANSIBLE_GALAXY_BIN := $(if $(ANSIBLE_GALAXY_BIN),$(ANSIBLE_GALAXY_BIN),$(shell command -v ansible-galaxy || command -v $(VENV)/bin/ansible-galaxy))
## $(eval override ANSIBLE_GALAXY_BIN=$(shell command -v ansible-galaxy || command -v $(VENV)/bin/ansible-galaxy))
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_GALAXY_BIN) install -r ansible/requirements.yml
.PHONY: install-dev
## install-dev: Install development requirements
$(PIP_BIN) install -r ansible/requirements.dev.txt
[ -d .git/hooks ] || mkdir .git/hooks
ln -sfv .githooks/pre-commit .git/hooks/ || echo "Failed to create pre-commit link"
.PHONY: lint
## lint: Run linters on the project
lint:
$(FLAKE8_BIN) .
$(YAMLLINT_BIN) .
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_LINT_BIN) ansible/playbooks/site.yml
## test: Run development tests on the project : debug=1, keep=1, SKYREACH_SYSTEM_KEY=<xxx>, ha-pgsql=1
cd ansible; molecule $(MOLECULE_FLAGS) test $(MOLECULE_TEST_FLAGS)
.PHONY: start-preprod-ovh
## start-preprod-ovh: launch ansible to deploy OVH preprod environment
start-preprod-ovh:
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_PLAYBOOK_BIN) -i envsetup-extra/inventories/preprod ansible/playbooks/site_ovh.yml
.PHONY: stop-preprod-ovh
## stop-preprod-ovh: launch ansible to deploy OVH preprod environment
stop-preprod-ovh:
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_PLAYBOOK_BIN) -i envsetup-extra/inventories/preprod ansible/playbooks/site_ovh.yml -t force-delete
.PHONY: deploy
## deploy: Run deployment playbooks : i=<inventory-path>, l=<host-or-group>, t=<tag>
deploy:
ifndef i
$(error i is undefined)
endif
ifndef l
$(eval l=all)
endif
ifndef t
$(eval t=all)
endif
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_BIN) -i $(i) -l $(l) -m ping all
ANSIBLE_CONFIG=$(ANSIBLE_CONFIG) $(ANSIBLE_PLAYBOOK_BIN) -i $(i) ansible/playbooks/site.yml -e conf_update=true -l $(l) -t $(t)
.PHONY: image-validate
## image-validate: Check that Packer image is valid : build=<path-to-packer-file>
image-validate:
ifndef build
$(error build is undefined)
endif
.PHONY: image
## image: Run Packer image build : build=<path-to-packer-file>
image: image-validate
packer build -on-error=ask -force $(build)
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
.PHONY: docker-build
## docker-build: Run docker image build for CI and devcontainer
docker-build: docker-pull
docker build -t $(DOCKER_IMAGE_NAME) -f .devcontainer/Dockerfile .
docker build -t $(DOCKER_IMAGE_NAME):root -f .devcontainer/Dockerfile.root .
.PHONY: docker-rebuild
## docker-rebuild: Force docker image rebuild
docker-rebuild:
docker build --pull --no-cache -t $(DOCKER_IMAGE_NAME) -f .devcontainer/Dockerfile .
docker build --pull --no-cache -t $(DOCKER_IMAGE_NAME):root -f .devcontainer/Dockerfile.root .
.PHONY: docker-pull
## docker-pull: Pull Docker image from registry
docker-pull:
-docker pull $(DOCKER_IMAGE_NAME)
-docker pull $(DOCKER_IMAGE_NAME):root
.PHONY: docker-push
## docker-push: Push Docker image to registry
docker-push:
docker push $(DOCKER_IMAGE_NAME)
docker push $(DOCKER_IMAGE_NAME):root
.PHONY: help
## help: Print this help message
help:
@echo -e "Usage: \n"
@sed -n 's/^##//p' ${MAKEFILE_LIST} | column -t -s ':' | sed -e 's/^/ /'