From d4f673fdc09db901f3b36dafc468523903273bc4 Mon Sep 17 00:00:00 2001 From: nd <git@notandy.de> Date: Sat, 23 Oct 2021 15:35:18 +0200 Subject: [PATCH] add cluster, user creation and replication setup support --- defaults/main.yml | 18 ++++++++++++++++ tasks/main.yml | 35 ++++++++++++++++++++++++++++++++ templates/mongod.conf.j2 | 44 ++++------------------------------------ vars/main.yml | 1 + 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index fa84e21..20d087f 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,5 +1,23 @@ mongodb: version: "4.2" + api_user: "{{ omit }}" + api_password: "{{ omit }}" + config: + storage: + dbPath: /var/lib/mongodb + journal: + enabled: true + systemLog: + destination: file + logAppend: true + path: /var/log/mongodb/mongod.log + net: + port: 27017 + bindIp: 127.0.0.1 + processManagement: + timeZoneInfo: /usr/share/zoneinfo + replication: + replSetName: rs01 backup: enable: true keep_days: 2 diff --git a/tasks/main.yml b/tasks/main.yml index 8946775..865ce3c 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,3 +1,8 @@ +- name: install pymongo from pip because the debian version is too old + pip: + executable: pip3 + name: pymongo + - name: copy mongodb config notify: - restart mongodb @@ -16,6 +21,36 @@ daemon_reload: yes enabled: yes +- name: flush handlers + meta: flush_handlers + +- name: create replica sets + retries: 3 + delay: 5 + loop: "{{ mongodb.replicaset|dict2items }}" + community.mongodb.mongodb_replicaset: + login_host: "{{ mongodb.config.net.bindIp }}" + login_port: "{{ mongodb.config.net.port }}" + login_user: "{{ mongodb.api_user }}" + login_password: "{{ mongodb.api_password }}" + replica_set: "{{ item.key|d(mongodb.config.replication.replSetName) }}" + members: "{{ item.value.members }}" + validate: no + +- name: create mongodb user + no_log: true + loop: "{{ mongodb.user|dict2items }}" + community.mongodb.mongodb_user: + login_host: "{{ mongodb.config.net.bindIp }}" + login_port: "{{ mongodb.config.net.port }}" + login_user: "{{ mongodb.api_user }}" + login_password: "{{ mongodb.api_password }}" + name: "{{ item.key }}" + password: "{{ item.value.password }}" + roles: "{{ item.value.roles }}" + database: "{{ item.value.database|d('admin') }}" + replica_set: "{{ item.value.replica_set|d(mongodb.config.replication.replSetName) }}" + - include_tasks: backup.yml when: - mongodb.backup.enable diff --git a/templates/mongod.conf.j2 b/templates/mongod.conf.j2 index 64038b0..694832d 100644 --- a/templates/mongod.conf.j2 +++ b/templates/mongod.conf.j2 @@ -2,43 +2,7 @@ # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ - -# Where and how to store data. -storage: - dbPath: /var/lib/mongodb - journal: - enabled: true -# engine: -# mmapv1: -# wiredTiger: - -# where to write logging data. -systemLog: - destination: file - logAppend: true - path: /var/log/mongodb/mongod.log - -# network interfaces -net: - port: 27017 - bindIp: 127.0.0.1 - - -# how the process runs -processManagement: - timeZoneInfo: /usr/share/zoneinfo - -#security: - -#operationProfiling: - -replication: - replSetName: rs01 - -#sharding: - -## Enterprise-Only Options: - -#auditLog: - -#snmp: +# +# {{ ansible_managed }} +# +{{ mongodb.config|to_nice_yaml }} diff --git a/vars/main.yml b/vars/main.yml index 96de9b3..b5d38df 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,5 +1,6 @@ packages: pkg: + "python3-pip": {} "mongodb-org": {} repos: mongodb: -- GitLab