Skip to content

Commit 0ebabbc

Browse files
committed
Adding some initial snippets
1 parent 751c94e commit 0ebabbc

7 files changed

+363
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import java.lang.reflect.Method;
2+
import groovy.sql.Sql
3+
// Grab the dependencies
4+
@Grapes([
5+
@Grab('mysql:mysql-connector-java:5.1.6')
6+
])
7+
// Get the locations
8+
def grape = groovy.grape.Grape.getInstance()
9+
def r = grape.listDependencies(this.getClass().getClassLoader())
10+
def jarURIs = grape.resolve(r[0])
11+
// Add to systemClassLoader
12+
try {
13+
jarURIs.each {
14+
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
15+
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
16+
method.setAccessible(true);
17+
println "Adding jar: ${it}"
18+
method.invoke(classLoader, it.toURL());
19+
}
20+
} catch (Exception e) {
21+
throw new RuntimeException("Unexpected exception", e);
22+
}
23+
// Run your code
24+
def sql=Sql.newInstance("JDBC_URL", "USERNAME", "PASSWORD", "com.mysql.jdbc.Driver")
25+
sql.firstRow('SELECT * FROM INFORMATION_SCHEMA.COLUMNS LIMIT 10')
26+
27+
28+
29+
// Script isolation
30+
31+
scriptToRun = '''
32+
...insert the script from above here...
33+
'''
34+
GroovyClassLoader groovyCL = new GroovyClassLoader();
35+
Class groovyShellClazz = groovyCL.loadClass(GroovyShell.class.getName());
36+
Object groovyShellObj = groovyShellClazz.newInstance();
37+
java.lang.reflect.Method evaluateMethod = groovyShellClazz.getMethod("evaluate", String.class);
38+
evaluateMethod.invoke(groovyShellObj, scriptToRun);
39+
40+
41+
42+
// Classpath List
43+
44+
def printClassPath(classLoader) {
45+
println "$classLoader"
46+
urls = []
47+
try {
48+
urls = classLoader.getURLs()
49+
} catch (def e) {
50+
// ignore
51+
}
52+
urls.each {url->
53+
println "- ${url.toString()}"
54+
this.class.classLoader.addURL(url);
55+
}
56+
if (classLoader.parent) {
57+
printClassPath(classLoader.parent)
58+
}
59+
}
60+
printClassPath this.class.classLoader
61+
62+
63+
// Classpath List
64+
65+
def printClassPath(classLoader) {
66+
println "Hi $classLoader"
67+
urls = []
68+
try {
69+
urls = classLoader.getURLs()
70+
} catch (def e) {
71+
// ignore
72+
}
73+
urls.each {url->
74+
println "- ${url.toString()}"
75+
this.class.classLoader.addURL(url);
76+
}
77+
if (classLoader.parent) {
78+
println "Parent: ${classLoader.parent} (parent of $classLoader)"
79+
printClassPath(classLoader.parent)
80+
}
81+
}
82+
printClassPath this.class.classLoader
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import com.cloudbees.opscenter.server.model.*
2+
import com.cloudbees.opscenter.server.clusterops.steps.*
3+
import hudson.remoting.*
4+
5+
controllers = []
6+
pluginToFind='checks-api'
7+
scriptToRun = """
8+
import Jenkins
9+
Jenkins.instance.pluginManager.plugins.stream().sorted().findAll { it.getShortName() == "${pluginToFind}" }.each { print it.shortName }
10+
x=null
11+
"""
12+
13+
Jenkins.instance.getAllItems(ConnectedMaster.class).each {
14+
controllers.add(getHost(it.channel, it.class.simpleName, it.encodedName))
15+
}
16+
17+
def getHost(channel, type, name){
18+
def hostReturnStr
19+
if(channel){
20+
def stream = new ByteArrayOutputStream()
21+
def listener = new StreamBuildListener(stream)
22+
channel.call(new MasterGroovyClusterOpStep.Script(
23+
scriptToRun,
24+
listener,
25+
"host-script.groovy",
26+
[:]))
27+
hostReturnStr = stream.toString()
28+
29+
}
30+
return channel ? "${name} - ${hostReturnStr}" : "${name} - OFFLINE"
31+
}
32+
33+
controllers.each { if (it) { println it } }
34+
x=null
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import com.cloudbees.opscenter.server.model.*
2+
import com.cloudbees.opscenter.server.clusterops.steps.*
3+
import hudson.remoting.*
4+
import hudson.security.ACL
5+
import jenkins.model.Jenkins
6+
7+
controllerName = "r23322"
8+
controllers = []
9+
scriptToRun = '''
10+
import jenkins.model.Jenkins
11+
12+
// Start Jenkins in maintenance mode
13+
// Jenkins.instance.doQuietDown()
14+
15+
return Jenkins.instance.getRootUrl()
16+
'''
17+
18+
def getHost(channel, type, name){
19+
def host
20+
if(channel) {
21+
def stream = new ByteArrayOutputStream()
22+
def listener = new StreamBuildListener(stream)
23+
channel.call(new MasterGroovyClusterOpStep.Script(
24+
scriptToRun,
25+
listener,
26+
"host-script.groovy",
27+
[:])
28+
)
29+
host = stream.toString().minus("Result: ")
30+
} else {
31+
host = [type:type, name:name, offline:true]
32+
}
33+
return host
34+
}
35+
36+
ACL.impersonate(ACL.SYSTEM, new Runnable() {
37+
@Override
38+
public void run() {
39+
40+
Jenkins.instance.getAllItems(ConnectedMaster.class).each {
41+
if (it.encodedName == (controllerName)) {
42+
controllers.add(getHost(it.channel, it.class.simpleName, it.encodedName))
43+
}
44+
}
45+
}
46+
})
47+
println controllers
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import com.cloudbees.opscenter.server.model.*
2+
import com.cloudbees.opscenter.server.clusterops.steps.*
3+
import hudson.remoting.*
4+
5+
controllers = []
6+
scriptToRun = '''
7+
import jenkins.model.Jenkins
8+
9+
// Start Jenkins in maintenance mode
10+
Jenkins.instance.doQuietDown()
11+
12+
return Jenkins.instance.pluginManager.plugins.stream().sorted().collect(java.util.stream.Collectors.toList()).each { plugin -> println (plugin.getShortName()) }
13+
x=""
14+
'''
15+
16+
Jenkins.instance.getAllItems(ConnectedMaster.class).each {
17+
controllers.add(getHost(it.channel, it.class.simpleName, it.encodedName))
18+
}
19+
20+
def getHost(channel, type, name){
21+
def host
22+
if(channel){
23+
def stream = new ByteArrayOutputStream()
24+
def listener = new StreamBuildListener(stream)
25+
channel.call(new MasterGroovyClusterOpStep.Script(
26+
scriptToRun,
27+
listener,
28+
"host-script.groovy",
29+
[:]))
30+
host = stream.toString().minus("Result: ")
31+
32+
} else {
33+
34+
host = [type:type, name:name, offline:true]
35+
}
36+
return host
37+
}
38+
39+
println controllers

