Vonng / pigsty

Free RDS for PostgreSQL —— Pigsty
https://pigsty.io
GNU Affero General Public License v3.0
3.39k stars 259 forks source link

Install local cluster with Vagrant failed #355

Closed rxda closed 7 months ago

rxda commented 9 months ago

Is this a bug or is there something wrong with my usage? Thank you. config template: full source: latest os: rocky9 macos: 13.1 error:

TASK [minio : building minio params] 
fatal: [10.10.10.10]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'minio_seq'. 'dict object' has no attribute 'minio_seq'\n\nThe error appears to be in '/home/vagrant/pigsty/roles/minio/tasks/main.yml': line 25, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - name: building minio params\n      ^ here\n"}

minio task yaml

---
#--------------------------------------------------------------#
# Assert Minio Identity                               [minio-id]
#--------------------------------------------------------------#
- name: minio identity
  tags: [ always, minio-id ]
  block:

    - name: assert minio identity
      assert:
        that:
          - minio_cluster is defined and minio_cluster != ''
          - minio_seq is defined and minio_seq|int >= 0
        fail_msg: variable 'minio_cluster' & 'minio_seq' are required for minio playbook

    - name: get minio cluster info
      connection: local
      set_fact:
        minio_meta: "{{ hostvars|json_query(cluster_query) }}"
        minio_nodename: "{{ minio_node|replace('${minio_cluster}', minio_cluster)|replace('${minio_seq}', minio_seq|string) }}"
        minio_data_dirs: >-
          {% set minio_multidriver =  minio_data | regex_search('{(\d+)...(\d+)}') %}{% if minio_multidriver and minio_multidriver != '' %}{% set minio_driver_min = (minio_data | regex_findall('{(\d+)...(\d+)}'))[0][0]|int %}{% set minio_driver_max = (minio_data | regex_findall('{(\d+)...(\d+)}'))[0][1]|int %}{% for i in range(minio_driver_min, minio_driver_max+1) %}{% if not loop.first %},{% endif %}{{ minio_data | regex_replace('{(\d+)...(\d+)}', i|string) }}{% endfor %}{% else %}{{ minio_data }}{% endif %}
      vars: { cluster_query: "[@.*][0][?minio_cluster=='{{ minio_cluster }}']" }

    - name: building minio params
      connection: local
      set_fact:
        minio_cluster_size={{ minio_meta | json_query("[].inventory_hostname") | unique | length }}
        minio_cluster_members={{ minio_meta | json_query("[].inventory_hostname") | unique | sort }}
        minio_seq_min={{ minio_meta | json_query('min([].minio_seq)') | int  }}
        minio_seq_max={{ minio_meta | json_query('max([].minio_seq)') | int  }}
        minio_seq_range={% raw %}{{% endraw %}{{ minio_meta | json_query('min([].minio_seq)') | int  }}...{{ minio_meta | json_query('max([].minio_seq)') | int  }}{% raw %}}{% endraw %}
        minio_member="{% for host in minio_meta %}{% if not loop.first %},{% endif %}{{ host.inventory_hostname }} {{ minio_node|replace('${minio_cluster}', host.minio_cluster)|replace('${minio_seq}', host.minio_seq|string) }}{% endfor %}"

#  {% if not loop.first %},{% endif %}{{ host.inventory_hostname }}

    - name: calculate minio volumes
      connection: local
      set_fact:
        minio_node_pattern: "{{ minio_node|replace('${minio_cluster}', minio_cluster)|replace('${minio_seq}',minio_seq_range) }}"
        minio_volumes: "{% if minio_cluster_size|int > 1 %}https://{{ minio_node|replace('${minio_cluster}', minio_cluster)|replace('${minio_seq}',minio_seq_range) }}:{{ minio_port|default(9000) }}{% endif %}{{ minio_data }}"

    - name: print minio identity
      debug:
        msg: "{{ minio_nodename }}: {{ minio_volumes }}"

#--------------------------------------------------------------#
# Create Minio OS user & Group                   [minio_os_user]
#--------------------------------------------------------------#
- name: create minio user group
  tags: minio_os_user
  block:
    - name: create minio os group
      group: name=minio state=present
    - name: create minio os user
      user: name={{ minio_user }} group=minio

#--------------------------------------------------------------#
# Install Minio                                  [minio_install]
#--------------------------------------------------------------#
- name: install minio
  tags: minio_install
  package: name={{ item }} state=present
  with_items: [ minio, mcli ]

#--------------------------------------------------------------#
# Purge Minio Directories                          [minio_clean]
#--------------------------------------------------------------#
- name: clean minio data dir
  tags: minio_clean
  when: minio_clean|bool
  block:

    - name: stop minio service
      systemd: name=minio state=stopped enabled=no daemon_reload=yes

    #- name: remove minio data dir
    #  file: path={{ item }} state=absent
    #  with_items: "{{ minio_data_dirs.split(',') }}"

#--------------------------------------------------------------#
# Create Minio Directories                           [minio_dir]
#--------------------------------------------------------------#
- name: create minio directories
  tags: minio_dir
  block:

    - name: create minio data directories
      file:
        path: "{{ item }}"
        state: directory
        owner: "{{ minio_user }}"
        group: minio
        mode: 0770
      with_items: "{{ minio_data_dirs.split(',') }}"

    - name: create minio conf dir
      file: path=/etc/minio state=directory owner={{ minio_user }} group=minio mode=0755

#--------------------------------------------------------------#
# Config Minio                                    [minio_config]
#--------------------------------------------------------------#
- import_tasks: config.yml
  tags: minio_config
  vars: { minio_instance: "{{ minio_cluster }}-{{ minio_seq }}" }

#--------------------------------------------------------------#
# Launch Minio                                    [minio_launch]
#--------------------------------------------------------------#
- name: launch minio server
  tags: minio_launch
  block:

    - name: launch minio server service
      systemd: name=minio state=restarted enabled=yes daemon_reload=yes
    - name: wait for minio server online
      wait_for: host=127.0.0.1 port={{ minio_port }} state=started timeout=10

#--------------------------------------------------------------#
# Register Minio                                [minio_register]
#--------------------------------------------------------------#
- name: register minio as prometheus target
  tags: [ minio_register, register_prometheus ]
  ignore_errors: true
  delegate_to: '{{ item }}'
  with_items: '{{ groups["infra"] }}'
  copy:
    dest: /etc/prometheus/targets/minio/{{ minio_cluster }}-{{ minio_seq }}.yml
    owner: prometheus
    content: |
      # {{ minio_cluster }}-{{ minio_seq }} @ {{ inventory_hostname }}
      - labels: { ip: {{ inventory_hostname }} , ins: {{ minio_cluster }}-{{ minio_seq }} , cls: {{ minio_cluster }} }
        targets: [ {{ inventory_hostname }}:{{ minio_port }} ]

#--------------------------------------------------------------#
# Provision Minio                              [minio_provision]
#--------------------------------------------------------------#
- import_tasks: provision.yml
  tags: minio_provision

...
Vonng commented 7 months ago

You cluster definition does not have minio_seq defined. Check this example: https://github.com/Vonng/pigsty/blob/master/files/pigsty/prod.yml#L221