{%- from "mongodb/map.jinja" import server with context %} {%- if server.enabled %} mongodb_packages: pkg.installed: - names: {{ server.pkgs }} /etc/mongodb.conf: file.managed: - source: salt://mongodb/files/mongodb.conf - template: jinja - require: - pkg: mongodb_packages {%- if server.shared_key is defined %} /etc/mongodb.key: file.managed: - contents_pillar: mongodb:server:shared_key - mode: 600 - user: mongodb - require: - pkg: mongodb_packages {%- if not grains.get('noservices', False) %} - watch_in: - service: mongodb_service {%- endif %} {%- endif %} {{ server.lock_dir }}: file.directory: - makedirs: true {%- if not grains.get('noservices', False) %} mongodb_service: service.running: - name: {{ server.service }} - enable: true - require: - file: {{ server.lock_dir }} - pkg: mongodb_packages - watch: - file: /etc/mongodb.conf {%- endif %} {%- if server.members is not defined or server.master == pillar.linux.system.name %} {# We are not a cluster or we are master #} /var/tmp/mongodb_user.js: file.managed: - source: salt://mongodb/files/user.js - template: jinja - mode: 600 - user: root {%- if not grains.get('noservices', False) %} mongodb_change_root_password: cmd.run: - name: 'mongo localhost:27017/admin /var/tmp/mongodb_user.js && touch {{ server.lock_dir }}/mongodb_password_changed' - require: - file: /var/tmp/mongodb_user.js - service: mongodb_service - creates: {{ server.lock_dir }}/mongodb_password_changed {%- endif %} {%- for database_name, database in server.get('database', {}).iteritems() %} /var/tmp/mongodb_user_{{ database_name }}.js: file.managed: - source: salt://mongodb/files/user_role.js - template: jinja - mode: 600 - user: root - defaults: database_name: {{ database_name }} {%- if not grains.get('noservices', False) %} mongodb_{{ database_name }}_fix_role: cmd.run: - name: 'mongo localhost:27017/admin -u admin -p {{ server.admin.password }} /var/tmp/mongodb_user_{{ database_name }}.js && touch {{ server.lock_dir }}/mongodb_user_{{ database_name }}_created' - require: - file: /var/tmp/mongodb_user_{{ database_name }}.js {%- if not grains.get('noservices', False) %} - service: mongodb_service {%- endif%} - creates: {{ server.lock_dir }}/mongodb_user_{{ database_name }}_created {%- if server.members is defined %} require: - cmd: mongodb_setup_cluster {%- endif %} {%- endif %} {%- endfor %} {%- if server.members is defined %} /var/tmp/mongodb_cluster.js: file.managed: - source: salt://mongodb/files/cluster.js - template: jinja - mode: 600 - user: root mongodb_setup_cluster: cmd.run: - name: 'mongo localhost:27017/admin /var/tmp/mongodb_cluster.js && mongo localhost:27017/admin --quiet --eval "rs.conf()" | grep object -q' - unless: 'mongo localhost:27017/admin -u admin -p {{ server.admin.password }} --quiet --eval "rs.conf()" | grep object -q' - require: {%- if not grains.get('noservices', False) %} - service: mongodb_service {%- endif %} - file: /var/tmp/mongodb_cluster.js - require_in: - cmd: mongodb_change_root_password {%- endif %} {%- endif %} {%- endif %}