From 189637e518791f20bafeb3ee632d9c2a0ade0e17 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Mon, 26 Mar 2018 12:08:53 +0100 Subject: [PATCH] Add admin.json to configure web console --- cmd/runmqdevserver/main.go | 12 +++ cmd/runmqdevserver/mqsc.go | 18 +---- cmd/runmqdevserver/template.go | 62 +++++++++++++++ incubating/mqadvanced-server-dev/Dockerfile | 2 + .../mqadvanced-server-dev/admin.json.tpl | 78 +++++++++++++++++++ 5 files changed, 155 insertions(+), 17 deletions(-) create mode 100644 cmd/runmqdevserver/template.go create mode 100644 incubating/mqadvanced-server-dev/admin.json.tpl diff --git a/cmd/runmqdevserver/main.go b/cmd/runmqdevserver/main.go index 61b03d1..8546bc8 100644 --- a/cmd/runmqdevserver/main.go +++ b/cmd/runmqdevserver/main.go @@ -83,6 +83,11 @@ func configureLogger() error { return nil } +func configureWeb(qmName string) error { + out := "/etc/mqm/web/installations/Installation1/angular.persistence/admin.json" + return processTemplateFile("/etc/mqm/admin.json.tpl", out, map[string]string{"QueueManagerName": qmName}) +} + func logTerminationf(format string, args ...interface{}) { logTermination(fmt.Sprintf(format, args)) } @@ -132,6 +137,7 @@ func doMain() error { name, err := name.GetQueueManagerName() if err != nil { logTerminationf("Error getting queue manager name: %v", err) + return err } ks, set := os.LookupEnv("MQ_TLS_KEYSTORE") if set { @@ -142,6 +148,12 @@ func doMain() error { } } + err = configureWeb(name) + if err != nil { + logTermination("Error configuring admin.json") + return err + } + return nil } diff --git a/cmd/runmqdevserver/mqsc.go b/cmd/runmqdevserver/mqsc.go index e3ba0ba..77e3dfa 100644 --- a/cmd/runmqdevserver/mqsc.go +++ b/cmd/runmqdevserver/mqsc.go @@ -16,7 +16,6 @@ limitations under the License. package main import ( - "html/template" "os" ) @@ -31,25 +30,10 @@ func updateMQSC(appPasswordRequired bool) error { if os.Getenv("MQ_DEV") == "true" { const mqscTemplate string = mqsc + ".tpl" // Re-configure channel if app password not set - t, err := template.ParseFiles(mqscTemplate) + err := processTemplateFile(mqsc+".tpl", mqsc, map[string]string{"ChckClnt": checkClient}) if err != nil { - log.Error(err) return err } - f, err := os.OpenFile(mqsc, os.O_CREATE|os.O_WRONLY, 0660) - defer f.Close() - err = t.Execute(f, map[string]string{"ChckClnt": checkClient}) - if err != nil { - log.Error(err) - return err - } - // TODO: Lookup value for MQM user here? - err = os.Chown(mqsc, 999, 999) - if err != nil { - log.Error(err) - return err - } - // os.Remove(mqscTemplate) } else { os.Remove(mqsc) } diff --git a/cmd/runmqdevserver/template.go b/cmd/runmqdevserver/template.go new file mode 100644 index 0000000..a684c29 --- /dev/null +++ b/cmd/runmqdevserver/template.go @@ -0,0 +1,62 @@ +/* +© Copyright IBM Corporation 2018 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "os" + "path" + "text/template" +) + +// processTemplateFile takes a Go templateFile, and processes it with the +// supplied data, writing to destFile +func processTemplateFile(templateFile, destFile string, data interface{}) error { + // Re-configure channel if app password not set + t, err := template.ParseFiles(templateFile) + if err != nil { + log.Error(err) + return err + } + dir := path.Dir(destFile) + _, err = os.Stat(dir) + if err != nil { + if os.IsNotExist(err) { + os.MkdirAll(dir, 0660) + // TODO: Lookup value for MQM user here? + err = os.Chown(dir, 999, 999) + if err != nil { + log.Error(err) + return err + } + } else { + return err + } + } + f, err := os.OpenFile(destFile, os.O_CREATE|os.O_WRONLY, 0660) + defer f.Close() + err = t.Execute(f, data) + if err != nil { + log.Error(err) + return err + } + // TODO: Lookup value for MQM user here? + err = os.Chown(destFile, 999, 999) + if err != nil { + log.Error(err) + return err + } + return nil +} diff --git a/incubating/mqadvanced-server-dev/Dockerfile b/incubating/mqadvanced-server-dev/Dockerfile index ab660e7..2a05799 100644 --- a/incubating/mqadvanced-server-dev/Dockerfile +++ b/incubating/mqadvanced-server-dev/Dockerfile @@ -51,6 +51,8 @@ COPY --from=builder /go/src/github.com/ibm-messaging/mq-container/runmqserver /u COPY --from=builder /go/src/github.com/ibm-messaging/mq-container/runmqdevserver /usr/local/bin/ # Copy template MQSC for default developer configuration COPY incubating/mqadvanced-server-dev/10-dev.mqsc.tpl /etc/mqm/ +# Copy template JSON for default web console configuration +COPY incubating/mqadvanced-server-dev/admin.json.tpl /etc/mqm/ # Copy web XML files for default developer configuration COPY incubating/mqadvanced-server-dev/web /etc/mqm/web RUN chmod +x /usr/local/bin/runmq* diff --git a/incubating/mqadvanced-server-dev/admin.json.tpl b/incubating/mqadvanced-server-dev/admin.json.tpl new file mode 100644 index 0000000..72fcb17 --- /dev/null +++ b/incubating/mqadvanced-server-dev/admin.json.tpl @@ -0,0 +1,78 @@ +{ + "version": 0.1, + "tabs": [ + { + "title": "IBM MQ Container", + "numColumns": 2, + "model": { + "title": "", + "rows": [ + { + "columns": [ + { + "widgets": [ + { + "type": "channel", + "config": { + "selectedQM": "{{ .QueueManagerName }}", + "showSysObjs": false, + "sizex": 1, + "sizey": 1, + "subType": "all" + }, + "title": "Channels on {{ .QueueManagerName }}", + "titleTemplateUrl": "adf/templates/widget-title.html", + "gridsterrow": 0, + "gridstercol": 1 + }, + { + "type": "topic", + "config": { + "selectedQM": "{{ .QueueManagerName }}", + "showSysObjs": false, + "sizex": 1, + "sizey": 1 + }, + "title": "Topics on {{ .QueueManagerName }}", + "titleTemplateUrl": "adf/templates/widget-title.html", + "gridsterrow": 1, + "gridstercol": 1 + }, + { + "type": "queue", + "config": { + "selectedQM": "{{ .QueueManagerName }}", + "showSysObjs": false, + "sizex": 1, + "sizey": 1, + "subType": "all" + }, + "title": "Queues on {{ .QueueManagerName }}", + "titleTemplateUrl": "adf/templates/widget-title.html", + "gridsterrow": 1, + "gridstercol": 0 + }, + { + "type": "queuemanager", + "gridstercol": 0, + "gridsterrow": 0, + "config": { + "type": "local", + "sizex": 1, + "sizey": 1, + "customTitle": "Queue Manager" + }, + "title": "Queue Manager", + "titleTemplateUrl": "adf/templates/widget-title.html" + } + ] + } + ] + } + ], + "titleTemplateUrl": "adf/templates/dashboard-title.html" + }, + "isMobile": false + } + ] +} \ No newline at end of file