Add an ansible role for mongodb
Change-Id: Ia6ac371845d1f2b545406d096b35a6d5f68be5f6 Implements: blueprint ansible-mongodb
This commit is contained in:
parent
b6c9d2acfa
commit
3ae0063944
@ -84,6 +84,9 @@ rabbitmq_management_port: "15672"
|
|||||||
rabbitmq_cluster_port: "25672"
|
rabbitmq_cluster_port: "25672"
|
||||||
rabbitmq_epmd_port: "4369"
|
rabbitmq_epmd_port: "4369"
|
||||||
|
|
||||||
|
mongodb_port: "27017"
|
||||||
|
mongodb_web_port: "28017"
|
||||||
|
|
||||||
haproxy_stats_port: "1984"
|
haproxy_stats_port: "1984"
|
||||||
|
|
||||||
keystone_public_port: "5000"
|
keystone_public_port: "5000"
|
||||||
@ -178,6 +181,8 @@ enable_ironic: "no"
|
|||||||
enable_magnum: "no"
|
enable_magnum: "no"
|
||||||
enable_mistral: "no"
|
enable_mistral: "no"
|
||||||
enable_elk: "no"
|
enable_elk: "no"
|
||||||
|
enable_mongodb: "no"
|
||||||
|
|
||||||
ironic_keystone_user: "ironic"
|
ironic_keystone_user: "ironic"
|
||||||
|
|
||||||
# Nova fake driver and the number of fake driver per compute node
|
# Nova fake driver and the number of fake driver per compute node
|
||||||
|
@ -27,6 +27,9 @@ control
|
|||||||
[rabbitmq:children]
|
[rabbitmq:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
[mongodb:children]
|
||||||
|
control
|
||||||
|
|
||||||
[keystone:children]
|
[keystone:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ control
|
|||||||
[rabbitmq:children]
|
[rabbitmq:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
[mongodb:children]
|
||||||
|
control
|
||||||
|
|
||||||
[keystone:children]
|
[keystone:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
@ -42,6 +42,14 @@ listen rabbitmq_management
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_mongodb | bool %}
|
||||||
|
listen mongodb
|
||||||
|
bind {{ kolla_internal_address }}:{{ mongodb_port }}
|
||||||
|
{% for host in groups['mongodb'] %}
|
||||||
|
server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mongodb_port }} check inter 2000 rise 2 fall 5
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if enable_keystone | bool %}
|
{% if enable_keystone | bool %}
|
||||||
listen keystone_public
|
listen keystone_public
|
||||||
bind {{ kolla_internal_address }}:{{ keystone_public_port }}
|
bind {{ kolla_internal_address }}:{{ keystone_public_port }}
|
||||||
|
15
ansible/roles/mongodb/defaults/main.yml
Normal file
15
ansible/roles/mongodb/defaults/main.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
project_name: "mongodb"
|
||||||
|
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Docker
|
||||||
|
####################
|
||||||
|
mongodb_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-mongodb"
|
||||||
|
mongodb_tag: "{{ openstack_release }}"
|
||||||
|
mongodb_image_full: "{{ mongodb_image }}:{{ mongodb_tag }}"
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Mongodb
|
||||||
|
####################
|
||||||
|
|
3
ansible/roles/mongodb/meta/main.yml
Normal file
3
ansible/roles/mongodb/meta/main.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- { role: common }
|
15
ansible/roles/mongodb/tasks/bootstrap.yml
Normal file
15
ansible/roles/mongodb/tasks/bootstrap.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- name: Starting mongodb bootstrap container
|
||||||
|
kolla_docker:
|
||||||
|
action: "start_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
detach: False
|
||||||
|
environment:
|
||||||
|
KOLLA_BOOTSTRAP:
|
||||||
|
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||||
|
image: "{{ mongodb_image_full }}"
|
||||||
|
name: "bootstrap_mongodb"
|
||||||
|
restart_policy: "never"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/mongodb/:{{ container_config_directory }}/:ro"
|
||||||
|
- "mongodb:/var/lib/mongodb/"
|
23
ansible/roles/mongodb/tasks/config.yml
Normal file
23
ansible/roles/mongodb/tasks/config.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: Ensuring config directories exist
|
||||||
|
file:
|
||||||
|
path: "{{ node_config_directory }}/{{ item }}"
|
||||||
|
state: "directory"
|
||||||
|
recurse: yes
|
||||||
|
with_items:
|
||||||
|
- "mongodb"
|
||||||
|
|
||||||
|
- name: Copying over config.json files for services
|
||||||
|
template:
|
||||||
|
src: "{{ item }}.json.j2"
|
||||||
|
dest: "{{ node_config_directory }}/{{ item }}/config.json"
|
||||||
|
with_items:
|
||||||
|
- "mongodb"
|
||||||
|
|
||||||
|
- name: Copying over mongodb.conf
|
||||||
|
template:
|
||||||
|
src: "{{ item }}.j2"
|
||||||
|
dest: "{{ node_config_directory }}/mongodb/{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- "mongodb.conf"
|
||||||
|
|
9
ansible/roles/mongodb/tasks/deploy.yml
Normal file
9
ansible/roles/mongodb/tasks/deploy.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
- include: config.yml
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
||||||
|
|
||||||
|
- include: bootstrap.yml
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
||||||
|
|
||||||
|
- include: start.yml
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
2
ansible/roles/mongodb/tasks/main.yml
Normal file
2
ansible/roles/mongodb/tasks/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
- include: "{{ action }}.yml"
|
7
ansible/roles/mongodb/tasks/pull.yml
Normal file
7
ansible/roles/mongodb/tasks/pull.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Pulling mongodb image
|
||||||
|
kolla_docker:
|
||||||
|
action: "pull_image"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
image: "{{ mongodb_image_full }}"
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
11
ansible/roles/mongodb/tasks/start.yml
Normal file
11
ansible/roles/mongodb/tasks/start.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Starting mongodb container
|
||||||
|
kolla_docker:
|
||||||
|
action: "start_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
image: "{{ mongodb_image_full }}"
|
||||||
|
name: "mongodb"
|
||||||
|
privileged: True
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/mongodb/:{{ container_config_directory }}/:ro"
|
||||||
|
- "mongodb:/var/lib/mongodb"
|
15
ansible/roles/mongodb/templates/mongodb.conf.j2
Normal file
15
ansible/roles/mongodb/templates/mongodb.conf.j2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# mongodb.conf
|
||||||
|
|
||||||
|
# Where to store the data.
|
||||||
|
dbpath = /var/lib/mongodb
|
||||||
|
|
||||||
|
# where to log
|
||||||
|
logpath = /var/log/mongodb/mongodb.log
|
||||||
|
|
||||||
|
logappend = true
|
||||||
|
|
||||||
|
bind_ip = {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}
|
||||||
|
port = {{ mongodb_port }}
|
||||||
|
|
||||||
|
# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
|
||||||
|
journal = true
|
11
ansible/roles/mongodb/templates/mongodb.json.j2
Normal file
11
ansible/roles/mongodb/templates/mongodb.json.j2
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"command": "/usr/bin/mongod --unixSocketPrefix=/var/run/mongodb --config /etc/mongodb.conf run",
|
||||||
|
"config_files": [
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/mongodb.conf",
|
||||||
|
"dest": "/etc/mongodb.conf",
|
||||||
|
"owner": "mongodb",
|
||||||
|
"perm": "0644"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -359,6 +359,30 @@
|
|||||||
state: stopped
|
state: stopped
|
||||||
when: inventory_hostname in groups['rabbitmq']
|
when: inventory_hostname in groups['rabbitmq']
|
||||||
|
|
||||||
|
- name: Checking free port for Mongodb
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ mongodb_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
||||||
|
|
||||||
|
- name: Checking free port for Mongodb Web
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ mongodb_web_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when: inventory_hostname in groups['mongodb']
|
||||||
|
|
||||||
|
- name: Checking free port for Mongodb HAProxy
|
||||||
|
wait_for:
|
||||||
|
host: "{{ kolla_internal_address }}"
|
||||||
|
port: "{{ mongodb_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when: inventory_hostname in groups['haproxy']
|
||||||
|
|
||||||
- name: Checking free port for Rsync
|
- name: Checking free port for Rsync
|
||||||
wait_for:
|
wait_for:
|
||||||
host: "{{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }}"
|
host: "{{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }}"
|
||||||
|
@ -168,3 +168,10 @@
|
|||||||
- { role: mistral,
|
- { role: mistral,
|
||||||
tags: mistral,
|
tags: mistral,
|
||||||
when: enable_mistral | bool }
|
when: enable_mistral | bool }
|
||||||
|
|
||||||
|
- hosts:
|
||||||
|
- mongodb
|
||||||
|
roles:
|
||||||
|
- { role: mongodb,
|
||||||
|
tags: mongodb,
|
||||||
|
when: enable_mongodb | bool }
|
||||||
|
@ -15,9 +15,17 @@ RUN apt-get install -y --no-install-recommends mongodb-server \
|
|||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
RUN mkdir -p /data/db
|
RUN mkdir -p /var/lib/mongodb /home/mongodb \
|
||||||
|
&& chown -R mongodb: /var/lib/mongodb /home/mongodb
|
||||||
|
|
||||||
# TODO(SamYaple): updated mongodb to match the rest of Kolla
|
COPY mongodb_sudoers /etc/sudoers.d/mongodb_sudoers
|
||||||
#ENTRYPOINT exec /bin/mongod --dbpath /data/db --logpath /var/log/mongodb/mongo.log --noprealloc --smallfiles
|
COPY extend_start.sh /usr/local/bin/kolla_extend_start
|
||||||
|
|
||||||
|
RUN usermod -a -G kolla mongodb \
|
||||||
|
&& chmod 755 /usr/local/bin/kolla_extend_start \
|
||||||
|
&& chmod 750 /etc/sudoers.d \
|
||||||
|
&& chmod 440 /etc/sudoers.d/mongodb_sudoers
|
||||||
|
|
||||||
{{ include_footer }}
|
{{ include_footer }}
|
||||||
|
|
||||||
|
USER mongodb
|
||||||
|
10
docker/mongodb/extend_start.sh
Normal file
10
docker/mongodb/extend_start.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "run extended start"
|
||||||
|
|
||||||
|
# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
|
||||||
|
# of the KOLLA_BOOTSTRAP variable being set, including empty.
|
||||||
|
if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
|
||||||
|
sudo chown mongodb: /var/lib/mongodb/
|
||||||
|
exit 0
|
||||||
|
fi
|
1
docker/mongodb/mongodb_sudoers
Normal file
1
docker/mongodb/mongodb_sudoers
Normal file
@ -0,0 +1 @@
|
|||||||
|
%kolla ALL=(root) NOPASSWD: /usr/bin/chown mongodb\: /var/lib/mongodb/, /bin/chown mongodb\: /var/lib/mongodb/
|
Loading…
Reference in New Issue
Block a user