Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Support bring your own image #942

Merged
merged 24 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
19a7aa4
feat: support custom image import from COS to PowerVS workspace
ludwig-mueller Oct 24, 2024
b29be6f
chore: formatting
ludwig-mueller Oct 24, 2024
547d106
chore: update readme
ludwig-mueller Oct 28, 2024
0507bec
chore: remove duplicate validations
ludwig-mueller Oct 30, 2024
d7d5b9c
chore: rename pi_custom_image to powervs_custom_image
ludwig-mueller Oct 30, 2024
461bcf6
chore: update required terraform version to >= 1.9
ludwig-mueller Oct 31, 2024
5c7b03b
chore: upgrade workspace version to 2.2.0
ludwig-mueller Oct 31, 2024
3f48547
fix: set lower bound and upper bound for ansible collections
ludwig-mueller Oct 31, 2024
9560362
chore: update instance version
ludwig-mueller Oct 31, 2024
47b592a
feat: switch to one variable for all three custom images
ludwig-mueller Oct 31, 2024
207a9c1
docs: update readme
ludwig-mueller Oct 31, 2024
00afc95
Merge branch 'main' into byoi
ludwig-mueller Oct 31, 2024
e822e24
chore: update default images to latest versions
ludwig-mueller Oct 31, 2024
9ae5475
Merge branch 'main' into byoi
surajsbharadwaj Nov 4, 2024
20d78ed
Merge branch 'main' into byoi
ludwig-mueller Nov 12, 2024
216ae58
fix: remove byoi support from quickstart variation
ludwig-mueller Nov 12, 2024
8d549ef
Merge branch 'main' into byoi
surajsbharadwaj Nov 14, 2024
54f8444
chore: update default catalog images in catalog manifest
ludwig-mueller Nov 14, 2024
cdbb5cd
chore: add byoi variables to catalog manifest
ludwig-mueller Nov 14, 2024
0eca56f
chore: switch default values of custom images to json so the catalog …
ludwig-mueller Nov 14, 2024
6cd649d
docs: update reference architectures
ludwig-mueller Nov 14, 2024
cc350aa
chore: add commas in default values for custom images
ludwig-mueller Nov 14, 2024
54b4805
chore: improve default value of powervs_custom_image_cos_configuratio…
ludwig-mueller Nov 15, 2024
6852652
docs: mention cross dependencies of variables in their description
ludwig-mueller Nov 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 7 additions & 17 deletions .secrets.baseline
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"files": "go.sum|^.secrets.baseline$",
"lines": null
},
"generated_at": "2024-05-24T00:49:11Z",
"generated_at": "2024-10-31T13:54:05Z",
"plugins_used": [
{
"name": "AWSKeyDetector"
Expand Down Expand Up @@ -77,38 +77,28 @@
}
],
"results": {
"modules/ansible/README.md": [
"modules/powervs-vpc-landing-zone/README.md": [
{
"hashed_secret": "1a70e90515ef1357abd3531dead4b53b6eba959f",
"hashed_secret": "91199272d5d6a574a51722ca6f3d1148edb1a0e7",
"is_secret": false,
"is_verified": false,
"line_number": 10,
"line_number": 43,
"type": "Secret Keyword",
"verified_result": null
},
{
"hashed_secret": "a67ef662b9a11a96b15936764d77e118c9f155dd",
"is_secret": false,
"is_verified": false,
"line_number": 18,
"type": "Secret Keyword",
"verified_result": null
}
],
"modules/powervs-vpc-landing-zone/README.md": [
{
"hashed_secret": "91199272d5d6a574a51722ca6f3d1148edb1a0e7",
"is_secret": false,
"is_verified": false,
"line_number": 45,
"line_number": 56,
"type": "Secret Keyword",
"verified_result": null
},
{
"hashed_secret": "a67ef662b9a11a96b15936764d77e118c9f155dd",
"hashed_secret": "6aa42ddb8d86de967d322e6fdde293bf1344c852",
"is_secret": false,
"is_verified": false,
"line_number": 58,
"line_number": 71,
"type": "Secret Keyword",
"verified_result": null
}
Expand Down
80 changes: 66 additions & 14 deletions ibm_catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,32 @@
"key": "powervs_image_names",
"required": true
},
{
"key": "powervs_custom_images",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "json_editor"
}
},
{
"key": "powervs_custom_image_cos_configuration",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "json_editor"
}
},
{
"key": "powervs_custom_image_cos_service_credentials",
"type": "multiline_secure_value",
"display_name": "Multiline secure value",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "multiline_secure_value"
}
},
{
"key": "transit_gateway_global"
},
Expand Down Expand Up @@ -634,31 +660,31 @@
}
},
{
"displayname": "IBM i - XS (0.25cpu,8GB,disk-100GB,IBMi-75-03-2924-2)",
"displayname": "IBM i - XS (0.25cpu,8GB,disk-100GB,IBMi-75-04-2984-1)",
"value": {
"tshirt_size": "ibm_i_xs",
"image": "IBMi-75-03-2924-2"
"image": "IBMi-75-04-2984-1"
}
},
{
"displayname": "IBM i - S (1cpu,32GB,disk-500GB,IBMi-75-03-2924-2)",
"displayname": "IBM i - S (1cpu,32GB,disk-500GB,IBMi-75-04-2984-1)",
"value": {
"tshirt_size": "ibm_i_s",
"image": "IBMi-75-03-2924-2"
"image": "IBMi-75-04-2984-1"
}
},
{
"displayname": "IBM i - M (2cpu,64GB,disk-1000GB,IBMi-75-03-2924-2)",
"displayname": "IBM i - M (2cpu,64GB,disk-1000GB,IBMi-75-04-2984-1)",
"value": {
"tshirt_size": "ibm_i_m",
"image": "IBMi-75-03-2924-2"
"image": "IBMi-75-04-2984-1"
}
},
{
"displayname": "IBM i - L (4cpu,132GB,disk-2000GB,IBMi-75-03-2924-2)",
"displayname": "IBM i - L (4cpu,132GB,disk-2000GB,IBMi-75-04-2984-1)",
"value": {
"tshirt_size": "ibm_i_l",
"image": "IBMi-75-03-2924-2"
"image": "IBMi-75-04-2984-1"
}
},
{
Expand Down Expand Up @@ -738,20 +764,20 @@
"value": "7300-02-01"
},
{
"displayname": "AIX - 7200-05-07",
"value": "7200-05-07"
"displayname": "AIX - 7200-05-08",
"value": "7200-05-08"
},
{
"displayname": "IBM i - IBMi-75-03-2924-2",
"value": "IBMi-75-03-2924-2"
"displayname": "IBM i - IBMi-75-04-2984-1",
"value": "IBMi-75-04-2984-1"
},
{
"displayname": "IBM i - IBMi-75-03-2984-1",
"value": "IBMi-75-03-2984-1"
},
{
"displayname": "IBM i - IBMi-74-09-2984-1",
"value": "IBMi-74-09-2984-1"
"displayname": "IBM i - IBMi-74-10-2984-1",
"value": "IBMi-74-10-2984-1"
},
{
"displayname": "IBM i - IBMi_COR-74-09-1",
Expand Down Expand Up @@ -1575,6 +1601,32 @@
"key": "powervs_image_names",
"required": true
},
{
"key": "powervs_custom_images",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "json_editor"
}
},
{
"key": "powervs_custom_image_cos_configuration",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "json_editor"
}
},
{
"key": "powervs_custom_image_cos_service_credentials",
"type": "multiline_secure_value",
"display_name": "Multiline secure value",
"custom_config": {
"grouping": "deployment",
"original_grouping": "deployment",
"type": "multiline_secure_value"
}
},
{
"key": "tags"
}
Expand Down
2 changes: 1 addition & 1 deletion modules/import-powervs-vpc/acl/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#####################################################

