aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--containers.yml148
-rw-r--r--docs/sample-environment/inventory.yml14
-rw-r--r--docs/sample-environment/wordpress/wordpress-app.containerfile18
-rw-r--r--docs/sample-environment/wordpress/wordpress-db.containerfile15
-rw-r--r--host.yml44
5 files changed, 239 insertions, 0 deletions
diff --git a/containers.yml b/containers.yml
new file mode 100644
index 0000000..5f4a7d7
--- /dev/null
+++ b/containers.yml
@@ -0,0 +1,148 @@
+- hosts: localhost
+
+ tasks:
+ - name: Rebuild images
+ containers.podman.podman_image:
+ name: "{{ item.name }}:{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }}"
+ path: "{{ item.path }}"
+ build:
+ file: "{{ item.file }}"
+ cache: false
+ tags: rebuild
+ loop: "{{ containers }}"
+
+ - name: Tag new images to latest
+ containers.podman.podman_tag:
+ image: "{{ item.name }}:{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }}"
+ target_names: "{{ item.name }}:latest"
+ tags: rebuild
+ loop: "{{ containers }}"
+
+ - name: Stop systemd pod service
+ ansible.builtin.systemd:
+ name: "pod-{{ pod.name }}.service"
+ state: stopped
+ scope: user
+ ignore_errors: true
+ tags:
+ - remove
+ - service-stop
+ when: pod is defined
+
+ - name: Remove systemd pod service file
+ ansible.builtin.file:
+ path: "~/.config/systemd/user/pod-{{ pod.name }}.service"
+ state: absent
+ tags: remove
+ when: pod is defined
+
+ - name: Stop systemd container service
+ ansible.builtin.systemd:
+ name: "container-{{ item.name }}.service"
+ state: stopped
+ scope: user
+ ignore_errors: true
+ tags:
+ - remove
+ - service-stop
+ loop: "{{ containers }}"
+
+ - name: Remove systemd container service file
+ ansible.builtin.file:
+ path: "~/.config/systemd/user/container-{{ item.name }}.service"
+ state: absent
+ tags: remove
+ loop: "{{ containers }}"
+
+ - name: Remove pod
+ containers.podman.podman_pod:
+ name: "{{ pod.name }}"
+ state: absent
+ tags:
+ - remove
+ - container-stop
+ when: pod is defined
+
+ - name: Remove containers
+ containers.podman.podman_container:
+ name: "{{ item.name }}"
+ state: absent
+ tags:
+ - remove
+ - container-stop
+ loop: "{{ containers }}"
+
+ - name: Create pod
+ containers.podman.podman_pod:
+ name: "{{ pod.name }}"
+ ports: "{{ pod.ports }}"
+ state: started
+ tags: container-start
+ when: pod is defined
+
+ - name: Start containers
+ ansible.builtin.shell: "podman container runlabel {{ item.runlabel }} {{ item.name}}:latest"
+ tags: container-start
+ loop: "{{ containers }}"
+
+ - name: Generate systemd service file for pod
+ containers.podman.podman_generate_systemd:
+ name: "{{ pod.name }}"
+ dest: "~/.config/systemd/user/"
+ new: true
+ tags: generate-systemd
+ when: pod is defined
+
+ - name: Generate systemd service file for container (when pod is not in use)
+ containers.podman.podman_generate_systemd:
+ name: "{{ item.name }}"
+ dest: "~/.config/systemd/user/"
+ new: true
+ tags: generate-systemd
+ loop: "{{ containers }}"
+ when: pod is not defined
+
+ - name: Reload systemd daemon
+ ansible.builtin.systemd:
+ daemon_reload: true
+ scope: user
+ tags:
+ - remove
+ - generate-systemd
+
+ - name: Pause for container full startup
+ ansible.builtin.pause:
+ seconds: 30
+
+ - name: Remove pod
+ containers.podman.podman_pod:
+ name: "{{ pod.name }}"
+ state: absent
+ when: pod is defined
+
+ - name: Remove containers
+ containers.podman.podman_container:
+ name: "{{ item.name }}"
+ state: absent
+ loop: "{{ containers }}"
+
+ - name: Start systemd pod service
+ ansible.builtin.systemd:
+ name: "pod-{{ pod.name}}.service"
+ state: started
+ enabled: true
+ scope: user
+ tags: start-service
+ when: pod is defined
+
+ - name: Start systemd container service
+ ansible.builtin.systemd:
+ name: "container-{{ item.name }}.service"
+ state: started
+ enabled: true
+ scope: user
+ tags: start-service
+ loop: "{{ containers }}"
+
+ - name: Prune old images
+ ansible.builtin.shell: podman image prune -f
diff --git a/docs/sample-environment/inventory.yml b/docs/sample-environment/inventory.yml
new file mode 100644
index 0000000..fd933a3
--- /dev/null
+++ b/docs/sample-environment/inventory.yml
@@ -0,0 +1,14 @@
+pod:
+ name: wordpress
+ ports:
+ - "8080:80"
+
+containers:
+ - name: wordpress-db
+ path: "docs/sample-environment/wordpress"
+ file: "wordpress-db.containerfile"
+ runlabel: "start"
+ - name: wordpress-app
+ path: "docs/sample-environment/wordpress"
+ file: "wordpress-app.containerfile"
+ runlabel: "start"
diff --git a/docs/sample-environment/wordpress/wordpress-app.containerfile b/docs/sample-environment/wordpress/wordpress-app.containerfile
new file mode 100644
index 0000000..f85fc07
--- /dev/null
+++ b/docs/sample-environment/wordpress/wordpress-app.containerfile
@@ -0,0 +1,18 @@
+FROM docker.io/library/wordpress:latest
+
+LABEL start="podman run -d --rm=true --name wordpress-app --pod wordpress \
+-e WORDPRESS_DB_HOST=127.0.0.1 \
+-e WORDPRESS_DB_USER=root \
+-e WORDPRESS_DB_PASSWORD=TESTTESTTEST \
+-e WORDPRESS_DB_NAME=wordpress \
+-e WORDPRESS_TABLE_PREFIX=wp_ \
+wordpress-app:latest"
+
+#Build
+#podman build -t wordpress-app -f wordpress-app.containerfile
+
+#Manual start
+#podman container runlabel start wordpress-app
+
+#Pod Start
+#podman pod create --name wordpress -p 8080:80
diff --git a/docs/sample-environment/wordpress/wordpress-db.containerfile b/docs/sample-environment/wordpress/wordpress-db.containerfile
new file mode 100644
index 0000000..3225616
--- /dev/null
+++ b/docs/sample-environment/wordpress/wordpress-db.containerfile
@@ -0,0 +1,15 @@
+FROM docker.io/mariadb:latest
+
+LABEL start="podman run -d --rm=true --name wordpress-db --pod wordpress \
+-e MARIADB_DATABASE=wordpress \
+-e MARIADB_ROOT_PASSWORD=TESTTESTTEST \
+wordpress-db:latest"
+
+#Build
+#podman build -t wordpress-db -f wordpress-db.containerfile
+
+#Manual start
+#podman container runlabel start wordpress-db
+
+#Pod Start
+#podman pod create --name wordpress -p 8080:80
diff --git a/host.yml b/host.yml
new file mode 100644
index 0000000..b15d9e0
--- /dev/null
+++ b/host.yml
@@ -0,0 +1,44 @@
+- hosts: localhost
+ become: true
+
+ tasks:
+ - name: Create containers user
+ ansible.builtin.user:
+ name: containers
+
+ - name: Install systemd-container and podman
+ ansible.builtin.package:
+ name:
+ - systemd-container
+ - podman
+ state: present
+
+ - name: Confirm systemd-linger is set for containers user
+ ansible.builtin.stat:
+ path: "/var/lib/systemd/linger/containers"
+ register: linger
+
+ - name: Set systemd-linger for containers user (if necessary)
+ ansible.builtin.shell: "loginctl enable-linger containers"
+ when: not linger.stat.exists
+
+ - name: Unprivileged port block
+ block:
+ - name: Confirm port 80 and above is allowed for unprivileged use
+ ansible.builtin.shell: "sysctl net.ipv4.ip_unprivileged_port_start |grep 80"
+
+ rescue:
+ - name: Set sysctl parameter net.ipv4.ip_unprivileged_port_start=80
+ ansible.builtin.lineinfile:
+ path: "/etc/sysctl.conf"
+ regexp: "^net.ipv4.ip_unprivileged_port_start=80"
+ line: "net.ipv4.ip_unprivileged_port_start=80"
+
+ - name: Reload sysctl
+ ansible.builtin.shell: "sysctl -p /etc/sysctl.conf"
+
+ - name: Confirm port 80 and above is allowed for unprivileged use
+ ansible.builtin.shell: "sysctl net.ipv4.ip_unprivileged_port_start |grep 80"
+ tags:
+ - never
+ - unprivileged-ports