From August 2019

“Kool” Kubernetes Client Tools


When working with k8s, you typically have several clusters and a bunch of namespaces per cluster, the following tools can help you manage the stuff with easy.

kubectx + kubens

kubectx allows you to change the context between different k8s clusters

kubens allows you to change between different namespaces in the current cluster context

brew install kubectx

More info here

Kube-ps1

Allows you to see the current context and namespace in the promt

brew install kube-ps1

More info here

Examples

kubectx, kubens and kube-ps1 at a glance

kubeaudit

Great tool for auditing the security settings on your k8s clusters

brew install kubeaudit
kubeaudit allowpe

krew

Krew is a package manager for kubectl (kubectl has an extensibility framework and this tool helps manage extensions)

Hope it helps! 🙂

Set Up an Ingress Controller in OKE Cluster


Step 1: setting up the nginx ingress controller

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

Step 2: exposing the ingress as a service of type LoadBalancer (as a public IP)

kubectl apply -f https://raw.githubusercontent.com/javiermugueta/rawcontent/master/cloud-generic.yaml

Step 3: Execute this command several times until the external-ip appears as non <pending>, grab the IP for later testing

kubectl get svc -n ingress-nginx

Step 4: a certificate for ssl termination

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"


kubectl create secret tls tls-secret --key tls.key --cert tls.crtopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

Step 5

kubectl create -f https://raw.githubusercontent.com/javiermugueta/rawcontent/master/hello-world-ingress.yaml

Step 6: A typical hello world deployment with a pod in it and 3 replicas

kubectl create -f https://raw.githubusercontent.com/javiermugueta/rawcontent/master/ingress.yaml

Step 7: Test the url and see what happens…

That’s all folks! Hope it helps 🙂

Oracle SaaS Stories: Creating a Custom App Extension with Visual Builder | Part Three: Filtering Data


Next step after what we posted here is how to implement a mechanism to filter results. Taking a look to the REST APIs we can notice that the query parameter q is the one that can help us to implement what we are pretending:

So the q parameter works as a field1<operator1>value1;fieldn<operatorn>valuen expression that can be passed as a parameter to the REST service. Let’s hands on.

Create a global variable for the search criteria:

Drag and drop an InputText onto the Page Structure pane:

Create a new Event for storing in a variable the value of the InputText when it changes:

Drag and drop a Button same way:

Create new Event and implement action chain:

In the success branch of the Rest call put a Call Component Method and select the refresh method of the table object:

In the failure branch put a Fire Notification Error and configure it as follows:

Hope it helps! 🙂

Oracle SaaS Stories: Creating a Custom App Extension with Visual Builder | Part Two: Results Pagination


In this episode we are explaining how to list data results in a table located on a page. This is the typical use case in which we want to show business data to the user according to certain criteria. For now what we want to demonstrate is how to show results in paginated mode. The good thing here is that we are not writing any line of code at all.

SaaS REST API Structure and Taxonomy

Most of the new REST APIs of Fusion SaaS have the same structure, for example in the HCM package we found:

For now we are focusing in the offset and limit parameters.

An example querying Transfer Orders

Let’s create a page that retrieves all transfer orders. First, we need to locate the service in the catalog. See here for more details.

This API retrieves all transfer orders

Create a new project in VB and then drag and drop a table in the page and click Add Data assistant:

Create a couple of global variables at application level adn set the default value for rowspertable as 10:

Select the TransferOrders endpoint and click [Next]:

Select columns to show and the table primary key:

Map the global variables to the endpoint parameters and click [Finish]:

For now we have the results in the table:

Drag and drop an InputNumber on to the Page Structure pane, above the table and set the min value to 0:

Add Assign Variables action to the Action Chain:

Add Navigate action as well:

Click on Assign Variables action and then on Assing link:

Map the value variable in the action chain to the application variable offset and click on [Save]:

Click the Navigate action and then de [Select Target] button:

Select Peer Page:

Select the page where the table is located:

We are almost done, click on the Play button:

Click on the InputNumber up and down and see how the table shows data in pages as the inputnumber changes:

So that’s all for now, in the next episode we’ll see how to filter results in the table.

Hope it helps! 🙂