add support of runit service manager

This commit is contained in:
Yann Autissier 2022-01-09 17:32:54 +01:00
parent da2f3ed44a
commit 5594d58732
26 changed files with 190 additions and 51 deletions

View File

@ -2,11 +2,10 @@
inventory = inventories
roles_path = roles
filter_plugins = plugins/filter
host_key_checking = False
# host_key_checking = False
[ssh_connection]
scp_if_ssh = smart
pipelining =True
[colors]
changed = purple

View File

@ -24,7 +24,7 @@ ansible-run: ansible-run-localhost
# target ansible-run-%: Fire docker-build-ansible, Call ansible-playbook ANSIBLE_PLAYBOOK
.PHONY: ansible-run-%
ansible-run-%: $(if $(DOCKER_RUN),docker-build-ansible,install-ansible) debug-ANSIBLE_PLAYBOOK
ansible-run-%: $(if $(DOCKER_RUN),docker-build-ansible,install-ansible)
$(call ansible-playbook,$(if $(ANSIBLE_TAGS),--tags $(ANSIBLE_TAGS)) $(if $(ANSIBLE_EXTRA_VARS),--extra-vars '$(patsubst target=localhost,target=$*,$(ANSIBLE_EXTRA_VARS))') $(if $(findstring true,$(DRYRUN)),--check) $(if $(ANSIBLE_INVENTORY),--inventory $(ANSIBLE_INVENTORY)) $(ANSIBLE_PLAYBOOK))
# target ansible-tests: Fire ssh-add ansible-tests-localhost

View File

@ -1,4 +1,4 @@
ANSIBLE_ARGS ?= $(if $(filter-out 0,$(UID)),$(if $(shell sudo -l 2>/dev/null |grep 'NOPASSWD: ALL'),,-K))$(if $(DOCKER_RUN),$(if $(shell ssh-add -l >/dev/null 2>&1 || echo false), -k))
ANSIBLE_ARGS ?= $(if $(filter-out 0,$(UID)),$(if $(shell sudo -l 2>/dev/null |grep 'NOPASSWD: ALL'),,--ask-become-pass))$(if $(DOCKER_RUN),$(if $(shell ssh-add -l >/dev/null 2>&1 || echo false), --ask-pass))
ANSIBLE_AWS_ACCESS_KEY_ID ?= $(AWS_ACCESS_KEY_ID)
ANSIBLE_AWS_DEFAULT_OUTPUT ?= $(AWS_DEFAULT_OUTPUT)
ANSIBLE_AWS_DEFAULT_REGION ?= $(AWS_DEFAULT_REGION)

View File

@ -10,7 +10,6 @@ hosts_git_repositories:
- { "repo": "{{ lookup('env','ANSIBLE_GIT_REPOSITORY') }}", "dest": "{{ lookup('env','ANSIBLE_GIT_DIRECTORY') }}", "key_file": "{{ lookup('env','ANSIBLE_GIT_KEY_FILE') or '~/.ssh/id_rsa' }}", "version": "{{ lookup('env','ANSIBLE_GIT_VERSION') }}" }
hosts_services:
- { "name": "myos", "state": "stopped", "enabled": "yes" }
- { "name": "zram", "state": "started", "enabled": "yes" }
hosts_user_env:
- ANSIBLE_CONFIG
- ANSIBLE_DOCKER_IMAGE_TAG

View File

@ -25,7 +25,7 @@
- name: filesystems - btrfs
when: "disks_to_mount and ansible_cmdline.fstype == 'btrfs'"
import_tasks: filesystems-btrfs.yml
import_tasks: filesystems_btrfs.yml
tags:
- btrfs

View File

@ -2,7 +2,7 @@
# file: tasks/services.yml
- name: services - enable/disable disks services
when: disks_services is defined and ansible_service_mgr|lower != "openrc"
when: disks_services is defined and ansible_service_mgr|lower != "openrc" and ansible_service_mgr|lower != "runit"
with_items: "{{ disks_services|default([]) }}"
service:
name: "{{item.name}}"
@ -10,7 +10,7 @@
enabled: "{{item.enabled}}"
become: yes
- name: services - openrc - enable/disable disks services
- name: services - enable/disable disks services - openrc
when: disks_services is defined and ansible_service_mgr|lower == "openrc"
with_items: "{{ disks_services|default([]) }}"
service:
@ -20,3 +20,12 @@
runlevel: boot
become: yes
- name: services - enable/disable disks services - runit
when: disks_services is defined and ansible_service_mgr|lower == "runit"
with_items: "{{ disks_services|default([]) }}"
sysvinit:
name: "{{item.name}}"
state: "{{item.state}}"
enabled: "{{item.enabled}}"
become: yes

