How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability...

44
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | How to Architect and Implement Devops on ExaCS TIP4120 Jeffrey T. Wright Sr. Principal Product Manager Database Cloud Services, Exadata October 25, 2018

Transcript of How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability...

Page 1: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018, Oracleand/oritsaffiliates.Allrightsreserved.|

HowtoArchitectandImplementDevops onExaCSTIP4120

JeffreyT.WrightSr.PrincipalProductManagerDatabaseCloudServices,ExadataOctober25,2018

Page 2: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

Agenda

• Architectureblockdiagram• Systemcredentials• OCITerraformtodeployExaCS,scaleExaCSOCPUs• OCIPythonSDKforuserandgroupadministration• DatabasecreationandpatchingviaPython• Demo

2

Page 3: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 3

OCIArchitectureBlockDiagram

Tenancy

Region– e.g.,FrankfurtAvailabilityDomain1

AvailabilityDomain2

AvailabilityDomain3

Compartment

ExaCS

ComputeVCN

ExaCS

Compute

ExaCS

Compute

Region– e.g.,PhoenixAvailabilityDomain1

AvailabilityDomain2

AvailabilityDomain3

Compartment

ExaCS

ComputeVCN

ExaCS

Compute

ExaCS

Compute

Page 4: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 4

OCIArchitectureBlockDiagram

Tenancy

Region– e.g.,FrankfurtAvailabilityDomain1

AvailabilityDomain2

AvailabilityDomain3

CompartmentVCN

Region– e.g.,PhoenixAvailabilityDomain1

AvailabilityDomain2

AvailabilityDomain3

ExaCS

Compute

ExaCS

Compute

ExaCS

Compute

ExaCS

Compute

ExaCS

Compute

ExaCS

Compute

Page 5: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 5

ExadataCloudServiceExampleDBSystem

Tenancy

Region– e.g.,FrankfurtAvailabilityDomain2

CompartmentVCN

ExaCS

ClientSubnetBackupSubnet

InternetGatewayServiceGateway

RoutingRules

SecurityLists

Page 6: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

SystemCredentials

• Cloudcredentials– Giveyouaccesstocloudautomationtodeploycloudresources– welcomeemail

• VirtualMachinecredentials– Giveyouaccesstothevirtualmachinesyoucreatewithyourcloudcredentials– Tokenbasedssh – installedviacloudautomation

• DatabaseServicecredentials– Giveyouaccesstodatabasesyoucreatewithyourcloudcredentials– Passwordsspecifiedwhenyoucreatethedatabaseservice

6

Howtologin

Page 7: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 7

WelcomeEmail

Page 8: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 8

OCIConsole

Page 9: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

SettingupyourCredentials• KeysandOCIDs– https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm

• MakeanRSApublic/privatekeypairinPEMformat• GetthefingerprintofyourRSAkey• GetyourtenancyOCIDanduserOCID• Setupyourlocalenvironmentvariablestorunterraform– https://www.terraform.io/docs/providers/oci/

9

Page 10: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

MaketheKeys# make the private keyopenssl genrsa -out ~/.oci/oci_api_key.pem 2048chmod go-rwx ~/.oci/oci_api_key.pem

# make the public key from the private keyopenssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem

# copy the public key to the clipboardcat ~/.oci/oci_api_key_public.pem | pbcopy

# get the key's fingerprintopenssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c

10

Page 11: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

GettheTenancyOCID

11

Page 12: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

GettheTenancyOCID

12

Page 13: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

GettheUserOCID

13

Page 14: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

GettheUserOCID

14

Page 15: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

AddYourPublicKey

15

Page 16: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 16

GetYourCompartmentOCID

Page 17: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 17

GetYourCompartmentOCID

Page 18: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

EnvironmentVariablesexport OCI_GO_SDK_DEBUG=1export TF_LOG=DEBUG

export TF_VAR_tenancy_ocid=ocid1.tenancy.oc1..aaaaaaaambnyexdtahy6ug7dy2ngnfnthvvbpfgmgmg3slb73f52wkbudvwqexport TF_VAR_region=eu-frankfurt-1

export TF_VAR_compartment_ocid=ocid1.compartment.oc1..aaaaaaaarimctbi7gbn45dj4zdpvuny75aa6lajw2vbvzepgioydyv2i57pq

