Skip to content
This repository was archived by the owner on Nov 24, 2023. It is now read-only.

Commit ca1800a

Browse files
anilkumarnagarajhkantare
authored andcommitted
Add openshift route module
1 parent 2290428 commit ca1800a

File tree

12 files changed

+416
-0
lines changed

12 files changed

+416
-0
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ And it also has the following modules to configure a already provisioned cluster
1515
* classic-cluster-worker-pool
1616
* vpc-cluster-worker-pool
1717
* add-ons
18+
* openshift-route
1819

1920
## Compatibility
2021

@@ -96,6 +97,19 @@ module "vpc_openshift_cluster" {
9697
}
9798
```
9899

100+
Creation of openshift route:
101+
102+
```hcl
103+
module "openshift_cluster_route" {
104+
source = "github.com/terraform-ibm-modules/terraform-ibm-cluster//modules/openshift-route"
105+
106+
ibmcloud_api_key = var.ibmcloud_api_key
107+
cluster_service_url = var.cluster_service_url
108+
namespace = var.namespace
109+
route_data = var.route_data
110+
}
111+
```
112+
99113
## Requirements
100114

101115
### Terraform plugins

examples/openshift-route/README.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Module openshift-route
2+
3+
This module is used to provision a route to an openshift cluster. An [OpenShift route](https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/routes.html) is a way to expose a service by giving it an externally-reachable hostname like www.example.com.
4+
5+
6+
## Example Usage
7+
8+
``` terraform
9+
provider "ibm" {
10+
}
11+
12+
locals {
13+
# get json
14+
data = jsondecode(var.route_data)
15+
}
16+
17+
data "ibm_satellite_cluster" "cluster" {
18+
name = var.cluster
19+
}
20+
21+
module "openshift_cluster_route" {
22+
source = "github.com/terraform-ibm-modules/terraform-ibm-cluster//modules/openshift-route"
23+
24+
ibmcloud_api_key = var.ibmcloud_api_key
25+
cluster_service_url = data.ibm_satellite_cluster.cluster.server_url
26+
namespace = var.namespace
27+
route_data = var.route_data
28+
}
29+
```
30+
31+
## Note
32+
33+
* To update a openshift route, users has to get the "resourceVersion" parameter value from terraform.tfstate or openshift console file, And add it to 'route_data' variable as a route specification.
34+
35+
``` Route Specfication
36+
{
37+
"kind":"Route",
38+
"apiVersion":"route.openshift.io/v1",
39+
"metadata":{
40+
"name":"route-01",
41+
"resourceVersion": "<resourceVersion>"
42+
},
43+
.....
44+
.....
45+
}
46+
```
47+
* All optional fields are given value `null` in varaible.tf file. User can configure the same by overwriting with appropriate values.
48+
* Provide `version` attribute in terraform block in versions.tf file to use specific version of terraform provider.
49+
50+
51+
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
52+
## Inputs
53+
54+
| Name | Description | Type |Default |Required |
55+
|--------------------------|----------------------------------------------------------------|:-------|:--------|:--------|
56+
| ibmcloud_api_key | IBM Cloud IAM API key |`string`| n/a | yes |
57+
| cluster | Cluster Name |`string`| n/a | yes |
58+
| namespace | Openshift namespace name |`string`| default | no |
59+
| route_data | Route specification |`string`| n/a | no |
60+
61+
## Outputs
62+
63+
| Name | Description |
64+
|--------------------------|----------------------------|
65+
| route_response | Route response |
66+
67+
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
68+
69+
## Usage
70+
71+
Initialising Provider
72+
73+
Make sure you declare a required providers ibm block to make use of IBM-Cloud Terraform Provider
74+
75+
```terraform
76+
terraform {
77+
required_providers {
78+
restapi = {
79+
source = "fmontezuma/restapi"
80+
version = "1.14.1"
81+
}
82+
ibm = {
83+
source = "IBM-Cloud/ibm"
84+
}
85+
}
86+
}
87+
```
88+
89+
```bash
90+
terraform init
91+
terraform plan
92+
terraform apply
93+
```
94+
95+
Run `terraform destroy` when you don't need these resources.

examples/openshift-route/main.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
provider "ibm" {
7+
}
8+
9+
data "ibm_satellite_cluster" "cluster" {
10+
name = var.cluster
11+
}
12+
13+
module "openshift_cluster_route" {
14+
source = "github.com/terraform-ibm-modules/terraform-ibm-cluster//modules/openshift-route"
15+
16+
ibmcloud_api_key = var.ibmcloud_api_key
17+
cluster_service_url = data.ibm_satellite_cluster.cluster.server_url
18+
namespace = var.namespace
19+
route_data = var.route_data
20+
}

examples/openshift-route/output.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
output "route_response" {
7+
value = module.openshift_cluster_route.route_response
8+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
variable "ibmcloud_api_key" {
7+
description = "IBM Cloud API Key"
8+
}
9+
10+
variable "cluster" {
11+
description = "Cluster Name"
12+
type = string
13+
14+
validation {
15+
error_message = "Cluster name must begin and end with a letter and contain only letters, numbers, and - characters."
16+
condition = can(regex("^([a-z]|[a-z][-a-z0-9]*[a-z0-9])$", var.cluster))
17+
}
18+
}
19+
20+
variable "namespace" {
21+
type = string
22+
description = "Namespace name"
23+
default = "default"
24+
25+
validation {
26+
error_message = "Cluster name must begin and end with a letter and contain only letters, numbers, and - characters."
27+
condition = can(regex("^([a-z]|[a-z][-a-z0-9]*[a-z0-9])$", var.namespace))
28+
}
29+
}
30+
31+
variable "route_data" {
32+
description = "Route specification"
33+
default = <<EOT
34+
{
35+
"kind":"Route",
36+
"apiVersion":"route.openshift.io/v1",
37+
"metadata":{
38+
"name":"route-01"
39+
},
40+
"spec":{
41+
"to":{
42+
"kind":"Service",
43+
"name":"nginx-service"
44+
},
45+
"port":{
46+
"targetPort":"https"
47+
},
48+
"tls":{
49+
"termination":"passthrough"
50+
}
51+
}
52+
}
53+
EOT
54+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
/***************************************************
7+
NOTE: To source a particular version of IBM terraform provider, configure the parameter `version` as follows
8+
9+
terraform {
10+
required_version = ">=0.13"
11+
required_providers {
12+
ibm = {
13+
source = "IBM-Cloud/ibm"
14+
version = "1.21.0"
15+
}
16+
}
17+
}
18+
19+
If we dont configure the version parameter, it fetches the latest provider version.
20+
****************************************************/
21+
22+
terraform {
23+
required_providers {
24+
restapi = {
25+
source = "fmontezuma/restapi"
26+
version = "1.14.1"
27+
}
28+
ibm = {
29+
source = "IBM-Cloud/ibm"
30+
}
31+
}
32+
}

modules/openshift-route/README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# This module is used to create openshift route
2+
3+
This module is used to provision a route to an openshift cluster. An [OpenShift route](https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/routes.html) is a way to expose a service by giving it an externally-reachable hostname like www.example.com.
4+
5+
## Prerequisite
6+
7+
* Set up the IBM Cloud command line interface (CLI), the Satellite plug-in, and other related CLIs.
8+
* Install cli and plugin package
9+
```console
10+
ibmcloud plugin install container-service
11+
```
12+
## Usage
13+
14+
```
15+
terraform init
16+
```
17+
```
18+
terraform plan
19+
```
20+
```
21+
terraform apply
22+
```
23+
```
24+
terraform destroy
25+
```
26+
## Example Usage
27+
28+
``` hcl
29+
module "openshift-route" {
30+
source = "github.com/terraform-ibm-modules/terraform-ibm-cluster//modules/openshift-route"
31+
32+
ibmcloud_api_key = var.ibmcloud_api_key
33+
cluster_service_url = var.cluster_service_url
34+
namespace = var.namespace
35+
route_data = var.route_data
36+
}
37+
```
38+
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
39+
40+
## Note
41+
42+
* To update a openshift route, users has to get "resourceVersion" parameter value from terraform.tfstate or openshift console file and add it to 'route_data' variable as a route specification.
43+
44+
``` Route Specfication
45+
{
46+
"kind":"Route",
47+
"apiVersion":"route.openshift.io/v1",
48+
"metadata":{
49+
"name":"route-01",
50+
"resourceVersion": "<resourceVersion>"
51+
},
52+
.....
53+
.....
54+
}
55+
```
56+
* If we want to make use of a particular version of module, then set the argument "version" to respective module version
57+
58+
## Inputs
59+
60+
| Name | Description | Type |Default |Required |
61+
|--------------------------|----------------------------------------------------------------|:-------|:--------|:--------|
62+
| ibmcloud_api_key | IBM Cloud IAM API key |`string`| n/a | yes |
63+
| cluster_service_url | Cluster service URL |`string`| n/a | yes |
64+
| namespace | Openshift namespace name |`string`| default | no |
65+
| route_data | Route specification |`string`| n/a | yes |
66+
67+
## Outputs
68+
69+
| Name | Description |
70+
|--------------------------|----------------------------|
71+
| route_response | Route response |
72+
73+
74+
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

modules/openshift-route/main.tf

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
locals {
7+
# get json
8+
data = jsondecode(var.route_data)
9+
}
10+
11+
###################################################################
12+
# Generate openshift token to file
13+
###################################################################
14+
resource "null_resource" "get_oc_token" {
15+
provisioner "local-exec" {
16+
interpreter = ["/bin/bash", "-c"]
17+
command = <<-EOT
18+
curl -u "apikey:${var.ibmcloud_api_key}" -H "X-CSRF-Token: a" "$(curl ${var.cluster_service_url}/.well-known/oauth-authorization-server | jq -r .issuer)/oauth/authorize?client_id=openshift-challenging-client&response_type=token" -vvv &> /dev/stdout | tee -a resp.log
19+
token=$(awk -v FS="(#access_token=|&expires_in)" '{print $2}' resp.log)
20+
echo $token > token.log
21+
rm -f resp.log
22+
EOT
23+
}
24+
}
25+
26+
###################################################################
27+
# Read openshift token from file
28+
###################################################################
29+
data "local_file" "token_file" {
30+
filename = "token.log"
31+
32+
depends_on = [null_resource.get_oc_token]
33+
}
34+
35+
###################################################################
36+
# Provision openshift route
37+
###################################################################
38+
resource "restapi_object" "create_route" {
39+
object_id = local.data.metadata.name
40+
path = "/apis/route.openshift.io/v1/namespaces/${var.namespace}/routes"
41+
data = var.route_data
42+
43+
depends_on = [null_resource.get_oc_token]
44+
}

modules/openshift-route/output.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
output "route_response" {
7+
value = restapi_object.create_route.api_response
8+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#####################################################
2+
# Openshift cluster route provisioning
3+
# Copyright 2021 IBM
4+
#####################################################
5+
6+
provider "restapi" {
7+
uri = var.cluster_service_url
8+
debug = true
9+
headers = {
10+
Authorization = format("Bearer %v", chomp(element(tolist(data.local_file.token_file.*.content), 0)))
11+
}
12+
}

0 commit comments

Comments
 (0)