mirror of
https://github.com/iiab/iiab.git
synced 2025-03-09 15:40:17 +00:00
Merge pull request #2493 from jvonau/mongo2
RFC Mongo2 [reinforce MongoDB on most distros, e.g. for Sugarizer]
This commit is contained in:
commit
5be08e2b02
5 changed files with 144 additions and 154 deletions
|
@ -1,13 +1,5 @@
|
||||||
# 1. INSTALL MongoDB PACKAGES OR BINARIES
|
# 1. INSTALL MongoDB PACKAGES OR BINARIES
|
||||||
|
|
||||||
- name: "Install packages: mongodb, mongodb-server (not raspbian)"
|
|
||||||
package:
|
|
||||||
name:
|
|
||||||
- mongodb-server
|
|
||||||
- mongodb # 2019-01-31: this package does not exist on (cannot be installed on) Debian 10, SEE #1437
|
|
||||||
state: present
|
|
||||||
when: internet_available and not is_raspbian
|
|
||||||
|
|
||||||
# 2019-02-02: Sugarizer with Node.js 10.x requires MongoDB 2.6+ so
|
# 2019-02-02: Sugarizer with Node.js 10.x requires MongoDB 2.6+ so
|
||||||
# https://andyfelong.com/2017/08/mongodb-3-0-14-for-raspbian-stretch/ is
|
# https://andyfelong.com/2017/08/mongodb-3-0-14-for-raspbian-stretch/ is
|
||||||
# being used on Raspbian, all I found! (Raspbian's apt pkg is MongoDB 2.4.14)
|
# being used on Raspbian, all I found! (Raspbian's apt pkg is MongoDB 2.4.14)
|
||||||
|
@ -18,86 +10,105 @@
|
||||||
# CLARIF: mongodb_stretch_3_0_14_core.zip IS IN FACT 3.0.14 (core) BUT...
|
# CLARIF: mongodb_stretch_3_0_14_core.zip IS IN FACT 3.0.14 (core) BUT...
|
||||||
# mongodb_stretch_3_0_14_tools.zip IS REALLY 3.0.15 (tools)
|
# mongodb_stretch_3_0_14_tools.zip IS REALLY 3.0.15 (tools)
|
||||||
|
|
||||||
- name: Create dir /tmp/mongodb-3.0.1x (raspbian)
|
- block:
|
||||||
file:
|
- name: Create dir /tmp/mongodb-3.0.1x (aarch32)
|
||||||
path: /tmp/mongodb-3.0.1x
|
file:
|
||||||
state: directory
|
path: /tmp/mongodb-3.0.1x
|
||||||
when: internet_available and is_raspbian
|
state: directory
|
||||||
|
|
||||||
- name: Download & unzip 20MB http://download.iiab.io/packages/mongodb_stretch_3_0_14_core.zip to /tmp/mongodb-3.0.1x (raspbian)
|
- name: Download & unzip 20MB http://download.iiab.io/packages/mongodb_stretch_3_0_14_core.zip to /tmp/mongodb-3.0.1x (aarch32)
|
||||||
unarchive:
|
unarchive:
|
||||||
remote_src: yes
|
remote_src: yes
|
||||||
src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_core.zip"
|
src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_core.zip"
|
||||||
dest: /tmp/mongodb-3.0.1x
|
dest: /tmp/mongodb-3.0.1x
|
||||||
when: internet_available and is_raspbian
|
|
||||||
|
|
||||||
- name: Install (move) its 3 CORE binaries from /tmp/mongodb-3.0.1x/core to /usr/bin (raspbian)
|
- name: Install (move) its 3 CORE binaries from /tmp/mongodb-3.0.1x/core to /usr/bin (aarch32)
|
||||||
shell: mv /tmp/mongodb-3.0.1x/core/* /usr/bin
|
shell: mv /tmp/mongodb-3.0.1x/core/* /usr/bin
|
||||||
when: internet_available and is_raspbian
|
|
||||||
|
|
||||||
- name: Download & unzip 15MB http://download.iiab.io/packages/mongodb_stretch_3_0_14_tools.zip [IN FACT THIS ONE'S 3.0.15] to /tmp/mongodb-3.0.1x (raspbian)
|
- name: Download & unzip 15MB http://download.iiab.io/packages/mongodb_stretch_3_0_14_tools.zip [IN FACT THIS ONE'S 3.0.15] to /tmp/mongodb-3.0.1x (aarch32)
|
||||||
unarchive:
|
unarchive:
|
||||||
remote_src: yes
|
remote_src: yes
|
||||||
src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_tools.zip"
|
src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_tools.zip"
|
||||||
dest: /tmp/mongodb-3.0.1x
|
dest: /tmp/mongodb-3.0.1x
|
||||||
when: internet_available and is_raspbian
|
|
||||||
|
|
||||||
- name: Install (move) its 9 TOOLS binaries from /opt/iiab/downloads/mongodb-3.0.1x/tools to /usr/bin (raspbian)
|
- name: Install (move) its 9 TOOLS binaries from /opt/iiab/downloads/mongodb-3.0.1x/tools to /usr/bin (aarch32)
|
||||||
shell: mv /tmp/mongodb-3.0.1x/tools/* /usr/bin
|
shell: mv /tmp/mongodb-3.0.1x/tools/* /usr/bin
|
||||||
when: internet_available and is_raspbian
|
|
||||||
|
|
||||||
# OLD WAY / MUCH SLOWER: had put unnec duplicate copies in /opt/iiab/downloads/mongodb-3.0.1x
|
- name: Create Linux group mongodb (aarch32)
|
||||||
#
|
group:
|
||||||
#- name: Create dir /opt/iiab/downloads/mongodb-3.0.1x (raspbian)
|
name: mongodb
|
||||||
# file:
|
state: present
|
||||||
# path: "{{ downloads_dir }}/mongodb-3.0.1x"
|
|
||||||
# state: directory
|
|
||||||
# when: internet_available and is_raspbian
|
|
||||||
#
|
|
||||||
#- name: Download & unzip MongoDB 3.0.14's 3 core binaries to /opt/iiab/downloads/mongodb-3.0.1x (raspbian)
|
|
||||||
# unarchive:
|
|
||||||
# remote_src: yes
|
|
||||||
# src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_core.zip"
|
|
||||||
# dest: "{{ downloads_dir }}/mongodb-3.0.1x"
|
|
||||||
# when: internet_available and is_raspbian
|
|
||||||
#
|
|
||||||
#- name: Install (copy) 3 binaries from /opt/iiab/downloads/mongodb-3.0.1x/core to /usr/bin (raspbian)
|
|
||||||
# copy:
|
|
||||||
# src: "{{ item }}"
|
|
||||||
# dest: /usr/bin
|
|
||||||
# with_fileglob:
|
|
||||||
# - "{{ downloads_dir }}/mongodb-3.0.1x/core/*"
|
|
||||||
# when: internet_available and is_raspbian
|
|
||||||
#
|
|
||||||
#- name: Download & unzip MongoDB 3.0.15's 9 tools binaries to /opt/iiab/downloads/mongodb-3.0.1x (raspbian)
|
|
||||||
# unarchive:
|
|
||||||
# remote_src: yes
|
|
||||||
# src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_tools.zip"
|
|
||||||
# dest: "{{ downloads_dir }}/mongodb-3.0.1x"
|
|
||||||
# when: internet_available and is_raspbian
|
|
||||||
#
|
|
||||||
#- name: Install (copy) 9 binaries from /opt/iiab/downloads/mongodb-3.0.1x/tools to /usr/bin (raspbian)
|
|
||||||
# copy:
|
|
||||||
# src: "{{ item }}"
|
|
||||||
# dest: /usr/bin
|
|
||||||
# with_fileglob:
|
|
||||||
# - "{{ downloads_dir }}/mongodb-3.0.1x/tools/*"
|
|
||||||
# when: internet_available and is_raspbian
|
|
||||||
|
|
||||||
- name: Create Linux group mongodb (raspbian)
|
- name: Create Linux user mongodb (aarch32)
|
||||||
group:
|
user:
|
||||||
name: mongodb
|
name: mongodb
|
||||||
state: present
|
group: mongodb # primary group
|
||||||
when: is_raspbian | bool
|
groups: mongodb
|
||||||
|
home: /var/lib/mongodb
|
||||||
|
shell: /usr/sbin/nologin
|
||||||
|
|
||||||
- name: Create Linux user mongodb (raspbian)
|
- name: Install /etc/mongod.conf from template (aarch32)
|
||||||
user:
|
template:
|
||||||
name: mongodb
|
src: "{{ item.src }}"
|
||||||
group: mongodb # primary group
|
dest: "{{ item.dest }}"
|
||||||
groups: mongodb
|
owner: root
|
||||||
home: /var/lib/mongodb
|
group: root
|
||||||
shell: /usr/sbin/nologin
|
mode: "{{ item.mode }}"
|
||||||
when: is_raspbian | bool
|
with_items:
|
||||||
|
- { src: 'mongod.conf.j2', dest: "{{ mongodb_conf }}", mode: '0644' } # i.e. /etc/mongod.conf
|
||||||
|
|
||||||
|
|
||||||
|
# end block
|
||||||
|
when: not (ansible_architecture == "amd64" or ansible_architecture == "aarch64")
|
||||||
|
# 32 bit OS's get caught above should handle aarch32 including 32-bit ubuntu
|
||||||
|
# from https://ubuntu.com/download/raspberry-pi. 20.4-32bit might fail untested
|
||||||
|
# 32bit intel might puke as this was orginally deployed for raspbian. Haven't
|
||||||
|
# see bootable 32bit intel installers for a while now.
|
||||||
|
# 64 bit OS's proceed below.
|
||||||
|
- block:
|
||||||
|
- name: Add mongodb.org signing key (only 64-bit support available)
|
||||||
|
shell: wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
|
||||||
|
args:
|
||||||
|
warn: false
|
||||||
|
|
||||||
|
- name: Add mongodb repo for Debian 10 (only amd64 support available)
|
||||||
|
apt_repository:
|
||||||
|
repo: deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main
|
||||||
|
state: present
|
||||||
|
filename: mongodb-org
|
||||||
|
when: is_debian_10 and (ansible_architecture == "amd64")
|
||||||
|
|
||||||
|
# Debian 10 aarch64 might work below but is blocked in main.yml
|
||||||
|
- name: Add mongodb repo for Ubuntu 18 64bit or Raspbian-aarch64
|
||||||
|
apt_repository:
|
||||||
|
repo: deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse
|
||||||
|
state: present
|
||||||
|
filename: mongodb-org
|
||||||
|
when: (ansible_architecture == "aarch64" and is_raspbian_10) or is_ubuntu_18
|
||||||
|
|
||||||
|
- name: Add mongodb repo for Ubuntu 20 64bit
|
||||||
|
apt_repository:
|
||||||
|
repo: deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse
|
||||||
|
state: present
|
||||||
|
filename: mongodb-org
|
||||||
|
when: is_ubuntu_20 and (ansible_architecture == "aarch64" or ansible_architecture == "amd64")
|
||||||
|
|
||||||
|
- name: "Install packages: mongodb-org, mongodb-org-server"
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- mongodb-org
|
||||||
|
- mongodb-org-server
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Change the mongodb port to 27018
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/mongod.conf
|
||||||
|
regexp: 'port: 27017'
|
||||||
|
backrefs: yes
|
||||||
|
line: ' port: 27018'
|
||||||
|
|
||||||
|
# end block
|
||||||
|
when: (ansible_architecture == "aarch64") or (ansible_architecture == "amd64")
|
||||||
|
|
||||||
|
|
||||||
# 2. CONFIGURE MongoDB FOR IIAB
|
# 2. CONFIGURE MongoDB FOR IIAB
|
||||||
|
@ -114,7 +125,7 @@
|
||||||
- /var/log/mongodb
|
- /var/log/mongodb
|
||||||
- "{{ mongodb_db_path }}" # i.e. /library/dbdata/mongodb/
|
- "{{ mongodb_db_path }}" # i.e. /library/dbdata/mongodb/
|
||||||
|
|
||||||
- name: Install /etc/mongod.conf, mongodb.service, /usr/bin/iiab-mongodb-repair-if-no-lock from templates
|
- name: Install mongodb.service, /usr/bin/iiab-mongodb-repair-if-no-lock from templates
|
||||||
template:
|
template:
|
||||||
src: "{{ item.src }}"
|
src: "{{ item.src }}"
|
||||||
dest: "{{ item.dest }}"
|
dest: "{{ item.dest }}"
|
||||||
|
@ -122,10 +133,17 @@
|
||||||
group: root
|
group: root
|
||||||
mode: "{{ item.mode }}"
|
mode: "{{ item.mode }}"
|
||||||
with_items:
|
with_items:
|
||||||
- { src: 'mongod.conf.j2', dest: "{{ mongodb_conf }}", mode: '0644' } # i.e. /etc/mongod.conf
|
|
||||||
- { src: 'mongodb.service.j2', dest: '/etc/systemd/system/mongodb.service', mode: '0644' }
|
- { src: 'mongodb.service.j2', dest: '/etc/systemd/system/mongodb.service', mode: '0644' }
|
||||||
- { src: 'iiab-mongodb-repair-if-no-lock.j2', dest: '/usr/bin/iiab-mongodb-repair-if-no-lock', mode: '0755' }
|
- { src: 'iiab-mongodb-repair-if-no-lock.j2', dest: '/usr/bin/iiab-mongodb-repair-if-no-lock', mode: '0755' }
|
||||||
|
|
||||||
|
# daemon_reload is used to force systemd to recognize a newly installed .service file
|
||||||
|
# restarted here to ensure the port has been changed
|
||||||
|
- name: Disable 'mongodb' systemd service - started on demand by sugarizer
|
||||||
|
systemd:
|
||||||
|
name: mongodb
|
||||||
|
daemon_reload: yes
|
||||||
|
enabled: no
|
||||||
|
state: restarted
|
||||||
|
|
||||||
# 3. RECORD MongoDB AS INSTALLED
|
# 3. RECORD MongoDB AS INSTALLED
|
||||||
|
|
||||||
|
|
|
@ -31,24 +31,38 @@
|
||||||
- debug:
|
- debug:
|
||||||
var: is_raspbian
|
var: is_raspbian
|
||||||
|
|
||||||
- name: EXIT 'mongodb' ROLE & CONTINUE, IF 'is_debian and not is_raspbian' i.e. TRUE DEBIAN (where MongoDB no longer exists)
|
# might be able to lift this once we know using bionic would work
|
||||||
|
- name: EXIT 'mongodb' ROLE & CONTINUE, IF 'is_debian_10 and aarch64 and not is_raspbian' i.e. TRUE DEBIAN with arch64
|
||||||
fail: # FORCE IT RED THIS ONCE!
|
fail: # FORCE IT RED THIS ONCE!
|
||||||
msg: ATTEMPTED MongoDB INSTALLATION WITH (TRUE) DEBIAN, which is no longer supported. Nevertheless IIAB will continue (consider this a warning!)
|
msg: ATTEMPTED MongoDB INSTALLATION WITH (TRUE) DEBIAN aarch64, which is not supported upstream. Nevertheless IIAB will continue (consider this a warning!)
|
||||||
when: is_debian and not is_raspbian
|
when: (ansible_architecture == "aarch64") and is_debian_10 and not is_raspbian
|
||||||
#when: (is_debian and not is_raspbian) and (not is_debian_8) and (not is_debian_9) # Test for Debian 10+
|
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
# ELSE...
|
# ELSE...
|
||||||
|
- name: Install MongoDB if 'mongodb_installed' not defined, e.g. in {{ iiab_state_file }} # /etc/iiab/iiab_state.yml
|
||||||
|
include_tasks: install.yml
|
||||||
|
when: mongodb_installed is undefined and not (ansible_architecture == "aarch64" and is_debian_10 and not is_raspbian)
|
||||||
|
|
||||||
- name: Install/Enable/Disable/Record MongoDB (main2.yml) if is_raspbian or not is_debian, i.e. not True Debian
|
- name: Disable & Stop 'mongodb' service, if not mongodb_enabled
|
||||||
include_tasks: main2.yml
|
systemd:
|
||||||
when: is_raspbian or not is_debian
|
name: mongodb
|
||||||
|
enabled: no
|
||||||
|
state: stopped
|
||||||
|
when: not mongodb_enabled and mongodb_installed is defined
|
||||||
|
|
||||||
# THE block: APPROACH BELOW WORKS JUST LIKE main2.yml ABOVE.
|
#'mongodb' systemd service - started on demand by sugarizer
|
||||||
# BUT IT VISUALLY POLLUTES: MANY BLUE "skipping:" MESSAGES IN ANSIBLE'S OUTPUT.
|
# Just recording that mongodb should be running
|
||||||
|
|
||||||
# - block: # ENTIRE BLOCK CONDITIONED ON 'when: is_raspbian or not is_debian'
|
- name: Add 'mongodb' variable values to {{ iiab_ini_file }}
|
||||||
#
|
ini_file:
|
||||||
# [MOVED TO main2.yml]
|
path: "{{ iiab_ini_file }}" # /etc/iiab/iiab.ini
|
||||||
#
|
section: mongodb
|
||||||
# when: is_raspbian or not is_debian # CONDITION FOR ENTIRE ABOVE block:
|
option: "{{ item.option }}"
|
||||||
|
value: "{{ item.value | string }}"
|
||||||
|
with_items:
|
||||||
|
- option: name
|
||||||
|
value: MongoDB
|
||||||
|
- option: description
|
||||||
|
value: '"MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling."'
|
||||||
|
- option: enabled
|
||||||
|
value: "{{ mongodb_enabled }}"
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
- name: Install MongoDB if 'mongodb_installed' not defined, e.g. in {{ iiab_state_file }} # /etc/iiab/iiab_state.yml
|
|
||||||
include_tasks: install.yml
|
|
||||||
when: mongodb_installed is undefined
|
|
||||||
|
|
||||||
|
|
||||||
- name: Enable & Restart 'mongodb' systemd service if mongodb_enabled, incl daemon-reload (in case mongodb.service changed?)
|
|
||||||
systemd:
|
|
||||||
name: mongodb
|
|
||||||
daemon_reload: yes
|
|
||||||
enabled: yes
|
|
||||||
state: restarted
|
|
||||||
when: mongodb_enabled | bool
|
|
||||||
|
|
||||||
- name: Disable & Stop 'mongodb' service, if not mongodb_enabled
|
|
||||||
systemd:
|
|
||||||
name: mongodb
|
|
||||||
enabled: no
|
|
||||||
state: stopped
|
|
||||||
when: not mongodb_enabled
|
|
||||||
|
|
||||||
|
|
||||||
- name: Add 'mongodb' variable values to {{ iiab_ini_file }}
|
|
||||||
ini_file:
|
|
||||||
path: "{{ iiab_ini_file }}" # /etc/iiab/iiab.ini
|
|
||||||
section: mongodb
|
|
||||||
option: "{{ item.option }}"
|
|
||||||
value: "{{ item.value | string }}"
|
|
||||||
with_items:
|
|
||||||
- option: name
|
|
||||||
value: MongoDB
|
|
||||||
- option: description
|
|
||||||
value: '"MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling."'
|
|
||||||
- option: enabled
|
|
||||||
value: "{{ mongodb_enabled }}"
|
|
|
@ -22,12 +22,18 @@
|
||||||
# 3 stanzas moved up from install.yml, so Debian finishes "BIG" IIAB install:
|
# 3 stanzas moved up from install.yml, so Debian finishes "BIG" IIAB install:
|
||||||
# (WITH LOUD RED WARNINGS!)
|
# (WITH LOUD RED WARNINGS!)
|
||||||
|
|
||||||
- name: "Set 'mongodb_install: True' and 'mongodb_enabled: True'"
|
# If we got here sugarizer_install is True
|
||||||
|
- name: "Set 'mongodb_install: True'"
|
||||||
set_fact:
|
set_fact:
|
||||||
mongodb_install: True
|
mongodb_install: True
|
||||||
mongodb_enabled: True
|
|
||||||
|
|
||||||
- name: MONGODB - run 'mongodb' role (attempt to install & enable MongoDB)
|
# auto started by sugarizer.service just to record that mongodb should be running
|
||||||
|
- name: "Set 'mongodb_enabled: True' when sugarizer_enabled"
|
||||||
|
set_fact:
|
||||||
|
mongodb_enabled: True
|
||||||
|
when: sugarizer_enabled
|
||||||
|
|
||||||
|
- name: MONGODB - run 'mongodb' role (attempt to install MongoDB)
|
||||||
include_role:
|
include_role:
|
||||||
name: mongodb
|
name: mongodb
|
||||||
|
|
||||||
|
|
|
@ -18,27 +18,13 @@
|
||||||
|
|
||||||
when: sugarizer_enabled | bool # CONDITION FOR 2-STANZA block: ABOVE
|
when: sugarizer_enabled | bool # CONDITION FOR 2-STANZA block: ABOVE
|
||||||
|
|
||||||
- block: # 3 STANZAS BELOW, CONDITIONED ON 'when: not sugarizer_enabled'
|
|
||||||
|
|
||||||
# Stops 'sugarizer' but not 'mongodb'
|
# Stops 'sugarizer' but not 'mongodb'
|
||||||
- name: Disable & Stop 'sugarizer' systemd service, if not sugarizer_enabled
|
- name: Disable & Stop 'sugarizer' systemd service, if not sugarizer_enabled
|
||||||
systemd:
|
systemd:
|
||||||
name: sugarizer
|
name: sugarizer
|
||||||
enabled: no
|
enabled: no
|
||||||
state: stopped
|
state: stopped
|
||||||
|
when: not sugarizer_enabled
|
||||||
# Disable & Stop 'mongodb' via 2 stanzas below
|
|
||||||
# (meta/main.yml did this in the past)
|
|
||||||
|
|
||||||
- name: "Set 'mongodb_enabled: False' if not sugarizer_enabled"
|
|
||||||
set_fact:
|
|
||||||
mongodb_enabled: False
|
|
||||||
|
|
||||||
- name: MONGODB - run 'mongodb' role, to Disable & Stop MongoDB, if not sugarizer_enabled
|
|
||||||
include_role:
|
|
||||||
name: mongodb
|
|
||||||
|
|
||||||
when: not sugarizer_enabled # CONDITION FOR 3-STANZA block: ABOVE
|
|
||||||
|
|
||||||
- name: Enable/Disable/Restart Apache if primary
|
- name: Enable/Disable/Restart Apache if primary
|
||||||
include_tasks: apache.yml
|
include_tasks: apache.yml
|
||||||
|
|
Loading…
Add table
Reference in a new issue