diff --git a/.tflint.hcl b/.tflint.hcl
new file mode 100644
index 0000000000000000000000000000000000000000..8af4099d8f3765204296403be3a48d169ccb4319
--- /dev/null
+++ b/.tflint.hcl
@@ -0,0 +1,9 @@
+config {
+	call_module_type = "local"
+	force = false
+}
+
+plugin "terraform" {
+	enabled = true
+	preset	= "recommended"
+}
diff --git a/cesnet-mcc/terraform/vms.tf b/cesnet-mcc/terraform/vms.tf
index 4d4275a0f8b7dea453b1869dc089aa5b02f1221f..fa8741548255ca0a77063e9a157e3a7f05ac8797 100644
--- a/cesnet-mcc/terraform/vms.tf
+++ b/cesnet-mcc/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = replace(openstack_compute_instance_v2.master.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  master_ip  = replace(openstack_compute_instance_v2.master.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   ingress_ip = replace(openstack_compute_instance_v2.ingress.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
-  nfs_ip = replace(openstack_compute_instance_v2.nfs.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  nfs_ip     = replace(openstack_compute_instance_v2.nfs.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
 }
 
 # Security groups
@@ -25,9 +25,9 @@ resource "openstack_compute_secgroup_v2" "ping" {
   rule {
     from_port   = 128
     to_port     = 0
-    # initial installation (bug in terraform): ip_protocol = "icmp"
     ip_protocol = "ipv6-icmp"
     cidr        = "::/0"
+    # initial installation (bug in terraform): ip_protocol = "icmp"
   }
 }
 
@@ -100,9 +100,8 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
-  image_id = data.openstack_images_image_v2.ubuntu.id
-  # 4 cores 4 GB RAM
+  name            = "k8s-${var.site_name}-master"
+  image_id        = data.openstack_images_image_v2.ubuntu.id
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", "all"]
   user_data       = file("cloud-init.yaml")
@@ -296,7 +295,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts:
diff --git a/common/terraform/firewall.tf b/common/terraform/firewall.tf
index 7e332d05e9d3a2fd80fe4a4542029a70e7e54d26..68b3621983361e7689ae216d00f3894d9e66ae4b 100644
--- a/common/terraform/firewall.tf
+++ b/common/terraform/firewall.tf
@@ -20,10 +20,11 @@ resource "openstack_networking_secgroup_rule_v2" "ping" {
   ethertype         = strcontains(each.key, ":") ? "IPv6" : "IPv4"
   port_range_min    = strcontains(each.key, ":") ? 128 : 8
   port_range_max    = 0
-  # protocol          = strcontains(each.key, ":") ? "ipv6-icmp" : "icmp"
   protocol          = "icmp"
   remote_ip_prefix  = each.key
   security_group_id = openstack_networking_secgroup_v2.ping.id
+  # for update:
+  # protocol          = strcontains(each.key, ":") ? "ipv6-icmp" : "icmp"
 }
 
 resource "openstack_networking_secgroup_rule_v2" "ssh" {
diff --git a/common/terraform/vars.tf b/common/terraform/vars.tf
index 4c83a79b52a2f594159b994960f760dd88f5a876..8d204cddbeac1e4f670a9ad3ef0cb82361fc5ea8 100644
--- a/common/terraform/vars.tf
+++ b/common/terraform/vars.tf
@@ -19,7 +19,7 @@ variable "site_name" {
 }
 
 variable "gpu_flavor_name" {
-  type = string
+  type        = string
   description = "Name of the GPU flavor"
 }
 
@@ -64,10 +64,10 @@ variable "squid_volume_size" {
 }
 
 variable "security_public_cidr" {
-  type = map(string)
+  type        = map(string)
   description = "Enabled IP ranges"
   default = {
-    "0.0.0.0/0": "Public access",
-    "::/0":      "Public access",
+    "0.0.0.0/0" : "Public access",
+    "::/0" : "Public access",
   }
 }
diff --git a/common/terraform/versions.tf b/common/terraform/versions.tf
index ff6f75b8b4c0492023bcb1017cd41c460169a7a4..21fd5cad74a521ef8111b05b2f55c1e0a96b57b9 100644
--- a/common/terraform/versions.tf
+++ b/common/terraform/versions.tf
@@ -3,9 +3,12 @@ provider "openstack" {
 
 terraform {
   required_providers {
-    local = "~> 2.0"
+    local = {
+      source  = "hashicorp/local"
+      version = "~> 2.0"
+    }
     openstack = {
-      source  = "terraform-provider-openstack/openstack",
+      source  = "terraform-provider-openstack/openstack"
       version = ">= 1.38.0"
     }
   }
diff --git a/production1/terraform/vms.tf b/production1/terraform/vms.tf
index c170ede24adb3a851714d744ed90cc1a7d75db30..95b974d2c25e40a45d9b3af021bd7c2b252287dc 100644
--- a/production1/terraform/vms.tf
+++ b/production1/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = openstack_compute_instance_v2.master.network[0].fixed_ip_v4
+  master_ip  = openstack_compute_instance_v2.master.network[0].fixed_ip_v4
   ingress_ip = openstack_compute_instance_v2.ingress.network[0].fixed_ip_v4
-  nfs_ip = openstack_compute_instance_v2.nfs.network[0].fixed_ip_v4
+  nfs_ip     = openstack_compute_instance_v2.nfs.network[0].fixed_ip_v4
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[0].fixed_ip_v4 : s]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v4 : s]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v4 : s]
 }
 
 resource "openstack_networking_floatingip_v2" "public_ip" {
@@ -31,7 +31,7 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
+  name            = "k8s-${var.site_name}-master"
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
@@ -93,7 +93,7 @@ resource "openstack_compute_instance_v2" "gpu" {
   flavor_id       = data.openstack_compute_flavor_v2.gpu-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
-  tags = ["worker"]
+  tags            = ["worker"]
   network {
     uuid = openstack_networking_network_v2.local-network.id
   }
@@ -221,7 +221,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts:
diff --git a/production2/terraform/vms.tf b/production2/terraform/vms.tf
index c6314656be86bbec189412d06b34531e1409eea8..c59595e2c054cce0b35d657f1cc8b99b19f83985 100644
--- a/production2/terraform/vms.tf
+++ b/production2/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = replace(openstack_compute_instance_v2.master.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  master_ip  = replace(openstack_compute_instance_v2.master.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   ingress_ip = replace(openstack_compute_instance_v2.ingress.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
-  nfs_ip = replace(openstack_compute_instance_v2.nfs.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  nfs_ip     = replace(openstack_compute_instance_v2.nfs.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
 }
 
 data "openstack_images_image_v2" "ubuntu" {
@@ -27,8 +27,8 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
-  image_id = data.openstack_images_image_v2.ubuntu.id
+  name            = "k8s-${var.site_name}-master"
+  image_id        = data.openstack_images_image_v2.ubuntu.id
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
@@ -82,7 +82,7 @@ resource "openstack_compute_instance_v2" "gpu" {
   flavor_id       = data.openstack_compute_flavor_v2.gpu-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
-  tags = ["worker"]
+  tags            = ["worker"]
   network {
     name = var.net_name
   }
@@ -204,7 +204,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts:
diff --git a/staging1/terraform/vms.tf b/staging1/terraform/vms.tf
index b196edab13a7ccf2a80186a39a67b6d177913411..f1dc139577cbce511be1f77ba27364c2a0c59e0d 100644
--- a/staging1/terraform/vms.tf
+++ b/staging1/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = openstack_compute_instance_v2.master.network[0].fixed_ip_v4
+  master_ip  = openstack_compute_instance_v2.master.network[0].fixed_ip_v4
   ingress_ip = openstack_compute_instance_v2.ingress.network[0].fixed_ip_v4
-  nfs_ip = openstack_compute_instance_v2.nfs.network[0].fixed_ip_v4
+  nfs_ip     = openstack_compute_instance_v2.nfs.network[0].fixed_ip_v4
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[0].fixed_ip_v4 : s]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v4 : s]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v4 : s]
 }
 
 resource "openstack_networking_floatingip_v2" "public_ip" {
@@ -31,8 +31,8 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
-  image_id = data.openstack_images_image_v2.ubuntu.id
+  name            = "k8s-${var.site_name}-master"
+  image_id        = data.openstack_images_image_v2.ubuntu.id
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
@@ -86,7 +86,7 @@ resource "openstack_compute_instance_v2" "gpu" {
   flavor_id       = data.openstack_compute_flavor_v2.gpu-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
-  tags = ["worker"]
+  tags            = ["worker"]
   network {
     uuid = openstack_networking_network_v2.local-network.id
   }
@@ -240,7 +240,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts:
diff --git a/staging2/terraform/vms.tf b/staging2/terraform/vms.tf
index c6314656be86bbec189412d06b34531e1409eea8..c59595e2c054cce0b35d657f1cc8b99b19f83985 100644
--- a/staging2/terraform/vms.tf
+++ b/staging2/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = replace(openstack_compute_instance_v2.master.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  master_ip  = replace(openstack_compute_instance_v2.master.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   ingress_ip = replace(openstack_compute_instance_v2.ingress.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
-  nfs_ip = replace(openstack_compute_instance_v2.nfs.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  nfs_ip     = replace(openstack_compute_instance_v2.nfs.network[0].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[0].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
 }
 
 data "openstack_images_image_v2" "ubuntu" {
@@ -27,8 +27,8 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
-  image_id = data.openstack_images_image_v2.ubuntu.id
+  name            = "k8s-${var.site_name}-master"
+  image_id        = data.openstack_images_image_v2.ubuntu.id
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
@@ -82,7 +82,7 @@ resource "openstack_compute_instance_v2" "gpu" {
   flavor_id       = data.openstack_compute_flavor_v2.gpu-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
-  tags = ["worker"]
+  tags            = ["worker"]
   network {
     name = var.net_name
   }
@@ -204,7 +204,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts:
diff --git a/testing/terraform/vms.tf b/testing/terraform/vms.tf
index 0c5751c9ad49a11f8d97b600c5ffec7a80a14dd2..d4d208bc2de5d24b76455f9b07fdc185f04a21c8 100644
--- a/testing/terraform/vms.tf
+++ b/testing/terraform/vms.tf
@@ -3,11 +3,11 @@ locals {
     openstack_compute_instance_v2.ingress,
     openstack_compute_instance_v2.nfs,
   ], openstack_compute_instance_v2.worker[*], openstack_compute_instance_v2.gpu[*])
-  master_ip = replace(openstack_compute_instance_v2.master.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  master_ip  = replace(openstack_compute_instance_v2.master.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   ingress_ip = replace(openstack_compute_instance_v2.ingress.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
-  nfs_ip = replace(openstack_compute_instance_v2.nfs.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
+  nfs_ip     = replace(openstack_compute_instance_v2.nfs.network[1].fixed_ip_v6, "/\\[(.*)\\]/", "$1")
   worker_ips = [for s in openstack_compute_instance_v2.worker[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
-  gpu_ips = [for s in openstack_compute_instance_v2.gpu[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
+  gpu_ips    = [for s in openstack_compute_instance_v2.gpu[*].network[1].fixed_ip_v6 : replace(s, "/\\[(.*)\\]/", "$1")]
 }
 
 resource "openstack_networking_floatingip_v2" "public_ip" {
@@ -31,8 +31,8 @@ data "openstack_compute_flavor_v2" "gpu-flavor" {
 }
 
 resource "openstack_compute_instance_v2" "master" {
-  name     = "k8s-${var.site_name}-master"
-  image_id = data.openstack_images_image_v2.ubuntu.id
+  name            = "k8s-${var.site_name}-master"
+  image_id        = data.openstack_images_image_v2.ubuntu.id
   flavor_id       = data.openstack_compute_flavor_v2.master-flavor.id
   security_groups = ["default", openstack_networking_secgroup_v2.ping.name, openstack_networking_secgroup_v2.ssh.name]
   user_data       = file("cloud-init.yaml")
@@ -255,7 +255,7 @@ nfs:
 
 worker:
   hosts:
-    ${join("\n    ", [for s in local.worker_ips: "${s}:"])}
+    ${join("\n    ", [for s in local.worker_ips : "${s}:"])}
 
 gpu:
   hosts: