diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d2cb6215b9641ddb7f411de680a466679b087c81..8a3a7e43a392a33ed1005b1ffa1b1f3218fdf6f8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,7 +7,8 @@ stages:
   - deploy
 
 variables:
-  IMAGE: debian-9-x86_64_hadoop_rc
+  IMAGE_NAME: debian-9-x86_64_hadoop_rc
+  IMAGE_VISIBILITY: community
   JOB: check
   PYTHONUNBUFFERED: 1
   SENSITIVE: 1
@@ -34,7 +35,7 @@ terraform-single:
       - ".terraform/"
       - "*.tfstate"
   script:
-    - ./launch.sh -var type=hadoop-single -var flavor=standard.large -var n=0 -var domain=terra1 -var image=$IMAGE
+    - ./launch.sh -var type=hadoop-single -var flavor=standard.large -var n=0 -var domain=terra1 -var image_name=$IMAGE_NAME -var image_visibility=$IMAGE_VISIBILITY
     - eval $(ssh-agent -s)
     - ssh-add ./ssh-key.terra1.txt
     - ansible -i ./inventory -m synchronize -a 'use_ssh_args=yes verify_host=yes src=image/tests dest=/opt/ mode=push' master
@@ -56,7 +57,7 @@ terraform-cluster:
       - ".terraform/"
       - "*.tfstate"
   script:
-    - ./launch.sh -var type=hadoop -var domain=terra2 -var image=$IMAGE
+    - ./launch.sh -var type=hadoop -var domain=terra2 -var image_name=$IMAGE_NAME -var image_visibility=$IMAGE_VISIBILITY
     - eval $(ssh-agent -s)
     - ssh-add ./ssh-key.terra2.txt
     - ansible -i ./inventory -m synchronize -a 'use_ssh_args=yes verify_host=yes src=image/tests dest=/opt/ mode=push' master
diff --git a/deploy.tf b/deploy.tf
index b44d887b61eb45c1becccaf409d0af5c10b89491..f3e4cb76027223e77603c53fea8870ebf19bbf11 100644
--- a/deploy.tf
+++ b/deploy.tf
@@ -18,6 +18,13 @@ data "openstack_compute_keypair_v2" "userkey" {
 	name = var.ssh
 }
 
+data "openstack_images_image_v2" "image" {
+	name = var.image_name
+	owner = var.image_owner
+	visibility = var.image_visibility
+	most_recent = true
+}
+
 data "template_file" "user_data_common" {
 	count = var.n + 1
 	template = file("common/ctx.yaml")
@@ -102,7 +109,7 @@ resource "openstack_compute_instance_v2" "server" {
 	count = var.n + 1
 	name = format("%s.%s", data.template_file.user_data_common[count.index].vars.host, var.domain)
 	flavor_name = var.flavor
-	image_name = var.image
+	image_id = var.image_id == null ? data.openstack_images_image_v2.image.id : var.image_id
 	key_pair = var.ssh
 	security_groups = [
 		openstack_networking_secgroup_v2.all.name,
diff --git a/variables.tf b/variables.tf
index 1c1d1ca075676085ba63543d49e7669e6731cbbe..b2800e9bd8caf44b7c36cd30313421d1aa16d97a 100644
--- a/variables.tf
+++ b/variables.tf
@@ -28,9 +28,24 @@ variable "flavor" {
 	default = "standard.medium"
 }
 
-variable "image" {
-	description = "Image name"
-	default = "debian-9-x86_64"
+variable "image_id" {
+	description = "Image id (override other image search values)"
+	default = null
+}
+
+variable "image_name" {
+	description = "Image search name"
+	default = "debian-9-x86_64_hadoop"
+}
+
+variable "image_owner" {
+	description = "Image search owner"
+	default = "85c8a74440e94d4b91d0dc067308cb64" # meta-hadoop
+}
+
+variable "image_visibility" {
+	description = "Image search visibility"
+	default = "public"
 }
 
 variable "image_user" {