terraform {
required_version = ">= 1.3"
required_version = ">= 1.9"
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
Expand Down
2 changes: 1 addition & 1 deletion modules/import-powervs-vpc/powervs/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#####################################################

terraform {
required_version = ">= 1.3"
required_version = ">= 1.9"
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
Expand Down
2 changes: 1 addition & 1 deletion modules/import-powervs-vpc/security-group/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#####################################################

terraform {
required_version = ">= 1.3"
required_version = ">= 1.9"
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
Expand Down
2 changes: 1 addition & 1 deletion modules/import-powervs-vpc/vpc/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#####################################################

terraform {
required_version = ">= 1.3"
required_version = ">= 1.9"
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
Expand Down
62 changes: 33 additions & 29 deletions modules/powervs-vpc-landing-zone/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,14 @@ This module provisions the following resources in IBM Cloud:
- Activity tracker
- Optional Secrets Manager Instance Instance with private certificate.

- A local **transit gateway**
- A local or global **transit gateway**

- A **Power Virtual Server** workspace with the following network topology:
- Creates two private networks: a management network and a backup network.
- Creates one or two IBM Cloud connections in a non-PER environment.
- Attaches the private networks to the IBM Cloud connections in a non-PER environment.
- Attaches the IBM Cloud connections to a transit gateway in a non-PER environment.
- Attaches the PowerVS workspace to transit gateway in PER-enabled DC
- Attaches the PowerVS workspace to transit gateway
- Creates an SSH key.
- Imports cloud catalog stock images.
- Optionally imports list of stock catalog images.
- Optionally imports up to three custom images from Cloud Object Storage.

- Finally, interconnects both VPC and PowerVS infrastructure.

Expand All @@ -51,27 +49,30 @@ module "powervs-vpc-landing-zone" {

providers = { ibm.ibm-is = ibm.ibm-is, ibm.ibm-pi = ibm.ibm-pi }

powervs_zone = var.powervs_zone
prefix = var.prefix
external_access_ip = var.external_access_ip
ssh_public_key = var.ssh_public_key
ssh_private_key = var.ssh_private_key
client_to_site_vpn = var.client_to_site_vpn #(optional. default check vars)
configure_dns_forwarder = var.configure_dns_forwarder #(optional, default false)
configure_ntp_forwarder = var.configure_ntp_forwarder #(optional, default false)
configure_nfs_server = var.configure_nfs_server #(optional. default false)
nfs_server_config = var.nfs_server_config #(optional. default check vars)
dns_forwarder_config = var.dns_forwarder_config #(optional. default check vars)
powervs_resource_group_name = var.powervs_resource_group_name #(optional. default check vars)
powervs_management_network = var.powervs_management_network #(optional. default check vars)
powervs_backup_network = var.powervs_backup_network #(optional. default check vars)
powervs_image_names = var.powervs_image_names #(optional. default check vars)
tags = var.tags #(optional. default check vars)
sm_service_plan = var.sm_service_plan
existing_sm_instance_guid = var.existing_sm_instance_guid #(optional. default check vars)
existing_sm_instance_region = var.existing_sm_instance_region #(optional. default check vars)
certificate_template_name = var.certificate_template_name #(optional. default check vars)
network_services_vsi_profile = var.network_services_vsi_profile #(optional. default check vars)
powervs_zone = var.powervs_zone
prefix = var.prefix
external_access_ip = var.external_access_ip
ssh_public_key = var.ssh_public_key
ssh_private_key = var.ssh_private_key
client_to_site_vpn = var.client_to_site_vpn #(optional. default check vars)
configure_dns_forwarder = var.configure_dns_forwarder #(optional, default false)
configure_ntp_forwarder = var.configure_ntp_forwarder #(optional, default false)
configure_nfs_server = var.configure_nfs_server #(optional. default false)
nfs_server_config = var.nfs_server_config #(optional. default check vars)
dns_forwarder_config = var.dns_forwarder_config #(optional. default check vars)
powervs_resource_group_name = var.powervs_resource_group_name #(optional. default check vars)
powervs_management_network = var.powervs_management_network #(optional. default check vars)
powervs_backup_network = var.powervs_backup_network #(optional. default check vars)
powervs_image_names = var.powervs_image_names #(optional. default check vars)
tags = var.tags #(optional. default check vars)
sm_service_plan = var.sm_service_plan
powervs_custom_images = var.powervs_custom_images #(optional, default null)
powervs_custom_image_cos_configuration = var.powervs_custom_image_cos_configuration #(optional, default null)
powervs_custom_image_cos_service_credentials = var.powervs_custom_image_cos_service_credentials #(optional, default null)
existing_sm_instance_guid = var.existing_sm_instance_guid #(optional. default check vars)
existing_sm_instance_region = var.existing_sm_instance_region #(optional. default check vars)
certificate_template_name = var.certificate_template_name #(optional. default check vars)
network_services_vsi_profile = var.network_services_vsi_profile #(optional. default check vars)
}
```

Expand All @@ -93,7 +94,7 @@ Creates VPC Landing Zone | Performs VPC VSI OS Config | Creates PowerVS Infrastr

| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3 |
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.9 |
| <a name="requirement_ibm"></a> [ibm](#requirement\_ibm) | >=1.65.0 |

### Modules
Expand Down Expand Up @@ -133,7 +134,10 @@ Creates VPC Landing Zone | Performs VPC VSI OS Config | Creates PowerVS Infrastr
| <a name="input_network_services_vsi_profile"></a> [network\_services\_vsi\_profile](#input\_network\_services\_vsi\_profile) | Compute profile configuration of the network services vsi (cpu and memory configuration). Must be one of the supported profiles. See [here](https://cloud.ibm.com/docs/vpc?topic=vpc-profiles&interface=ui). | `string` | `"cx2-2x4"` | no |
| <a name="input_nfs_server_config"></a> [nfs\_server\_config](#input\_nfs\_server\_config) | Configuration for the NFS server. 'size' is in GB, 'iops' is maximum input/output operation performance bandwidth per second, 'mount\_path' defines the target mount point on os. Set 'configure\_nfs\_server' to false to ignore creating file storage share. | <pre>object({<br/> size = number<br/> iops = number<br/> mount_path = string<br/> })</pre> | <pre>{<br/> "iops": 600,<br/> "mount_path": "/nfs",<br/> "size": 200<br/>}</pre> | no |
| <a name="input_powervs_backup_network"></a> [powervs\_backup\_network](#input\_powervs\_backup\_network) | Name of the IBM Cloud PowerVS backup network and CIDR to create. | <pre>object({<br/> name = string<br/> cidr = string<br/> })</pre> | <pre>{<br/> "cidr": "10.52.0.0/24",<br/> "name": "bkp_net"<br/>}</pre> | no |
| <a name="input_powervs_image_names"></a> [powervs\_image\_names](#input\_powervs\_image\_names) | List of Images to be imported into cloud account from catalog images. Supported values can be found [here](https://github.com/terraform-ibm-modules/terraform-ibm-powervs-workspace/blob/main/docs/catalog_images_list.md) | `list(string)` | <pre>[<br/> "IBMi-75-03-2924-2",<br/> "IBMi-74-09-2984-1",<br/> "7200-05-07",<br/> "7300-02-01",<br/> "SLES15-SP5-SAP",<br/> "SLES15-SP5-SAP-NETWEAVER",<br/> "RHEL9-SP2-SAP",<br/> "RHEL9-SP2-SAP-NETWEAVER"<br/>]</pre> | no |
| <a name="input_powervs_custom_image_cos_configuration"></a> [powervs\_custom\_image\_cos\_configuration](#input\_powervs\_custom\_image\_cos\_configuration) | Cloud Object Storage bucket containing custom PowerVS images. bucket\_name: string, name of the COS bucket. bucket\_access: string, possible values: public, private (private requires powervs\_custom\_image\_cos\_service\_credentials). bucket\_region: string, COS bucket region | <pre>object({<br/> bucket_name = string<br/> bucket_access = string<br/> bucket_region = string<br/> })</pre> | <pre>{<br/> "bucket_access": "",<br/> "bucket_name": "",<br/> "bucket_region": ""<br/>}</pre> | no |
| <a name="input_powervs_custom_image_cos_service_credentials"></a> [powervs\_custom\_image\_cos\_service\_credentials](#input\_powervs\_custom\_image\_cos\_service\_credentials) | Service credentials for the Cloud Object Storage bucket containing the custom PowerVS images. The bucket must have HMAC credentials enabled. Click [here](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials) for a json example of a service credential. | `string` | `null` | no |
| <a name="input_powervs_custom_images"></a> [powervs\_custom\_images](#input\_powervs\_custom\_images) | Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs\_custom\_image\_cos\_configuration' to be set. image\_name: string, must be unique. Name of image inside PowerVS workspace. file\_name: string, object key of image inside COS bucket. storage\_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap\_type: optional string, Supported values: null, Hana, Netweaver, use null for non-SAP image. | <pre>object({<br/> powervs_custom_image1 = object({<br/> image_name = string<br/> file_name = string<br/> storage_tier = string<br/> sap_type = optional(string)<br/> }),<br/> powervs_custom_image2 = object({<br/> image_name = string<br/> file_name = string<br/> storage_tier = string<br/> sap_type = optional(string)<br/> }),<br/> powervs_custom_image3 = object({<br/> image_name = string<br/> file_name = string<br/> storage_tier = string<br/> sap_type = optional(string)<br/> })<br/> })</pre> | <pre>{<br/> "powervs_custom_image1": {<br/> "file_name": "",<br/> "image_name": "",<br/> "sap_type": null,<br/> "storage_tier": ""<br/> },<br/> "powervs_custom_image2": {<br/> "file_name": "",<br/> "image_name": "",<br/> "sap_type": null,<br/> "storage_tier": ""<br/> },<br/> "powervs_custom_image3": {<br/> "file_name": "",<br/> "image_name": "",<br/> "sap_type": null,<br/> "storage_tier": ""<br/> }<br/>}</pre> | no |
| <a name="input_powervs_image_names"></a> [powervs\_image\_names](#input\_powervs\_image\_names) | List of Images to be imported into cloud account from catalog images. Supported values can be found [here](https://github.com/terraform-ibm-modules/terraform-ibm-powervs-workspace/blob/main/docs/catalog_images_list.md). For custom os image import configure the optional parameter 'powervs\_custom\_images'. | `list(string)` | <pre>[<br/> "IBMi-75-04-2984-1",<br/> "IBMi-74-10-2984-1",<br/> "7200-05-08",<br/> "7300-02-01",<br/> "SLES15-SP5-SAP",<br/> "SLES15-SP5-SAP-NETWEAVER",<br/> "RHEL9-SP2-SAP",<br/> "RHEL9-SP2-SAP-NETWEAVER"<br/>]</pre> | no |
| <a name="input_powervs_management_network"></a> [powervs\_management\_network](#input\_powervs\_management\_network) | Name of the IBM Cloud PowerVS management subnet and CIDR to create. | <pre>object({<br/> name = string<br/> cidr = string<br/> })</pre> | <pre>{<br/> "cidr": "10.51.0.0/24",<br/> "name": "mgmt_net"<br/>}</pre> | no |
| <a name="input_powervs_resource_group_name"></a> [powervs\_resource\_group\_name](#input\_powervs\_resource\_group\_name) | Existing IBM Cloud resource group name. | `string` | n/a | yes |
| <a name="input_powervs_zone"></a> [powervs\_zone](#input\_powervs\_zone) | IBM Cloud data center location where IBM PowerVS infrastructure will be created. | `string` | n/a | yes |
Expand Down
Loading