Files
2025-12-19 12:09:28 +03:00

315 lines
11 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
# tasks file for platform1c
# example platform download with shell
# export ONEC_USERNAME=user
# export ONEC_PASSWORD=password
# oneget get --path ./tmp/dist/ platform@8.3.18.1334
# current 1C version (by systemd service):
# systemctl status | grep srv1cv8-8.3 | cut -d "-" -f 2 | cut -d "@" -f 1 | sed '/^$/d'
# or just look at /opt/1cv8/...
- name: "Verify that required variables are defined"
ansible.builtin.assert:
that:
- required_var is defined
- required_var | length > 0
- required_var != None
fail_msg: "{{ required_var }} needs to be set for the role to work"
success_msg: "Required variable {{ required_var }} is defined"
loop_control:
loop_var: required_var
with_items:
- platform1c_version
- platform1c_config
- platform1c_admin_pw_path
- platform1c_oneget_pw_path
- platform1c_download_method
- name: "Verify that platform1c_download_method are defined correct"
ansible.builtin.assert:
that:
- platform1c_download_method == 'manual' or (platform1c_download_method == 'oneget')
fail_msg: "{{ platform1c_download_method }} needs to be set for the role to work"
success_msg: "Method {{ platform1c_download_method }} is defined"
- name: "Install unzip, apache2, ufw"
ansible.builtin.apt:
name:
- unzip
- apache2
- ufw
state: present
update_cache: true
- name: "Deny access to 1c platform ports with ufw"
community.general.ufw:
rule: deny
port: "{{ item.port }}"
loop:
- { port: "1545" } # 1c ras
- { port: "1540" } # 1c server agent
- { port: "1541" } # 1c server manager
- name: "Deny access to 1c platform ports with ufw (1c workers)"
community.general.ufw:
rule: deny
port: 1560:1591 # 1c server workers
proto: tcp
- name: "Enable ufw"
community.general.ufw:
state: enabled
- name: "Read variables from the configuration file"
ansible.builtin.include_vars:
file: "{{ platform1c_config }}"
- name: "Populate service facts"
ansible.builtin.service_facts:
- name: "Parse active platform 1C version"
ansible.builtin.set_fact:
platform1c_version_active: "{{ ansible_facts.services
| dict2items
| selectattr('value.name', 'search', 'srv1cv8-')
| map(attribute='value.name')
| regex_search('[0-9].[0-9].[0-9]{2}.[0-9]{4}') }}" # using regexp to parse 8.3.12.1234
failed_when: false # Handled follows after
- name: "Get platform1c_versions_installed"
ansible.builtin.find:
paths: "/opt/1cv8/x86_64/"
recurse: true
file_type: directory
register: platform1c_versions_installed
- name: "Check the requested 1C version"
block:
- name: "Assert version correctness"
ansible.builtin.assert:
that: "platform1c_version in platform1c_version_active"
success_msg: "Expected 1C version available ({{ platform1c_version_active }})"
fail_msg: "Expected version '{{ platform1c_version }}'; available is '{{ platform1c_version_active }}'"
rescue:
- name: "Using manual method"
when: platform1c_download_method == 'manual'
block:
- name: "Create tmp archive dir"
ansible.builtin.file:
path: /root/platform83/{{ platform1c_version }}
state: directory
owner: root
group: root
recurse: true
mode: '0755'
- name: "Copy platform file from controller"
ansible.builtin.copy:
src: "{{ platform1c_platformfile }}"
dest: /root/platform83/{{ platform1c_version }}/server64_with_all_clients_{{ platform1c_version | replace('.', '_') }}.zip
owner: "root"
mode: '0755'
- name: "Using manual oneget"
when: platform1c_download_method == 'oneget'
block:
- name: "Get oneget credentials"
ansible.builtin.include_vars:
file: "{{ platform1c_oneget_pw_path }}"
- name: "Download 1C platform (version - {{ platform1c_version }})"
environment:
PATH: "/opt/oneget:{{ ansible_env.PATH }}"
ONEC_USERNAME: "{{ platform1c_oneget_user }}"
ONEC_PASSWORD: "{{ platform1c_oneget_pw }}"
ansible.builtin.command:
cmd: "oneget get --path /root/ --filter platform=server64_with_all_clients platform:linux.full.x64@{{ platform1c_version }}"
creates: "/root/platform83/{{ platform1c_version }}/server64_with_all_clients_{{ platform1c_version | replace('.', '_') }}.zip"
- name: "Create tmp install dir"
ansible.builtin.file:
path: /root/tmp1c
state: directory
owner: root
group: root
mode: '0755'
- name: "Unarchive distro"
ansible.builtin.unarchive:
src: /root/platform83/{{ platform1c_version }}/server64_with_all_clients_{{ platform1c_version | replace('.', '_') }}.zip
dest: /root/tmp1c
remote_src: true
- name: "Install 1C platform"
ansible.builtin.command:
cmd: "/root/tmp1c/setup-full-{{ platform1c_version }}-x86_64.run --mode unattended --enable-components ws,server,ru"
creates: "/opt/1cv8/x86_64/{{ platform1c_version }}"
# https://its.1c.ru/db/v8324doc#bookmark:adm:TI000001075
- name: "Install 1C clients"
ansible.builtin.command:
cmd: "/root/tmp1c/all-clients-distr-{{ platform1c_version }}-x86_64.run --mode unattended"
creates: "/opt/1cv8/x86_64/{{ platform1c_version }}/distr/linux64tc.zip"
- name: "Stop and disable current 1C platform"
ansible.builtin.systemd_service:
name: "srv1cv8-{{ platform1c_version_active }}@default.service"
state: stopped
enabled: false
when: platform1c_version_active is defined
failed_when: false # if exists. The service name contains the version, it is not possible to get the state of the service in a safe way.
- name: "Stop and disable current 1C rac"
ansible.builtin.systemd_service:
name: "ras-{{ platform1c_version_active }}"
state: stopped
enabled: false
when: platform1c_version_active is defined
failed_when: false # if exists. The service name contains the version, it is not possible to get the state of the service in a safe way.
- name: "Copy new 1C platform service"
ansible.builtin.copy:
src: /opt/1cv8/x86_64/{{ platform1c_version }}/srv1cv8-{{ platform1c_version }}@.service
dest: /etc/systemd/system/srv1cv8-{{ platform1c_version }}@.service
owner: root
group: root
mode: '0755'
remote_src: true
- name: "Copy new 1C ras service"
ansible.builtin.copy:
src: /opt/1cv8/x86_64/{{ platform1c_version }}/ras-{{ platform1c_version }}.service
dest: /etc/systemd/system/ras-{{ platform1c_version }}.service
owner: root
group: root
mode: '0755'
remote_src: true
- name: "Enable ans start new 1С ras service"
ansible.builtin.systemd_service:
name: "ras-{{ platform1c_version }}"
state: started
enabled: true
- name: "Enable and start new 1C platform"
ansible.builtin.systemd_service:
name: "srv1cv8-{{ platform1c_version }}@default.service"
state: started
enabled: true
- name: "Remove old installation"
ansible.builtin.command:
cmd: "{{ item }}/unistaller-full"
removes: "{{ item }}"
loop: "{{ platform1c_versions_installed.files }}"
when: "platform1c_versions_installed.files | length > 0"
poll: 0 # Just make it async
failed_when: false # if exists
- name: "Clear installed unarchived 1C platform"
ansible.builtin.file:
path: "/root/tmp1c/"
state: absent
poll: 0 # Just make it async
- name: "Clear installed 1C platform archive"
ansible.builtin.file:
path: "/root/platform83/"
state: absent
poll: 0 # Just make it async
- name: "Delete old 1C platform service"
ansible.builtin.file:
path: "/etc/systemd/system/srv1cv8-{{ platform1c_version_active }}@.service"
state: absent
when: platform1c_version_active is defined
poll: 0 # Just make it async
- name: "Delete old 1C ras service"
ansible.builtin.file:
path: "/etc/systemd/system/ras-{{ platform1c_version_active }}.service"
state: absent
when: platform1c_version_active is defined
poll: 0 # Just make it async
- name: "Create 1C cluster user (if first install)"
when: "platform1c_versions_installed.files | length == 0"
block:
- name: "Get 1С server credentials"
ansible.builtin.include_vars:
file: "{{ platform1c_admin_pw_path }}"
- name: "Start 1c ras service"
ansible.builtin.systemd_service:
name: "ras-{{ platform1c_version }}"
state: started
enabled: true
- name: "Create 1c server agent admin user"
ansible.builtin.command:
cmd: "/opt/1cv8/x86_64/{{ platform1c_version }}/rac agent admin register --name={{ platform1c_admin_user }} --pwd={{ platform1c_admin_pw }} --auth=pwd"
changed_when: false
- name: "Get 1c cluster info"
ansible.builtin.shell:
cmd: "set -o pipefail && cat /home/usr1cv8/.1cv8/1C/1cv8/1cv8wsrv.lst"
executable: /bin/bash
changed_when: false
register: platform1c_1cv8wsrv
- name: "Parse 1c cluster id"
ansible.builtin.set_fact:
platform1c_cluster: "{{ platform1c_1cv8wsrv | regex_search('(?<={)[0-z]{8}-[0-z]{4}-[0-z]{4}-[0-z]{4}-[0-z]{12}(?=,)') }}"
- name: "Create 1c server cluster admin user"
ansible.builtin.command:
cmd: "/opt/1cv8/x86_64/{{ platform1c_version }}/rac cluster admin register \
--cluster={{ platform1c_cluster }} --pwd={{ platform1c_admin_pw }} \
--name={{ platform1c_admin_user }} --agent-user={{ platform1c_admin_user }} \
--agent-pwd={{ platform1c_admin_pw }} --auth=pwd"
changed_when: false
# - name: "Stop 1c ras service"
# ansible.builtin.systemd_service:
# name: "ras-{{ platform1c_version }}"
# state: stopped
# enabled: false
- name: "Create/update apache2 config"
ansible.builtin.template:
src: apache2.conf.j2
dest: /etc/apache2/apache2.conf
owner: root
group: root
mode: '0755'
register: platform1c_apache2config
- name: "Create 1C publications dirs"
ansible.builtin.file:
path: "{{ item.path }}"
owner: root
group: root
state: directory
mode: '0755'
loop: "{{ platform1c_pubs }}"
register: platform1c_pubsdirs
- name: "Create/update 1C publications configs"
ansible.builtin.template:
src: default.vrd.j2
dest: "{{ item.path }}/default.vrd"
owner: root
group: root
mode: '0755'
loop: "{{ platform1c_pubs }}"
register: platform1c_pubsconfigs
- name: "Restart apache"
ansible.builtin.systemd_service:
name: apache2
state: restarted
daemon_reload: true
when: platform1c_pubsdirs.changed or platform1c_pubsdirs.changed or platform1c_pubsconfigs.changed