可以将管理员用户添加到mongodb中的管理员数据库

c3frrgcw  于 2022-12-03  发布在  Go
关注(0)|答案(2)|浏览(192)

我正在使用ansible在mongodb中添加管理员用户..我使用了下面的剧本,但是我遇到了错误。有人能建议解决方案吗..我在添加用户之前也安装了pymongo,以便使用模块。mongod.conf中禁用了身份验证,bindIp设置为0.0.0.0

- hosts: devqa_mongod_single:dwprod_mongod_single
  become: yes
  tasks:

    # volume config for mongodb
    - name: Create a new xfs primary partition
      community.general.parted:
        device: /dev/nvme1n1
        number: 1
        state: present
        fs_type: xfs
        label: gpt

    - name: Create an xfs filesystem on /dev/nvme1n1
      community.general.filesystem:
        fstype: xfs
        state: present
        dev: /dev/nvme1n1p1

    - name: Create Directory /data/db
      ansible.builtin.file:
        path: /data/db
        state: directory
        owner: root
        group: root
        mode: 0751

    - name: Fetch the UUID of /dev/nvme1n1p1 
      command: blkid -s UUID -o value /dev/nvme1n1p1 
      changed_when: false
      register: blkid_out
           
    - name: Mount /dev/nvme1n1 by UUID 
      ansible.posix.mount:
        path: /data/db
        src: UUID={{ blkid_out.stdout }}
        fstype: xfs
        opts: "defaults,nofail"
        passno: 2
        state: mounted
 
  # Installation of mongodb
    - name: Install aptitude using apt
      apt: 
        name: aptitude 
        state: latest 
        update_cache: yes 
    
    - name: Import public key
      apt_key:
        url: 'https://www.mongodb.org/static/pgp/server-6.0.asc'
        state: present
    
    - name: Add repository
      apt_repository:
        filename: '/etc/apt/sources.list.d/mongodb-org-6.0.list'
        repo: 'deb https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse'
        state: present
        update_cache: yes
    
    - name: Install mongoDB
      apt: 
        name: mongodb-org
        state: present
        update_cache: yes   
   
    - name: Ensure mongodb is running and and enabled to start automatically on reboots
      service: 
        name: mongod 
        enabled: yes
        state: started

  # Installing pymongo to use community.mongodb.mongodb_user module      
    - name: "Install PyMongo"
      apt:
        update_cache: yes
        name: "python3-pymongo"
        state: "latest"    
  
  # copy config file
    - name: user_init | set temporary conf
      become: yes
      timeout: 300
      ansible.builtin.copy:
        src: ../templates/mongodb/mongod_init.conf.j2
        dest: /etc/mongod.conf
        owner: root
        group: root
        mode: '0644'
      notify:
        - restart mongodb   

   # create mongoadmin user
    - name: Create mongoadmin root user 
      #community.mongodb.mongodb_user:
      mongodb_user:
        login_port: 27017
        database: "admin"
        name: "mongoadmin"
        password: "mongoadmin"
        roles: "root"
      #ignore_errors: yes
      notify:
        - restart mongodb   
    
    - name: conf | set
      become: yes
      timeout: 300
      ansible.builtin.copy:
        src: ../templates/mongodb/mongodb/mongod.conf.j2
        dest: /etc/mongod.conf
        owner: root
        group: root
        mode: '0644'
      register: mongo_conf_set
      notify:
        - restart mongodb 

    - name: Copy mongodb config file for log rotation
      become: yes
      timeout: 300
      ansible.builtin.copy:
        src: ../templates/mongodb/mongodb
        dest: /etc/logrotate.d/mongodb
        owner: root
        group: root
        mode: 0644    

    - name: Create Directory /var/run/mongodb
      ansible.builtin.file:
        path: /var/run/mongodb
        state: directory
        owner: mongodb
        group: mongodb
        mode: 0751
      notify:
        - restart mongodb

    - name: Recursively change ownership of a /data/db
      ansible.builtin.file:
        path: /data/db
        state: directory
        recurse: yes
        owner: mongodb
        group: mongodb

  handlers:
    - name: restart mongodb
      service: name=mongod state=restarted

我收到以下错误

fatal: [devqa_mongod_single]: FAILED! => {"changed": false, "msg": "Unable to connect to database: Unknown option directconnection"}
eyh26e7m

eyh26e7m1#

我认为您在主机上的配置设置有误。
无法连接到数据库:未知选项directconnection
我觉得这不像是Ansible的错误。
为了更进一步,您应该禁用mongo身份验证,并重新启动mongo。然后,创建3个用户,adminrootuserAdminAnyDatabase。然后重新启动mongo。下面是一个用于MongoDB的Ansible role I've written,您可以看看它是如何工作的。

cs7cruho

cs7cruho2#

我手动创建用户:

- hosts: all
  vars: 
    mongoAuth: "/usr/bin/mongosh 'mongodb://admin:{{ password | urlencode() }}@localhost:27017/admin?authSource=admin' --norc --quiet"
    mongoNoAuth: "/usr/bin/mongosh 'mongodb://localhost:27017/admin' --norc --quiet"

  tasks: 
  - name: Check if authentication is enabled and if user already exists
    shell: 
      cmd: "{{ mongoAuth }} --eval 'db.getMongo()'"
      executable: /bin/bash
    register: authenticate 
    failed_when: false 
    changed_when: false
    check_mode: no 

  - name: Create users
    shell: 
      cmd: "{{ (authenticate.rc == 0) | ternary(mongoAuth, mongoNoAuth) }} --eval '{{ js }}'"
      executable: /bin/bash
    vars: 
      js: |
        admin = db.getSiblingDB("admin")
        {% if authenticate.rc != 0 %}
        admin.createUser({ user: "admin", pwd: "{{ password }}", roles: ["root"] })
        admin.auth("admin", "{{ password }}")
        {% endif %} 
        // create more users if needed
        admin.createUser(...)

相关问题