View File

@ -36,6 +36,24 @@ docker_daemon_config_storage: 'overlay2'
docker_daemon_config: { "storage-driver": "devicemapper" }
```
* `docker_distribution` - Docker package distribution
``` yaml
docker_distribution: debian
```
* `docker_distribution_release` - Docker package distribution release
``` yaml
docker_distribution_release: bullseye
```
* `docker_machine` - Docker package architecture
``` yaml
docker_machine: amd64
```
* `docker_package` - Name of the docker package
``` yaml
@ -199,7 +217,7 @@ Both DOCKER_BUILD_PREFIX and DOCKER_BUILD_SUFFIX variables are empty, the Docker
The DOCKER_BUILD_PREFIX variable is populated with 'custom/' to force the Dockerfile to search for a `./custom/nginx.conf` file, ie /etc/docker/nginx/custom/nginx.conf file.
* Whith an image name suffixed with a dash, the docker-build command will search for a suffixed file as well.
* With an image name suffixed with a dash, the docker-build command will search for a suffixed file as well.
``` bash
# docker-build -c custom nginx-develop && docker-run -c custom nginx-develop
@ -241,4 +259,4 @@ docker:
## Limitations
This role is known to work on Ubuntu, Debian, CentOS and Alpine Linux.
This role is known to work on Alpine Linux, Armbian, Centos, Debian, Devuan, Fedora, Raspbian, RedHat and Ubuntu.

View File

@ -1,7 +1,7 @@
#!/bin/bash
# Author: Yann Autissier <yann.autissier@gmail.com>
DOCKER_IMAGE_REPOSITORY="centile"
DOCKER_IMAGE_REPOSITORY="local"
DOCKER_BUILD_DIRECTORY="/etc/docker"
usage() {
@ -30,9 +30,9 @@ usage() {
echo -e "Build a docker image named '${DOCKER_IMAGE_REPOSITORY}/elk-es01' with Dockerfile ${DOCKER_BUILD_DIRECTORY}/elk/Dockerfile"
echo -e "and build-arg DOCKER_BUILD_SUFFIX=-es01"
echo
echo -e "$0 -c elisa-sdc elk-es01"
echo -e "$0 -c custom elk-es01"
echo -e "Build a docker image named '${DOCKER_IMAGE_REPOSITORY}/elk-es01' with Dockerfile ${DOCKER_BUILD_DIRECTORY}/elk/Dockerfile,"
echo -e "build-arg DOCKER_BUILD_PREFIX=elisa-sdc/ and build-arg DOCKER_BUILD_SUFFIX=-es01"
echo -e "build-arg DOCKER_BUILD_PREFIX=custom/ and build-arg DOCKER_BUILD_SUFFIX=-es01"
echo
exit 1
}

View File

@ -1,7 +1,7 @@
#!/bin/bash
# Author: Yann Autissier <yann.autissier@gmail.com>
DOCKER_IMAGE_REPOSITORY="centile"
DOCKER_IMAGE_REPOSITORY="local"
DOCKER_BUILD_DIRECTORY="/etc/docker"
usage() {

View File

@ -12,16 +12,50 @@ galaxy_info:
- name: Alpine
versions:
- all
- name: Debian
- name: Centos
versions:
- all
- name: Debian
versions:
- bookworm
- bullseye
- buster
- stretch
- jessie
- wheezy
- name: Devuan
versions:
- daedalus
- chimaera
- beowulf
- ascii
- jessie
- name: EL
versions:
- all
- name: Fedora
versions:
- all
- name: Raspbian
versions:
- bookworm
- bullseye
- buster
- stretch
- jessie
- name: Ubuntu
versions:
- all
- impish
- hirsute
- groovy
- focal
- eoan
- disco
- cosmic
- bionic
- artful
- zesty
- yakkety
- xenial
- trusty

View File

@ -7,21 +7,10 @@
package: name="{{item.name}}" state="{{item.state}}"
become: yes
- name: packages - add docker GPG key
- import_tasks: packages_debian.yml
when: ansible_os_family|lower == "debian"
apt_key: url=https://download.docker.com/linux/debian/gpg
ignore_errors: true
become: yes
- name: packages - define arch
set_fact:
docker_apt_arch: "{% if ansible_machine == 'aarch64' %}arm64{% endif %}{% if ansible_machine == 'x86_64' %}amd64{% endif %}"
- name: packages - add docker APT repository
when: ansible_os_family|lower == "debian"
apt_repository:
repo: deb [arch={{docker_apt_arch}}] https://download.docker.com/linux/{{ansible_distribution|lower}} {{ansible_distribution_release}} stable
become: yes
tags:
- debian
- name: packages - add docker package
when: docker_package|length > 0

View File

@ -0,0 +1,53 @@
---
# file: tasks/packages_debian.yml
- name: packages - add docker GPG key
apt_key: url=https://download.docker.com/linux/debian/gpg
ignore_errors: true
become: yes
- name: packages - define docker_machine
set_fact:
docker_machine: "{% if ansible_machine == 'aarch64' %}arm64{% endif %}{% if ansible_machine == 'x86_64' %}amd64{% endif %}"
when: docker_machine is undefined
- name: packages - define docker_distribution
set_fact:
docker_distribution: "{% if ansible_distribution|lower == 'devuan' %}debian{% else %}{{ansible_distribution|lower}}{% endif %}"
when: docker_distribution is undefined
- name: packages - define docker_distribution_release - debian bookworm (not yet available)
set_fact:
docker_distribution_release: "bullseye"
when: docker_distribution_release is undefined and ansible_distribution_release|lower == 'bookworm'
- name: packages - define docker_distribution_release - devuan daealus
set_fact:
docker_distribution_release: "bullseye"
when: docker_distribution_release is undefined and ansible_distribution_release|lower == 'daedalus/ceres'
- name: packages - define docker_distribution_release - devuan chimaera
set_fact:
docker_distribution_release: "bullseye"
when: docker_distribution_release is undefined and ansible_distribution_release|lower == 'chimaera'
- name: packages - define docker_distribution_release - devuan beowulf
set_fact:
docker_distribution_release: "buster"
when: docker_distribution_release is undefined and ansible_distribution_release|lower == 'beowulf'
- name: packages - define docker_distribution_release - devuan ascii
set_fact:
docker_distribution_release: "stretch"
when: docker_distribution_release is undefined and ansible_distribution_release|lower == 'ascii'
- name: packages - define docker_distribution_release
set_fact:
docker_distribution_release: "{{ansible_distribution_release|lower}}"
when: docker_distribution_release is undefined
- name: packages - add docker APT repository
apt_repository:
repo: deb [arch={{docker_machine}}] https://download.docker.com/linux/{{docker_distribution}} {{docker_distribution_release}} stable
become: yes

View File

@ -2,7 +2,7 @@
# file: tasks/services.yml
- name: services - enable/disable docker services
when: docker_services is defined and ansible_service_mgr|lower != "openrc"
when: docker_services is defined and ansible_service_mgr|lower != "openrc" and ansible_service_mgr|lower != "runit"
with_items: "{{ docker_services|default([]) }}"
service:
name: "{{item.name}}"
@ -10,13 +10,13 @@
enabled: "{{item.enabled}}"
become: yes
- name: services - openrc - force service status
- name: services - force service status - openrc
when: docker_services is defined and ansible_service_mgr|lower == "openrc"
shell: "kill -0 $(cat /run/{{item.name}}.pid) && [ ! -h /run/openrc/started/{{item.name}} ] && ln -s /etc/init.d/{{item.name}} /run/openrc/started/{{item.name}} && service {{item.name}} restart ||:"
with_items: "{{ docker_services|default([]) }}"
become: yes
- name: services - openrc - enable/disable docker services
- name: services - enable/disable docker services - openrc
when: docker_services is defined and ansible_service_mgr|lower == "openrc"
with_items: "{{ docker_services|default([]) }}"
service:
@ -26,7 +26,16 @@
runlevel: boot
become: yes
- name: services - openrc - force service restart
- name: services - enable/disable docker services - runit
when: docker_services is defined and ansible_service_mgr|lower == "runit"
with_items: "{{ docker_services|default([]) }}"
sysvinit:
name: "{{item.name}}"
state: "{{item.state}}"
enabled: "{{item.enabled}}"
become: yes
- name: services - force service restart - openrc
when: ansible_service_mgr|lower == "openrc"
shell: "[ ! -d /var/lib/docker/tmp ] && service docker restart ||:"
become: yes

View File

@ -6,7 +6,7 @@
package: name="cloud-init" state="present"
become: yes
- name: cloudinit - alpine - install cloud-init packages
- name: cloudinit - install cloud-init packages - alpine
when: hosts_cloudinit_enable|default(false) and ansible_os_family|lower == "alpine"
with_items:
- { "name": "cloud-init", "state": "present" }
@ -37,7 +37,7 @@
enabled: yes
become: yes
- name: cloudinit - activate service (openrc)
- name: cloudinit - activate service - openrc
when: hosts_cloudinit_enable|default(false) and ansible_service_mgr|lower == "openrc"
service:
name: cloud-init

View File

@ -1,14 +1,24 @@
---
# file: tasks/config.yml
- name: config - arch != x86 - do not run docker-compose in docker
- name: config - do not run docker-compose in docker - arch != x86
when: ansible_machine|lower != "x86_64"
lineinfile: dest="/etc/default/myos" state="present" line="DOCKER=false"
with_items:
- DOCKER=false
lineinfile:
path: /etc/default/myos
create: yes
line: '{{ item }}'
mode: '0644'
become: yes
- name: config - set MYOS config in /etc/default/myos
with_items:
- MYOS={{ lookup('env','ANSIBLE_MYOS') }}
lineinfile: dest="/etc/default/myos" create="yes" line="{{ item }}" mode="0644"
lineinfile:
path: /etc/default/myos
create: yes
line: '{{ item }}'
mode: '0644'
become: yes

View File

@ -23,7 +23,7 @@
copy: src=../files/{{item}} dest={{item}} owner=root group=root mode=0755
become: yes
- name: files - systemd - copy files
- name: files - copy files - systemd
when: ansible_service_mgr|lower == "systemd"
with_items:
- /etc/systemd/system/ansible.service
@ -33,7 +33,7 @@
copy: src=../files/{{item}} dest={{item}} owner=root group=root mode=0644
become: yes
- name: files - openrc - copy files
- name: files - copy files - openrc
when: ansible_service_mgr|lower == "openrc"
with_items:
- /etc/init.d/myos-openrc

View File

@ -2,7 +2,7 @@
# file: tasks/services.yml
- name: services - enable/disable hosts services
when: hosts_services is defined and ansible_service_mgr|lower != "openrc"
when: hosts_services is defined and ansible_service_mgr|lower != "openrc" and ansible_service_mgr|lower != "runit"
with_items: "{{ hosts_services|default([]) }}"
service:
name: "{{item.name}}"
@ -10,7 +10,7 @@
enabled: "{{item.enabled}}"
become: yes
- name: services - openrc - enable/disable hosts services
- name: services - enable/disable hosts services - openrc
when: hosts_services is defined and ansible_service_mgr|lower == "openrc"
with_items: "{{ hosts_services|default([]) }}"
service:
@ -20,3 +20,12 @@
runlevel: boot
become: yes
- name: services - enable/disable hosts services - runit
when: hosts_services is defined and ansible_service_mgr|lower == "runit"
with_items: "{{ hosts_services|default([]) }}"
sysvinit:
name: "{{item.name}}"
state: "{{item.state}}"
enabled: "{{item.enabled}}"
become: yes

View File

@ -70,7 +70,7 @@
- include myos/config
lineinfile: dest=~/.ssh/config create=yes line='{{item}}'
- name: ssh - update ~/.ssh/myos/config
- name: user - update ~/.ssh/myos/config
template:
src: ssh_config.j2
dest: ~/.ssh/myos/config

View File

@ -6,7 +6,7 @@ hosts_packages_distro:
- { "name": "groff", "state": "present" }
- { "name": "openssh-client", "state": "present" }
- { "name": "pass", "state": "present" }
- { "name": "python-pip", "state": "present" }
- { "name": "python3-pip", "state": "present" }
- { "name": "rclone", "state": "present" }
- { "name": "util-linux", "state": "present" }
- { "name": "vim-nox", "state": "present" }

View File

@ -2,7 +2,7 @@
# file: tasks/services.yml
- name: services - enable/disable remotes services
when: remotes_services is defined and ansible_service_mgr|lower != "openrc"
when: remotes_services is defined and ansible_service_mgr|lower != "openrc" and ansible_service_mgr|lower != "runit"
with_items: "{{ remotes_services|default([]) }}"
service:
name: "{{item.name}}"
@ -10,7 +10,7 @@
enabled: "{{item.enabled}}"
become: yes
- name: services - openrc - enable/disable remotes services
- name: services - enable/disable remotes services - openrc
when: remotes_services is defined and ansible_service_mgr|lower == "openrc"
with_items: "{{ remotes_services|default([]) }}"
service:
@ -20,3 +20,12 @@
runlevel: boot
become: yes
- name: services - enable/disable remotes services - runit
when: remotes_services is defined and ansible_service_mgr|lower == "runit"
with_items: "{{ remotes_services|default([]) }}"
sysvinit:
name: "{{item.name}}"
state: "{{item.state}}"
enabled: "{{item.enabled}}"
become: yes

View File

@ -8,7 +8,7 @@ bootstrap: bootstrap-git bootstrap-docker app-bootstrap ## Update application fi
# target bootstrap-docker: Build and start application dockers
# on local host
.PHONY: boostrap-docker
.PHONY: bootstrap-docker
bootstrap-docker: install-bin-docker setup-docker-group
# target bootstrap-git: Fire update-app

View File

@ -12,6 +12,7 @@ endif
COMPOSE_IGNORE_ORPHANS ?= false
COMPOSE_PROJECT_NAME ?= $(APP_ENV)$(subst /,,$(subst -,,$(APP_PATH)))
COMPOSE_SERVICE_NAME ?= $(subst _,-,$(COMPOSE_PROJECT_NAME))
COMPOSE_VERSION ?= 1.29.2
CONTEXT += COMPOSE_FILE DOCKER_REPOSITORY
CONTEXT_DEBUG += DOCKER_BUILD_TARGET DOCKER_IMAGE_TAG DOCKER_REGISTRY DOCKER_SERVICE DOCKER_SERVICES
DOCKER_AUTHOR ?= $(DOCKER_AUTHOR_NAME) <$(DOCKER_AUTHOR_EMAIL)>

View File

@ -4,7 +4,7 @@
# target debug: Print more informations
.PHONY: debug
debug:
$(MAKE) doc help profile DEBUG=true
$(MAKE) help profile DEBUG=true
# target debug-%: Print value of %
.PHONY: debug-%

View File

@ -1,6 +1,5 @@
COMPOSE_PROJECT_NAME_MYOS ?= $(USER_ENV)_myos
COMPOSE_PROJECT_NAME_NODE ?= node
COMPOSE_VERSION ?= 1.29.2
DOCKER_ENV_ARGS ?= $(docker_env_args)
DOCKER_EXEC_OPTIONS ?=
DOCKER_GID ?= $(call gid,docker)
@ -15,6 +14,8 @@ DOCKER_NETWORK_PRIVATE ?= $(USER_ENV)
DOCKER_NETWORK_PUBLIC ?= node
DOCKER_REPOSITORY_MYOS ?= $(subst _,/,$(COMPOSE_PROJECT_NAME_MYOS))
DOCKER_REPOSITORY_NODE ?= $(subst _,/,$(COMPOSE_PROJECT_NAME_NODE))
# DOCKER_RUN: if empty, run system command, else run it in a docker
DOCKER_RUN ?=
# DOCKER_RUN_OPTIONS: default options of `docker run` command
DOCKER_RUN_OPTIONS += --rm -it
# DOCKER_RUN_VOLUME: options -v of `docker run` command to mount additionnal volumes

View File

@ -43,7 +43,6 @@ CONTEXT ?= ENV $(shell awk 'BEGIN {FS="="}; $$1 !~ /^(\#
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 ?=
DOCKER ?= $(shell type -p docker)
DOCKER_RUN ?= $(if $(filter-out false False FALSE,$(DOCKER)),$(DOCKER))
DOMAIN ?= localhost
DRONE ?= false
DRYRUN ?= false