use of io.fabric8.openshift.api.model.User in project fabric8 by jboss-fuse.
the class ExtendedCreateChildContainerTest method testContainerWithPasswordChange.
@Test
public // [FABRIC-482] Fabric doesn't allow remote host user/password to be changed once the container is created.
void testContainerWithPasswordChange() throws Exception {
System.out.println(CommandSupport.executeCommand("fabric:create --force --clean -n --wait-for-provisioning"));
// System.out.println(executeCommand("shell:info"));
// System.out.println(executeCommand("fabric:info"));
// System.out.println(executeCommand("fabric:profile-list"));
BundleContext moduleContext = ServiceLocator.getSystemContext();
ServiceProxy<FabricService> fabricProxy = ServiceProxy.createServiceProxy(moduleContext, FabricService.class);
try {
FabricService fabricService = fabricProxy.getService();
Set<Container> containers = ContainerBuilder.child(1).withName("basic_cnt_d").assertProvisioningResult().build(fabricService);
try {
Container cntD = containers.iterator().next();
System.out.println(CommandSupport.executeCommands("jaas:manage --realm karaf --module io.fabric8.jaas.ZookeeperLoginModule", "jaas:userdel admin", "jaas:useradd admin newpassword", "jaas:roleadd admin admin", "jaas:update"));
System.out.println(CommandSupport.executeCommand("fabric:container-stop --user admin --password newpassword " + cntD.getId()));
ProvisionSupport.containersAlive(containers, false, ProvisionSupport.PROVISION_TIMEOUT);
containers.remove(cntD);
} finally {
ContainerBuilder.stop(fabricService, containers);
}
} finally {
fabricProxy.close();
}
}
use of io.fabric8.openshift.api.model.User in project fabric8 by jboss-fuse.
the class JsonRuleBaseReader method parseJson.
/**
* Will try to parse the {@link InputStream} which is expected to be in the following
* JSON format:
* <pre>
* { "rulebase" : [
* { "rule": "/foo/{path}", "to": "https://foo.com/cheese/{path}"},
* { "rule": "/customers/{id}/address/{addressId}", "to": "http://another.com/addresses/{addressId}/customer/{id}"}
* ]
* }
* </pre>
*
* <strong>Note that the passed-in {@link InputStream} will be closed by this method</strong>. This
* is a little unusual as normally the closing is the responsibility of the party that created the
* InputStream, but in this case we decided handling this is more user friendly.
*
* @param in the {@link InputStream} stream to read.
* @return {@code Map} where the key maps to the 'rule' in the JSON, and the value maps to 'to'.
*/
public static Map<String, HttpProxyRule> parseJson(InputStream in) {
chechNotNull(in);
HashMap<String, HttpProxyRule> map = new HashMap<String, HttpProxyRule>();
try {
JsonNode config = OM.readTree(in);
JsonNode globalCookiePath = config.get("cookiePath");
JsonNode globalDomain = config.get("cookieDomain");
for (JsonNode entry : getRuleBase(config)) {
String rule = entry.get("rule").asText();
map.put(rule, new HttpProxyRule(rule).to(entry.get("to").asText()).setCookiePath(getGlobal(entry, globalCookiePath, "cookiePath")).setCookieDomain(getGlobal(entry, globalDomain, "cookieDomain")));
}
return map;
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
} finally {
safeClose(in);
}
}
use of io.fabric8.openshift.api.model.User in project fabric8 by jboss-fuse.
the class ArchetypeGenerateAction method doExecute.
@Override
protected Object doExecute() throws Exception {
// if no directory then use workspace
if (directory == null) {
// must have a workspace location configured
Preferences preferences = Preferences.userNodeForPackage(getClass());
String location = preferences.get(ArchetypeWorkspace.PREFERENCE_WORKSPACE, null);
if (location == null) {
System.out.println("No workspace location has been set.");
System.out.println("Use the archetype-workspace command to set a workspace first.");
System.out.println("");
return null;
} else {
System.out.println("Using current workspace: " + location);
directory = location;
}
} else {
System.out.println("Using directory as workspace: " + directory);
}
File target = new File(directory);
// make sure the directory exists, auto-creating if missing
if (!target.exists()) {
target.mkdirs();
}
if (!target.exists() || !target.isDirectory()) {
System.err.println("Workspace does not exists or is not a directory: " + directory);
return null;
}
Archetype archetype = null;
// try artifact first
if (!isNullOrBlank(archetypeOrFilter)) {
archetype = archetypeService.getArchetypeByArtifact(archetypeOrFilter);
if (archetype == null) {
// then by coordinate
archetype = archetypeService.getArchetype(archetypeOrFilter);
}
}
// no archetype yet so present a list where the user can select
while (archetype == null) {
List<Archetype> archetypes = archetypeService.listArchetypes(archetypeOrFilter, true);
System.out.println("Choose archetype:");
Iterator<Archetype> it = archetypes.iterator();
int i = 0;
while (it.hasNext()) {
Archetype select = it.next();
System.out.println(String.format("%4d: -> %-50s %s", ++i, select.artifactId, select.description));
}
boolean choosing = true;
while (choosing) {
// default select last
String choose = ShellUtils.readLine(session, String.format("Choose a number or apply filter (case insensitive): %d: ", i), false);
if (Strings.isNullOrBlank(choose)) {
// user pressed enter so we select the last
choose = "" + i;
}
try {
int no = Integer.valueOf(choose);
// is the number within range
if (no >= 1 && no <= archetypes.size()) {
archetype = archetypes.get(no - 1);
break;
} else {
System.out.println("Number " + no + " out of range. Please try again!");
continue;
}
} catch (NumberFormatException e) {
// no its a filter, so we use this as filter, and show the list again
archetypeOrFilter = choose;
choosing = false;
archetype = null;
}
}
}
// okay we have selected an archetype now
File archetypeFile = fetchArchetype(archetype);
if (archetypeFile == null || !archetypeFile.exists()) {
System.err.println("No archetype found for \"" + archetypeOrFilter + "\" coordinates");
return null;
}
System.out.println("----------------------------------------------------------------------------");
System.out.println("Using archetype: " + archetype.artifactId);
String defaultGroupId = "io.fabric8";
String defaultArtifactId = archetype.artifactId + "-example";
String defaultVersion = "1.0-SNAPSHOT";
String defaultName = archetype.name;
String defaultDescription = isNotBlank(archetype.description) ? archetype.description : "";
System.out.println("----- Configure archetype -----");
String groupId = ShellUtils.readLine(session, String.format("Define value for property 'groupId' (%s): ", defaultGroupId), false);
String artifactId = ShellUtils.readLine(session, String.format("Define value for property 'artifactId' (%s): ", defaultArtifactId), false);
String version = ShellUtils.readLine(session, String.format("Define value for property 'version' (%s): ", defaultVersion), false);
groupId = isNullOrBlank(groupId) ? defaultGroupId : groupId;
artifactId = isNullOrBlank(artifactId) ? defaultArtifactId : artifactId;
version = isNullOrBlank(version) ? defaultVersion : version;
String defaultPackageName = (groupId + "." + artifactId).replaceAll("-", ".");
String packageName = ShellUtils.readLine(session, String.format("Define value for property 'package' (%s): ", defaultPackageName), false);
// use artifact id as default directory name (maven does this also)
String defaultDirectoryName = isNullOrBlank(artifactId) ? defaultArtifactId : artifactId;
directory = ShellUtils.readLine(session, String.format("Define value for property 'directoryName' (%s): ", defaultDirectoryName), false);
packageName = isNullOrBlank(packageName) ? defaultPackageName : packageName;
directory = isNullOrBlank(directory) ? artifactId : directory;
String name = ShellUtils.readLine(session, String.format("Define value for property 'name' (%s): ", defaultName), false);
String description = ShellUtils.readLine(session, String.format("Define value for property 'description' (%s): ", defaultDescription), false);
// use null to indicate we want out of the box description
name = isNullOrBlank(name) ? null : name;
description = isNullOrBlank(description) ? null : description;
File childDir = new File(target, directory);
ArchetypeHelper helper = new ArchetypeHelper(archetypeFile, childDir, groupId, artifactId, version, name, description);
helper.setPackageName(packageName);
Map<String, String> properties = helper.parseProperties();
// if we have fabric8.profile as a property then lets configured it now, as its mandatory
// and use artifactId as its default suggested value
String profile = null;
if (properties.containsKey("fabric8-profile")) {
profile = properties.remove("fabric8-profile");
String defaultProfile = isNullOrBlank(profile) ? artifactId : profile;
String p = ShellUtils.readLine(session, String.format("Define value for property 'fabric8.profile' (%s): ", defaultProfile), false);
profile = isNullOrBlank(p) ? defaultProfile : p;
}
// show additional properties and ask to use them as-is
boolean mustChoose = false;
if (!properties.isEmpty()) {
// check if we must choose if there is an empty value or a value that has a ${ } token so we dont have a default value
for (String value : properties.values()) {
if (isNullOrBlank(value) || value.contains("$")) {
mustChoose = true;
break;
}
}
if (!mustChoose) {
System.out.println("----- Additional properties -----");
for (String key : properties.keySet()) {
System.out.println(String.format("Using property '%s' (%s): ", key, properties.get(key)));
}
}
boolean choosing = true;
while (mustChoose || choosing) {
String confirm = null;
if (!mustChoose) {
confirm = ShellUtils.readLine(session, "Confirm additional properties configuration: (Y): ", false);
confirm = isNullOrBlank(confirm) ? "Y" : confirm;
}
if (mustChoose || !"Y".equalsIgnoreCase(confirm)) {
// ask for replacement properties suggesting the defaults
if (!properties.isEmpty()) {
System.out.println("----- Configure additional properties -----");
for (String key : properties.keySet()) {
String value = properties.get(key);
// if the value is empty or a token, then do not show any default value
if (isNullOrBlank(value) || value.contains("$")) {
value = "";
}
String p = ShellUtils.readLine(session, String.format("Define value for property '%s' (%s): ", key, value), false);
p = isNullOrBlank(p) ? value : p;
properties.put(key, p);
}
}
mustChoose = false;
} else {
choosing = false;
}
}
}
// remover to include the profile back into properties
if (profile != null) {
properties.put("fabric8-profile", profile);
}
if (!properties.isEmpty()) {
// set override properties
helper.setOverrideProperties(properties);
}
String confirm = ShellUtils.readLine(session, "Create project: (Y): ", false);
confirm = confirm == null || confirm.trim().equals("") ? "Y" : confirm;
if ("Y".equalsIgnoreCase(confirm)) {
System.out.println("----------------------------------------------------------------------------");
System.out.println(String.format("Creating project in directory: %s", childDir.getCanonicalPath()));
helper.execute();
System.out.println("Project created successfully");
System.out.println("");
} else {
System.out.println("----------------------------------------------------------------------------");
System.out.println("Creating project aborted!");
System.out.println("");
}
return null;
}
use of io.fabric8.openshift.api.model.User in project fabric8-maven-plugin by fabric8io.
the class ContainerHandlerTest method getContainerTestWithUser.
@Test
public void getContainerTestWithUser() {
project.setArtifactId("test-artifact");
project.setGroupId("test-group");
ports.add("8080");
ports.add("9090");
tags.add("latest");
tags.add("test");
// container name with user and image with tag
ContainerHandler handler = new ContainerHandler(project, envVarHandler, probeHandler);
BuildImageConfiguration buildImageConfiguration = new BuildImageConfiguration.Builder().ports(ports).from("fabric8/").cleanup("try").tags(tags).compression("gzip").dockerFile("testFile").dockerFileDir("/demo").build();
ImageConfiguration imageConfiguration = new ImageConfiguration.Builder().name("user/test:latest").buildConfig(buildImageConfiguration).registry("docker.io").build();
images.clear();
images.add(imageConfiguration);
containers = handler.getContainers(config, images);
assertNotNull(containers);
assertEquals("user-test-artifact", containers.get(0).getName());
assertEquals("docker.io/user/test:latest", containers.get(0).getImage());
assertEquals("IfNotPresent", containers.get(0).getImagePullPolicy());
}
use of io.fabric8.openshift.api.model.User in project fabric8-maven-plugin by fabric8io.
the class BaseGenerator method addFrom.
/**
* Add the base image either from configuration or from a given selector
*
* @param builder for the build image configuration to add the from to.
*/
protected void addFrom(BuildImageConfiguration.Builder builder) {
String fromMode = getConfigWithSystemFallbackAndDefault(Config.fromMode, "fabric8.generator.fromMode", getFromModeDefault(context.getMode()));
String from = getConfigWithSystemFallbackAndDefault(Config.from, "fabric8.generator.from", null);
if ("docker".equalsIgnoreCase(fromMode)) {
String fromImage = from;
if (fromImage == null) {
fromImage = fromSelector != null ? fromSelector.getFrom() : null;
}
builder.from(fromImage);
log.info("Using Docker image %s as base / builder", fromImage);
} else if ("istag".equalsIgnoreCase(fromMode)) {
Map<String, String> fromExt = new HashMap<>();
if (from != null) {
ImageName iName = new ImageName(from);
// user/project is considered to be the namespace
String tag = iName.getTag();
if (StringUtils.isBlank(tag)) {
tag = "latest";
}
fromExt.put(OpenShiftBuildStrategy.SourceStrategy.name.key(), iName.getSimpleName() + ":" + tag);
if (iName.getUser() != null) {
fromExt.put(OpenShiftBuildStrategy.SourceStrategy.namespace.key(), iName.getUser());
}
fromExt.put(OpenShiftBuildStrategy.SourceStrategy.kind.key(), "ImageStreamTag");
} else {
fromExt = fromSelector != null ? fromSelector.getImageStreamTagFromExt() : null;
}
if (fromExt != null) {
String namespace = fromExt.get(OpenShiftBuildStrategy.SourceStrategy.namespace.key());
if (namespace != null) {
log.info("Using ImageStreamTag '%s' from namespace '%s' as builder image", fromExt.get(OpenShiftBuildStrategy.SourceStrategy.name.key()), namespace);
} else {
log.info("Using ImageStreamTag '%s' as builder image", fromExt.get(OpenShiftBuildStrategy.SourceStrategy.name.key()));
}
builder.fromExt(fromExt);
}
} else {
throw new IllegalArgumentException(String.format("Invalid 'fromMode' in generator configuration for '%s'", getName()));
}
}
Aggregations