Sergey
=))
Sergey
только имена поменять
Timur
Константин
А что за тема диплома, если не секрет?
Прохожу преддипломную практику в компании, которая делает СЭД для Роснефти
На данный момент у них новые сервера конфигурируются либо руками, либо копию имеющегося сервера делают
Там суть в том, что если сервер пустой, то надо сперва alfresco установить на него, а затем настроить платформу, ПО, которое они делают
А если на сервере уже все установлено, то просто апдейт делать, если новый релиз был в битбакете
Вот собственно я пока прикрутил дженкинс, который мониторит репу, если чет новое появилось, он собирает war файлы, передает их ансиблю, а тот либо с нуля ставит, либо обновление делает
Timur
Прохожу преддипломную практику в компании, которая делает СЭД для Роснефти
На данный момент у них новые сервера конфигурируются либо руками, либо копию имеющегося сервера делают
Там суть в том, что если сервер пустой, то надо сперва alfresco установить на него, а затем настроить платформу, ПО, которое они делают
А если на сервере уже все установлено, то просто апдейт делать, если новый релиз был в битбакете
Вот собственно я пока прикрутил дженкинс, который мониторит репу, если чет новое появилось, он собирает war файлы, передает их ансиблю, а тот либо с нуля ставит, либо обновление делает
Если делать идемпотентную роль, то разницы не будет
Timur
Можно, в принципе, из любого состояния приводить к нужному. Хоть с нуля, хоть со старой версии
Timur
Только непонятно, зачем тут дженкинс
Константин
Timur
Если битбакет юзается, так проще Bitbucket Pipelines заюзать
Константин
Timur
А какого рода роли планируете накатывать? Из galaxy подойдут? Или там строго из внутренних реп все?
Константин
Я сам написал 3 роли, они вроде выполняют то, что я хотел, после диплома дорабатывать буду
1. Установка альфрески
2. Настройка СЭД
3. Обновление
Конечно, первые две можно объединить в одну, просто все делал в процессе изучения, узнал про роли и решил попробовать
Константин
Из galaxy не брал ничего
Timur
Timur
Если альфреско, то и Java, наверное, ставится?
Timur
Под это отдельную роль делали?
Константин
Нет
У роли с установкой альфрески просто таск есть, который пакеты ставит нужные через apt
Timur
Константин
Да
Timur
Странно
Timur
Логичнее такие вещи разносить, все-таки
Timur
А ставится все только на Linux, или виндовые машины тоже есть?
Константин
Только линукц
Константин
Дебиан и редхат
Константин
--- # tasks file for server_preparation_and_install_alfresco
- name: Installing Python2 raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
- name: Installing Required Packages apt: name: ['wget', 'postgresql-client', 'unzip', 'openjdk-8-jdk', 'openjdk-8-jre', 'zip']
Константин
Timur
Константин
Сорре
Скопировалось криво
С телефона копировал
Константин
Могу гитом поделиться
Может какие-то очевидные ошибки подскажете
Timur
Timur
Можем подсказать некоторые очевидные моменты
Константин
https://github.com/rex897/alfresco-ansible
George
https://github.com/rex897/alfresco-ansible/blob/d2271784f822146a70940caaf0302bf7d0f39a4c/roles/installing_a_business_platform/tasks/main.yml#L17
George
Ну, например, это
George
Во-первых, service никто нынче не использует. systemctl
George
Во-вторых, есть специальный модуль ансибла для работы с системд-сервисами
Timur
- name: Installing Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
Вот эту вещь из ролей нужно убирать. Это пререк, который лучше в плейбуку вставить или в претаск
George
Timur
- name: Installing Required Packages
apt:
name: ['wget', 'postgresql-client', 'python-psycopg2', 'unzip', 'openjdk-8-jdk', 'openjdk-8-jre', 'zip']
Так делать не стоит. Список лучше классически в столбик делать. Так более читабельно. Пакеты jdk и jre ставить не нужно оба. В jdk уже входит jre
Timur
- name: Alfresco image download
shell: wget -O {{ obraz }} http://dl.alfresco.com/release/community/201605-build-00010/alfresco-community-installer-201605-linux-x64.bin
when: stat_obraz.stat.exists == False
Вот это - сразу в топку. Скачивать образ нужно через get_url. Он сразу и идемпотентность обеспечивает
Timur
Соответственно, пропадает необходимость в проверке пути
Timur
- name: Creating a folder for installation
file:
path={{ alf_home }}
state=directory
Строчного синтаксиса в ролях лучше избегать. Он плохо читается. Сразу делайте через map syntax
Артём
George
Там ещё какая-то магия с зипами и конфигами https://github.com/rex897/alfresco-ansible/blob/d2271784f822146a70940caaf0302bf7d0f39a4c/roles/installing_a_business_platform/tasks/main.yml#L125
George
Было бы человекопонятное описание что нужно сделать - вероятно, что можно переформулировать
George
Тот же конфиг либо blockinfile, либо template сделать
Timur
with_items меняем на loop. Не нужно плодить legacy код
Timur
- name: systemctl daemon-reload
shell: systemctl daemon-reload
В топку. Нужно вот так:
- name: Reload systemd
systemd:
daemon_reload: yes
И вынести это в хендлеры
Tadeusz
+
George
Да и вообще тупо ansible lint прогнать на весь код :-)
Timur
Timur
Так, теперь роль installing_a_business_platform
Timur
- name: Postgresql status
shell: "{{ alf_home }}/alfresco.sh status postgresql"
register: postgresql_status
- name: Postgresql start
shell: "service postgresql start"
when: postgresql_status.stdout == "postgresql not running"
Этот кусок кода не нужен. Если нужно убедиться, что postgre запущена, нужно просто сделать:
- name: Postgre start
systemd:
name: postgresql
state: started
Timur
Ruslan
Привет. Подскажите пожалуйста в чем может быть проблема?
FAILED! => {"changed": false, "msg": "Unable to find any of pip3.6 to use. pip needs to be installed."}
pip точно устанволен на хосте
# pip
pip pip3 pip3.6
[root ~]# whereis pip
pip: /usr/local/bin/pip /usr/local/bin/pip3.6
Timur
- name: Removing old files "alfresco.war" and "share.war"
file:
path: "{{ item }}"
state: absent
loop:
- "{{ catalina_home }}/webapps/alfresco.war"
- "{{ catalina_home }}/webapps/share.war"
- name: Copying new files "alfresco.war" and "share.war"
copy: src={{ item }} dest={{ catalina_home }}/webapps
with_items:
- alfresco.war
- share.war
Удалять файлы перед копированием не нужно. Если контент отличается, они перезапишутся и так
Timur
Строчный синтаксис заменить на нормальный
Timur
- name: DB name
shell: "cat {{ catalina_home }}/shared/classes/alfresco-global.properties | grep db.name= | cut -f2 -d'='| cut -f1 -d' '"
register: db_name
- set_fact: db_name={{ db_name.stdout }}
- name: DB pass
shell: "cat {{ catalina_home }}/shared/classes/alfresco-global.properties | grep db.password= | cut -f2 -d'='| cut -f1 -d' '"
register: db_pass
- set_fact: db_pass={{ db_pass.stdout }}
- name: Port
shell: "cat {{ catalina_home }}/shared/classes/alfresco-global.properties | grep share.host= | cut -f2 -d'='| cut -f1 -d' '"
register: share_host
- set_fact: share_host={{ share_host.stdout }}
Этот треш тоже нужно переделать. Для чтения переменных из файла есть нативные инструменты
Timur
- name: Unpacking businessjournal.war
shell: "unzip -qq {{ catalina_home }}/webapps/businessjournal.war -d {{ catalina_home }}/webapps"
В топку. Используйте модуль unarchive
Timur
George
George
Ну, и окружения могут быть разные... Пользователь какой ?
Timur
Константин
Ruslan
Ruslan
пользователь ansible
Константин
Первый запуск чтоб варники развернулись, потом их удаляю, чтоб повторно не разворачивались, потом запускаю опять для работы
George
Либо попробуйте Шелл командой , а потом отрефакторить нормально
Timur
Артём
А как в современном синтаксисе сделать loop по списку словарей? То, что раньше было
---
vars:
somelist:
- src: s_one
dst: d_one
- src: s_two
dst: d_two
tasks:
- name: copy files to paths
copy:
src: ‘{{ item.src }}’
dest: ‘{{ item.dst }}’
with_items: ‘{{ somelist }}’
Timur
George
То же самое, по сути
Артём
Просто название поменялось?..