From 35f4f88eeae00347818c3bb4e2008c9485b4f2c0 Mon Sep 17 00:00:00 2001 From: lfeldman Date: Wed, 6 Apr 2022 16:54:03 +0200 Subject: [PATCH] First commit in DevRel --- .gitignore | 13 + LICENSE | 44 +-- README.md | 160 +++++++- bastion.tf | 83 ++++ compute.tf | 96 +++++ database.tf | 26 ++ datasources.tf | 43 +++ images/architecture-wildfly-oci.png | Bin 0 -> 48836 bytes loadbalancer.tf | 67 ++++ network.tf | 125 ++++++ nsg.tf | 242 ++++++++++++ orm/provider.tf | 20 + orm/variables.tf | 266 +++++++++++++ outputs.tf | 24 ++ provider.tf | 20 + release_files.json | 36 ++ remote.tf | 306 +++++++++++++++ schema.yaml | 576 ++++++++++++++++++++++++++++ scripts/configure_datasource.sh | 30 ++ scripts/configure_driver.sh | 31 ++ scripts/domain_controller.sh | 54 +++ scripts/hostm.xml | 181 +++++++++ scripts/module.xml | 9 + scripts/setup_jboss.sh | 68 ++++ scripts/sshkey.tpl | 5 + tags.tf | 34 ++ tls.tf | 6 + variables.tf | 266 +++++++++++++ version.tf | 6 + 29 files changed, 2797 insertions(+), 40 deletions(-) create mode 100644 bastion.tf create mode 100644 compute.tf create mode 100644 database.tf create mode 100644 datasources.tf create mode 100644 images/architecture-wildfly-oci.png create mode 100644 loadbalancer.tf create mode 100644 network.tf create mode 100644 nsg.tf create mode 100644 orm/provider.tf create mode 100644 orm/variables.tf create mode 100644 outputs.tf create mode 100644 provider.tf create mode 100644 remote.tf create mode 100644 schema.yaml create mode 100644 scripts/configure_datasource.sh create mode 100644 scripts/configure_driver.sh create mode 100755 scripts/domain_controller.sh create mode 100644 scripts/hostm.xml create mode 100644 scripts/module.xml create mode 100644 scripts/setup_jboss.sh create mode 100644 scripts/sshkey.tpl create mode 100644 tags.tf create mode 100644 tls.tf create mode 100644 variables.tf create mode 100644 version.tf diff --git a/.gitignore b/.gitignore index 4e16e08..9c6a4d4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,21 @@ # General .DS_Store +**/.DS_Store .AppleDouble .LSOverride +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* +*.zip* +*.tfvars + +# terraform lock file +**/.terraform.lock.hcl + # Icon must end with two \r Icon diff --git a/LICENSE b/LICENSE index fe41e72..93fda4e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,35 +1,27 @@ -Copyright (c) 2021 Oracle and/or its affiliates. +Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved. The Universal Permissive License (UPL), Version 1.0 -Subject to the condition set forth below, permission is hereby granted to any -person obtaining a copy of this software, associated documentation and/or data -(collectively the "Software"), free of charge and under any and all copyright -rights in the Software, and any and all patent rights owned or freely -licensable by each licensor hereunder covering either (i) the unmodified -Software as contributed to or provided by such licensor, or (ii) the Larger -Works (as defined below), to deal in both +Subject to the condition set forth below, permission is hereby granted to any person obtaining a copy of this +software, associated documentation and/or data (collectively the "Software"), free of charge and under any and +all copyright rights in the Software, and any and all patent rights owned or freely licensable by each licensor +hereunder covering either (i) the unmodified Software as contributed to or provided by such licensor, or +(ii) the Larger Works (as defined below), to deal in both (a) the Software, and -(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -one is included with the Software (each a "Larger Work" to which the Software -is contributed by such licensors), +(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if one is included with the Software +(each a “Larger Work” to which the Software is contributed by such licensors), -without restriction, including without limitation the rights to copy, create -derivative works of, display, perform, and distribute the Software and make, -use, sell, offer for sale, import, export, have made, and have sold the -Software and the Larger Work(s), and to sublicense the foregoing rights on -either these or other terms. +without restriction, including without limitation the rights to copy, create derivative works of, display, +perform, and distribute the Software and make, use, sell, offer for sale, import, export, have made, and have +sold the Software and the Larger Work(s), and to sublicense the foregoing rights on either these or other terms. This license is subject to the following condition: -The above copyright notice and either this complete permission notice or at -a minimum a reference to the UPL must be included in all copies or -substantial portions of the Software. +The above copyright notice and either this complete permission notice or at a minimum a reference to the UPL must +be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 9440b52..68894e3 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,160 @@ -# terraform-oci-arch-jboss-wildfly-atp +# terraform-oci-arch-jboss-wildfly-atp -[![License: UPL](https://img.shields.io/badge/license-UPL-green)](https://img.shields.io/badge/license-UPL-green) [![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=oracle-devrel_terraform-oci-arch-jboss-wildfly-atp)](https://sonarcloud.io/dashboard?id=oracle-devrel_terraform-oci-arch-jboss-wildfly-atp) +## Introduction -## THIS IS A NEW, BLANK REPO THAT IS NOT READY FOR USE YET. PLEASE CHECK BACK SOON! +WildFly supports the latest standards for REST-based data access, including JAX-RS 2, and JSON-P. Building on Jakarta EE provides rich enterprise capabilities in easy to consume frameworks that eliminate boilerplate and reduce technical burden. -## Introduction -MISSING +## Reference Archirecture + +For details of the architecture, see [_Deploy WildFly connected to an autonomous database_](https://docs.oracle.com/en/solutions/wildfly-oci/index.html) + +## Architecture Diagram +![](./images/architecture-wildfly-oci.png) + +## Prerequisites + +- Permission to `manage` the following types of resources in your Oracle Cloud Infrastructure tenancy: `vcns`, `internet-gateways`, `route-tables`, `network-security-groups`, `subnets`, `autonomous-database-family`, and `instances`. + +- Quota to create the following resources: 1 VCN, 3 subnets, 1 Internet Gateway, 1 NAT Gateway, 2 route rules, 1 Load Balancer, 1 ATP instance, and 3 compute instances (bastion host + 2 JBoss servers). + +If you don't have the required permissions and quota, contact your tenancy administrator. See [Policy Reference](https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/policyreference.htm), [Service Limits](https://docs.cloud.oracle.com/en-us/iaas/Content/General/Concepts/servicelimits.htm), [Compartment Quotas](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcequotas.htm). + +## Deploy Using Oracle Resource Manager + +1. Click [![Deploy to Oracle Cloud](https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg)](https://cloud.oracle.com/resourcemanager/stacks/create?region=home&zipUrl=https://github.com/oracle-devrel/terraform-arch-oci-jboss-wildfly-atp/releases/latest/download/terraform-oci-arch-jboss-wildfly-atp.zip) + + If you aren't already signed in, when prompted, enter the tenancy and user credentials. + +2. Review and accept the terms and conditions. + +3. Select the region where you want to deploy the stack. + +4. Follow the on-screen prompts and instructions to create the stack. + +5. After creating the stack, click **Terraform Actions**, and select **Plan**. + +6. Wait for the job to be completed, and review the plan. + + To make any changes, return to the Stack Details page, click **Edit Stack**, and make the required changes. Then, run the **Plan** action again. + +7. If no further changes are necessary, return to the Stack Details page, click **Terraform Actions**, and select **Apply**. + +## Deploy Using the Terraform CLI + +Now, you'll want a local copy of this repo. You can make that with the commands: + +``` + git clone https://github.com/oracle-devrel/terraform-arch-oci-jboss-wildfly-atp.git + cd terraform-arch-oci-jboss-wildfly-atp + ls +``` + +## Prerequisites +First off, you'll need to do some pre-deploy setup. That's all detailed [here](https://github.com/cloud-partners/oci-prerequisites). + +Create a `terraform.tfvars` file, and specify the following variables: + +``` +# Authentication +tenancy_ocid = "" +user_ocid = "" +fingerprint = "" +private_key_path = "" + +# Region +region = "" + +# Compartment +compartment_ocid = "" + +# ATP +atp_password = "" -## Getting Started -MISSING +# JBoss Config +jboss_admin_password = "" -### Prerequisites -MISSING +```` -## Notes/Issues -MISSING +## Create the Resources +Run the following commands: -## URLs -* Nothing at this time + terraform init + terraform plan + terraform apply + + +## Testing deployment + +### Access the Admin Console + +There is no application deployed, but once deployed applications will be available at + +http:/// + +To access the admin console, you have 2 options: + +### Access the console through a SOCKSv5 proxy + +Create a SOCKSv5 proxy through the public IP of the bastion host. + +For example SOCKS v5 proxy on port 1088 + +```bash +ssh -C -D 1088 opc@150.136.41.148 +``` + +Then configure your browser to use a manual SOCK5 proxy, (On Firefox, click **Preferences**, then search for **PROXY**, and click **Settings**). Select Manual Proxy, and SOCKSv5 option. Pass it 'localhost' as the host and 1088 as the port. + +You can then connect through the browser using the Private IP of the server. + +For example: http://10.1.2.2:9990/ to reach the WildFly console. + +### Access the console through SSH tunnel + +You can tunnel to the jboss instance through the bastion host with + +```bash +export BASTION_IP= +export JBOSS_HOST= + +# tunnel +ssh -M -S socket -fnNT -L 9990:${JBOSS_HOST}:9990 opc@${BASTION_IP} cat - +ssh -S socket -O check opc@${BASTION_IP} +``` + +Then the admin console will be available on localhost at: http://localhost:9990/ + +### SSH to a Jboss instance + +You can SSH to the JBoss instance using: + +```bash +ssh -J opc@${BASTION_IP} opc@${HOST} +``` + +or if you need to pass a private key identity, use: + +```bash +ssh -o ProxyCommand="ssh -W %h:%p -i opc@${BASTION_IP}" -i opc@${HOST} +``` + +### SCP files to a JBoss instance + +To SCP files to the JBoss instance (i.e. to deploy applications) + +```bash +scp -o ProxyCommand="ssh -W %h:%p opc@${BASTION_IP}" opc@${HOST}:~/ +``` ## Contributing This project is open source. Please submit your contributions by forking this repository and submitting a pull request! Oracle appreciates any contributions that are made by the open source community. +### Attribution & Credits +Initially, this project was created and distributed in [GitHub Oracle QuickStart space](https://github.com/oracle-quickstart/oci-jboss-wildfly-atp). For that reason, we would like to thank all the involved contributors enlisted below: +- Emmanuel Leroy (https://github.com/streamnsight) +- Lukasz Feldman (https://github.com/lfeldman) + + ## License Copyright (c) 2022 Oracle and/or its affiliates. @@ -29,4 +162,3 @@ Licensed under the Universal Permissive License (UPL), Version 1.0. See [LICENSE](LICENSE) for more details. -ORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK. \ No newline at end of file diff --git a/bastion.tf b/bastion.tf new file mode 100644 index 0000000..98fffad --- /dev/null +++ b/bastion.tf @@ -0,0 +1,83 @@ +## Copyright (c) 2022 Oracle and/or its affiliates. +## All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +resource "oci_bastion_bastion" "bastion-service" { + count = var.use_bastion_service ? 1 : 0 + bastion_type = "STANDARD" + compartment_id = var.compartment_ocid + target_subnet_id = !var.use_existing_vcn ? oci_core_subnet.vcn01_subnet_jboss[0].id : var.compute_subnet_id + client_cidr_block_allow_list = ["0.0.0.0/0"] + defined_tags = { "${oci_identity_tag_namespace.ArchitectureCenterTagNamespace.name}.${oci_identity_tag.ArchitectureCenterTag.name}" = var.release } + name = "BastionService" + max_session_ttl_in_seconds = 1800 +} + +resource "oci_bastion_session" "ssh_via_bastion_service" { + depends_on = [oci_core_instance.jboss_server, + oci_core_nat_gateway.vcn01_nat_gateway, + oci_core_route_table_attachment.vcn01_subnet_jboss_route_table_attachment, + oci_core_route_table.vnc01_nat_route_table, + oci_core_network_security_group.SSHSecurityGroup, + oci_core_network_security_group_security_rule.SSHSecurityEgressGroupRule, + oci_core_network_security_group_security_rule.SSHSecurityIngressGroupRules + ] + + count = var.use_bastion_service ? var.numberOfNodes : 0 + bastion_id = oci_bastion_bastion.bastion-service[0].id + + key_details { + public_key_content = tls_private_key.public_private_key_pair.public_key_openssh + } + target_resource_details { + session_type = "MANAGED_SSH" + target_resource_id = oci_core_instance.jboss_server[count.index].id + + #Optional + target_resource_operating_system_user_name = "opc" + target_resource_port = 22 + target_resource_private_ip_address = oci_core_instance.jboss_server[count.index].private_ip + } + + display_name = "ssh_via_bastion_service" + key_type = "PUB" + session_ttl_in_seconds = 1800 +} + + +resource "oci_core_instance" "bastion_instance" { + count = var.use_bastion_service ? 0 : 1 + availability_domain = var.availability_domain_name == "" ? data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain_number]["name"] : var.availability_domain_name + compartment_id = var.compartment_ocid + display_name = "BastionVM" + shape = var.InstanceShape + + dynamic "shape_config" { + for_each = local.is_flexible_node_shape ? [1] : [] + content { + memory_in_gbs = var.InstanceFlexShapeMemory + ocpus = var.InstanceFlexShapeOCPUS + } + } + + create_vnic_details { + subnet_id = !var.use_existing_vcn ? oci_core_subnet.vcn01_subnet_bastion[0].id : var.bastion_subnet_id + display_name = "bastion" + assign_public_ip = true + nsg_ids = !var.use_existing_nsg ? [oci_core_network_security_group.SSHSecurityGroup[0].id] : var.bastion_nsg_ids + } + + source_details { + source_type = "image" + source_id = data.oci_core_images.InstanceImageOCID.images[0].id + boot_volume_size_in_gbs = "50" + } + + metadata = { + ssh_authorized_keys = var.ssh_public_key + user_data = data.template_cloudinit_config.cloud_init.rendered + } + + defined_tags = { "${oci_identity_tag_namespace.ArchitectureCenterTagNamespace.name}.${oci_identity_tag.ArchitectureCenterTag.name}" = var.release } +} + + diff --git a/compute.tf b/compute.tf new file mode 100644 index 0000000..d5f3800 --- /dev/null +++ b/compute.tf @@ -0,0 +1,96 @@ +## Copyright (c) 2022 Oracle and/or its affiliates. +## All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +data "template_file" "key_script" { + template = file("./scripts/sshkey.tpl") + vars = { + ssh_public_key = tls_private_key.public_private_key_pair.public_key_openssh + } +} + +data "template_cloudinit_config" "cloud_init" { + gzip = true + base64_encode = true + + part { + filename = "ainit.sh" + content_type = "text/x-shellscript" + content = data.template_file.key_script.rendered + } +} + +# Dictionary Locals +locals { + compute_flexible_shapes = [ + "VM.Standard.E3.Flex", + "VM.Standard.E4.Flex", + "VM.Standard.A1.Flex", + "VM.Optimized3.Flex" + ] +} + +# Checks if is using Flexible Compute Shapes +locals { + is_flexible_node_shape = contains(local.compute_flexible_shapes, var.InstanceShape) +} + +resource "oci_core_instance" "jboss_server" { + count = var.numberOfNodes + availability_domain = var.availability_domain_name == "" ? data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain_number]["name"] : var.availability_domain_name + compartment_id = var.compartment_ocid + display_name = "${local.hostname_label}${count.index}" + shape = var.InstanceShape + + dynamic "shape_config" { + for_each = local.is_flexible_node_shape ? [1] : [] + content { + memory_in_gbs = var.InstanceFlexShapeMemory + ocpus = var.InstanceFlexShapeOCPUS + } + } + + fault_domain = "FAULT-DOMAIN-${(count.index % 3) + 1}" + + dynamic "agent_config" { + for_each = var.use_bastion_service ? [1] : [] + content { + are_all_plugins_disabled = false + is_management_disabled = false + is_monitoring_disabled = false + plugins_config { + desired_state = "ENABLED" + name = "Bastion" + } + } + } + + create_vnic_details { + subnet_id = !var.use_existing_vcn ? oci_core_subnet.vcn01_subnet_jboss[0].id : var.compute_subnet_id + hostname_label = "${local.hostname_label}${count.index}" + assign_public_ip = false + nsg_ids = !var.use_existing_nsg ? [oci_core_network_security_group.SSHSecurityGroup[0].id, oci_core_network_security_group.JBossSecurityGroup[0].id] : var.compute_nsg_ids + } + + source_details { + source_type = "image" + source_id = lookup(data.oci_core_images.InstanceImageOCID.images[0], "id") + boot_volume_size_in_gbs = "50" + } + + metadata = { + ssh_authorized_keys = var.ssh_public_key + user_data = data.template_cloudinit_config.cloud_init.rendered + index = count.index + master = "${local.hostname_label}0" + nb_nodes = var.numberOfNodes + prefix = local.hostname_label + } + + provisioner "local-exec" { + command = "sleep 240" + } + + defined_tags = { "${oci_identity_tag_namespace.ArchitectureCenterTagNamespace.name}.${oci_identity_tag.ArchitectureCenterTag.name}" = var.release } + +} + diff --git a/database.tf b/database.tf new file mode 100644 index 0000000..895b09e --- /dev/null +++ b/database.tf @@ -0,0 +1,26 @@ +## Copyright © 2022, Oracle and/or its affiliates. +## All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +################ +# ATP database # +################ + +module "terraform-oci-adb" { + source = "github.com/oracle-devrel/terraform-oci-arch-adb" + adb_password = var.atp_admin_password + compartment_ocid = var.compartment_ocid + adb_database_cpu_core_count = var.atp_cpu_core_count + adb_database_data_storage_size_in_tbs = var.atp_storage_tbs + adb_database_db_name = var.atp_db_name + adb_database_display_name = var.atp_display_name + is_auto_scaling_enabled = var.atp_autoscaling + adb_database_db_workload = "OLTP" + use_existing_vcn = var.atp_private_endpoint + adb_private_endpoint = var.atp_private_endpoint + vcn_id = var.atp_private_endpoint ? local.vcn_id : null + adb_nsg_id = var.atp_private_endpoint ? local.atp_nsg_id : null + adb_private_endpoint_label = var.atp_private_endpoint ? var.atp_private_endpoint_label : null + adb_subnet_id = var.atp_private_endpoint ? local.atp_subnet_id : null + defined_tags = { "${oci_identity_tag_namespace.ArchitectureCenterTagNamespace.name}.${oci_identity_tag.ArchitectureCenterTag.name}" = var.release } +} + diff --git a/datasources.tf b/datasources.tf new file mode 100644 index 0000000..2c55b57 --- /dev/null +++ b/datasources.tf @@ -0,0 +1,43 @@ +## Copyright (c) 2022 Oracle and/or its affiliates. +## All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +# Get list of availability domains +data "oci_identity_availability_domains" "ADs" { + compartment_id = var.tenancy_ocid +} + +# Get the latest Oracle Linux image +data "oci_core_images" "InstanceImageOCID" { + compartment_id = var.compartment_ocid + operating_system = var.instance_os + operating_system_version = var.linux_os_version + shape = var.InstanceShape + + + filter { + name = "display_name" + values = ["^.*Oracle[^G]*$"] + regex = true + } +} + +data "oci_core_vnic_attachments" "jboss_server_primaryvnic_attach" { + count = var.numberOfNodes + availability_domain = var.availability_domain_name == "" ? data.oci_identity_availability_domains.ADs.availability_domains[0]["name"] : var.availability_domain_name + compartment_id = var.compartment_ocid + instance_id = oci_core_instance.jboss_server[count.index].id +} + +data "oci_core_vnic" "jboss_server_primaryvnic" { + count = var.numberOfNodes + vnic_id = data.oci_core_vnic_attachments.jboss_server_primaryvnic_attach[count.index].vnic_attachments.0.vnic_id +} + +data "oci_identity_region_subscriptions" "home_region_subscriptions" { + tenancy_id = var.tenancy_ocid + + filter { + name = "is_home_region" + values = [true] + } +} diff --git a/images/architecture-wildfly-oci.png b/images/architecture-wildfly-oci.png new file mode 100644 index 0000000000000000000000000000000000000000..9dda17b5a542c71fda02f804d626a14bbe10bff4 GIT binary patch literal 48836 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