export TF_VAR_user_ocid=ocid1.user.oc1..aaaaaaaagzwawhkatr2yd74nnox4hpylpllvbau7t3wzehqk7nynpmkhbbcqexport TF_VAR_private_key_path=/Users/jtwright/.oci/oci_api_key.pemexport TF_VAR_fingerprint=a0:fc:3c:2c:e1:9c:4c:3b:7b:37:b7:4a:12:42:ef:56

export TF_VAR_vcn=ocid1.vcn.oc1.eu-frankfurt-1.aaaaaaaaleafo2w7glqy4sarriqlaj7utqz2o4oeyxpmryjw7kg65dxgjnfq

18

Page 19: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

GetTerraformandtheOCIProvider(Plugin)• Formaldoc– https://www.terraform.io/docs/providers/oci/

• Terraformdownload– https://github.com/hashicorp/terraform• https://github.com/hashicorp/terraform/archive/master.zip

• OCIProviderdownload– https://github.com/terraform-providers/terraform-provider-oci• https://github.com/terraform-providers/terraform-provider-oci/archive/master.zip

19

Page 20: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

Non-DatabaseSystemVariableSetupvariable "tenancy_ocid" {}variable "user_ocid" {}variable "fingerprint" {}variable "private_key_path" {}variable "compartment_ocid" {}variable "region" {}provider "oci" {

tenancy_ocid = "${var.tenancy_ocid}"user_ocid = "${var.user_ocid}"fingerprint = "${var.fingerprint}"private_key_path = "${var.private_key_path}"region = "${var.region}"

}variable "CLIENT-CIDR" { default = "10.10.3.0/24" }variable "BACKUP-CIDR" { default = "10.10.4.0/24" }variable "VPC-CIDR" { default = "10.10.0.0/16" }variable "availability_domain" { default = "2" }data "oci_identity_availability_domains" "ADs" {

compartment_id = "${var.tenancy_ocid}"}data "oci_core_services" "test_services" {

filter {name = "name"values = [".*Object.*Storage"]regex = true

}}

20

Page 21: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

DatabaseSystemVariableSetupvariable "db_disk_redundancy" { default = "HIGH" }variable "hostname" { default = "exanode" }variable "db_edition" { default = "ENTERPRISE_EDITION_EXTREME_PERFORMANCE" }variable "db_admin_password" { default = "WelcoMe-OCI#123" }variable "db_name" { default = "TESTDB" }variable "character_set" { default = "AL32UTF8" }variable "n_character_set" { default = "AL16UTF16" }variable "db_workload" { default = "DSS" }variable "pdb_name" { default = "TESTPDB" }variable "db_version" { default = "12.2.0.1" }variable "db_home_display_name" { default = "TESTDBHOME" }variable "db_system_shape" { default = "Exadata.Quarter1.84" }variable "cpu_core_count" { default = "22" }variable "data_storage_percentage" { default = "80" }variable "db_system_display_name" { default = "TESTDB" }variable "license_model" { default = "LICENSE_INCLUDED" }

variable "ssh_public_key" { default = "ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCaqkoNWcD3QDPH4H6LvUizCwcO1Gnk8Xke2b8VToK8U9PjwGDYdH6afdkF2fq0u+kpbiW15AJoJgSvUKIORn+L+htYF9aWRJ3DcAjm9xaSpb+aFPxeh0b5WbYyL5kISD/uBDJvauubIHe9P1ccHv82Tl1EOVrwL0S3N6wFIOCza4ZGXvpyOM9eKyuxy3qnmQDGJ+SKDzT/Yql4NthIhIMcU4IXUqixwpUf5q8PuZzqdbkMaeIHdkiXh08y1YfOu60ypilWaVBEGPC1PJ3hqnE4ZBZy4BHkushuhIOVjP+QodmjaGStlJtvaabGJOMXoOeKzFhNq26qLUW9G2eIcrct jtwright@jtwright-Mac" }

21

Page 22: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

CreateandExaCSinOCIin8Steps

1. Getyouruserid andcompartmentfromyouradministrator2. CreateaVCN3. CreateGateways4. CreateRouteTables5. CreateSecurityLists6. CreateDHCPOptions7. CreateSubnets8. LaunchanExadataDBSystem

22

https://cloud.oracle.com/iaas/whitepapers/Deploying_Exadata_on_OCI.pdf

Page 23: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

