diff --git a/README.md b/README.md index 6c4136b..0b8cb84 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ - [ipmi_exporter](roles/ipmi_exporter/README.md) - [karma](roles/karma/README.md) - [loki](roles/loki/README.md) +- [metr1c](roles/metr1c/README.md) - [mkfs](roles/mkfs/README.md) - [mount_device](roles/mount_device/README.md) - [nginx](roles/nginx/README.md) diff --git a/galaxy.yml b/galaxy.yml index c1ab931..da7bc61 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.26.0 +version: 0.27.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) diff --git a/roles/metr1c/README.md b/roles/metr1c/README.md new file mode 100644 index 0000000..8f5e34f --- /dev/null +++ b/roles/metr1c/README.md @@ -0,0 +1,52 @@ +metr1c +========= + +Install metr1c as `systemd` service + +Requirements +------------ + +None + +Role Variables +-------------- + + metr1c_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 + metr1c_cluster_uuid: cluster id + metr1c_cluster_admin: name of cluster admin + metr1c_cluster_pw: password to authenticate as cluster admin + metr1c_platform_version: version of 1c platform + metr1c_port: metr1c will listen on this port + +Dependencies +------------ + +None + +Example Playbook +---------------- + +```yaml +roles: + - role: genlab.metr1c + metr1c_deploy: false + metr1c_version: "0.0.1" + metr1c_cluster_uuid: "111-111-111-111" + metr1c_cluster_admin: "test" + metr1c_cluster_pw: "testpw" + metr1c_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..15d7c5e --- /dev/null +++ b/roles/metr1c/defaults/main.yml @@ -0,0 +1,2 @@ +--- +metr1c_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..4a4d719 --- /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: ["jammy", "noble"] + + 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..bcf6707 --- /dev/null +++ b/roles/metr1c/molecule/default/converge.yml @@ -0,0 +1,12 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.common.metr1c + metr1c_deploy: false + metr1c_version: "0.2.0" + metr1c_cluster_uuid: "123-123-1234" + metr1c_cluster_admin: "admin" + metr1c_cluster_pw: "testpw" + metr1c_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..8f0ace9 --- /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: metr1c_cmd1 + changed_when: false + + - name: "Check metr1c version" + ansible.builtin.assert: + that: "'{{ metr1c_version }}' in metr1c_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..60db409 --- /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: "metr1c_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..22fe6ae --- /dev/null +++ b/roles/metr1c/tasks/run_systemd.yml @@ -0,0 +1,11 @@ +- name: "Set fact for daemon_reload" + ansible.builtin.set_fact: + metr1c_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: "{{ metr1c_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..b3a70e6 --- /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={{ metr1c_cluster_uuid }} + +# Name of cluster admin, e.g. Администратор +Environment=platform1c_admin_user={{ metr1c_cluster_admin }} + +# Admin cluster password, e.g. 1234 +Environment=platform1c_admin_pw={{ metr1c_cluster_pw }} + +# Version of 1C platform, e.g. 8.3.24.1467 +Environment=platform1c_version={{ metr1c_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..c7391e2 --- /dev/null +++ b/roles/metr1c/vars/main.yml @@ -0,0 +1,7 @@ +--- +metr1c_version: "0.2.0" +metr1c_cluster_uuid: "xxxxxxxx" +metr1c_cluster_admin: "Администратор" +metr1c_cluster_pw: "1234" +metr1c_platform_version: "8.3.24.1467" +metr1c_port: "1599"