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
 | 
			
		||||
 | 
			
		||||
- 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
 | 
			
		||||
# 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)
 | 
			
		||||
| 
						 | 
				
			
			@ -18,86 +10,105 @@
 | 
			
		|||
# 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)
 | 
			
		||||
 | 
			
		||||
- name: Create dir /tmp/mongodb-3.0.1x (raspbian)
 | 
			
		||||
- block:
 | 
			
		||||
  - name: Create dir /tmp/mongodb-3.0.1x (aarch32)
 | 
			
		||||
    file:
 | 
			
		||||
      path: /tmp/mongodb-3.0.1x
 | 
			
		||||
      state: directory
 | 
			
		||||
  when: internet_available and is_raspbian
 | 
			
		||||
 | 
			
		||||
- 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:
 | 
			
		||||
      remote_src: yes
 | 
			
		||||
      src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_core.zip"
 | 
			
		||||
      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
 | 
			
		||||
  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:
 | 
			
		||||
      remote_src: yes
 | 
			
		||||
      src: "{{ iiab_download_url }}/mongodb_stretch_3_0_14_tools.zip"
 | 
			
		||||
      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
 | 
			
		||||
  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 dir /opt/iiab/downloads/mongodb-3.0.1x (raspbian)
 | 
			
		||||
#  file:
 | 
			
		||||
#    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 group mongodb (aarch32)
 | 
			
		||||
    group:
 | 
			
		||||
      name: mongodb
 | 
			
		||||
      state: present
 | 
			
		||||
  when: is_raspbian | bool
 | 
			
		||||
 | 
			
		||||
- name: Create Linux user mongodb (raspbian)
 | 
			
		||||
  - name: Create Linux user mongodb (aarch32)
 | 
			
		||||
    user:
 | 
			
		||||
      name: mongodb
 | 
			
		||||
      group: mongodb    # primary group
 | 
			
		||||
      groups: mongodb
 | 
			
		||||
      home: /var/lib/mongodb
 | 
			
		||||
      shell: /usr/sbin/nologin
 | 
			
		||||
  when: is_raspbian | bool
 | 
			
		||||
 | 
			
		||||
  - name: Install /etc/mongod.conf from template (aarch32)
 | 
			
		||||
    template:
 | 
			
		||||
      src: "{{ item.src }}"
 | 
			
		||||
      dest: "{{ item.dest }}"
 | 
			
		||||
      owner: root
 | 
			
		||||
      group: root
 | 
			
		||||
      mode: "{{ item.mode }}"
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +125,7 @@
 | 
			
		|||
    - /var/log/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:
 | 
			
		||||
    src: "{{ item.src }}"
 | 
			
		||||
    dest: "{{ item.dest }}"
 | 
			
		||||
| 
						 | 
				
			
			@ -122,10 +133,17 @@
 | 
			
		|||
    group: root
 | 
			
		||||
    mode: "{{ item.mode }}"
 | 
			
		||||
  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: '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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,24 +31,38 @@
 | 
			
		|||
- debug:
 | 
			
		||||
    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!
 | 
			
		||||
    msg: ATTEMPTED MongoDB INSTALLATION WITH (TRUE) DEBIAN, which is no longer supported.  Nevertheless IIAB will continue (consider this a warning!)
 | 
			
		||||
  when: is_debian 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+
 | 
			
		||||
    msg: ATTEMPTED MongoDB INSTALLATION WITH (TRUE) DEBIAN aarch64, which is not supported upstream.  Nevertheless IIAB will continue (consider this a warning!)
 | 
			
		||||
  when: (ansible_architecture == "aarch64") and is_debian_10 and not is_raspbian
 | 
			
		||||
  ignore_errors: yes
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
  include_tasks: main2.yml
 | 
			
		||||
  when: is_raspbian or not is_debian
 | 
			
		||||
- name: Disable & Stop 'mongodb' service, if not mongodb_enabled
 | 
			
		||||
  systemd:
 | 
			
		||||
    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.
 | 
			
		||||
# BUT IT VISUALLY POLLUTES: MANY BLUE "skipping:" MESSAGES IN ANSIBLE'S OUTPUT.
 | 
			
		||||
#'mongodb' systemd service - started on demand by sugarizer
 | 
			
		||||
# Just recording that mongodb should be running
 | 
			
		||||
 | 
			
		||||
# - block:    # ENTIRE BLOCK CONDITIONED ON 'when: is_raspbian or not is_debian'
 | 
			
		||||
#
 | 
			
		||||
#   [MOVED TO main2.yml]
 | 
			
		||||
#
 | 
			
		||||
#   when: is_raspbian or not is_debian    # CONDITION FOR ENTIRE ABOVE block: 
 | 
			
		||||
- 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 }}"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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:
 | 
			
		||||
# (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:
 | 
			
		||||
    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:
 | 
			
		||||
    name: mongodb
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,27 +18,13 @@
 | 
			
		|||
 | 
			
		||||
  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'
 | 
			
		||||
  - name: Disable & Stop 'sugarizer' systemd service, if not sugarizer_enabled
 | 
			
		||||
- name: Disable & Stop 'sugarizer' systemd service, if not sugarizer_enabled
 | 
			
		||||
  systemd:
 | 
			
		||||
    name: sugarizer
 | 
			
		||||
    enabled: no
 | 
			
		||||
    state: stopped
 | 
			
		||||
 | 
			
		||||
  # 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
 | 
			
		||||
  when: not sugarizer_enabled
 | 
			
		||||
 | 
			
		||||
- name: Enable/Disable/Restart Apache if primary
 | 
			
		||||
  include_tasks: apache.yml
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue