Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setting the correct type of redmine config #83

Merged
merged 8 commits into from
Oct 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 13 additions & 0 deletions dogu.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,19 @@
"Type": "FLOAT_PERCENTAGE_HUNDRED"
}
},
{
"Name": "redmine_type",
"Description": "If both, Redmine and EasyRedmine are installed, this sets which instance should be configured",
"Optional": true,
"Default": "EASY_REDMINE",
"Validation": {
"Type": "ONE_OF",
"Values": [
"REDMINE",
"EASY_REDMINE"
]
}
},
{
"Name": "logging/root",
"Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG or TRACE. Default is INFO",
Expand Down
104 changes: 69 additions & 35 deletions resources/var/tmp/scm/init.script.d/080-redmine-configuration.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -10,48 +10,82 @@ def getValueFromEtcd(String key){
return json.node.value
}

def getPreferredRedmine() {
try {
String preferredRedmine = getValueFromEtcd("/config/scm/redmine_type")
return preferredRedmine
} catch (FileNotFoundException ex) {
return "EASY_REDMINE"
}
}

def findClass(clazzAsString) {
return Class.forName(clazzAsString, true, Thread.currentThread().getContextClassLoader())
}

def isDoguInstalled(name){
String ip = new File("/etc/ces/node_master").getText("UTF-8").trim();
URL url = new URL("http://${ip}:4001/v2/keys/dogu/${name}/current");
return url.openConnection().getResponseCode() == 200;
String ip = new File("/etc/ces/node_master").getText("UTF-8").trim();
URL url = new URL("http://${ip}:4001/v2/keys/dogu/${name}/current");
return url.openConnection().getResponseCode() == 200;
}

def configureEasyRedmine(config, fqdn, formattingClass) {
def formatting

try {
formatting = Enum.valueOf(formattingClass, "HTML")
} catch (IllegalArgumentException ex) {
println "Could not resolve HTML formatting. Set MARKDOWN instead."
formatting = Enum.valueOf(formattingClass, "MARKDOWN")
}

config.setTextFormatting(formatting)
config.setUrl("https://${fqdn}/easyredmine")
}

def configureRedmine(config, fqdn, formattingClass) {
def formatting = Enum.valueOf(formattingClass, "MARKDOWN")
config.setTextFormatting(formatting)
config.setUrl("https://${fqdn}/redmine")
zT-1337 marked this conversation as resolved.
Show resolved Hide resolved
}

try {
def storeClass = findClass("sonia.scm.redmine.config.RedmineConfigStore")
def store = injector.getInstance(storeClass);

String fqdn = getValueFromEtcd("config/_global/fqdn")

def config = store.getConfiguration()
if (config.getUrl() == null) {
// do not enabled commenting and state changes,
// because we need a technical account on redmine before
config.setUpdateIssues(false)
config.setAutoClose(false)
}
def formattingClass = findClass("sonia.scm.redmine.config.TextFormatting")

if (isDoguInstalled("easyredmine")) {
def formatting
try {
formatting = Enum.valueOf(formattingClass, "HTML")
} catch (IllegalArgumentException ex) {
println "Could not resolve HTML formatting. Set MARKDOWN instead."
formatting = Enum.valueOf(formattingClass, "MARKDOWN")
}
config.setTextFormatting(formatting)
config.setUrl("https://${fqdn}/easyredmine")
} else {
def formatting = Enum.valueOf(formattingClass, "MARKDOWN")
config.setTextFormatting(formatting)
config.setUrl("https://${fqdn}/redmine")
}

store.storeConfiguration(config)
def storeClass = findClass("sonia.scm.redmine.config.RedmineConfigStore")
def store = injector.getInstance(storeClass);

String fqdn = getValueFromEtcd("config/_global/fqdn")

def config = store.getConfiguration()
if (config.getUrl() == null) {
// do not enabled commenting and state changes,
// because we need a technical account on redmine before
config.setUpdateIssues(false)
config.setAutoClose(false)
}

def formattingClass = findClass("sonia.scm.redmine.config.TextFormatting")

String preferredRedmine = getPreferredRedmine()
isEasyRedmineInstalled = isDoguInstalled("easyredmine")
isRedmineInstalled = isDoguInstalled("redmine")

if (isEasyRedmineInstalled && isRedmineInstalled && preferredRedmine.equals("EASY_REDMINE")) {
println "both dogus installed and easy redmine is preferred"
configureEasyRedmine(config, fqdn, formattingClass)
} else if (isEasyRedmineInstalled && isRedmineInstalled && preferredRedmine.equals("REDMINE")) {
println "both dogus installed and redmine is preferred"
configureRedmine(config, fqdn, formattingClass)
} else if (isEasyRedmineInstalled) {
println "only easy redmine is installed"
configureEasyRedmine(config, fqdn, formattingClass)
} else if (isRedmineInstalled) {
println "only redmine is installed"
configureRedmine(config, fqdn, formattingClass)
} else {
println "no redmine dogu is installed"
}

store.storeConfiguration(config)
} catch( ClassNotFoundException e ) {
println "redmine plugin seems not to be installed"
println "redmine plugin seems not to be installed"
}