@ -22,6 +22,10 @@ variable "agent_name" {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				variable  " folder "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  type         = string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  description  = " The directory to open in the IDE. e.g. /home/coder/project " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  validation  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    condition      = can ( regex ( " ^(?:/[^/]+)+ $ " ,  var . folder ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    error_message  = " The folder must be a full path and must not start with a ~. " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				variable  " default "  { 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -69,7 +73,7 @@ variable "jetbrains_ide_versions" {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  validation  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    condition  = ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      alltrue ( [ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  code  in  var . jetbrains_ide_versions  :  contains ( [ " IU " ,  " PS " ,  " WS " ,  " PY " ,  " CL " ,  " GO " ,  " RM " ] ,  code ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  code  in   keys(  var . jetbrains_ide_versions )   :  contains ( [ " IU " ,  " PS " ,  " WS " ,  " PY " ,  " CL " ,  " GO " ,  " RM " ] ,  code ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    error_message  = " The jetbrains_ide_versions must contain a map of valid product codes. Valid product codes are  ${ join ( " , " ,  [ " IU " ,  " PS " ,  " WS " ,  " PY " ,  " CL " ,  " GO " ,  " RM " ] ) } . " 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -103,58 +107,71 @@ variable "jetbrains_ides" {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				locals  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  jetbrains_ides  = { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " GO "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/goland.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " GoLand " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " GO " ,  var . jetbrains_ide_versions [ " GO " ] . build_number ,  " https://download.jetbrains.com/go/goland- ${ var . jetbrains_ide_versions [ " GO " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/goland.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " GoLand " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " GO " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " GO " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/go/goland- ${ var . jetbrains_ide_versions [ " GO " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " WS "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/webstorm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " WebStorm " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " WS " ,  var . jetbrains_ide_versions [ " WS " ] . build_number ,  " https://download.jetbrains.com/webstorm/WebStorm- ${ var . jetbrains_ide_versions [ " WS " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/webstorm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " WebStorm " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " WS " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " WS " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/webstorm/WebStorm- ${ var . jetbrains_ide_versions [ " WS " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " IU "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/intellij.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " IntelliJ IDEA Ultimate " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " IU " ,  var . jetbrains_ide_versions [ " IU " ] . build_number ,  " https://download.jetbrains.com/idea/ideaIU- ${ var . jetbrains_ide_versions [ " IU " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/intellij.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " IntelliJ IDEA Ultimate " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " IU " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " IU " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/idea/ideaIU- ${ var . jetbrains_ide_versions [ " IU " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " PY "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/pycharm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " PyCharm Professional " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " PY " ,  var . jetbrains_ide_versions [ " PY " ] . build_number ,  " https://download.jetbrains.com/python/pycharm-professional- ${ var . jetbrains_ide_versions [ " PY " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/pycharm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " PyCharm Professional " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " PY " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " PY " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/python/pycharm-professional- ${ var . jetbrains_ide_versions [ " PY " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " CL "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/clion.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " CLion " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " CL " ,  var . jetbrains_ide_versions [ " CL " ] . build_number ,  " https://download.jetbrains.com/cpp/CLion- ${ var . jetbrains_ide_versions [ " CL " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/clion.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " CLion " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " CL " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " CL " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/cpp/CLion- ${ var . jetbrains_ide_versions [ " CL " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " PS "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/phpstorm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " PhpStorm " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " PS " ,  var . jetbrains_ide_versions [ " PS " ] . build_number ,  " https://download.jetbrains.com/webide/PhpStorm- ${ var . jetbrains_ide_versions [ " PS " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/phpstorm.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " PhpStorm " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " PS " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " PS " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/webide/PhpStorm- ${ var . jetbrains_ide_versions [ " PS " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " RM "  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = " /icon/rubymine.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = " RubyMine " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = jsonencode ( [ " RM " ,  var . jetbrains_ide_versions [ " RM " ] . build_number ,  " https://download.jetbrains.com/ruby/RubyMine- ${ var . jetbrains_ide_versions [ " RM " ] . version } .tar.gz " ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon           = " /icon/rubymine.svg " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name           = " RubyMine " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      identifier     = " RM " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      build_number   = var . jetbrains_ide_versions [ " RM " ] . build_number , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      download_link  = " https://download.jetbrains.com/ruby/RubyMine- ${ var . jetbrains_ide_versions [ " RM " ] . version } .tar.gz " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				data  " coder_parameter "  " jetbrains_ide "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  type          = "list ( string ) " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  type          = " string " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  name          = " jetbrains_ide " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  display_name  = " JetBrains IDE " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  icon          = " /icon/gateway.svg " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  mutable       = true 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  #  check  if  default  is  in  the  jet_brains_ides  list  and  if  it  is  not  empty  or  null  otherwise  set  it  to  null 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  default  = contains ( var . jetbrains_ides ,  var . default )  ?  var . default  :  null 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  default       = var . default  ==  " "  ?  var . jetbrains_ides [ 0 ]  :  var . default 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  dynamic  " option "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for_each  = {  for  key ,  value  in  local . jetbrains_ides  :  key  =>  value  if  contains ( var . jetbrains_ides ,  key )  } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    for_each  = var . jetbrains_ides 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    content  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = option . value . icon 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = option . value . name 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = option . value . value  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      icon   = lookup ( local . jetbrains_ides ,   option . value ) . icon 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      name   = lookup ( local . jetbrains_ides ,   option . value ) . name 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				      value  = lookup ( local . jetbrains_ides ,  option . value ) . identifier 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -163,9 +180,9 @@ data "coder_workspace" "me" {}
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				resource  " coder_app "  " gateway "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  agent_id      = var . agent_id 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  display_name  = data . coder_parameter . jetbrains_ide . option [ index ( data . coder_parameter . jetbrains_ide . option . * . value ,  data . coder_parameter . jetbrains_ide . value ) ] . name 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  slug          = " gateway " 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  icon          = data . coder_parameter . jetbrains_ide . option [ index ( data . coder_parameter . jetbrains_ide . option . * . value ,  data . coder_parameter . jetbrains_ide . value ) ] . icon 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  display_name  = try ( lookup ( local . jetbrains_ides ,  data . coder_parameter . jetbrains_ide . value ) . name ,  " JetBrains IDE " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  icon          = try ( lookup ( local . jetbrains_ides ,  data . coder_parameter . jetbrains_ide . value ) . icon ,  " /icon/gateway.svg " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  external      = true 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  url  = join ( " " ,  [ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " jetbrains-gateway://connect#type=coder&workspace= " , 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -179,14 +196,38 @@ resource "coder_app" "gateway" {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " &token= " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " $ SESSION_TOKEN " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " &ide_product_code= " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    jsondecode(  data . coder_parameter . jetbrains_ide . value )[ 0 ]  , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    local. jetbrains_ides [  data . coder_parameter . jetbrains_ide . value ]. identifier  , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " &ide_build_number= " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    jsondecode(  data . coder_parameter . jetbrains_ide . value )[ 1 ]  , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    local. jetbrains_ides [  data . coder_parameter . jetbrains_ide . value ]. build_number  , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    " &ide_download_link= " , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    jsondecode(  data . coder_parameter . jetbrains_ide . value )[ 2 ] ,  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    local. jetbrains_ides [  data . coder_parameter . jetbrains_ide . value ]. download_link  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " jetbrains_ides "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " identifier "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = data . coder_parameter . jetbrains_ide . value 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " name "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = coder_app . gateway . display_name 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " icon "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = coder_app . gateway . icon 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " download_link "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = lookup ( local . jetbrains_ides ,  data . coder_parameter . jetbrains_ide . value ) . download_link 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " build_number "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = lookup ( local . jetbrains_ides ,  data . coder_parameter . jetbrains_ide . value ) . build_number 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " version "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = var . jetbrains_ide_versions [ data . coder_parameter . jetbrains_ide . value ] . version 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				output  " url "  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  value  = coder_app . gateway . url 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				}