token-utils/create-fixed-token.groovy

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import hudson.model.User
2+
import jenkins.security.ApiTokenProperty
3+
// generate token (this would be pre-defined)
4+
def r = new Random()
5+
def result = (0..<32).collect { r.nextInt(16) }
6+
.collect { Integer.toString(it, 16).toLowerCase() }
7+
.join();
8+
String tok = "11" + result
9+
println tok
10+
// assign to user
11+
String userName = "bob"
12+
String tokenName = "test-token"
13+
User user = User.get(userName)
14+
user.addProperty(new ApiTokenProperty());
15+
user.getProperty(ApiTokenProperty.class).addFixedNewToken(tokenName, tok);
16+
// test (can be deleted - just for test purposes)
17+
String jenkinsUrl = "http://..."
18+
def sout = new StringBuilder(), serr = new StringBuilder()
19+
def proc = "curl -s -w '%{http_code}\n' -u ${userName}:${tok}
20+
${jenkinsUrl}/cjoc/api/json".execute()
21+
proc.consumeProcessOutput(sout, serr)
22+
proc.waitForOrKill(1000)
23+
println "out> $sout\nerr> $serr"

token-utils/create-fixed-token.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
tokensync() {
2+
user="admin"
3+
admintok="xxxxxxx" # must be `11` followed by 32 hex chars
4+
tok=11$(hexdump -n 16 -v -e '16/1 "%02X" "\n"' /dev/random)
5+
curl -u admin:$admintok -d newTokenName=synched -d newTokenPlainValue=$tok
6+
$CIURL/cjoc/user/$user/descriptorByName/jenkins.security.ApiTokenProperty/addFixedToken
7+
} # token
+131
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
@Grapes([
2+
@Grab('software.amazon.awssdk:secretsmanager:2.17.188'),
3+
@Grab('software.amazon.awssdk:sts:2.17.188')
4+
])
5+
import software.amazon.awssdk.regions.Region
6+
import software.amazon.awssdk.services.secretsmanager.*
7+
import software.amazon.awssdk.services.secretsmanager.model.*
8+
import java.util.List
9+
10+
11+
def listSecrets(SecretsManagerClient secretsClient) {
12+
try {
13+
ListSecretsResponse secretsResponse = secretsClient.listSecrets()
14+
List<SecretListEntry> secrets = secretsResponse.secretList()
15+
16+
for (SecretListEntry secret: secrets) {
17+
System.out.println("The secret name is "+secret.name())
18+
System.out.println("The secret description is "+secret.description())
19+
}
20+
21+
} catch (SecretsManagerException e) {
22+
println e.awsErrorDetails().errorMessage()
23+
throw e
24+
}
25+
}
26+
27+
def listSecretVersions(SecretsManagerClient secretsClient, String secretName) {
28+
try {
29+
ListSecretVersionIdsRequest listSecretVersionIdsRequest = ListSecretVersionIdsRequest.builder()
30+
.secretId(secretName)
31+
.build()
32+
33+
ListSecretVersionIdsResponse listSecretVersionIdsResponse = secretsClient.listSecretVersionIds(listSecretVersionIdsRequest)
34+
for (SecretVersionsListEntry version: listSecretVersionIdsResponse.versions()) {
35+
println "The version response is " + version
36+
print " The version value is: "
37+
getValueByVersionId(secretsClient, secretName, version.versionId)
38+
}
39+
} catch (SecretsManagerException e) {
40+
println e.awsErrorDetails().errorMessage()
41+
throw e
42+
}
43+
}
44+
45+
def getValue(SecretsManagerClient secretsClient, String secretName) {
46+
try {
47+
GetSecretValueRequest valueRequest = GetSecretValueRequest.builder()
48+
.secretId(secretName)
49+
.build()
50+
51+
GetSecretValueResponse valueResponse = secretsClient.getSecretValue(valueRequest)
52+
String secret = valueResponse.secretString()
53+
println secret
54+
} catch (SecretsManagerException e) {
55+
println e.awsErrorDetails().errorMessage()
56+
throw e
57+
}
58+
}
59+
60+
def getValueByStage(SecretsManagerClient secretsClient, String secretName, String versionStage) {
61+
try {
62+
GetSecretValueRequest valueRequest = GetSecretValueRequest.builder()
63+
.secretId(secretName)
64+
.versionStage(versionStage)
65+
.build()
66+
67+
GetSecretValueResponse valueResponse = secretsClient.getSecretValue(valueRequest)
68+
String secret = valueResponse.secretString()
69+
println secret
70+
} catch (SecretsManagerException e) {
71+
println e.awsErrorDetails().errorMessage()
72+
throw e
73+
}
74+
}
75+
76+
def getValueByVersionId(SecretsManagerClient secretsClient, String secretName, String versionId) {
77+
try {
78+
GetSecretValueRequest valueRequest = GetSecretValueRequest.builder()
79+
.secretId(secretName)
80+
.versionId(versionId)
81+
.build()
82+
83+
GetSecretValueResponse valueResponse = secretsClient.getSecretValue(valueRequest)
84+
String secret = valueResponse.secretString()
85+
println secret
86+
} catch (SecretsManagerException e) {
87+
println e.awsErrorDetails().errorMessage()
88+
throw e
89+
}
90+
}
91+
92+
// -------- START
93+
String regionStr = 'us-east-1'
94+
String secretStr = 'sboardwell/test/jenkins/token'
95+
Region region = Region.of(regionStr)
96+
SecretsManagerClient secretsClient = SecretsManagerClient.builder()
97+
.region(region)
98+
.build()
99+
try {
100+
println "------------------------------"
101+
println "Listing ALL secrets"
102+
println "------------------------------"
103+
listSecrets(secretsClient)
104+
105+
println "------------------------------"
106+
println "Listing single secret by versionId"
107+
println "------------------------------"
108+
listSecretVersions(secretsClient, secretStr)
109+
110+
println "------------------------------"
111+
println "Listing single secret"
112+
println "------------------------------"
113+
getValue(secretsClient, secretStr)
114+
115+
println "------------------------------"
116+
println "Listing single secret by stage - AWSCURRENT"
117+
println "------------------------------"
118+
getValueByStage(secretsClient, secretStr, 'AWSCURRENT')
119+
120+
println "------------------------------"
121+
println "Listing single secret by stage - AWSPREVIOUS"
122+
println "------------------------------"
123+
getValueByStage(secretsClient, secretStr, 'AWSPREVIOUS')
124+
125+
} catch (SecretsManagerException e) {
126+
println e.awsErrorDetails().errorMessage()
127+
throw e
128+
} finally {
129+
secretsClient.close()
130+
}
131+

0 commit comments

Comments
 (0)