VCNandGatewaysresource "oci_core_vcn" "ExaVCN" {cidr_block = "${var.VPC-CIDR}"compartment_id = "${var.compartment_ocid}"dns_label = "frankfurt"display_name = "frankfurt"

}

resource "oci_core_internet_gateway" "ExaIG" {compartment_id = "${var.compartment_ocid}"display_name = "ExaIG"vcn_id = "${oci_core_vcn.ExaVCN.id}"

}

resource "oci_core_service_gateway" "ExaSG" {compartment_id = "${var.compartment_ocid}"services {

service_id = "${lookup(data.oci_core_services.test_services.services[0], "id")}"}

display_name = "ExaSG"vcn_id = "${oci_core_vcn.ExaVCN.id}"

}

23

Page 24: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

RouteTablesresource "oci_core_route_table" "Client_RT" {compartment_id = "${var.compartment_ocid}"vcn_id = "${oci_core_vcn.ExaVCN.id}"display_name = "Client_RT"

route_rules {cidr_block = "0.0.0.0/0"network_entity_id = "${oci_core_internet_gateway.ExaIG.id}"

}}

resource "oci_core_route_table" "Backup_RT" {compartment_id = "${var.compartment_ocid}"vcn_id = "${oci_core_vcn.ExaVCN.id}"display_name = "Backup_RT"

route_rules {destination = "${lookup(data.oci_core_services.test_services.services[0],

"cidr_block")}"destination_type = "SERVICE_CIDR_BLOCK"network_entity_id = "${oci_core_service_gateway.ExaSG.id}"}

}

24

Page 25: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

NodeTrafficSecurityListresource "oci_core_security_list" "NodeTraffic" { compartment_id = "${var.compartment_ocid}" display_name = "NodeTraffic" vcn_id = "${oci_core_vcn.ExaVCN.id}"

egress_security_rules = [{ destination = "${var.CLIENT-CIDR}" protocol = "6" }, { destination = "${var.BACKUP-CIDR}" protocol = 6 }, { destination = "${var.CLIENT-CIDR}" protocol = 1 }, { destination = "${var.BACKUP-CIDR}" protocol = 1 } ]

ingress_security_rules = [{ source = "${var.CLIENT-CIDR}" protocol = "6" }, { source = "${var.BACKUP-CIDR}" protocol = 6 }, { source = "${var.CLIENT-CIDR}" protocol = 1 }, { source = "${var.BACKUP-CIDR}" protocol = 1 } ]}

25

Page 26: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

SSHTrafficSecurityListresource "oci_core_security_list" "SSHTraffic" {compartment_id = "${var.compartment_ocid}"display_name = "SSHTraffic"vcn_id = "${oci_core_vcn.ExaVCN.id}"

ingress_security_rules {protocol = "6" // tcpsource = "0.0.0.0/0"stateless = falsetcp_options = {"min" = 22"max" = 22

}}

}

26

Page 27: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

SQLNet TrafficSecurityListresource "oci_core_security_list" "SQLNet" { compartment_id = "${var.compartment_ocid}" display_name = "SQLNet" vcn_id = "${oci_core_vcn.ExaVCN.id}"

ingress_security_rules = [{ protocol = "6" source = "${var.CLIENT-CIDR}" tcp_options = { "min" = 1521 "max" = 1521 }

}, { protocol = "6" source = "${var.BACKUP-CIDR}" tcp_options = { "min" = 1521 "max" = 1521 } } ]}

27

Page 28: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

ClientTrafficSecurityListresource "oci_core_security_list" "Client" { compartment_id = "${var.compartment_ocid}" display_name = "Client" vcn_id = "${oci_core_vcn.ExaVCN.id}"

egress_security_rules = [{ destination = "${var.CLIENT-CIDR}" protocol = "6" }, { destination = "${var.BACKUP-CIDR}" protocol = 6 }, { destination = "${var.CLIENT-CIDR}" protocol = 1 }, { destination = "${var.BACKUP-CIDR}" protocol = 1 }, ]

ingress_security_rules = [{ source = "${var.CLIENT-CIDR}" protocol = "6" }, { source = "${var.BACKUP-CIDR}" protocol = 6 }, { source = "${var.CLIENT-CIDR}" protocol = 1 }, { source = "${var.BACKUP-CIDR}" protocol = 1 }, ]}

28

Page 29: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

