In this post I am going to describe , How to create single Pattern (Blueprint) for Widows and Linux using custom form to achieve client use cases.
As all you know VRA8.X yaml play very critical role in designing the blueprint . I am going to describe 3 very common use cases which all customers ask to develop in simple Pattern.
First I would like to introduce about my environment and customer use cases .
My environment details :
vCenter with two templates Windows and Linux 7.x
Two customization spec for Windows and Linux
One vRA 8 with vCenter Endpoint and one Project and two network profile ( One for production and Second for Management)
Use cases –
1- The client want to see the dedicated network as per the environment . Client can see either production or Management network during deployment time , I decided to set the network as per production and Management environment selection .
2- The client wants to have a choice to select between Windows and Linux in same blueprint. In this case we need to create two patters and assign an appropriate Image to each of them but I have decided to set the system selection as an option and assign appropriate customization spec to Image .
3- The client want to have a choice to add extra disk during the provisioning time.
This use case can be done in many other ways like VRO workflow and so on but I have decided to create custom form and yaml to accomplish this use case .
Let’s Start ……….
My Blueprint form looks in that way.
👆
Note: 1- When client select Zone as “production” then network name “MTO-PROD-Net01” get assign as per zone . I have set the conditional value .
2- . when client select OS-Image as Windows 2016 (MTO-PROD-Win16) then Customization name “vra8win” get assign as per OS-Image . I have set the conditional value here as well.
3-Once client want to add additional disk and choose the Required value as Yes then client can enter disk size .
👆
Note: 1- When client select Zone as “Management” then network name “MTO-DEV-Net01” get assign as per zone . I have set the conditional value .
2- . when client select OS-Image as Linux 7.X (MTO-PROD-LIN7) then Customization name “vra8Lin” get assign as per OS-Image . I have set the conditional value here as well.
3-If client do not want to add additional disk
and choose the Required value as NO then automatically 1 value will appear for
both disk.
To do that I have set the conditional value in the custom form for optional disk.
Now we need to create YAML code in blueprint .
I have created a blueprint which have one vsphere machine , one network and two Optional disk . Here is the my Blueprint looks like.
My code looks like this:-
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: MTO-PROD-LIN7
cpuCount: 1
totalMemoryMB: 1024
networks:
- network: '${resource.Cloud_vSphere_Network_1.id}'
attachedDisks:
- source: '${resource.Cloud_vSphere_Disk_1.id}'
- source: '${resource.Cloud_vSphere_Disk_2.id}'
Cloud_vSphere_Network_1:
type: Cloud.vSphere.Network
properties:
networkType: existing
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
This is a standard blueprint but I want to do more customize as much as I can that I have created t-shirt size for CPU and memory as an selection option for client . We need to create flavour mapping for this request
SelectFlavor:
type: string
enum:
- MTO-PROD-LARGE
- MTO-PROD-MEDIUM
- MTO-PROD-SMALL
Now we have given option to select the CPU and memory but it is not enough to achieve simple pattern . If client wants to have a choice between Windows and Linux in single blueprint along with their associate customization spec. I decided to set the system selection as an option and attached respective customization spec.
os-image:
type: string
oneOf:
- title: MTO-PROD-LIN7
const: MTO-PROD-LIN7
- title: MTO-PROD-LIN8
const: MTO-PROD-LIN8
- title: MTO-PROD-Win16
const: MTO-PROD-Win16
custom_spec:
type: string
enum:
- vra8win
- vra8Lin
default: vra8win
title: Customization Name
description: Customization Name
The next use case is the network, we should also give the user a choice to select network as per their deployment .
net_name:
type: string
enum:
- MTO-PROD-Net01
- MTO-DEV-Net01
default: MTO-PROD-Net01
title: Network Name
description: Network Name
Next use case is optional disk , we should also give the user a choice
to select addition disk during VM deployment time .
title: Choose the size of VM
Disk1Size:
type: integer
Disk2Size:
type: integer
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: '${input.Disk1Size}'
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: '${input.Disk2Size}'
Here is the Yaml Code for the same which going to cover above use case .
Our YAML code for blueprint is completed . Now time to pass it on the Service Broker portal.
To set up the blueprint for the first time , Make sure we have configured Content Source, Content sharing and Content in service broker .
Sometime client unknowingly choose values that do not match and it create problem during or after deployment (e.g. Linux customization for Windows . Management (DEV) IP for Production VM ) . I decided to limit the choice of customization and network only by informing what was chosen by using custom forms.
Now we need to select custom form in service broker .
Click on Content & Policies and go to content.
On Custom_Spec we need to marked this field as read only but it will visible to client over the form .
We need to setup a Values which depends what user is going to setup in Image.
Same way need to setup value for network selecting while selecting Zone .
To create the disk during the provisioning time we need to get Cloud_vSphere_Disk object for each disk and then map it to Cloud_vSphere_Machine.
Now we can define default value when end user choose No for extra disk over the form.