From bd4cc73cbb8129a2e4a256bb0728024f57fba7ff Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 15:45:39 +0300 Subject: [PATCH] add metr1c role --- roles/metr1c/README.md | 52 ++++++++++++++++++++++ roles/metr1c/defaults/main.yml | 2 + roles/metr1c/handlers/main.yml | 1 + roles/metr1c/meta/main.yml | 17 +++++++ roles/metr1c/molecule/default/converge.yml | 12 +++++ roles/metr1c/molecule/default/molecule.yml | 27 +++++++++++ roles/metr1c/molecule/default/verify.yml | 19 ++++++++ roles/metr1c/tasks/main.yml | 43 ++++++++++++++++++ roles/metr1c/tasks/run_systemd.yml | 11 +++++ roles/metr1c/templates/metr1c.service.j2 | 32 +++++++++++++ roles/metr1c/vars/main.yml | 7 +++ 11 files changed, 223 insertions(+) create mode 100644 roles/metr1c/README.md create mode 100644 roles/metr1c/defaults/main.yml create mode 100644 roles/metr1c/handlers/main.yml create mode 100644 roles/metr1c/meta/main.yml create mode 100644 roles/metr1c/molecule/default/converge.yml create mode 100644 roles/metr1c/molecule/default/molecule.yml create mode 100644 roles/metr1c/molecule/default/verify.yml create mode 100644 roles/metr1c/tasks/main.yml create mode 100644 roles/metr1c/tasks/run_systemd.yml create mode 100644 roles/metr1c/templates/metr1c.service.j2 create mode 100644 roles/metr1c/vars/main.yml diff --git a/roles/metr1c/README.md b/roles/metr1c/README.md new file mode 100644 index 0000000..c50d0be --- /dev/null +++ b/roles/metr1c/README.md @@ -0,0 +1,52 @@ +metr1c +========= + +Install metr1c as `systemd` service + +Requirements +------------ + +None + +Role Variables +-------------- + + deploy: set true or false depending on whether we start the service or not, set false when running molecule test + metr1c_version: metr1c version to be deployed + cluster_uuid: cluster id + cluster_admin: name of cluster admin + cluster_pw: password to authenticate as cluster admin + platform_version: version of 1c platform + metr1c_port: metr1c will listen on this port + +Dependencies +------------ + +None + +Example Playbook +---------------- + +```yaml +roles: + - role: genlab.metr1c + deploy: false + metr1c_version: "0.0.1" + cluster_uuid: "111-111-111-111" + cluster_admin: "test" + cluster_pw: "testpw" + platform_version: "8.3.24.1467" + metr1c_port: "1599" +``` + +License +------- + +BSD + +Author Information +------------------ + +Alexander Gorelyshev (corvus-migratorius@proton.me) + +Genlab LLC \ No newline at end of file diff --git a/roles/metr1c/defaults/main.yml b/roles/metr1c/defaults/main.yml new file mode 100644 index 0000000..5a61db0 --- /dev/null +++ b/roles/metr1c/defaults/main.yml @@ -0,0 +1,2 @@ +--- +deploy: true diff --git a/roles/metr1c/handlers/main.yml b/roles/metr1c/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/metr1c/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/metr1c/meta/main.yml b/roles/metr1c/meta/main.yml new file mode 100644 index 0000000..27a5d4f --- /dev/null +++ b/roles/metr1c/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: metr1c + namespace: genlab + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + description: "Metric collector (Prometheus) for 1C Plaform using 1C RAS/RAC" + license: "MIT" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: [ "focal", "jammy" ] + + galaxy_tags: [ ] + +dependencies: [] diff --git a/roles/metr1c/molecule/default/converge.yml b/roles/metr1c/molecule/default/converge.yml new file mode 100644 index 0000000..88841d6 --- /dev/null +++ b/roles/metr1c/molecule/default/converge.yml @@ -0,0 +1,12 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.metr1c + deploy: false + metr1c_version: "0.2.0" + cluster_uuid: "123-123-1234" + cluster_admin: "admin" + cluster_pw: "testpw" + platform_version: "8.3.24.1464" + metr1c_port: "1599" diff --git a/roles/metr1c/molecule/default/molecule.yml b/roles/metr1c/molecule/default/molecule.yml new file mode 100644 index 0000000..fd2f06d --- /dev/null +++ b/roles/metr1c/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy + +driver: + name: docker + +platforms: + - name: ubuntu + image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + +provisioner: + name: ansible + +verifier: + name: ansible + +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/metr1c/molecule/default/verify.yml b/roles/metr1c/molecule/default/verify.yml new file mode 100644 index 0000000..2a73d3c --- /dev/null +++ b/roles/metr1c/molecule/default/verify.yml @@ -0,0 +1,19 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + vars: + metr1c_version: "0.2.0" + tasks: + - name: "Ensure that metr1c is installed and able to run" + ansible.builtin.command: + cmd: /opt/metr1c/metr1c -version + register: cmd1 + changed_when: false + + - name: "Check metr1c version" + ansible.builtin.assert: + that: "'{{ metr1c_version }}' in cmd1.stdout" + success_msg: "metr1c version {{ metr1c_version }} is installed and working" + fail_msg: "metr1c version {{ metr1c_version }} is not installed or not working correctly" diff --git a/roles/metr1c/tasks/main.yml b/roles/metr1c/tasks/main.yml new file mode 100644 index 0000000..1fd5de8 --- /dev/null +++ b/roles/metr1c/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: Create directory for metr1c + ansible.builtin.file: + path: "/opt/metr1c" + state: directory + owner: root + group: root + mode: "0755" + +- name: "Install requested metr1c version" + block: + - name: "Check metr1c version" + ansible.builtin.command: /opt/metr1c/metr1c -version + register: metr1c_ver_check + changed_when: false + + - name: "Assert version correctness" + ansible.builtin.assert: + that: "metr1c_version in metr1c_ver_check.stdout" + success_msg: "Expected metr1c version available ({{ metr1c_version }})" + fail_msg: "Expected version '{{ metr1c_version }}'; available is '{{ metr1c_ver_check.stdout }}'" + + rescue: + - name: "Install metr1c if it is not present" + ansible.builtin.get_url: + url: "https://github.com/Doumor/metr1c/releases/download/{{ metr1c_version }}/metr1c_amd64_linux" + dest: /opt/metr1c/metr1c + owner: root + group: root + mode: "0755" + +- name: "Create systemd metr1c service file" + ansible.builtin.template: + src: "templates/metr1c.service.j2" + dest: "/etc/systemd/system/metr1c.service" + owner: root + group: root + mode: "0750" + register: metr1c_service + +- name: "Start systemd service" + when: "deploy is true" + ansible.builtin.include_tasks: "run_systemd.yml" diff --git a/roles/metr1c/tasks/run_systemd.yml b/roles/metr1c/tasks/run_systemd.yml new file mode 100644 index 0000000..f6f5bfd --- /dev/null +++ b/roles/metr1c/tasks/run_systemd.yml @@ -0,0 +1,11 @@ +- name: "Set fact for daemon_reload" + ansible.builtin.set_fact: + daemon_reload_required: "{{ metr1c_service.changed | bool }}" + +- name: "Make sure that the metr1c service is started" + become: true + ansible.builtin.systemd: + name: "metr1c.service" + state: started + enabled: true + daemon_reload: "{{ daemon_reload_required }}" diff --git a/roles/metr1c/templates/metr1c.service.j2 b/roles/metr1c/templates/metr1c.service.j2 new file mode 100644 index 0000000..1d1aa27 --- /dev/null +++ b/roles/metr1c/templates/metr1c.service.j2 @@ -0,0 +1,32 @@ +[Unit] +Description=Metric collector (Prometheus) for 1C Plaform using 1C RAS/RAC +Requires=network.target + +[Service] +# Cluster UUID, for example 07593cfe-64c2-4656-be5f-61c3226286d5 +Environment=platform1c_admin_cluster={{ cluster_uuid }} + +# Name of cluster admin, e.g. Администратор +Environment=platform1c_admin_user={{ cluster_admin }} + +# Admin cluster password, e.g. 1234 +Environment=platform1c_admin_pw={{ cluster_pw }} + +# Version of 1C platform, e.g. 8.3.24.1467 +Environment=platform1c_version={{ platform_version }} + +# Metr1c port, by default 1599 +Environment=metr1c_port={{ metr1c_port }} + + +# User=usr1cv8 +# Group=grp1cv8 +Type=simple + +ExecStart=/opt/metr1c/metr1c + +Restart=always +RestartSec=1 + +[Install] +WantedBy=multi-user.target diff --git a/roles/metr1c/vars/main.yml b/roles/metr1c/vars/main.yml new file mode 100644 index 0000000..7a5ef2d --- /dev/null +++ b/roles/metr1c/vars/main.yml @@ -0,0 +1,7 @@ +--- +metr1c_version: "0.2.0" +cluster_uuid: "xxxxxxxx" +cluster_admin: "Администратор" +cluster_pw: "1234" +platform_version: "8.3.24.1467" +metr1c_port: "1599"