Skip to content
Snippets Groups Projects
Commit d7c963a6 authored by František Řezníček's avatar František Řezníček
Browse files

feat: make terraform functional among group projects

parent 75240844
Branches
Tags
No related merge requests found
Showing
with 3215 additions and 32 deletions
...@@ -16,18 +16,19 @@ module "toplevel" { ...@@ -16,18 +16,19 @@ module "toplevel" {
infra_name = "general-tf-demo" infra_name = "general-tf-demo"
nodes_count = 2 nodes_count = 2
nodes_flavor = "e1.small"
nodes_image = "ubuntu-jammy-x86_64" nodes_image = "ubuntu-jammy-x86_64"
public_external_network = "external-ipv4-general-public"
nodes_extra_volume_size = 10 # extra volume size in GB nodes_extra_volume_size = 10 # extra volume size in GB
# OpenStack project type: # Externally defined parameters (see *.tfvar files)
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
# root variables wired 1:1 to "toplevel" module to be able to toggle between # root variables wired 1:1 to "toplevel" module to be able to toggle between
# group and personal project infrastructure # group and personal project infrastructure in various clouds
router_creation_enable = var.router_creation_enable
internal_network_creation_enable = var.internal_network_creation_enable internal_network_creation_enable = var.internal_network_creation_enable
internal_network_name = var.internal_network_name internal_network_name = var.internal_network_name
internal_subnet_creation_enable = var.internal_subnet_creation_enable internal_subnet_creation_enable = var.internal_subnet_creation_enable
internal_subnet_name = var.internal_subnet_name internal_subnet_name = var.internal_subnet_name
router_creation_enable = var.router_creation_enable
public_external_network = var.public_external_network # "external-ipv4-general-public"
nodes_flavor = var.nodes_flavor # "e1.small"
bastion_flavor = var.bastion_flavor # "e1.small"
} }
...@@ -17,7 +17,6 @@ variable "internal_network_cidr" { ...@@ -17,7 +17,6 @@ variable "internal_network_cidr" {
variable "public_external_network" { variable "public_external_network" {
description = "Cloud public external network pool" description = "Cloud public external network pool"
default = "public-cesnet-195-113-167-GROUP"
} }
variable "router_creation_enable" { variable "router_creation_enable" {
...@@ -54,6 +53,7 @@ variable "bastion_name" { ...@@ -54,6 +53,7 @@ variable "bastion_name" {
} }
variable "bastion_flavor" { variable "bastion_flavor" {
description = "Bastion VM - flavor name"
default = "e1.tiny" default = "e1.tiny"
} }
...@@ -80,6 +80,7 @@ variable "nodes_name" { ...@@ -80,6 +80,7 @@ variable "nodes_name" {
} }
variable "nodes_flavor" { variable "nodes_flavor" {
description = "Nodes - flavor name"
default = "standard.large" default = "standard.large"
} }
......
#!/usr/bin/env bash #!/usr/bin/env bash
# e-INFRA CZ G2 openstack terraform demo - personal/group project # e-INFRA CZ G2 openstack terraform demo - personal/group project
# Usage: terraform-demo.sh [ostack-entities-prefix/profile-name] # Usage: terraform-demo.sh <cloud-environment-name>
SCRIPT_DIR=$(dirname $(readlink -f $0)) SCRIPT_DIR=$(dirname $(readlink -f $0))
############################################################################# #############################################################################
# variables # variables
############################################################################# #############################################################################
ENTITIES_PREFIX="${1:-"${USER}_$(hostname)"}" CLOUD_ENV_NAME="$1"
export CLOUD_ENV_NAME
############################################################################# #############################################################################
# functions # functions
############################################################################# #############################################################################
source ${SCRIPT_DIR}/../../../../common/lib.sh.inc source ${SCRIPT_DIR}/../../lib.sh.inc
############################################################################# #############################################################################
# main steps # main steps
############################################################################# #############################################################################
log_section "Using commandline tools:" log_section "Using commandline tools:"
./terraform.sh validate-tools ./terraform.sh validate-tools
log_section "Using commandline tools:" log_section "Detect cloud (${CLOUD_ENV_NAME} requested):"
./terraform.sh detect-cloud ./terraform.sh detect-cloud
log_section "Detect project:"
./terraform.sh detect-project ./terraform.sh detect-project
log_section "Initialize the terraform environment:"
./terraform.sh init ./terraform.sh init
log_section "Validate the terraform environment:"
./terraform.sh validate ./terraform.sh validate
log_section "Perform terraform environment planning:"
./terraform.sh plan --out plan ./terraform.sh plan --out plan
log_section "Apply previously performed terraform plan i.e. create IaaS infrastructure:"
./terraform.sh apply plan ./terraform.sh apply plan
log_section "Destroy previously created IaaS infrastructure:"
./terraform.sh destroy ./terraform.sh destroy
...@@ -6,17 +6,24 @@ ...@@ -6,17 +6,24 @@
# * detect-cloud # * detect-cloud
# * detect-project # * detect-project
# * validate-tools # * validate-tools
# * or any valid terraform arguments # * clean-up-metadata-and-state-files
# * ... or any valid terraform arguments
# functions # variables
TERRAFORM="terraform"
SCRIPT_DIR=$(dirname $(readlink -f $0)) SCRIPT_DIR=$(dirname $(readlink -f $0))
source ${SCRIPT_DIR}/../../../../common/lib.sh.inc # functions
source ${SCRIPT_DIR}/../../lib.sh.inc
if [[ "$1" =~ (detect-(cloud|project)|validate-tools) ]]; then if [[ "$1" =~ (detect-(cloud|project)|validate-tools|clean-up-metadata-and-state-files) ]]; then
if [ "$1" == "detect-cloud" ]; then if [ "$1" == "detect-cloud" ]; then
log "Using OpenStack cloud:" log "Using OpenStack cloud:"
openstack version show -fcsv | grep identity openstack version show -fcsv | grep identity
elif [ "$1" == "clean-up-metadata-and-state-files" ]; then
log "Cleaning up metadata and state files:"
rm -rf ./.terraform
rm -f ./.terraform* ./terraform.tfstate*
elif [ "$1" == "detect-project" ]; then elif [ "$1" == "detect-project" ]; then
project_type=group project_type=group
if prj_name=$(is_personal_project); then if prj_name=$(is_personal_project); then
...@@ -32,17 +39,15 @@ else ...@@ -32,17 +39,15 @@ else
project_type=group project_type=group
if prj_name=$(is_personal_project); then if prj_name=$(is_personal_project); then
project_type=personal project_type=personal
if [ "$1" == "plan" ]; then fi
terraform "$@" --var-file=personal-projects.tfvars if [ "$1" == "plan" -o "$1" == "destroy" ]; then
if [ -n "${CLOUD_ENV_NAME}" ]; then
${TERRAFORM} "$@" "--var-file=${CLOUD_ENV_NAME}-${project_type}-projects.tfvars"
else else
terraform "$@" ${TERRAFORM} "$@"
fi fi
else else
terraform "$@" ${TERRAFORM} "$@"
fi fi
fi fi
variable "router_creation_enable" {
description = "Create dedicated router instance. true/false ~ create new / reuse existing personal router"
default = true
}
variable "internal_network_creation_enable" { variable "internal_network_creation_enable" {
description = "Create dedicated internal network. true/false ~ create new / reuse existing personal network" description = "Create dedicated internal network. true/false ~ create new / reuse existing personal network"
default = true default = true
...@@ -22,3 +17,22 @@ variable "internal_subnet_name" { ...@@ -22,3 +17,22 @@ variable "internal_subnet_name" {
description = "Internal network subnet name. Either dedicated new subnet or existing personal subnet name" description = "Internal network subnet name. Either dedicated new subnet or existing personal subnet name"
default = "<var.infra_name>_subnet" default = "<var.infra_name>_subnet"
} }
variable "router_creation_enable" {
description = "Create dedicated router instance. true/false ~ create new / reuse existing personal router"
default = true
}
variable "public_external_network" {
description = "Cloud public external network pool (FIP addresses)"
}
variable "nodes_flavor" {
description = "Nodes - flavor name"
default = "standard.large"
}
variable "bastion_flavor" {
description = "Bastion VM - flavor name"
default = "e1.tiny"
}
# extra variabes for an OpenStack group project
# extra variabes for an OpenStack group project
public_external_network = "public-cesnet-195-113-167-GROUP"
nodes_flavor = "standard.small"
bastion_flavor = "standard.small"
# extra variabes for an OpenStack personal project # extra variabes for an OpenStack personal project
router_creation_enable = false router_creation_enable = false
internal_network_creation_enable = false internal_network_creation_enable = false
internal_network_name = "internal-ipv4-general-private" internal_network_name = "147-251-115-pers-proj-net"
internal_subnet_creation_enable = false internal_subnet_creation_enable = false
internal_subnet_name = "internal-ipv4-general-private-172-16-0-0" internal_subnet_name = "subnet-147-251-115-pers-proj-net"
public_external_network = "public-muni-147-251-115-PERSONAL"
nodes_flavor = "standard.small"
bastion_flavor = "standard.small"
# extra variabes for an OpenStack group project
# extra variabes for an OpenStack group project
# extra variabes for an OpenStack group project
public_external_network = "external-ipv4-general-public"
nodes_flavor = "e1.small"
bastion_flavor = "e1.small"
...@@ -4,3 +4,6 @@ internal_network_creation_enable = false ...@@ -4,3 +4,6 @@ internal_network_creation_enable = false
internal_network_name = "internal-ipv4-general-private" internal_network_name = "internal-ipv4-general-private"
internal_subnet_creation_enable = false internal_subnet_creation_enable = false
internal_subnet_name = "internal-ipv4-general-private-172-16-0-0" internal_subnet_name = "internal-ipv4-general-private-172-16-0-0"
public_external_network = "external-ipv4-general-public"
nodes_flavor = "e1.small"
bastion_flavor = "e1.small"
# extra variabes for an OpenStack group project
public_external_network = "external-ipv4-general-public"
nodes_flavor = "e1.small"
bastion_flavor = "e1.small"
...@@ -4,3 +4,6 @@ internal_network_creation_enable = false ...@@ -4,3 +4,6 @@ internal_network_creation_enable = false
internal_network_name = "internal-ipv4-general-private" internal_network_name = "internal-ipv4-general-private"
internal_subnet_creation_enable = false internal_subnet_creation_enable = false
internal_subnet_name = "internal-ipv4-general-private-172-16-0-0" internal_subnet_name = "internal-ipv4-general-private-172-16-0-0"
public_external_network = "external-ipv4-general-public"
nodes_flavor = "e1.small"
bastion_flavor = "e1.small"
../../../common/general/terraform/modules
\ No newline at end of file
../../../common/general/terraform
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment