Add a boolean to allow disk overrides through NodeDataLookup

Add a boolean to allow disk overrides through NodeDataLookup and use
the following hiera data parameters to use device persistent naming for swift:

NodeDataLookup:
  "UUID": {
          "swift::storage::disks::args": {
          "scsi-331402ec012ad6a72": { "base_dir": "/dev/disk/by-id/" },
          "scsi-331402ec012ad6a73": { "base_dir": "/dev/disk/by-id/" }
          },
          "tripleo::profile::base::swift::ringbuilder::raw_disks": [
          ":%PORT%/scsi-331402ec012ad6a72",
          ":%PORT%/scsi-331402ec012ad6a73" ]
          }
Change-Id: I0afa3283ed8c45f1ee0f44eb9bf9e4050d747a6b
This commit is contained in:
David Hill 2021-03-20 09:41:53 -04:00
parent b0c107825a
commit 57add501a4
3 changed files with 51 additions and 21 deletions

View File

@ -1,4 +1,4 @@
heat_template_version: rocky
heat_template_version: wallaby
description: >
OpenStack Swift Ringbuilder
@ -54,6 +54,10 @@ parameters:
default: true
description: 'Use a local directory for Swift storage services when building rings'
type: boolean
SwiftUseNodeDataLookup:
default: false
description: Use NodeDataLookup for disk devices in order to use persistent naming
type: boolean
SwiftRingGetTempurl:
default: ''
description: A temporary Swift URL to download rings from.
@ -85,24 +89,27 @@ outputs:
value:
service_name: swift_ringbuilder
config_settings:
tripleo::profile::base::swift::ringbuilder::skip_consistency_check: true
tripleo::profile::base::swift::ringbuilder::swift_ring_get_tempurl: {get_param: SwiftRingGetTempurl}
tripleo::profile::base::swift::ringbuilder::swift_ring_put_tempurl: {get_param: SwiftRingPutTempurl}
tripleo::profile::base::swift::ringbuilder::build_ring: {get_param: SwiftRingBuild}
tripleo::profile::base::swift::ringbuilder::replicas: {get_param: SwiftReplicas}
tripleo::profile::base::swift::ringbuilder::part_power: {get_param: SwiftPartPower}
tripleo::profile::base::swift::ringbuilder::min_part_hours: {get_param: SwiftMinPartHours}
tripleo::profile::base::swift::ringbuilder::raw_disk_prefix: 'r1z1-'
tripleo::profile::base::swift::ringbuilder::raw_disks:
yaql:
expression: $.data.raw_disk_lists.flatten()
data:
raw_disk_lists:
- {if: [swift_use_local_dir, [':%PORT%/d1'], []]}
- repeat:
template: ':%PORT%/DEVICE'
for_each:
DEVICE: {get_param: SwiftRawDisks}
map_merge:
- tripleo::profile::base::swift::ringbuilder::skip_consistency_check: true
tripleo::profile::base::swift::ringbuilder::swift_ring_get_tempurl: {get_param: SwiftRingGetTempurl}
tripleo::profile::base::swift::ringbuilder::swift_ring_put_tempurl: {get_param: SwiftRingPutTempurl}
tripleo::profile::base::swift::ringbuilder::build_ring: {get_param: SwiftRingBuild}
tripleo::profile::base::swift::ringbuilder::replicas: {get_param: SwiftReplicas}
tripleo::profile::base::swift::ringbuilder::part_power: {get_param: SwiftPartPower}
tripleo::profile::base::swift::ringbuilder::min_part_hours: {get_param: SwiftMinPartHours}
tripleo::profile::base::swift::ringbuilder::raw_disk_prefix: 'r1z1-'
- if:
- {get_param: SwiftUseNodeDataLookup}
- {}
- tripleo::profile::base::swift::ringbuilder::raw_disks:
list_concat:
- if:
- swift_use_local_dir
- - ':%PORT%/d1'
- repeat:
template: ':%PORT%/DEVICE'
for_each:
DEVICE: {get_param: SwiftRawDisks}
service_config_settings: {}
# BEGIN DOCKER SETTINGS
puppet_config:

View File

@ -62,6 +62,10 @@ parameters:
default: false
description: Value of mount_check in Swift account/container/object -server.conf
type: boolean
SwiftUseNodeDataLookup:
default: false
description: Use NodeDataLookup for disk devices in order to use persistent naming
type: boolean
SwiftAccountWorkers:
default: 0
description: Number of workers for Swift account service.
@ -118,6 +122,7 @@ conditions:
account_workers_zero: {equals : [{get_param: SwiftAccountWorkers}, '0']}
container_workers_zero: {equals : [{get_param: SwiftContainerWorkers}, '0']}
object_workers_zero: {equals : [{get_param: SwiftObjectWorkers}, '0']}
use_node_data_lookup: {equals : [{get_param: SwiftUseNodeDataLookup}, true]}
resources:
@ -166,8 +171,12 @@ outputs:
- healthcheck
- recon
- account-server
swift::storage::disks::args: {get_param: SwiftRawDisks}
swift::storage::all::storage_local_net_ip:
-
if:
- use_node_data_lookup
- {}
- swift::storage::disks::args: {get_param: SwiftRawDisks}
- swift::storage::all::storage_local_net_ip:
str_replace:
template:
"%{hiera('$NETWORK')}"
@ -612,6 +621,9 @@ outputs:
- name: Set swift_use_local_disks fact
set_fact:
swift_use_local_disks: {get_param: SwiftUseLocalDir}
- name: Set use_node_data_lookup fact
set_fact:
use_node_data_lookup: {get_param: SwiftUseNodeDataLookup}
- name: Create Swift d1 directory if needed
file:
path: "/srv/node/d1"
@ -620,6 +632,15 @@ outputs:
- name: Set fact for SwiftRawDisks
set_fact:
swift_raw_disks: {get_param: SwiftRawDisks}
when: not use_node_data_lookup|bool
- name: Get hiera swift::storage::disks::args
shell: hiera -c /etc/puppet/hiera.yaml swift::storage::disks::args | sed =e 's/=>/:/g'
register: hiera_output
when: use_node_data_lookup|bool
- name: Set fact for swift_raw_disks
set_fact:
swift_raw_disks: "{{ hiera_output.stdout | from_json }}"
when: use_node_data_lookup|bool
- name: Format SwiftRawDisks
filesystem:
fstype: xfs

View File

@ -55,6 +55,7 @@ resources:
cnt = ast.literal_eval(input)
print(json.dumps(cnt.get('${node_id}', {})))
" > /etc/puppet/hieradata/${node_id}.json
echo "- ${node_id}" >> /etc/puppet/hiera.yaml
# handle upper case node id LP#1816652
echo $node_lookup | $(get_python) -c "
import ast
@ -67,6 +68,7 @@ resources:
cnt = ast.literal_eval(input)
print(json.dumps(cnt.get('${node_id_upper}', {})))
" > /etc/puppet/hieradata/${node_id_upper}.json
echo "- ${node_id_upper}" >> /etc/puppet/hiera.yaml
NodeSpecificDeployment:
type: OS::Heat::SoftwareDeployment