Skip to content

Commit cd325f0

Browse files
Merge pull request #1 from punktDe/dev
Initial functionality, test the role on a FreeBSD system
2 parents 0b872ea + accac18 commit cd325f0

25 files changed

+415
-104
lines changed

.ansible-lint

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
skip_list:
3+
- 'risky-shell-pipe'
4+
- 'role-name'
5+
- name[template]
6+
7+
warn_list:
8+
- package-latest
9+
- unnamed-task
10+
- command-instead-of-shell
11+
- no-handler

.github/workflows/test.yml

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
name: Test
3+
run-name: Run molecule tests on the role
4+
on:
5+
push:
6+
workflow_dispatch:
7+
8+
env:
9+
ANSIBLE_ROLES_PATH: roles
10+
ANSIBLE_HASH_BEHAVIOUR: merge
11+
12+
jobs:
13+
lint:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v3
18+
19+
- name: Set up Python
20+
uses: actions/setup-python@v2
21+
with:
22+
python-version: '3.x'
23+
24+
- name: Install dependencies.
25+
run: pip install -r requirements.txt
26+
27+
- name: Run ansible-lint
28+
run: "ansible-lint"
29+
30+
molecule:
31+
runs-on: ubuntu-latest
32+
steps:
33+
- name: Checkout
34+
uses: actions/checkout@v3
35+
36+
- name: Set up Python
37+
uses: actions/setup-python@v2
38+
with:
39+
python-version: '3.x'
40+
41+
- name: Install dependencies.
42+
run: pip install -r requirements.txt
43+
44+
- name: Run molecule
45+
run: "molecule test"

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.DS_Store
2+
*.pyc
3+
__pycache__
4+
files/

.pre-commit-config.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
repos:
3+
- repo: https://github.com/ansible/ansible-lint.git
4+
rev: v6.22.1
5+
hooks:
6+
- id: ansible-lint
7+
files: \.(yaml|yml)$

.yamllint

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
# Based on ansible-lint config
3+
extends: default
4+
5+
rules:
6+
braces:
7+
max-spaces-inside: 1
8+
level: error
9+
brackets:
10+
max-spaces-inside: 1
11+
level: error
12+
colons:
13+
max-spaces-after: -1
14+
level: error
15+
commas:
16+
max-spaces-after: -1
17+
level: error
18+
comments: disable
19+
comments-indentation: disable
20+
document-start: disable
21+
empty-lines:
22+
max: 3
23+
level: error
24+
hyphens:
25+
level: error
26+
indentation: disable
27+
key-duplicates: enable
28+
line-length: disable
29+
new-line-at-end-of-file: disable
30+
new-lines:
31+
type: unix
32+
trailing-spaces: disable
33+
truthy: disable

defaults/main.yml

+35-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,43 @@
11
---
22
roadrunner:
3-
port:
4-
rpc: 6001
5-
http: 8080
6-
metrics: 2112
7-
version: 2.12.3
3+
config: {}
4+
defaults:
5+
working_directory: "{{ vars.roadrunner.prefix.current_release }}"
6+
script_name: "app.php"
7+
version: '3.0'
8+
rpc:
9+
listen: tcp://127.0.0.1:6001
10+
server:
11+
command: "php {{ vars.roadrunner.defaults.script_name }}"
12+
relay: pipes
13+
http:
14+
address: 0.0.0.0:8080
15+
middleware: [ "gzip", "static" ]
16+
static:
17+
dir: "public"
18+
forbid: [ ".php", ".htaccess" ]
19+
pool:
20+
num_workers: 4
21+
supervisor:
22+
max_worker_memory: 100
23+
jobs:
24+
consume: [ ]
25+
pool:
26+
num_workers: 2
27+
supervisor:
28+
max_worker_memory: 100
29+
kv:
30+
local:
31+
driver: memory
32+
config:
33+
interval: 60
34+
metrics:
35+
address: localhost:2112
36+
version: 2023.3.9
837
arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
938
prefix:
1039
sudoers: "{{ '/usr/local/etc/sudoers.d/' if ansible_system == 'FreeBSD' else '/etc/sudoers.d' }}"
1140
current_release: /var/www/current
1241
config: "{{ '/var/opt/roadrunner/config' if ansible_system == 'FreeBSD' else '/etc/roadrunner' }}"
1342
bin: "{{ '/var/opt/roadrunner/bin' if ansible_system == 'FreeBSD' else '/usr/bin' }}"
43+
log: "/var/log/roadrunner"

