Skip to content
Snippets Groups Projects
Commit 64565794 authored by Ondrej Dvorak's avatar Ondrej Dvorak
Browse files

Update 112 files

- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/commandline/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/commandline/cmdline-demo.sh
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/commandline/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/commandline/cmdline-demo-group-project.sh
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/commandline/obrazek.png
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/commandline/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/commandline/cmdline-demo.sh
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/commandline/cmdline-demo.sh.log
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/commandline/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/commandline/cmdline-demo-group-project.sh
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/commandline/obrazek.png
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/nodes-networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/1tier_public_vm_farm/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-instance.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/2tier_public_bastion_private_vm_farm/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/modules/common/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/output.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/modules/infra/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/repet_workshop/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/repet_workshop/output.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/nodes-networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/1tier_public_vm_farm/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-instance.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/bastion-networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/2tier_public_bastion_private_vm_farm/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/keypair.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/nodes-cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/modules/common/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/output.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/modules/infra/volumes.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/terraform/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/terraform_group_project/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/cloudinit-bastion.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/cloudinit.txt
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/instances.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/networks.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/output.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/providers.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/secgroup_rules.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/modules/infra_test/variables.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/output.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/terraform/terminal-transcript.log
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/terraform/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/general/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/meta-metaseminar-hands-on-2023-04-28/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.enes.org/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/vo.thepund.it/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/README.md
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/main.tf
- /openstack-infrastructure-as-code-automation/clouds/g1/brno/repet-workshop/terraform/ost-terraform/output.tf
- /README.md
parent 15ef4165
Branches animsys2
No related tags found
No related merge requests found
Showing
with 0 additions and 1868 deletions
../common/instances.tf
\ No newline at end of file
../common/keypair.tf
\ No newline at end of file
../common/networks.tf
\ No newline at end of file
../common/nodes-cloudinit.txt
\ No newline at end of file
../common/providers.tf
\ No newline at end of file
../common/secgroup_rules.tf
\ No newline at end of file
variable "infra_name" {
description = "Infrastructure (profile) name. Used as a name prefix. Must match [a-zA-Z0-9-]+ regexp."
default = "vo-enes-org-tf-demo"
}
variable "ssh_public_key" {
default = "~/.ssh/id_rsa.pub"
}
#########################
# master nodes settings #
#########################
variable "nodes_count" {
default = 1
}
variable "nodes_name" {
description = "Name of the nodes. Must match [a-zA-Z0-9-]+ regexp."
default = "server"
}
variable "bastion_name" {
description = "Name of the bastion VM. Must match [a-zA-Z0-9-]+ regexp."
default = "bastion-server"
}
variable "bastion_flavor" {
default = "standard.small"
}
variable "nodes_flavor" {
default = "hpc.16core-32ram"
}
variable "int_network" {
description = "Internal network address, use CIDR notation"
default = "10.10.10.0/24"
}
variable "public_external_network" {
description = "Cloud public external network pool"
default = "public-cesnet-195-113-167-GROUP"
}
variable "bastion_image" {
description = "Bastion OS: Image name"
default = "ubuntu-jammy-x86_64"
}
variable "nodes_image" {
description = "nodes OS: Image name"
default = "ubuntu-jammy-x86_64"
}
variable "bastion_ssh_user_name" {
default = "ubuntu"
}
variable "nodes_ssh_user_name" {
default = "ubuntu"
}
variable "nodes_volume_size" {
description = "The size of the volume to create (in gigabytes) for root filesystem. "
default = "10"
}
variable "nodes_extra_volume_size" {
description = "The size of the volume to create (in gigabytes) for extra data."
default = "10"
}
variable "nodes_extra_volume_type" {
description = "The type of extra volume."
default = "ceph-extra-ec"
}
../common/volumes.tf
\ No newline at end of file
####################
# Define instances #
####################
data "openstack_images_image_v2" "nodes_image" {
name = var.nodes_image
}
resource "openstack_compute_instance_v2" "nodes" {
count = var.nodes_count
name = "${var.infra_name}-${var.nodes_name}-${count.index+1}"
image_name = var.nodes_image
flavor_name = var.nodes_flavor
key_pair = openstack_compute_keypair_v2.pubkey.name
security_groups = [openstack_networking_secgroup_v2.secgroup_default.name]
user_data = "#cloud-config\nhostname: ${var.infra_name}-${var.nodes_name}-${count.index+1}.local\n${file("${path.module}/nodes-cloudinit.txt")}"
network {
uuid = openstack_networking_network_v2.network_default.id
port = element(openstack_networking_port_v2.nodes_ports.*.id, count.index)
}
block_device {
uuid = data.openstack_images_image_v2.nodes_image.id
source_type = "image"
volume_size = var.nodes_volume_size
destination_type = "local"
boot_index = 0
delete_on_termination = true
}
}
resource "openstack_compute_keypair_v2" "pubkey" {
name = "${var.infra_name}-keypair"
public_key = file("${var.ssh_public_key}")
}
resource "openstack_networking_network_v2" "network_default" {
name = "${var.infra_name}_network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_default" {
name = "${var.infra_name}_subnet"
network_id = openstack_networking_network_v2.network_default.id
cidr = var.int_network
ip_version = 4
dns_nameservers = ["1.1.1.1", "8.8.8.8"]
}
data "openstack_networking_network_v2" "external_network" {
name = var.public_external_network
}
resource "openstack_networking_router_v2" "router_default" {
name = "${var.infra_name}_infra-test"
admin_state_up = "true"
external_network_id = data.openstack_networking_network_v2.external_network.id
}
resource "openstack_networking_router_interface_v2" "router_default_interface" {
router_id = openstack_networking_router_v2.router_default.id
subnet_id = openstack_networking_subnet_v2.subnet_default.id
}
resource "openstack_networking_port_v2" "nodes_ports" {
count = var.nodes_count
name = "${var.infra_name}_${var.nodes_name}_port_${count.index+1}"
network_id = openstack_networking_network_v2.network_default.id
admin_state_up = "true"
security_group_ids = [openstack_networking_secgroup_v2.secgroup_default.id]
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet_default.id
}
}
users:
- default
- name: ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5fFLKPzxna7fq6kh1CHaIQFnpqXybqLqGs4ZpTDbIrEn7xjCsdyxMm9dcptyS0t6BzXO56BlJyYsR1GWo4rp3g8rMmb9u6/oHmMwgn7G/GLgsaAAO5XHW0A3UEJl3JHfCQLHkN1APQ4dy7gNTG24ahH/pcyr4rV0SsjPUCqFqkSMDZxRgfllNGftxWVHR2fYfPALLrGdhR/SjNSIs3pwBIUXaSfF3aBLsjeGBj4y5YsiR9yI3y2gUmpURROofTvtE7Fp8OIgmWCVqRe70CKDbl17HFbz3FIqYwZLAQHILcp1M45zV8koSOjW5+3C/ZJYzBKOnw/a/1Cw3uHFDrZfRqKLMP/gagnoEPRHjfmUsJ3UJO0eXDCXmnH7F48xBI76CgxYl039/SMmJ2mR0KqAHGnwqVmJI3yBGyK+Z4iEwk+JVDLEB14RHiMp2/I/tYpDWFE1IOigFFNLdfaZrVFY1/fD+yGGyFUO1Wo+CKb8tpndLB4H3Yj2MLRDP/aNpLC4M7Aru7hWnUF81aE/VUAqR6CP2vsHzlAOmH08pOlP9FVITinmJqzBL15l+W7q0Rhh4WBRO4ixlrtRJDNL2wm0vf+GiJnXligFtZ7Cw8bk/LcAe37WqcTl0xLKDyPSw4SvWOC2aE6BVuJjPAhoUUcBaNzoBa7lf4eb+FS4tquTZlQ== freznicek@LenovoThinkCentreE73
disk_setup:
/dev/sdb:
table_type: gpt
layout: true
overwrite: true
fs_setup:
- label: extra_data
filesystem: ext4
device: /dev/sdb1
cmd: mkfs -t %(filesystem)s -L %(label)s %(device)s
runcmd:
- mkdir -p /mnt/data
mounts:
- ["/dev/sdb1", "/mnt/data"]
ssh_pwauth: false
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.51.1"
}
}
}
##################################
# Define Network Security Groups #
##################################
resource "openstack_networking_secgroup_v2" "secgroup_default" {
name = "${var.infra_name}_security_group"
description = "${var.infra_name} Security group"
}
# Allow all internal TCP & UDP
/* resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_alltcp4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 1
port_range_max = 65535
remote_ip_prefix = var.int_network
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_alludp4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "udp"
port_range_min = 1
port_range_max = 65535
remote_ip_prefix = var.int_network
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
} */
# External communication
# HTTP(S)
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_https4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 443
port_range_max = 443
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_http4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 80
port_range_max = 80
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
}
# ICMP
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_icmp4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "icmp"
port_range_min = 0
port_range_max = 0
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
}
# SSH
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_ssh4" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup_default.id
}
# extra volume
resource "openstack_blockstorage_volume_v3" "nodes_extra_volumes" {
count = var.nodes_count
name = "${var.infra_name}-extra-volume-${count.index+1}"
size = var.nodes_extra_volume_size
volume_type = var.nodes_extra_volume_type
}
resource "openstack_compute_volume_attach_v2" "nodes_extra_volumes_attachments" {
count = var.nodes_count
instance_id = element(openstack_compute_instance_v2.nodes.*.id, count.index)
volume_id = element(openstack_blockstorage_volume_v3.nodes_extra_volumes.*.id, count.index)
device = "/dev/sdb"
}
/*
output "toplevel_instance_ip_bastion" {
value = module.toplevel.bastion_instance_ip
}
output "toplevel_instance_floating_ip_bastion" {
value = module.toplevel.bastion_floating_ip
}
output "d_infra_test_instance_ip_a" {
value = module.toplevel.nodes_a_instance_ip
}
output "c_infra_test_instance_name_a" {
value = module.toplevel.nodes_a_name
}
output "e_infra_test_instance_name_b" {
value = module.toplevel.nodes_b_name
}
output "f_infra_test_instance_ip_b" {
value = module.toplevel.nodes_b_instance_ip
}*/
\ No newline at end of file
# vo.thepund.it Infrastructure as Code demo
There are presented two simple approaches:
* [infrastructure using terraform (best practice)](./terraform)
* [infrastructure using command-line openstack client](./commandline)
# Build OpenStack infrastructure from command-line using openstack client
## Pre-requisites
* Linux/Mac/WSL2 terminal
* installed openstack client ([how?](https://docs.fuga.cloud/how-to-use-the-openstack-cli-tools-on-linux))
* downloaded application credentials from OpenStack Horizon dashboard ([how?](https://docs.cloud.muni.cz/cloud/cli/#getting-credentials))
## How to use the script
```sh
./cmdline-demo-group-project.sh "infrastructure-a"
```
## Infrastructure schema
![obrazek.png](./obrazek.png)
#!/usr/bin/env bash
# MetaCentrum MCC openstack command-line demo - group projecp
# Usage: cmdline-demo-group-project.sh [ostack-entities-prefix]
#
SCRIPT_DIR=$(dirname $(readlink -f $0))
#############################################################################
# variables
#############################################################################
ENTITIES_PREFIX="${1:-"the-pund-it"}"
EXTERNAL_NETWORK_NAME="public-muni-147-251-124-GROUP"
KEYPAIR_NAME="${ENTITIES_PREFIX}-demo-keypair"
NETWORK_NAME="${ENTITIES_PREFIX}-demo-network"
SUBNET_NAME="${ENTITIES_PREFIX}-demo-subnet"
SUBNET_CIDR="192.168.0.0/24"
SERVER_NAME="${ENTITIES_PREFIX}-demo-server"
FLAVOR_NAME="standard.2core-16ram"
IMAGE_NAME="ubuntu-jammy-x86_64"
VM_LOGIN="ubuntu"
ROUTER_NAME="${ENTITIES_PREFIX}-demo-router"
FIP_FILE="fip.txt"
SECGROUP_NAME="${ENTITIES_PREFIX}-demo-secgroup"
SSH_KEYPAIR_DIR="${HOME}/.ssh/generated-keypair"
#############################################################################
# functions
#############################################################################
source ${SCRIPT_DIR}/../../../../common/lib.sh.inc
#############################################################################
# main steps
#############################################################################
# test openstack client version
if ! openstack --version; then
log "Install openstack client (yum / apt install python3-openstackclient)"
fi
# delete objects (from previous run)
log "Delete previously created objects"
delete_objects_group_project
log "List currently allocated objects"
list_objects
log_keypress "Create (generate) locally SSH keypair, upload public SSH key to cloud"
mkdir -p ${SSH_KEYPAIR_DIR}
chmod 700 ${SSH_KEYPAIR_DIR}
ssh-keygen -t rsa -b 4096 -f "${SSH_KEYPAIR_DIR}/id_rsa.${KEYPAIR_NAME}"
openstack keypair create --type ssh --public-key "${SSH_KEYPAIR_DIR}/id_rsa.${KEYPAIR_NAME}.pub" "${KEYPAIR_NAME}"
ls -la ${SSH_KEYPAIR_DIR}/id_rsa.${KEYPAIR_NAME}*
log_keypress "Create cloud security groups (custom VM firewall) to allow outgoing traffic and incomming SSH traffic on port 22"
openstack security group create --description "${ENTITIES_PREFIX} demo default security group" "${SECGROUP_NAME}"
openstack security group rule create --ingress --proto tcp --remote-ip 0.0.0.0/0 --dst-port 22 "${SECGROUP_NAME}"
openstack security group rule create --egress --proto tcp --remote-ip 0.0.0.0/0 --dst-port 1:65535 "${SECGROUP_NAME}"
log_keypress "Create cloud private network and subnet, so far isolated (CIDR:${SUBNET_CIDR})"
openstack network create "${NETWORK_NAME}"
NETWORK_ID=$(openstack network show "${NETWORK_NAME}" -f value -c id)
openstack subnet create "${SUBNET_NAME}" --network "${NETWORK_ID}" --subnet-range "${SUBNET_CIDR}"
log_keypress "Create cloud VM instance \"${SERVER_NAME}\" with following configuration:\n" \
" flavor: ${FLAVOR_NAME}, image/os: ${IMAGE_NAME}, network: ${NETWORK_NAME}\n" \
" keypair: ${KEYPAIR_NAME}, sec-group/firewall: ${SECGROUP_NAME})"
openstack server create --flavor "${FLAVOR_NAME}" --image "${IMAGE_NAME}" \
--network "${NETWORK_ID}" --key-name "${KEYPAIR_NAME}" \
--security-group "${SECGROUP_NAME}" "${SERVER_NAME}"
SERVER_ID=$(openstack server show "${SERVER_NAME}" -f value -c id)
log "Wait for VM instance \"${SERVER_NAME}\" being ACTIVE"
vm_wait_for_status "${SERVER_NAME}" "ACTIVE"
log "Route VM from internal software defined networking outside"
log_keypress " 1] Create route, associate router with external provider network and internal subnet (${SUBNET_CIDR})"
openstack router create "${ROUTER_NAME}"
openstack router set "${ROUTER_NAME}" --external-gateway "${EXTERNAL_NETWORK_NAME}"
openstack router add subnet "${ROUTER_NAME}" "${SUBNET_NAME}"
log_keypress " 2] Allocate single FIP (floating ip) from external provider network"
FIP=$(openstack floating ip create "${EXTERNAL_NETWORK_NAME}" -f value -c name)
echo "${FIP}" > "${FIP_FILE}"
echo "Obtained public FIP ${FIP}"
log_keypress " 3] Assign selected FIP with created VM"
openstack server add floating ip "${SERVER_NAME}" "${FIP}"
log "Test access to the VM server instance"
log_keypress " 1] TCP ping (ncat -z ${FIP} 22)"
test_vm_access "${FIP}"
log_keypress " 2] SSH command (ssh -i ${SSH_KEYPAIR_DIR}/id_rsa.${KEYPAIR_NAME} ${VM_LOGIN}@${FIP})"
ssh-keygen -R ${FIP} &>/dev/null
ssh -i "${SSH_KEYPAIR_DIR}/id_rsa.${KEYPAIR_NAME}" "${VM_LOGIN}@${FIP}" 'echo "";uname -a;uptime'
log_keypress "Object summary:"
list_objects
log_keypress "Teardown of the objects"
delete_objects_group_project
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment