diff --git a/ansible/playbooks/service-loggearman.yml b/ansible/playbooks/service-loggearman.yml
new file mode 100644
index 0000000..5f22797
--- /dev/null
+++ b/ansible/playbooks/service-loggearman.yml
@@ -0,0 +1,6 @@
+---
+- name: Configure log-gearman-client and log-gearman-worker tools
+  hosts: logscraper01.openstack.org
+  become: true
+  roles:
+    - loggearman
diff --git a/ansible/roles/loggearman/README.rst b/ansible/roles/loggearman/README.rst
new file mode 100644
index 0000000..c9c3f91
--- /dev/null
+++ b/ansible/roles/loggearman/README.rst
@@ -0,0 +1,32 @@
+Openstack Log Processor Tools
+=============================
+
+The goal of this role is to setup and configure service related
+to `log-gearman-client` and `log-gearman-worker` scripts, that
+were ported to this project repository from `puppet-log_processor repository
+<https://opendev.org/opendev/puppet-log_processor/src/branch/master/files>`__.
+
+Configuration
+-------------
+
+The role is automatically deploying services:
+
+* log-gearman-client
+* log-gearman-worker
+
+inside the container.
+
+Example playbook setup
+----------------------
+
+.. code-block:: yaml
+
+   - name: Configure loggearman tool
+     hosts: localhost
+     become: true
+     vars:
+       source_url: https://localhost
+       output_hosts: mylogstashhost.com
+       log_cert_verify: True
+     roles:
+       - loggearman
diff --git a/ansible/roles/loggearman/defaults/main.yml b/ansible/roles/loggearman/defaults/main.yml
new file mode 100644
index 0000000..e02ad01
--- /dev/null
+++ b/ansible/roles/loggearman/defaults/main.yml
@@ -0,0 +1,27 @@
+---
+loggearman_user: loggearman
+loggearman_group: loggearman
+
+loggearman_dir: /etc/loggearman
+loggearman_log_dir: /var/log/loggearman
+
+container_images:
+  # FIXME: Move image to dedicated repository on Docker hub.
+  loggearman: quay.rdoproject.org/software-factory/loggearman:latest
+
+# Gearman client
+source_url: ""
+zmq_publishers: []
+subunit_files: []
+source_files: []
+
+# Gearman worker
+gearman_host: 0.0.0.0
+gearman_port: 4731
+output_host: logstash.example.com
+output_port: 9999
+output_mode: tcp
+crm114_script: ""
+crm114_data: ""
+log_ca_certs: ""
+log_cert_verify: True
diff --git a/ansible/roles/loggearman/handlers/main.yml b/ansible/roles/loggearman/handlers/main.yml
new file mode 100644
index 0000000..452434b
--- /dev/null
+++ b/ansible/roles/loggearman/handlers/main.yml
@@ -0,0 +1,14 @@
+---
+- name: restart loggearman client
+  service:
+    name: loggearman-client
+    state: restarted
+    daemon-reload: true
+    enabled: true
+
+- name: restart loggearman worker
+  service:
+    name: loggearman-worker
+    state: restarted
+    daemon-reload: true
+    enabled: true
diff --git a/ansible/roles/loggearman/tasks/main.yml b/ansible/roles/loggearman/tasks/main.yml
new file mode 100644
index 0000000..c4d2c5e
--- /dev/null
+++ b/ansible/roles/loggearman/tasks/main.yml
@@ -0,0 +1,59 @@
+---
+- name: Create decidated group
+  group:
+    name: "{{ loggearman_group }}"
+    state: present
+
+- name: Create dedicated user
+  user:
+    name: "{{ loggearman_user }}"
+    state: present
+    comment: "Dedicated user for loggearman"
+    group: "{{ loggearman_group }}"
+    shell: "/sbin/nologin"
+    create_home: false
+
+- name: Create dedicated directories
+  file:
+    path: "{{ item }}"
+    state: directory
+    owner: "{{ loggearman_user }}"
+    group: "{{ loggearman_group }}"
+  loop:
+    - "{{ loggearman_dir }}"
+    - "{{ loggearman_log_dir }}"
+
+- name: Init log files
+  file:
+    path: "{{ loggearman_log_dir }}/{{ item }}.log"
+    state: touch
+    owner: "{{ loggearman_user }}"
+    group: "{{ loggearman_group }}"
+    mode: "0666"
+  loop:
+    - client
+    - worker
+
+- name: Ensure container software is installed
+  package:
+    name: podman
+    state: present
+
+- name: Pull image
+  shell: "podman pull {{ container_images['loggearman'] }}"
+
+- name: Create configuration files
+  template:
+    src: "{{ item }}.yml.j2"
+    dest: "{{ loggearman_dir }}/{{ item }}.yml"
+  loop:
+    - client
+    - worker
+  notify:
+    - restart loggearman {{ item }}
+
+- name: Configure loggearman service
+  include_tasks: service.yml
+  loop:
+    - client
+    - worker
diff --git a/ansible/roles/loggearman/tasks/service.yml b/ansible/roles/loggearman/tasks/service.yml
new file mode 100644
index 0000000..fd05f7e
--- /dev/null
+++ b/ansible/roles/loggearman/tasks/service.yml
@@ -0,0 +1,17 @@
+---
+- name: Generate podman-loggearman-{{ item }} script
+  template:
+    src: loggearman.sh.j2
+    dest: "/usr/local/bin/podman-loggearman-{{ item }}"
+    mode: '0755'
+  notify:
+    - restart loggearman {{ item }}
+
+- name: Generate systemd unit loggearman-{{ item }}
+  template:
+    src: loggearman.service.j2
+    dest: "/etc/systemd/system/loggearman-{{ item }}.service"
+    owner: root
+    group: root
+  notify:
+    - restart loggearman {{ item }}
diff --git a/ansible/roles/loggearman/templates/client.yml.j2 b/ansible/roles/loggearman/templates/client.yml.j2
new file mode 100644
index 0000000..359f350
--- /dev/null
+++ b/ansible/roles/loggearman/templates/client.yml.j2
@@ -0,0 +1,5 @@
+---
+source-url: {{ source_url }}
+zmq-publishers: {{ zmq_publishers }}
+subunit-files: {{ subunit_files }}
+source-files: {{ source_files }}
diff --git a/ansible/roles/loggearman/templates/loggearman.service.j2 b/ansible/roles/loggearman/templates/loggearman.service.j2
new file mode 100644
index 0000000..231cc28
--- /dev/null
+++ b/ansible/roles/loggearman/templates/loggearman.service.j2
@@ -0,0 +1,16 @@
+[Unit]
+Description=loggearman {{ item }} service
+After=syslog.target network.target
+StartLimitInterval=20
+StartLimitBurst=5
+
+[Service]
+Type=simple
+SyslogIdentifier=loggearman-{{ item }}
+ExecStart=/usr/local/bin/podman-loggearman-{{ item }}
+ExecStop=/usr/bin/podman stop loggearman-{{ item }}
+Restart=always
+RestartSec=5s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/ansible/roles/loggearman/templates/loggearman.sh.j2 b/ansible/roles/loggearman/templates/loggearman.sh.j2
new file mode 100644
index 0000000..dad55ac
--- /dev/null
+++ b/ansible/roles/loggearman/templates/loggearman.sh.j2
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# MANAGED BY ANSIBLE
+/usr/bin/podman run \
+    --network host \
+    --rm \
+    --name loggearman-{{ item }} \
+    --volume {{ loggearman_dir }}:{{ loggearman_dir }}:Z \
+    --volume {{ loggearman_log_dir }}:{{ loggearman_log_dir }}:z \
+    {{ container_images['loggearman'] }} \
+    log-gearman-{{ item }} \
+    -c {{ loggearman_dir }}/{{ item }}.yml \
+    --foreground \
+    -d {{ loggearman_log_dir }}/{{ item }}.log
diff --git a/ansible/roles/loggearman/templates/worker.yml.j2 b/ansible/roles/loggearman/templates/worker.yml.j2
new file mode 100644
index 0000000..39857f3
--- /dev/null
+++ b/ansible/roles/loggearman/templates/worker.yml.j2
@@ -0,0 +1,16 @@
+---
+gearman-host: {{ gearman_host }}
+gearman-port: {{ gearman_port }}
+output-host: {{ output_host }}
+output-port: {{ output_port }}
+output-mode: {{ output_mode }}
+log-cert-verify: {{ log_cert_verify }}
+{% if crm114_script %}
+crm114-script: {{ crm114_script }}
+{% endif %}
+{% if crm114_data %}
+crm114-data: {{ crm114_data }}
+{% endif %}
+{% if log_ca_certs %}
+log-ca-certs: {{ log_ca_certs }}
+{% endif %}