diff --git a/.gitignore b/.gitignore index 23d4c25bb5..cbabf997f4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ ceph-ansible.spec !.mergify.yml !raw_install_python.yml !requirements.yml +.vscode/ diff --git a/group_vars/all.yml.sample b/group_vars/all.yml.sample index 4375e99311..7a086aa898 100644 --- a/group_vars/all.yml.sample +++ b/group_vars/all.yml.sample @@ -368,8 +368,7 @@ dummy: #radosgw_address_block: subnet #radosgw_keystone_ssl: false # activate this when using keystone PKI keys #radosgw_num_instances: 1 -# Rados Gateway options -#email_address: foo@bar.com +#rgw_zone: default # This is used for rgw instance client names. ## Testing mode @@ -445,7 +444,7 @@ dummy: # global: # foo: 1234 # bar: 5678 -# "client.rgw.{{ hostvars[groups.get(rgw_group_name)[0]]['ansible_facts']['hostname'] }}": +# "client.rgw.{{ rgw_zone }}.{{ hostvars[groups.get(rgw_group_name)[0]]['ansible_facts']['hostname'] }}": # rgw_zone: zone1 # #ceph_conf_overrides: {} diff --git a/group_vars/rgws.yml.sample b/group_vars/rgws.yml.sample index 76e57a6e96..5445ec8f2e 100644 --- a/group_vars/rgws.yml.sample +++ b/group_vars/rgws.yml.sample @@ -88,11 +88,11 @@ dummy: # If you want to add parameters, you should retain the existing ones and include the new ones. #ceph_rgw_container_params: # volumes: -# - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}:/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}:z +# - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}:/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}:z # args: # - -f -# - -n=client.rgw.{{ ansible_facts['hostname'] }}.${INST_NAME} -# - -k=/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}/keyring +# - -n=client.rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME} +# - -k=/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}/keyring ########### # SYSTEMD # diff --git a/profiles/rgw-keystone-v2 b/profiles/rgw-keystone-v2 index 861815a075..05fc81571b 100644 --- a/profiles/rgw-keystone-v2 +++ b/profiles/rgw-keystone-v2 @@ -7,7 +7,7 @@ ceph_conf_overrides: - "client.rgw.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": + "client.rgw.{{ rgw_zone }}.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": "rgw keystone api version": "2" "rgw keystone url": "http://192.168.0.1:35357" "rgw keystone admin token": "password" diff --git a/profiles/rgw-keystone-v3 b/profiles/rgw-keystone-v3 index ae5e045741..a82d96b683 100644 --- a/profiles/rgw-keystone-v3 +++ b/profiles/rgw-keystone-v3 @@ -7,7 +7,7 @@ ceph_conf_overrides: - "client.rgw.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": + "client.rgw.{{ rgw_zone }}.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": "rgw keystone api version": "3" "rgw keystone url": "http://192.168.0.1:35357" "rgw keystone admin token": "password" diff --git a/profiles/rgw-radosgw-static-website b/profiles/rgw-radosgw-static-website index 1cd18c2607..fc1ff890e0 100644 --- a/profiles/rgw-radosgw-static-website +++ b/profiles/rgw-radosgw-static-website @@ -6,6 +6,6 @@ # The double quotes are important, do NOT remove them. ceph_conf_overrides: - "client.rgw.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": + "client.rgw.{{ rgw_zone }}.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": rgw enable static website = true rgw dns s3website name = objects-website-region.domain.com diff --git a/profiles/rgw-usage-log b/profiles/rgw-usage-log index af704fb727..2f0a6021d3 100644 --- a/profiles/rgw-usage-log +++ b/profiles/rgw-usage-log @@ -6,7 +6,7 @@ # The double quotes are important, do NOT remove them. ceph_conf_overrides: - "client.rgw.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": + "client.rgw.{{ rgw_zone }}.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}": rgw enable usage log = true rgw usage log tick interval = 30 rgw usage log flush threshold = 1024 diff --git a/roles/ceph-config/tasks/main.yml b/roles/ceph-config/tasks/main.yml index acfee21d1a..3dad8af7a8 100644 --- a/roles/ceph-config/tasks/main.yml +++ b/roles/ceph-config/tasks/main.yml @@ -131,8 +131,8 @@ ansible.builtin.set_fact: _ceph_ansible_rgw_conf: >- {{ _ceph_ansible_rgw_conf | default({}) | combine({ - 'client.rgw.' + ansible_facts['hostname'] + '.' + item.instance_name: { - 'log_file': '/var/log/ceph/' + cluster + '-rgw-' + ansible_facts['hostname'] + '.' + item.instance_name + '.log', + 'client.rgw.' + rgw_zone + '.' + ansible_facts['hostname'] + '.' + item.instance_name: { + 'log_file': '/var/log/ceph/' + cluster + '-rgw-' + rgw_zone + '-' + ansible_facts['hostname'] + '.' + item.instance_name + '.log', 'rgw_frontends': 'beast ' + _rgw_beast_endpoint + _rgw_beast_ssl_option, } }, recursive=true) }} diff --git a/roles/ceph-defaults/defaults/main.yml b/roles/ceph-defaults/defaults/main.yml index b01aa31e2a..b4e016df53 100644 --- a/roles/ceph-defaults/defaults/main.yml +++ b/roles/ceph-defaults/defaults/main.yml @@ -360,8 +360,7 @@ radosgw_address: x.x.x.x radosgw_address_block: subnet radosgw_keystone_ssl: false # activate this when using keystone PKI keys radosgw_num_instances: 1 -# Rados Gateway options -email_address: foo@bar.com +rgw_zone: default # This is used for rgw instance client names. ## Testing mode @@ -437,7 +436,7 @@ ceph_rbd_mirror_pool: "rbd" # global: # foo: 1234 # bar: 5678 -# "client.rgw.{{ hostvars[groups.get(rgw_group_name)[0]]['ansible_facts']['hostname'] }}": +# "client.rgw.{{ rgw_zone }}.{{ hostvars[groups.get(rgw_group_name)[0]]['ansible_facts']['hostname'] }}": # rgw_zone: zone1 # ceph_conf_overrides: {} diff --git a/roles/ceph-handler/tasks/check_running_containers.yml b/roles/ceph-handler/tasks/check_running_containers.yml index 0c006b8864..2f6a40ff52 100644 --- a/roles/ceph-handler/tasks/check_running_containers.yml +++ b/roles/ceph-handler/tasks/check_running_containers.yml @@ -24,7 +24,7 @@ when: inventory_hostname in groups.get(mds_group_name, []) - name: Check for a rgw container - ansible.builtin.command: "{{ container_binary }} ps -q --filter='name=ceph-rgw-{{ ansible_facts['hostname'] }}'" + ansible.builtin.command: "{{ container_binary }} ps -q --filter='name=ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}'" register: ceph_rgw_container_stat changed_when: false failed_when: false diff --git a/roles/ceph-handler/templates/restart_rgw_daemon.sh.j2 b/roles/ceph-handler/templates/restart_rgw_daemon.sh.j2 index 0c7a8ff0d7..5ea0f3c7db 100644 --- a/roles/ceph-handler/templates/restart_rgw_daemon.sh.j2 +++ b/roles/ceph-handler/templates/restart_rgw_daemon.sh.j2 @@ -13,13 +13,14 @@ fi INSTANCES_NAME=({% for i in rgw_instances %}{{ i.instance_name }} {% endfor %}) RGW_IPS=({% for i in rgw_instances %}{{ i.radosgw_address }} {% endfor %}) RGW_PORTS=({% for i in rgw_instances %}{{ i.radosgw_frontend_port }} {% endfor %}) +RGW_ZONE="{{ rgw_zone }}" declare -a DOCKER_EXECS declare -a SOCKET_PREFIX for ((i=0; i<${RGW_NUMS}; i++)); do - SOCKET_PREFIX[i]="/var/run/ceph/{{ cluster }}-client.rgw.${HOST_NAME}.${INSTANCES_NAME[i]}" + SOCKET_PREFIX[i]="/var/run/ceph/{{ cluster }}-client.rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}" DOCKER_EXECS[i]="" {% if containerized_deployment | bool %} - DOCKER_EXECS[i]="{{ container_binary }} exec ceph-rgw-${HOST_NAME}-${INSTANCES_NAME[i]}" + DOCKER_EXECS[i]="{{ container_binary }} exec ceph-rgw-${RGW_ZONE}-${HOST_NAME}-${INSTANCES_NAME[i]}" {% endif %} done @@ -38,7 +39,7 @@ check_socket() { done if [ $succ -ne 1 ]; then echo "Socket file ${SOCKET} could not be found, which means Rados Gateway is not running. Showing ceph-rgw unit logs now:" - journalctl -u ceph-radosgw@rgw.${HOST_NAME}.${INSTANCES_NAME[i]} + journalctl -u ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]} exit 1 fi } @@ -81,10 +82,10 @@ for ((i=0; i<${RGW_NUMS}; i++)); do # Check if systemd unit exists # This is needed for new instances as the restart might trigger before the deployment - if systemctl list-units --full --all | grep -q "ceph-radosgw@rgw.${HOST_NAME}.${INSTANCES_NAME[i]}"; then - systemctl restart ceph-radosgw@rgw.${HOST_NAME}.${INSTANCES_NAME[i]} + if systemctl list-units --full --all | grep -q "ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}"; then + systemctl restart ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]} else - echo "Systemd unit ceph-radosgw@rgw.${HOST_NAME}.${INSTANCES_NAME[i]} does not exist." + echo "Systemd unit ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]} does not exist." continue fi diff --git a/roles/ceph-rgw/defaults/main.yml b/roles/ceph-rgw/defaults/main.yml index c53edd5c9a..4e16074ff5 100644 --- a/roles/ceph-rgw/defaults/main.yml +++ b/roles/ceph-rgw/defaults/main.yml @@ -80,11 +80,11 @@ rgw_config_keys: "/" # DON'T TOUCH ME # If you want to add parameters, you should retain the existing ones and include the new ones. ceph_rgw_container_params: volumes: - - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}:/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}:z + - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}:/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}:z args: - -f - - -n=client.rgw.{{ ansible_facts['hostname'] }}.${INST_NAME} - - -k=/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.${INST_NAME}/keyring + - -n=client.rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME} + - -k=/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.${INST_NAME}/keyring ########### # SYSTEMD # diff --git a/roles/ceph-rgw/handlers/main.yml b/roles/ceph-rgw/handlers/main.yml index a0344c7fa0..54d24b781a 100644 --- a/roles/ceph-rgw/handlers/main.yml +++ b/roles/ceph-rgw/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: Restart rgw ansible.builtin.service: - name: "ceph-radosgw@rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" + name: "ceph-radosgw@rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" state: restarted with_items: "{{ rgw_instances }}" diff --git a/roles/ceph-rgw/tasks/common.yml b/roles/ceph-rgw/tasks/common.yml index 3b2604d3c6..225f9ecae4 100644 --- a/roles/ceph-rgw/tasks/common.yml +++ b/roles/ceph-rgw/tasks/common.yml @@ -1,13 +1,4 @@ --- -- name: Create rados gateway directories - ansible.builtin.file: - path: "{{ item }}" - state: directory - owner: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" - group: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" - mode: "{{ ceph_directories_mode }}" - with_items: "{{ rbd_client_admin_socket_path }}" - - name: Get keys from monitors ceph_key: name: "{{ item.name }}" diff --git a/roles/ceph-rgw/tasks/pre_requisite.yml b/roles/ceph-rgw/tasks/pre_requisite.yml index a31b88dfb2..2f374cb075 100644 --- a/roles/ceph-rgw/tasks/pre_requisite.yml +++ b/roles/ceph-rgw/tasks/pre_requisite.yml @@ -1,7 +1,7 @@ --- - name: Create rados gateway directories ansible.builtin.file: - path: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" + path: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" state: directory owner: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" group: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" @@ -12,11 +12,11 @@ - name: Create rgw keyrings ceph_key: - name: "client.rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" + name: "client.rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" cluster: "{{ cluster }}" user: "client.bootstrap-rgw" user_key: /var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring - dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}/keyring" + dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}/keyring" caps: osd: 'allow rwx' mon: 'allow rw' @@ -34,7 +34,7 @@ - name: Get keys from monitors ceph_key: - name: "client.rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" + name: "client.rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }}" cluster: "{{ cluster }}" output_format: plain state: info @@ -51,7 +51,7 @@ - name: Copy ceph key(s) if needed ansible.builtin.copy: - dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_facts['hostname'] }}.{{ item.item.instance_name }}/keyring" + dest: "/var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.item.instance_name }}/keyring" content: "{{ item.stdout + '\n' }}" owner: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" group: "{{ ceph_uid if containerized_deployment | bool else 'ceph' }}" diff --git a/roles/ceph-rgw/tasks/start_docker_rgw.yml b/roles/ceph-rgw/tasks/start_docker_rgw.yml index cffeec811a..c9df6c77f0 100644 --- a/roles/ceph-rgw/tasks/start_docker_rgw.yml +++ b/roles/ceph-rgw/tasks/start_docker_rgw.yml @@ -4,7 +4,7 @@ - name: Systemd start rgw container ansible.builtin.systemd: - name: ceph-radosgw@rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }} + name: ceph-radosgw@rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }} state: started enabled: true masked: false diff --git a/roles/ceph-rgw/tasks/start_radosgw.yml b/roles/ceph-rgw/tasks/start_radosgw.yml index 805667548a..5de184fb1a 100644 --- a/roles/ceph-rgw/tasks/start_radosgw.yml +++ b/roles/ceph-rgw/tasks/start_radosgw.yml @@ -16,7 +16,7 @@ - name: Start rgw instance ansible.builtin.systemd: - name: ceph-radosgw@rgw.{{ ansible_facts['hostname'] }}.{{ item.instance_name }} + name: ceph-radosgw@rgw.{{ rgw_zone }}.{{ ansible_facts['hostname'] }}.{{ item.instance_name }} state: started enabled: true masked: false diff --git a/roles/ceph-rgw/templates/ceph-radosgw.service.j2 b/roles/ceph-rgw/templates/ceph-radosgw.service.j2 index 524817653d..38fd968183 100644 --- a/roles/ceph-rgw/templates/ceph-radosgw.service.j2 +++ b/roles/ceph-rgw/templates/ceph-radosgw.service.j2 @@ -14,12 +14,12 @@ Wants=network-online.target local-fs.target time-sync.target EnvironmentFile=/var/lib/ceph/radosgw/{{ cluster }}-%i/EnvironmentFile {% if container_binary == 'podman' %} ExecStartPre=-/usr/bin/rm -f /%t/%n-pid /%t/%n-cid -ExecStartPre=-/usr/bin/{{ container_binary }} rm --storage ceph-rgw-{{ ansible_facts['hostname'] }}-${INST_NAME} +ExecStartPre=-/usr/bin/{{ container_binary }} rm --storage ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}-${INST_NAME} ExecStartPre=-/usr/bin/mkdir -p /var/log/ceph {% else %} -ExecStartPre=-/usr/bin/{{ container_binary }} stop ceph-rgw-{{ ansible_facts['hostname'] }}-${INST_NAME} +ExecStartPre=-/usr/bin/{{ container_binary }} stop ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}-${INST_NAME} {% endif %} -ExecStartPre=-/usr/bin/{{ container_binary }} rm ceph-rgw-{{ ansible_facts['hostname'] }}-${INST_NAME} +ExecStartPre=-/usr/bin/{{ container_binary }} rm ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}-${INST_NAME} ExecStart=/usr/bin/{{ container_binary }} run --rm --net=host \ {% if container_binary == 'podman' %} -d --log-driver journald --conmon-pidfile /%t/%n-pid --cidfile /%t/%n-cid \ @@ -46,14 +46,14 @@ ExecStart=/usr/bin/{{ container_binary }} run --rm --net=host \ {% if radosgw_frontend_ssl_certificate -%} -v {{ radosgw_frontend_ssl_certificate }}:{{ radosgw_frontend_ssl_certificate }} \ {% endif -%} - --name=ceph-rgw-{{ ansible_facts['hostname'] }}-${INST_NAME} \ + --name=ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}-${INST_NAME} \ --entrypoint=/usr/bin/radosgw \ {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} \ {{ (ceph_common_container_params['args'] + ceph_rgw_container_params['args'] | default([])) | join(' ') }} {% if container_binary == 'podman' %} ExecStop=-/usr/bin/sh -c "/usr/bin/{{ container_binary }} rm -f `cat /%t/%n-cid`" {% else %} -ExecStopPost=-/usr/bin/{{ container_binary }} stop ceph-rgw-{{ ansible_facts['hostname'] }}-${INST_NAME} +ExecStopPost=-/usr/bin/{{ container_binary }} stop ceph-rgw-{{ rgw_zone }}-{{ ansible_facts['hostname'] }}-${INST_NAME} {% endif %} KillMode=none Restart=always