BackupTrafficSecurityListresource "oci_core_security_list" "DB_Backup" {

compartment_id = "${var.compartment_ocid}"display_name = "DB_Backup"vcn_id = "${oci_core_vcn.ExaVCN.id}"

egress_security_rules = [{destination = "${var.CLIENT-CIDR}"protocol = "6"

},{destination = "${var.BACKUP-CIDR}"protocol = 6

}]

ingress_security_rules = [{protocol = "6"source = "${var.CLIENT-CIDR}"

},{protocol = "6"source = "${var.BACKUP-CIDR}"

}]

}

29

Page 30: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

EmptySecurityListsforFutureUseresource "oci_core_security_list" "Flex1" {compartment_id = "${var.compartment_ocid}"display_name = "Flex1"vcn_id = "${oci_core_vcn.ExaVCN.id}"

# empty rule set}

resource "oci_core_security_list" "Flex2" {compartment_id = "${var.compartment_ocid}"display_name = "Flex2"vcn_id = "${oci_core_vcn.ExaVCN.id}"

# empty rule set}

30

Page 31: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

DHCPOptionsresource "oci_core_dhcp_options" "ExaDHCP" {compartment_id = "${var.compartment_ocid}"vcn_id = "${oci_core_vcn.ExaVCN.id}"display_name = "ExaDHCP"

options {type = "DomainNameServer"server_type = "VcnLocalPlusInternet"

}}

31

Page 32: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

ClientSubnetresource "oci_core_subnet" "Client_Subnet_AD2" {availability_domain =

"${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"cidr_block = "${var.CLIENT-CIDR}"display_name = "Client_Subnet_AD2"compartment_id = "${var.compartment_ocid}"vcn_id = "${oci_core_vcn.ExaVCN.id}"route_table_id = "${oci_core_route_table.Client_RT.id}"security_list_ids = ["${oci_core_security_list.Client.id}",

"${oci_core_security_list.SQLNet.id}","${oci_core_security_list.Flex1.id}","${oci_core_security_list.NodeTraffic.id}","${oci_core_security_list.SSHTraffic.id}"

]dns_label = "clientad2"dhcp_options_id = "${oci_core_dhcp_options.ExaDHCP.id}"

}

32

Page 33: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

BackupSubnetresource "oci_core_subnet" "Backup_Subnet_AD2" {availability_domain =

"${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"cidr_block = "${var.BACKUP-CIDR}"display_name = "Backup_Subnet_AD2"compartment_id = "${var.compartment_ocid}"vcn_id = "${oci_core_vcn.ExaVCN.id}"route_table_id = "${oci_core_route_table.Backup_RT.id}"dns_label = "backupad1"security_list_ids = ["${oci_core_security_list.NodeTraffic.id}",

"${oci_core_security_list.DB_Backup.id}","${oci_core_security_list.SSHTraffic.id}","${oci_core_security_list.Flex2.id}"

]dhcp_options_id = "${oci_core_dhcp_options.ExaDHCP.id}"

}

33

Page 34: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

CreatetheExadataDBSystemresource "oci_database_db_system" "DemoExaCS" {availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"compartment_id = "${var.compartment_ocid}"database_edition = "${var.db_edition}"cpu_core_count = "${var.cpu_core_count}"

db_home {database {admin_password = "${var.db_admin_password}"db_name = "${var.db_name}"character_set = "${var.character_set}"ncharacter_set = "${var.n_character_set}"db_workload = "${var.db_workload}"pdb_name = "${var.pdb_name}"

db_backup_config {auto_backup_enabled = true

}}

db_version = "${var.db_version}"display_name = "${var.db_home_display_name}"

}

shape = "${var.db_system_shape}"subnet_id = "${oci_core_subnet.Client_Subnet_AD2.id}"backup_subnet_id = "${oci_core_subnet.Backup_Subnet_AD2.id}"ssh_public_keys = ["${var.ssh_public_key}"]display_name = "${var.db_system_display_name}"

hostname = "${var.hostname}"data_storage_percentage = "${var.data_storage_percentage}"license_model = "${var.license_model}"

}

34

Page 35: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

PlanandApply!jtwright-Mac:jtw jtwright$ pwd/Users/jtwright/.terraform.d/plugins/terraform-provider-oci-master/docs/examples/jtwjtwright-Mac:jtw jtwright$ terraform plan...Plan: 16 to add, 0 to change, 1 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraformcan't guarantee that exactly these actions will be performed if"terraform apply" is subsequently run.

jtwright-Mac:jtw jtwright$ terraform apply...

Plan: 16 to add, 0 to change, 1 to destroy.

Do you want to perform these actions?Terraform will perform the actions described above.Only 'yes' will be accepted to approve.

Enter a value: yes...Apply complete! Resources: 16 added, 0 changed, 1 destroyed.

35

Page 36: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

HowtoScaleOCPUs

36

SimplychangetheDBSystemvariableforOCPUcount,plan,andapplyvariable "cpu_core_count" { default = ”44" }...

Terraform will perform the following actions:

~ oci_core_dhcp_options.ExaDHCP2018/10/19 13:43:52 [DEBUG] plugin: waiting for all plugin processes to complete...

options.#: "2" => "1"options.1.search_domain_names.#: "1" => "0"options.1.search_domain_names.0: "frankfurt.oraclevcn.com" => ""options.1.type: "SearchDomain" => ""

~ oci_database_db_system.DemoExaCScpu_core_count: "22" => "44"

Plan: 0 to add, 2 to change, 0 to destroy....Apply complete! Resources: 0 added, 2 changed, 0 destroyed.jtwright-Mac:jtw jtwright$

Page 37: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

DemoExadataDBSysteminOCIviaTerraform

37

Page 38: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

PythonAPISDK

38

https://docs.cloud.oracle.com/iaas/Content/API/SDKDocs/pythonsdk.htm

#!/usr/bin/pythonimport oci, pprint, osfrom oci.identity.models import AddUserToGroupDetailsfrom oci.config import from_file

# config = from_file()

config = { "compartment" : ocid1.compartment.oc1..aaaaaaaarimctbi7gbn45dj4zdpvuny75aa6lajw2vbvzepgioydyv2i57pq,

"region": eu-frankfurt-1,"tenancy" : ocid1.tenancy.oc1..aaaaaaaambnyexdtahy6ug7dy2ngnfnthvvbpfgmgmg3slb73f52wkbudvwq,"user" : ocid1.user.oc1..aaaaaaaagzwawhkatr2yd74nnox4hpylpllvbau7t3wzehqk7nynpmkhbbcq,"fingerprint": a0:fc:3c:2c:e1:9c:4c:3b:7b:37:b7:4a:12:42:ef:56,"key_file": /Users/jtwright/.oci/oci_api_key.pem,"vcn" : ocid1.vcn.oc1.eu-frankfurt-1.aaaaaaaaleafo2w7glqy4sarriqlaj7utqz2o4oeyxpmryjw7kg65dxgjnfq

}

pprint.pprint( config )

identity = oci.identity.IdentityClient(config)compartment_id = config["tenancy"]

Page 39: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

CreateaGroupandaUser

39

from oci.identity.models import CreateGroupDetailsrequest = CreateGroupDetails()request.compartment_id = compartment_idrequest.name = "exa-pm-group"request.description = "Exadata PM group"

group = identity.create_group(request)

pprint.pprint( group.data )

request = CreateUserDetails()request.compartment_id = compartment_idrequest.name = "exadata-pm"request.description = "Created with the Python SDK"user = identity.create_user(request)

pprint.pprint(user.data)

request = AddUserToGroupDetails()request.group_id = group.data.idrequest.user_id = user.data.idresponse = identity.add_user_to_group(request)

pprint.pprint(response.data)

Page 40: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

CreateaDatabase

40

ExadataCloudatCustomer,OracleCloudInfrastructureClassicx_id_tenant_name = 'a516946'user = '[email protected]'password = 'Welc0me!'baseurl='https://dbaas.oraclecloud.com/’servicesurl='paas/service/dbcs/api/v1.1/instances/'url = baseurl + servicesurl + x_id_tenant_nameheaders = {'X-ID-TENANT-NAME':x_id_tenant_name, 'content-type': 'application/json'}

payload = { "serviceName" : "JTWTEST","description" : "Test database for JTW","edition" : "EE_EP","exadataSystemName": "oow2017exa","level" : "PAAS_EXADATA","subscriptionType": "MONTHLY","version": "12.1.0.2","vmPublicKeyText": "ssh-rsa

AAAAB3NzaC1yc2EAAAADAQABAAABAQCaqkoNWcD3QDPH4H6LvUizCwcO1Gnk8Xke2b8VToK8U9PjwGDYdH6afdkF2fq0u+kpbiW15AJoJgSvUKIORn+L+htYF9aWRJ3DcAjm9xaSpb+aFPxeh0b5WbYyL5kISD/uBDJvauubIHe9P1ccHv82Tl1EOVrwL0S3N6wFIOCza4ZGXvpyOM9eKyuxy3qnmQDGJ+SKDzT/Yql4NthIhIMcU4IXUqixwpUf5q8PuZzqdbkMaeIHdkiXh08y1YfOu60ypilWaVBEGPC1PJ3hqnE4ZBZy4BHkushuhIOVjP+QodmjaGStlJtvaabGJOMXoOeKzFhNq26qLUW9G2eIcrct jtwright@jtwright-Mac",

"parameters": [{

"adminPassword": "Welc0me#1","backupDestination": "none","isRac": "yes","pdbName": "JTWTESTPDB","sid": "JTWTEST","type": "db"

}]}

response = requests.post( url, headers = headers, auth = (user, password), data=json.dumps( payload ) )

Page 41: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

PatchaDatabase

41

ExadataCloudatCustomer,OracleCloudInfrastructureClassicservicesurl="/paas/api/v.1/instancemgmt/"url = baseurl + servicesurl + x_id_tenant_name + "/services/dbaas/instances/" + "JTWTEST" + "/patches/available"headers = {'X-ID-TENANT-NAME':x_id_tenant_name}response = requests.get( url, headers = headers, auth = (user, password) )

newestPatchId = 0for data in response.json():

if data["serviceType"] == "DBaaS":print data["releaseDate"] + " " + data["patchNumber"] + " " + data["patchId"]if data["patchId"] > newestPatchId:

newestPatchId = data["patchId"]

servicesurl="/paas/api/v1.1/instancemgmt/"url = baseurl + servicesurl + x_id_tenant_name + "/services/dbaas/instances/" + "JTWTEST" + "/patches/checks/" + newestPatchIdheaders = {'X-ID-TENANT-NAME':x_id_tenant_name, 'content-type': 'application/json'}

payload = { "additionalNote" : "Patch precheck using REST API" }response = requests.put( url, headers = headers, auth = (user, password), data=json.dumps( payload ) )

jobId=response.json()["details"]["jobId"]servicesurl="/paas/api/v1.1/instancemgmt/"url = baseurl + servicesurl + x_id_tenant_name + "/services/dbaas/instances/" + "JTWTEST" + "/patches/checks/job/" + jobIdheaders = {'X-ID-TENANT-NAME':x_id_tenant_name}

while True:response = requests.get( url, headers = headers, auth = (user, password) )status=response.json()["status"]print statusif status != "IN_PROGRESS":

breaktime.sleep( 10 )

Page 42: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.|

PatchaDatabase

42

ExadataCloudatCustomer,OracleCloudInfrastructureClassicservicesurl="/paas/api/v1.1/instancemgmt/"url = baseurl + servicesurl + x_id_tenant_name + "/services/dbaas/instances/" + "JTWTEST" + "/patches/checks/" + newestPatchIdheaders = {'X-ID-TENANT-NAME':x_id_tenant_name, 'content-type': 'application/json'}

payload = { "additionalNote" : "Patch precheck using REST API" }response = requests.put( url, headers = headers, auth = (user, password), data=json.dumps( payload ) )

jobId=response.json()["details"]["jobId"]servicesurl="/paas/api/v1.1/instancemgmt/"url = baseurl + servicesurl + x_id_tenant_name + "/services/dbaas/instances/" + "JTWTEST" + "/patches/checks/job/" + jobIdheaders = {'X-ID-TENANT-NAME':x_id_tenant_name}

while True:response = requests.get( url, headers = headers, auth = (user, password) )status=response.json()["status"]print statusif status != "IN_PROGRESS":

breaktime.sleep( 10 )

Page 43: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,

Copyright©2018,Oracleand/oritsaffiliates.Allrightsreserved.| 43

Page 44: How to Architect and Implement Devopson ExaCS€¦ · Domain 1 Availability Domain 2 Availability Domain 3 Compartment ExaCS Compute VCN ExaCS Compute ExaCS Compute Region –e.g.,