handlers/main.yml

-5
This file was deleted.

meta/.requirements.yml

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
collections:
3+
- name: https://github.com/ansible-collections/community.general
4+
type: git
5+
- name: https://github.com/ansible-collections/community.crypto
6+
type: git
7+
- name: https://github.com/ansible-collections/ansible.posix
8+
type: git
9+
- name: https://github.com/ansible-collections/community.mysql
10+
type: git
11+
- name: https://github.com/ansible-collections/community.docker
12+
type: git
13+
14+
roles:
15+
- name: php
16+
src: https://github.com/punktDe/ansible-proserver-php
17+
- name: system
18+
src: https://github.com/punktDe/ansible-proserver-system
19+
- name: supervisord
20+
src: https://github.com/punktDe/ansible-proserver-supervisord

meta/main.yml

+12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
---
22
dependencies:
3+
- role: system
4+
when: (lookup('env','GITHUB_ACTIONS') | length) != 0
35
- role: php
6+
- role: supervisord
7+
when: ansible_system == "FreeBSD"
8+
9+
galaxy_info:
10+
author: "Punkt.de"
11+
license: "MIT"
12+
description: "Roadrunner role for Proserver"
13+
role_name: "proserver_roadrunner"
14+
namespace: "punktde"
15+
min_ansible_version: "2.15"

molecule/default/converge.yml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
- name: Converge
3+
hosts: all
4+
environment:
5+
GITHUB_ACTIONS: "maybe"
6+
vars:
7+
system:
8+
features:
9+
proserver_user: yes
10+
tasks:
11+
- name: "Include ansible-proserver-roadrunner"
12+
ansible.builtin.include_role:
13+
name: "ansible-proserver-roadrunner"

molecule/default/molecule.yml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
dependency:
3+
name: shell
4+
command: ansible-galaxy install -r meta/.requirements.yml -p roles/ --force
5+
driver:
6+
name: docker
7+
platforms:
8+
- name: instance
9+
image: geerlingguy/docker-ubuntu2204-ansible
10+
command: /lib/systemd/systemd
11+
pre_build_image: true
12+
privileged: true
13+
cgroupns_mode: host
14+
volumes:
15+
- /sys/fs/cgroup:/sys/fs/cgroup:rw
16+
provisioner:
17+
name: ansible
18+
playbooks:
19+
converge: ${MOLECULE_PLAYBOOK:-converge.yml}
20+
verifier:
21+
name: ansible

molecule/default/verify.yml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
# This is an example playbook to execute Ansible tests.
3+
4+
- name: Verify
5+
hosts: all
6+
gather_facts: false
7+
tasks:
8+
- name: Example assertion
9+
ansible.builtin.assert:
10+
that: true

requirements.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
ansible
2+
docker
3+
molecule
4+
molecule-plugins
5+
ansible-lint
6+
yamllint

tasks/config-Debian.yml

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
- name: Template the roadrunner config for {{ roadrunner_config.key }}
3+
register: roadrunner_template_config_result
4+
loop_control:
5+
label: "{{ roadrunner_config.key }}"
6+
ansible.builtin.template:
7+
src: roadrunner/rr.yaml.j2
8+
dest: "{{ roadrunner.prefix.config }}/{{ roadrunner_config.key }}/rr.yaml"
9+
owner: root
10+
mode: "0644"
11+
12+
- name: Install the roadrunner systemd path service for {{ roadrunner_config.key }}
13+
loop_control:
14+
label: "{{ roadrunner_config.key }}"
15+
ansible.builtin.template:
16+
owner: root
17+
mode: "0644"
18+
src: systemd/roadrunner.path
19+
dest: "/etc/systemd/system/roadrunner@{{ roadrunner_config.key }}.path"
20+
21+
- name: Install the roadrunner systemd service for {{ roadrunner_config.key }}
22+
loop_control:
23+
label: "{{ roadrunner_config.key }}"
24+
register: roadrunner_systemd_service_changed
25+
ansible.builtin.template:
26+
owner: root
27+
mode: "0644"
28+
src: systemd/roadrunner.service
29+
dest: "/etc/systemd/system/roadrunner@{{ roadrunner_config.key }}.service"
30+
31+
- name: Start and enable roadrunner@{{ roadrunner_config.key }}.path
32+
ansible.builtin.service:
33+
daemon_reload: yes
34+
name: roadrunner@{{ roadrunner_config.key }}.service
35+
enabled: yes
36+
state: started
37+
38+
- name: Restart roadrunner@{{ roadrunner_config.key }}.service
39+
when:
40+
- roadrunner_template_config_result.changed or roadrunner_install_binary_result.changed
41+
ansible.builtin.service:
42+
name: roadrunner@{{ roadrunner_config.key }}.service
43+
daemon_reload: yes
44+
state: restarted

tasks/config-FreeBSD.yml

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
- name: Template the roadrunner config ({{ roadrunner_config.key }})
3+
register: roadrunner_template_config_result
4+
loop_control:
5+
label: "{{ roadrunner_config.key }}"
6+
ansible.builtin.template:
7+
src: roadrunner/rr.yaml.j2
8+
dest: "{{ roadrunner.prefix.config }}/{{ roadrunner_config.key }}/rr.yaml"
9+
owner: root
10+
mode: "0644"
11+
12+
- name: Check if the PHP script exists ({{ roadrunner_config.key }})
13+
register: roadrunner_php_script_exists
14+
ansible.builtin.stat:
15+
path: "{{ roadrunner.prefix.current_release }}/{{ roadrunner.config[roadrunner_config.key].script_name | default(roadrunner.defaults.script_name) }}"
16+
17+
- name: Template supervisord configuration for Roadrunner
18+
register: roadrunner_template_service_config_result
19+
ansible.builtin.template:
20+
src: supervisord.d/roadrunner.conf
21+
dest: "{{ supervisord.prefix.config }}/roadrunner-{{ roadrunner_config.key }}.conf"
22+
owner: root
23+
mode: "0644"
24+
25+
- name: Enable and start the roadrunner-{{ roadrunner_config.key }} service if PHP script exists
26+
register: roadrunner_service_supervisord_started
27+
community.general.supervisorctl:
28+
name: "roadrunner-{{ roadrunner_config.key }}"
29+
state: "{{ 'present' if roadrunner_php_script_exists.stat.exists else 'absent' }}"
30+
stop_before_removing: yes
31+
32+
- name: Restart the roadrunner-{{ roadrunner_config.key }} service
33+
when: roadrunner_php_script_exists.stat.exists and not roadrunner_service_supervisord_started.changed and (roadrunner_template_service_config_result.changed or roadrunner_template_config_result.changed or (roadrunner_version is defined and roadrunner_version.stdout != roadrunner.version))
34+
community.general.supervisorctl:
35+
name: "roadrunner-{{ roadrunner_config.key }}"
36+
state: restarted

tasks/config.yml

-18
This file was deleted.

tasks/main.yml

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,27 @@
11
---
2-
- ansible_builtin.include_tasks: setup-Debian.yml
2+
- name: Configure the system for Roadrunner
3+
ansible.builtin.include_tasks: setup.yml
4+
5+
- name: Configure Debian/Ubuntu for Roadrunner
36
when: ansible_os_family == 'Debian'
7+
ansible.builtin.include_tasks: setup-Debian.yml
8+
9+
- name: Configure FreeBSD for Roadrunner
10+
when: ansible_system == 'FreeBSD'
11+
ansible.builtin.include_tasks: setup-FreeBSD.yml
412

5-
- ansible_builtin.include_tasks: setup-FreeBSD.yml
13+
- name: Handle service start (FreeBSD)
614
when: ansible_system == 'FreeBSD'
15+
loop: "{{ roadrunner.config | dict2items }}"
16+
loop_control:
17+
loop_var: roadrunner_config
18+
label: "{{ roadrunner_config.key }}"
19+
ansible.builtin.include_tasks: config-FreeBSD.yml
720

8-
- ansible_builtin.include_tasks: config.yml
21+
- name: Handle service start (Debian)
22+
when: ansible_os_family == 'Debian'
23+
loop: "{{ roadrunner.config | dict2items }}"
24+
loop_control:
25+
loop_var: roadrunner_config
26+
label: "{{ roadrunner_config.key }}"
27+
ansible.builtin.include_tasks: config-Debian.yml

0 commit comments

Comments
 (0)