Skip to content
Snippets Groups Projects
Commit 8c564b90 authored by Stéphane Diemer's avatar Stéphane Diemer
Browse files

Moved rocketchat role to another repository

parent 72c961e6
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 609 deletions
#!/usr/bin/env ansible-playbook
---
- hosts: chat
roles:
- rocketchat
...
root = true
[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
\ No newline at end of file
__pycache__
Rocket.Chat
===========
Install and update Rocket.Chat (manual installation).
Requirements
------------
None.
Role Variables
--------------
See `defaults/main.yml`.
Dependencies
------------
None.
Example Playbook
----------------
```
- hosts: rocketchat_server
roles:
- role: ubicast.rocketchat
rc_root_url: https://chat.example.net
rc_version: 1.3.0
rc_mail_url: mail.example.net:25
```
License
-------
BSD
Author Information
------------------
@nikaro from @UbicastTeam
---
# package needed by ansible to run the role
rc_apt_packages_requirements:
- apt-transport-https
- apt-utils
- curl
- gnupg2
# mongodb repo
rc_mongo_repo_key_url: https://www.mongodb.org/static/pgp/server-4.0.asc
rc_mongo_repo: deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main
rc_mongo_repo_file: mongodb-org-4.0
# nodejs repo
rc_node_repo_key_url: https://deb.nodesource.com/gpgkey/nodesource.gpg.key
rc_node_repo: deb https://deb.nodesource.com/node_8.x stretch main
rc_node_repo_file: nodesource
# apt package requirements
rc_apt_packages:
- build-essential
- git
- graphicsmagick
- mongodb-org
- nodejs
# global npm package requirements
rc_npm_packages:
- inherits
- n
# nodejs version
rc_node_version: 12.14.0
# version & archive url
rc_version: 3.1.1
rc_url: https://releases.rocket.chat/{{ rc_version }}/download
# where to install
rc_directory: /usr/local/rocketchat
# user & group
rc_user: rocketchat
rc_group: rocketchat
# mongodb settings
rc_mongo_url: mongodb://localhost:27017/rocketchat?replicaSet=rs01
rc_mongo_oplog_url: mongodb://localhost:27017/local?replicaSet=rs01
# url by which it is accessible
rc_root_url: http://localhost:3000
# listen on port
rc_port: 3000
# email server:port to send notifications
rc_mail_url: localhost:25
...
---
- name: reload systemd
systemd:
daemon_reload: true
- name: restart mongodb
systemd:
name: mongod
state: restarted
- name: initialize mongodb
command: /usr/bin/mongo --eval "printjson(rs.initiate())"
- name: restart rocketchat
systemd:
name: rocketchat
state: restarted
...
install_date: Thu Aug 8 13:28:09 2019
version: 1.0.0
---
galaxy_info:
author: Nicolas Karolak
description: Install and update Rocket.Chat (manual installation)
company: UbiCast
license: BSD
min_ansible_version: 2.4
platforms:
- name: Debian
versions:
- 9
galaxy_tags:
- system
dependencies: []
...
# Molecule managed
{% if item.registry is defined %}
FROM {{ item.registry.url }}/{{ item.image }}
{% else %}
FROM {{ item.image }}
{% endif %}
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \
elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi
---
dependency:
name: galaxy
driver:
name: docker
lint:
name: yamllint
platforms:
- name: debian-stretch
image: jrei/systemd-debian:9
command: /lib/systemd/systemd
capabilities:
- SYS_ADMIN
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
provisioner:
name: ansible
lint:
name: ansible-lint
verifier:
name: testinfra
lint:
name: flake8
---
- name: Converge
hosts: all
roles:
- role: ansible-role-rocketchat
import os
import testinfra.utils.ansible_runner
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ["MOLECULE_INVENTORY_FILE"]
).get_hosts("all")
def test_user(host):
u = host.user("rocketchat")
assert u.exists
assert u.name == "rocketchat"
assert u.group == "rocketchat"
assert u.shell == "/usr/bin/nologin"
def test_mongodb_repo(host):
f = host.file("/etc/apt/sources.list.d/mongodb-org-4.0.list")
assert f.exists
assert f.contains("repo.mongodb.org")
def test_mongodb_pkg(host):
p = host.package("mongodb-org")
assert p.is_installed
def test_nodejs_repo(host):
f = host.file("/etc/apt/sources.list.d/nodesource.list")
assert f.exists
assert f.contains("deb.nodesource.com")
def test_nodejs_pkg(host):
p = host.package("nodejs")
assert p.is_installed
def test_mongod_conf(host):
f = host.file("/etc/mongod.conf")
assert f.exists
assert f.contains("engine: mmapv1")
assert f.contains("replSetName: rs01")
def test_mongod_service(host):
s = host.service("mongod")
assert s.is_running
def test_mongod_socket(host):
s = host.socket("tcp://127.0.0.1:27017")
assert s.is_listening
def test_n_bin(host):
f = host.file("/usr/local/bin/n")
assert f.exists
def test_rocketchat_directory(host):
f = host.file("/usr/local/rocketchat")
assert f.exists
assert f.is_directory
assert f.user == "rocketchat"
assert f.group == "rocketchat"
def test_rocketchat_service_file(host):
f = host.file("/lib/systemd/system/rocketchat.service")
assert f.exists
def test_rocketchat_service(host):
s = host.service("rocketchat")
assert s.is_running
def test_rocketchat_socket(host):
s = host.socket("tcp://3000")
assert s.is_listening
-r requirements.in
ansible-lint
molecule[docker,ec2]
pip-tools
pre-commit
yamllint
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file=requirements.dev.txt requirements.dev.in
#
ansible-lint==4.1.0
ansible==2.8.2
anyconfig==0.9.7 # via molecule
appdirs==1.4.3 # via black
argparse==1.4.0 # via aws-amicleaner
arrow==0.14.2 # via jinja2-time
asn1crypto==0.24.0 # via cryptography
aspy.yaml==1.3.0 # via pre-commit
astroid==2.2.5 # via pylint
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via black, pytest
aws-amicleaner==0.2.2
awscli==1.16.199 # via aws-amicleaner
backcall==0.1.0 # via ipython
binaryornot==0.4.4 # via cookiecutter
black==19.3b0
blessings==1.7 # via aws-amicleaner
boto3==1.9.189 # via aws-amicleaner, molecule
boto==2.49.0 # via aws-amicleaner, molecule
botocore==1.12.189 # via awscli, boto3, s3transfer
cerberus==1.2 # via molecule
certifi==2019.6.16 # via requests
cffi==1.12.3 # via cryptography
cfgv==2.0.0 # via pre-commit
chardet==3.0.4 # via binaryornot, requests
click-completion==0.3.1 # via molecule
click==6.7 # via black, click-completion, cookiecutter, molecule, python-gilt
colorama==0.3.9 # via awscli, molecule, python-gilt
cookiecutter==1.6.0 # via molecule
cryptography==2.7 # via ansible
decorator==4.4.0 # via ipython, traitlets
docker==4.0.2 # via molecule
docutils==0.14 # via awscli, botocore
entrypoints==0.3 # via flake8
fasteners==0.15 # via python-gilt
flake8==3.7.8 # via molecule
future==0.17.1 # via cookiecutter
git-url-parse==1.2.2 # via python-gilt
identify==1.4.5 # via pre-commit
idna==2.7 # via molecule, requests
importlib-metadata==0.18 # via pluggy, pre-commit, pytest
ipython-genutils==0.2.0 # via traitlets
ipython==7.6.1
isort==4.3.21 # via pylint
jedi==0.14.1 # via ipython
jinja2-time==0.2.0 # via cookiecutter
jinja2==2.10 # via ansible, click-completion, cookiecutter, jinja2-time, molecule
jmespath==0.9.4 # via boto3, botocore
lazy-object-proxy==1.4.1 # via astroid
markupsafe==1.1.1 # via jinja2
mccabe==0.6.1 # via flake8, pylint
molecule[docker,ec2]==2.20.2
monotonic==1.5 # via fasteners
more-itertools==7.1.0 # via pytest
nodeenv==1.3.3 # via pre-commit
packaging==19.0 # via pytest
parso==0.5.1 # via jedi
pathspec==0.5.9 # via yamllint
pbr==5.1.1 # via git-url-parse, molecule, python-gilt
pexpect==4.6.0 # via ipython, molecule
pickleshare==0.7.5 # via ipython
pluggy==0.12.0 # via pytest
poyo==0.4.2 # via cookiecutter
pre-commit==1.17.0
prettytable==0.7.2 # via aws-amicleaner
prompt-toolkit==2.0.9 # via ipython
psutil==5.4.6 # via molecule
ptyprocess==0.6.0 # via pexpect
py==1.8.0 # via pytest
pyasn1==0.4.5 # via rsa
pycodestyle==2.5.0 # via flake8
pycparser==2.19 # via cffi
pyflakes==2.1.1 # via flake8
pygments==2.4.2 # via ipython
pylint==2.3.1
pyparsing==2.4.0 # via packaging
pytest==5.0.1 # via testinfra
python-dateutil==2.8.0 # via arrow, botocore
python-gilt==1.2.1 # via molecule
pyyaml==3.13 # via ansible, ansible-lint, aspy.yaml, awscli, molecule, pre-commit, python-gilt, yamllint
requests==2.22.0 # via cookiecutter, docker
rsa==3.4.2 # via awscli
ruamel.yaml==0.15.100 # via ansible-lint
s3transfer==0.2.1 # via awscli, boto3
sh==1.12.14 # via molecule, python-gilt
six==1.11.0 # via ansible-lint, astroid, blessings, cfgv, click-completion, cryptography, docker, fasteners, molecule, packaging, pre-commit, prompt-toolkit, python-dateutil, testinfra, traitlets, websocket-client
tabulate==0.8.2 # via molecule
testinfra==3.0.5 # via molecule
toml==0.10.0 # via black, pre-commit
traitlets==4.3.2 # via ipython
tree-format==0.1.2 # via molecule
typed-ast==1.4.0 # via astroid
urllib3==1.25.3 # via botocore, requests
virtualenv==16.6.2 # via pre-commit
wcwidth==0.1.7 # via prompt-toolkit, pytest
websocket-client==0.56.0 # via docker
whichcraft==0.6.0 # via cookiecutter
wrapt==1.11.2 # via astroid
yamllint==1.16.0
zipp==0.5.2 # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
# setuptools==41.0.1 # via ipython
ansible ~= 2.8.0
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file=requirements.txt requirements.in
#
ansible==2.8.2
asn1crypto==0.24.0 # via cryptography
cffi==1.12.3 # via cryptography
cryptography==2.7 # via ansible
jinja2==2.10.1 # via ansible
markupsafe==1.1.1 # via jinja2
pycparser==2.19 # via cffi
pyyaml==5.1.1 # via ansible
six==1.12.0 # via cryptography
---
- name: add role requirement
apt:
force_apt_get: true
name: "{{ rc_apt_packages_requirements }}"
update_cache: true
cache_valid_time: 3600
state: present
- name: add group
group:
name: "{{ rc_group }}"
system: true
state: present
- name: add user
user:
name: "{{ rc_user }}"
group: "{{ rc_group }}"
home: /var/run/{{ rc_user }}
shell: /usr/bin/nologin
system: true
state: present
- name: add mongodb repository key
apt_key:
url: "{{ rc_mongo_repo_key_url }}"
state: present
- name: add mongodb repository
apt_repository:
repo: "{{ rc_mongo_repo }}"
filename: "{{ rc_mongo_repo_file }}"
state: present
- name: add nodesource repository key
apt_key:
url: "{{ rc_node_repo_key_url }}"
state: present
- name: add nodesource repository
apt_repository:
repo: "{{ rc_node_repo }}"
filename: "{{ rc_node_repo_file }}"
state: present
- name: install system requirements
apt:
force_apt_get: true
name: "{{ rc_apt_packages }}"
update_cache: true
cache_valid_time: 3600
state: present
- name: set mongodb engine
notify: restart mongodb
lineinfile:
path: /etc/mongod.conf
regexp: '^#? engine:'
line: ' engine: mmapv1'
- name: set mongodb replset name
notify:
- restart mongodb
- initialize mongodb
blockinfile:
path: /etc/mongod.conf
block: |
replication:
replSetName: rs01
- name: install global npm requirements
changed_when: false # npm module is not idempotent
loop: "{{ rc_npm_packages }}"
npm:
name: "{{ item }}"
global: true
state: present
- name: fix nodejs version
command: n {{ rc_node_version }}
args:
creates: /usr/local/n/versions/node/{{ rc_node_version }}
- name: download archive
register: rc_dl_archive
get_url:
url: "{{ rc_url }}"
dest: /var/cache/rocketchat_{{ rc_version }}.tgz
- name: create temp extract directory
when: rc_dl_archive is changed
file:
path: /var/cache/rc_{{ rc_version }}
state: directory
- name: extract archive content
when: rc_dl_archive is changed
unarchive:
src: /var/cache/rocketchat_{{ rc_version }}.tgz
dest: /var/cache/rc_{{ rc_version }}
remote_src: true
- name: install npm requirements
when: rc_dl_archive is changed
npm:
path: /var/cache/rc_{{ rc_version }}/bundle/programs/server
state: present
- name: check if service exists
register: rc_service
stat:
path: /lib/systemd/system/rocketchat.service
- name: stop rocketchat
when:
- rc_service.stat.exists
- rc_dl_archive is changed
systemd:
name: rocketchat
state: stopped
- name: remove current application files
when: rc_dl_archive is changed
file:
path: "{{ rc_directory }}"
state: absent
- name: copy application files
when: rc_dl_archive is changed
notify: restart rocketchat
copy:
remote_src: true
src: /var/cache/rc_{{ rc_version }}/bundle/
dest: "{{ rc_directory }}"
owner: "{{ rc_user }}"
group: "{{ rc_group }}"
- name: remove cache files
when: rc_dl_archive is changed
file:
path: /var/cache/rc_{{ rc_version }}
state: absent
- name: deploy service file
notify:
- reload systemd
- restart rocketchat
template:
src: rocketchat.service.j2
dest: /lib/systemd/system/rocketchat.service
- meta: flush_handlers
- name: enable rocketchat service
systemd:
name: rocketchat
enabled: true
state: started
...
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/node {{ rc_directory }}/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User={{ rc_user }}
Environment=MONGO_URL={{ rc_mongo_url }} MONGO_OPLOG_URL={{ rc_mongo_oplog_url }} ROOT_URL={{ rc_root_url }} PORT={{ rc_port }} MAIL_URL={{ rc_mail_url }}
[Install]
WantedBy=multi-user.target
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment