From 58b634e39b041d32bc4267c6b8d172b1a848edea Mon Sep 17 00:00:00 2001 From: Terry Brady Date: Fri, 23 Feb 2024 17:30:06 -0800 Subject: [PATCH 1/2] configure endpoints by pattern --- src-colladmin/actions/tag_action.rb | 32 +++--- src-colladmin/config/database.ssm.yml | 143 ++++++++++++++++++-------- 2 files changed, 113 insertions(+), 62 deletions(-) diff --git a/src-colladmin/actions/tag_action.rb b/src-colladmin/actions/tag_action.rb index 754153cd..53bf24b7 100644 --- a/src-colladmin/actions/tag_action.rb +++ b/src-colladmin/actions/tag_action.rb @@ -57,28 +57,21 @@ def urls res = {} return res unless @state == 'running' - @config.fetch('endpoints', {}).fetch(@subservice, {}).each do |k, v| - if k == 'state' && @subservice == 'ui' - m = @name.match(/(ui0[0-9])x2-stg/) - if m - res[k.to_s] = "https://#{m[1]}-aws-stg.cdlib.org/state.json" + @config.fetch('server-configs', {}).each do |confname, sconf| + match = sconf.fetch('match', '.*') + next unless @name =~ Regexp.new(match) + sconf.fetch('endpoints', {}).fetch(@subservice, {}).each do |k, v| + if v =~ /^http/ + res[k] = v + elsif v =~ /^\// + # UI uses this + res[k] = "https://#{@name}.cdlib.org#{v}" else - m = @name.match(/(ui0[0-9])x2/) - res[k.to_s] = "https://#{m[1]}-aws.cdlib.org/state.json" if m + # assume value starts with port number, no http expected + res[k] = "http://#{@name}.cdlib.org:#{v}" end - elsif k == 'audit_rep' && @subservice == 'ui' - m = @name.match(/(ui0[0-9])x2-stg/) - if m - res[k.to_s] = "https://#{m[1]}-aws-stg.cdlib.org/state-audit-replic.json" - else - m = @name.match(/(ui0[0-9])x2/) - res[k.to_s] = "https://#{m[1]}-aws.cdlib.org/state-audit-replic.json" if m - end - elsif v =~ /^http/ - res[k] = v - else - res[k] = "http://#{@name}.cdlib.org:#{v}" end + break end res end @@ -93,6 +86,7 @@ def format_urls end def notes(action) + return '' if urls.empty? note = @config.fetch('notes', {}).fetch(@subservice, '').split("\n").join(',') if @subservice == 'access' srvr = action.get_ssm('store/zoo/AccessLarge') diff --git a/src-colladmin/config/database.ssm.yml b/src-colladmin/config/database.ssm.yml index 7f6d3ec1..daeda4d2 100644 --- a/src-colladmin/config/database.ssm.yml +++ b/src-colladmin/config/database.ssm.yml @@ -62,49 +62,106 @@ default: ldap: | ALB exists. LDAP admin requires credentials to access. Navigate to "Merritt User Accounts" to query LDAP. # Provide state endpoints for specific subservices - not applicable for docker - endpoints: - ingest: - state: "{!SSM: ingest/port}/state?t=json" - build-info: "{!SSM: ingest/port}/static/build.content.txt" - ALB: "{!SSM: colladmin/ingest-service}state?t=json" - store: - jsonstatus: "{!SSM: store/port}/jsonstatus" - state: "{!SSM: store/port}/state?t=json" - ping: "{!SSM: store/port}/ping?t=json" - hostname: "{!SSM: store/port}/hostname" - build-info: "{!SSM: store/port}/static/build.content.txt" - ALB: "{!SSM: colladmin/storage-service}/state?t=json" - access: - jsonstatus: "{!SSM: store/port}/jsonstatus" - state: "{!SSM: store/port}/state?t=json" - ping: "{!SSM: store/port}/ping?t=json" - hostname: "{!SSM: store/port}/hostname" - build-info: "{!SSM: store/port}/static/build.content.txt" - ALB: "{!SSM: colladmin/access-service}/state?t=json" - inventory: - state: "{!SSM: inventory/port}/mrtinv/state?t=json" - build-info: "{!SSM: inventory/port}/mrtinv/static/build.content.txt" - start: "{!SSM: inventory/port}/mrtinv/service/start?t=json" - stop: "{!SSM: inventory/port}/mrtinv/service/stop?t=json" - ALB: "{!SSM: colladmin/inventory-service}/state?t=json" - audit: - jsonstatus: "{!SSM: audit/port}/mrtaudit/jsonstatus" - state: "{!SSM: audit/port}/mrtaudit/state?t=json" - build-info: "{!SSM: audit/port}/mrtaudit/static/build.content.txt" - start: "{!SSM: audit/port}/mrtaudit/service/start?t=json" - stop: "{!SSM: audit/port}/mrtaudit/service/stop?t=json" - replic: - jsonstatus: "{!SSM: replic/port}/mrtreplic/jsonstatus" - state: "{!SSM: replic/port}/mrtreplic/state?t=json" - build-info: "{!SSM: replic/port}/mrtreplic/static/build.content.txt" - start: "{!SSM: replic/port}/mrtreplic/service/start?t=json" - stop: "{!SSM: replic/port}/mrtreplic/service/stop?t=json" - ui: - state: "/state.json" - audit_rep: "/state-audit-replic.json" - +ALB: "{!ENV: MERRITT_PATH}/state.json" - ldap: - -ALB: "https://{!SSM: ldap/host}" + server-configs: + al2-stg: + match: '.*x2-stg$' + endpoints: + ui: + state: "/state.json" + audit_rep: "/state-audit-replic.json" + +ALB: "{!ENV: MERRITT_PATH}/state.json" + ldap: + -ALB: "https://{!SSM: ldap/host}" + al2023: + match: '.*stg[0-9][0-9]$' + endpoints: + ingest: + state: "{!SSM: ingest/port}/state?t=json" + build-info: "{!SSM: ingest/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/ingest-service}state?t=json" + store: + jsonstatus: "{!SSM: store/port}/jsonstatus" + state: "{!SSM: store/port}/state?t=json" + ping: "{!SSM: store/port}/ping?t=json" + hostname: "{!SSM: store/port}/hostname" + build-info: "{!SSM: store/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/storage-service}/state?t=json" + access: + jsonstatus: "{!SSM: store/port}/jsonstatus" + state: "{!SSM: store/port}/state?t=json" + ping: "{!SSM: store/port}/ping?t=json" + hostname: "{!SSM: store/port}/hostname" + build-info: "{!SSM: store/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/access-service}/state?t=json" + inventory: + state: "{!SSM: inventory/port}/state?t=json" + build-info: "{!SSM: inventory/port}/static/build.content.txt" + start: "{!SSM: inventory/port}/service/start?t=json" + stop: "{!SSM: inventory/port}/service/stop?t=json" + ALB: "{!SSM: colladmin/inventory-service}/state?t=json" + audit: + jsonstatus: "{!SSM: audit/port}/jsonstatus" + state: "{!SSM: audit/port}/state?t=json" + build-info: "{!SSM: audit/port}/static/build.content.txt" + start: "{!SSM: audit/port}/service/start?t=json" + stop: "{!SSM: audit/port}/service/stop?t=json" + replic: + jsonstatus: "{!SSM: replic/port}/jsonstatus" + state: "{!SSM: replic/port}/state?t=json" + build-info: "{!SSM: replic/port}/static/build.content.txt" + start: "{!SSM: replic/port}/service/start?t=json" + stop: "{!SSM: replic/port}/service/stop?t=json" + ui: + state: "/state.json" + audit_rep: "/state-audit-replic.json" + +ALB: "{!ENV: MERRITT_PATH}/state.json" + ldap: + -ALB: "https://{!SSM: ldap/host}" + default: + match: '.*' + endpoints: + ingest: + state: "{!SSM: ingest/port}/state?t=json" + build-info: "{!SSM: ingest/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/ingest-service}state?t=json" + store: + jsonstatus: "{!SSM: store/port}/jsonstatus" + state: "{!SSM: store/port}/state?t=json" + ping: "{!SSM: store/port}/ping?t=json" + hostname: "{!SSM: store/port}/hostname" + build-info: "{!SSM: store/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/storage-service}/state?t=json" + access: + jsonstatus: "{!SSM: store/port}/jsonstatus" + state: "{!SSM: store/port}/state?t=json" + ping: "{!SSM: store/port}/ping?t=json" + hostname: "{!SSM: store/port}/hostname" + build-info: "{!SSM: store/port}/static/build.content.txt" + ALB: "{!SSM: colladmin/access-service}/state?t=json" + inventory: + state: "{!SSM: inventory/port}/mrtinv/state?t=json" + build-info: "{!SSM: inventory/port}/mrtinv/static/build.content.txt" + start: "{!SSM: inventory/port}/mrtinv/service/start?t=json" + stop: "{!SSM: inventory/port}/mrtinv/service/stop?t=json" + ALB: "{!SSM: colladmin/inventory-service}/state?t=json" + audit: + jsonstatus: "{!SSM: audit/port}/mrtaudit/jsonstatus" + state: "{!SSM: audit/port}/mrtaudit/state?t=json" + build-info: "{!SSM: audit/port}/mrtaudit/static/build.content.txt" + start: "{!SSM: audit/port}/mrtaudit/service/start?t=json" + stop: "{!SSM: audit/port}/mrtaudit/service/stop?t=json" + replic: + jsonstatus: "{!SSM: replic/port}/mrtreplic/jsonstatus" + state: "{!SSM: replic/port}/mrtreplic/state?t=json" + build-info: "{!SSM: replic/port}/mrtreplic/static/build.content.txt" + start: "{!SSM: replic/port}/mrtreplic/service/start?t=json" + stop: "{!SSM: replic/port}/mrtreplic/service/stop?t=json" + ui: + state: "/state.json" + audit_rep: "/state-audit-replic.json" + +ALB: "{!ENV: MERRITT_PATH}/state.json" + ldap: + -ALB: "https://{!SSM: ldap/host}" replic-service: "{!SSM: colladmin/replic-service}" storage-service: "{!SSM: colladmin/storage-service}" access-service: "{!SSM: colladmin/access-service}" From 1140118bb9351033be085c061992ffe317df0045 Mon Sep 17 00:00:00 2001 From: Terry Brady Date: Mon, 26 Feb 2024 10:00:34 -0800 Subject: [PATCH 2/2] rubocop tidy --- src-colladmin/actions/tag_action.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src-colladmin/actions/tag_action.rb b/src-colladmin/actions/tag_action.rb index 53bf24b7..9bd67f58 100644 --- a/src-colladmin/actions/tag_action.rb +++ b/src-colladmin/actions/tag_action.rb @@ -57,13 +57,14 @@ def urls res = {} return res unless @state == 'running' - @config.fetch('server-configs', {}).each do |confname, sconf| + @config.fetch('server-configs', {}).each_value do |sconf| match = sconf.fetch('match', '.*') next unless @name =~ Regexp.new(match) + sconf.fetch('endpoints', {}).fetch(@subservice, {}).each do |k, v| if v =~ /^http/ res[k] = v - elsif v =~ /^\// + elsif v =~ %r{^/} # UI uses this res[k] = "https://#{@name}.cdlib.org#{v}" else @@ -87,6 +88,7 @@ def format_urls def notes(action) return '' if urls.empty? + note = @config.fetch('notes', {}).fetch(@subservice, '').split("\n").join(',') if @subservice == 'access' srvr = action.get_ssm('store/zoo/AccessLarge')