use of io.fabric8.kubernetes.examples.crds.Dummy in project fabric8-maven-plugin by fabric8io.
the class KubernetesResourceUtilTest method containerName.
@Test
public void containerName() {
ImageConfiguration imageConfiguration = new ImageConfiguration.Builder().name("dummy-image").registry("example.com/someregistry").name("test").build();
String containerName = KubernetesResourceUtil.extractContainerName(new GroupArtifactVersion("io.fabric8-test-", "fabric8-maven-plugin-dummy", "0"), imageConfiguration);
assertTrue(containerName.matches(KubernetesResourceUtil.CONTAINER_NAME_REGEX));
}
use of io.fabric8.kubernetes.examples.crds.Dummy in project kubernetes-client by fabric8io.
the class SharedInformerFactoryImplTest method testSharedIndexInformerForCustomResourceNoType.
@Test
void testSharedIndexInformerForCustomResourceNoType() {
// Given
SharedInformerFactory sharedInformerFactory = new SharedInformerFactoryImpl(mockBaseClient, executorService);
CustomResourceDefinitionContext context = new CustomResourceDefinitionContext.Builder().withKind("Dummy").withScope("Namespaced").withVersion("v1").withGroup("demos.fabric8.io").withPlural("dummies").build();
// When
SharedIndexInformer<GenericKubernetesResource> informer = sharedInformerFactory.inNamespace("ns1").sharedIndexInformerForCustomResource(context, 10 * 1000L);
// Then
assertThat(informer).isNotNull();
}
use of io.fabric8.kubernetes.examples.crds.Dummy in project kubernetes-client by fabric8io.
the class CRDExample method main.
/**
* Example of Cluster and Namespaced scoped K8S Custom Resources.
* To test Cluster scoped resource use "--cluster" as first argument.
* To test Namespaced resource provide namespace as first argument (namespace must exists in K8S).
*
* @param args Either "--cluster" or namespace name.
*/
public static void main(String[] args) {
boolean resourceNamespaced = true;
String namespace = null;
if (args.length > 0) {
if ("--cluster".equals(args[0])) {
resourceNamespaced = false;
} else {
namespace = args[0];
}
}
try (final KubernetesClient client = new KubernetesClientBuilder().build()) {
if (resourceNamespaced) {
if (namespace == null) {
namespace = client.getNamespace();
}
if (namespace == null) {
System.err.println("No namespace specified and no default defined!");
return;
}
System.out.println("Using namespace: " + namespace);
} else {
System.out.println("Creating cluster scoped resource");
}
if (LOG_ROOT_PATHS) {
RootPaths rootPaths = client.rootPaths();
if (rootPaths != null) {
List<String> paths = rootPaths.getPaths();
if (paths != null) {
System.out.println("Supported API Paths:");
for (String path : paths) {
System.out.println(" " + path);
}
System.out.println();
}
}
}
CustomResourceDefinitionList crds = client.apiextensions().v1().customResourceDefinitions().list();
List<CustomResourceDefinition> crdsItems = crds.getItems();
System.out.println("Found " + crdsItems.size() + " CRD(s)");
CustomResourceDefinition dummyCRD = null;
final String dummyCRDName = CustomResource.getCRDName(Dummy.class);
for (CustomResourceDefinition crd : crdsItems) {
ObjectMeta metadata = crd.getMetadata();
if (metadata != null) {
String name = metadata.getName();
System.out.println(" " + name + " => " + metadata.getSelfLink());
if (dummyCRDName.equals(name)) {
dummyCRD = crd;
}
}
}
if (dummyCRD != null) {
System.out.println("Found CRD: " + dummyCRD.getMetadata().getSelfLink());
} else {
dummyCRD = CustomResourceDefinitionContext.v1CRDFromCustomResourceType(Dummy.class).editSpec().editVersion(0).withNewSchema().withNewOpenAPIV3Schema().withTitle("dummy").withType("object").addToRequired("spec").addToProperties("spec", new JSONSchemaPropsBuilder().withType("object").addToProperties("foo", new JSONSchemaPropsBuilder().withType("string").build()).addToProperties("bar", new JSONSchemaPropsBuilder().withType("string").build()).build()).endOpenAPIV3Schema().endSchema().endVersion().endSpec().build();
client.apiextensions().v1().customResourceDefinitions().create(dummyCRD);
System.out.println("Created CRD " + dummyCRD.getMetadata().getName());
}
// wait a beat for the endpoints to be ready
Thread.sleep(5000);
// lets create a client for the CRD
NonNamespaceOperation<Dummy, DummyList, Resource<Dummy>> dummyClient = client.resources(Dummy.class, DummyList.class);
if (resourceNamespaced) {
dummyClient = ((MixedOperation<Dummy, DummyList, Resource<Dummy>>) dummyClient).inNamespace(namespace);
}
CustomResourceList<Dummy> dummyList = dummyClient.list();
List<Dummy> items = dummyList.getItems();
System.out.println(" found " + items.size() + " dummies");
for (Dummy item : items) {
System.out.println(" " + item);
}
Dummy dummy = new Dummy();
ObjectMeta metadata = new ObjectMeta();
metadata.setName("foo");
dummy.setMetadata(metadata);
DummySpec dummySpec = new DummySpec();
Date now = new Date();
dummySpec.setBar("beer: " + now);
dummySpec.setFoo("cheese: " + now);
dummy.setSpec(dummySpec);
Dummy created = dummyClient.createOrReplace(dummy);
System.out.println("Upserted " + dummy);
created.getSpec().setBar("otherBar");
dummyClient.createOrReplace(created);
System.out.println("Watching for changes to Dummies");
dummyClient.withResourceVersion(created.getMetadata().getResourceVersion()).watch(new Watcher<Dummy>() {
@Override
public void eventReceived(Action action, Dummy resource) {
System.out.println("==> " + action + " for " + resource);
if (resource.getSpec() == null) {
logger.error("No Spec for resource {}", resource);
}
}
@Override
public void onClose(WatcherException cause) {
}
});
System.in.read();
} catch (KubernetesClientException e) {
logger.error(e.getMessage(), e);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
use of io.fabric8.kubernetes.examples.crds.Dummy in project kubernetes-client by fabric8io.
the class BuildConfigTest method testBinaryBuildFromInputStream.
@Test
// Seems that in this version of mockwebserver, posting using an inputstream doesn't work that well, so we'll have to ignore.
@Disabled
void testBinaryBuildFromInputStream() {
server.expect().post().withPath("/apis/build.openshift.io/v1/namespaces/ns1/buildconfigs/bc2/instantiatebinary?commit=some%20commit&revision.authorName=author%20name&revision.authorEmail=author@someorg.com&revision.committerName=committer%20name&revision.committerEmail=committer@someorg.com").andReturn(201, new BuildBuilder().withNewMetadata().withName("bc2").endMetadata().build()).once();
InputStream dummy = new ByteArrayInputStream("".getBytes());
Build build = client.buildConfigs().inNamespace("ns1").withName("bc2").instantiateBinary().withCommitterName("committer name").withCommitterEmail("committer@someorg.com").withAuthorName("author name").withAuthorEmail("author@someorg.com").withMessage("some commit").fromInputStream(dummy);
assertNotNull(build);
}
use of io.fabric8.kubernetes.examples.crds.Dummy in project kubernetes-client by fabric8io.
the class CustomResourceInformerExample method main.
public static void main(String[] args) {
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
SharedInformerFactory sharedInformerFactory = client.informers();
SharedIndexInformer<Dummy> podInformer = sharedInformerFactory.sharedIndexInformerForCustomResource(Dummy.class, 60 * 1000L);
logger.info("Informer factory initialized.");
podInformer.addEventHandler(new ResourceEventHandler<Dummy>() {
@Override
public void onAdd(Dummy pod) {
logger.info("{} dummy added", pod.getMetadata().getName());
}
@Override
public void onUpdate(Dummy oldPod, Dummy newPod) {
logger.info("{} dummy updated", oldPod.getMetadata().getName());
}
@Override
public void onDelete(Dummy pod, boolean deletedFinalStateUnknown) {
logger.info("{} dummy deleted", pod.getMetadata().getName());
}
});
sharedInformerFactory.addSharedInformerEventListener(ex -> logger.error("Exception occurred, but caught: {}", ex.getMessage()));
logger.info("Starting all registered informers");
sharedInformerFactory.startAllRegisteredInformers();
Executors.newSingleThreadExecutor().submit(() -> {
Thread.currentThread().setName("HAS_SYNCED_THREAD");
try {
for (; ; ) {
logger.info("podInformer.hasSynced() : {}", podInformer.hasSynced());
Thread.sleep(10 * 1000L);
}
} catch (InterruptedException inEx) {
Thread.currentThread().interrupt();
logger.warn("HAS_SYNCED_THREAD interrupted: {}", inEx.getMessage());
}
});
final Dummy toCreate = new Dummy();
toCreate.getMetadata().setName("dummy");
if (client.getConfiguration().getNamespace() != null) {
toCreate.getMetadata().setNamespace(client.getConfiguration().getNamespace());
} else if (client.getNamespace() != null) {
toCreate.getMetadata().setNamespace(client.getNamespace());
} else {
toCreate.getMetadata().setNamespace(client.namespaces().list().getItems().stream().findFirst().map(HasMetadata::getMetadata).map(ObjectMeta::getNamespace).orElse("default"));
}
client.customResources(Dummy.class).createOrReplace(toCreate);
// Wait for some time now
TimeUnit.MINUTES.sleep(5);
} catch (InterruptedException interruptedException) {
Thread.currentThread().interrupt();
logger.warn("interrupted: {}", interruptedException.getMessage());
}
}
Aggregations