@ -53,23 +53,51 @@ variable "configure_code_server" {
}
variable " package_managers " {
type = map ( string )
description = < < EOF
A map of package manager names to their respective artifactory repositories .
For example :
type = object ( {
npm = optional ( list ( string ) , [ ] )
go = optional ( list ( string ) , [ ] )
pypi = optional ( list ( string ) , [ ] )
docker = optional ( list ( string ) , [ ] )
} )
description = < < - EOF
A map of package manager names to their respective artifactory repositories . Unused package managers can be omitted .
For example :
{
" npm " : " YOUR_NPM_REPO_KEY " ,
" go " : " YOUR_GO_REPO_KEY " ,
" pypi " : " YOUR_PYPI_REPO_KEY " ,
" docker " : " YOUR_DOCKER_REPO_KEY "
npm = [ " GLOBAL_NPM_REPO_KEY " , " @SCOPED:NPM_REPO_KEY " ]
go = [ " YOUR_GO_REPO_KEY " , " ANOTHER_GO_REPO_KEY " ]
pypi = [ " YOUR_PYPI_REPO_KEY " , " ANOTHER_PYPI_REPO_KEY " ]
docker = [ " YOUR_DOCKER_REPO_KEY " , " ANOTHER_DOCKER_REPO_KEY " ]
}
EOF
EOF
}
locals {
# The username field to use for artifactory
username = var . username_field == " email " ? data . coder_workspace_owner . me . email : data . coder_workspace_owner . me . name
jfrog_host = replace ( var . jfrog_url , " https:// " , " " )
common_values = {
JFROG_URL = var . jfrog_url
JFROG_HOST = local . jfrog_host
JFROG_SERVER_ID = var . jfrog_server_id
ARTIFACTORY_USERNAME = local . username
ARTIFACTORY_EMAIL = data . coder_workspace_owner . me . email
ARTIFACTORY_ACCESS_TOKEN = data . coder_external_auth . jfrog . access_token
}
npmrc = templatefile (
" ${ path . module } /.npmrc.tftpl " ,
merge (
local . common_values ,
{
REPOS = [
for r in var . package_managers . npm :
strcontains ( r , " : " ) ? zipmap ( [ " SCOPE " , " NAME " ] , [ " ${ split ( " : " , r ) [ 0 ] } : " , split ( " : " , r ) [ 1 ] ] ) : { SCOPE = " " , NAME = r }
]
}
)
)
pip_conf = templatefile (
" ${ path . module } /pip.conf.tftpl " , merge ( local . common_values , { REPOS = var . package_managers . pypi } )
)
}
data " coder_workspace " " me " { }
@ -83,19 +111,22 @@ resource "coder_script" "jfrog" {
agent_id = var . agent_id
display_name = " jfrog "
icon = " /icon/jfrog.svg "
script = templatefile ( " ${ path . module } /run.sh " , {
JFROG_URL : var . jfrog_url ,
JFROG_HOST : local . jfrog_host ,
JFROG_SERVER_ID : var . jfrog_server_id ,
ARTIFACTORY_USERNAME : local . username ,
ARTIFACTORY_EMAIL : data . coder_workspace_owner . me . email ,
ARTIFACTORY_ACCESS_TOKEN : data . coder_external_auth . jfrog . access_token ,
CONFIGURE_CODE_SERVER : var . configure_code_server ,
REPOSITORY_NPM : lookup ( var . package_managers , " npm " , " " ) ,
REPOSITORY_GO : lookup ( var . package_managers , " go " , " " ) ,
REPOSITORY_PYPI : lookup ( var . package_managers , " pypi " , " " ) ,
REPOSITORY_DOCKER : lookup ( var . package_managers , " docker " , " " ) ,
} )
script = templatefile ( " ${ path . module } /run.sh " , merge (
local . common_values ,
{
CONFIGURE_CODE_SERVER = var . configure_code_server
HAS_NPM = length ( var . package_managers . npm ) = = 0 ? " " : " YES "
NPMRC = local . npmrc
REPOSITORY_NPM = try ( element ( var . package_managers . npm , 0 ) , " " )
HAS_GO = length ( var . package_managers . go ) = = 0 ? " " : " YES "
REPOSITORY_GO = try ( element ( var . package_managers . go , 0 ) , " " )
HAS_PYPI = length ( var . package_managers . pypi ) = = 0 ? " " : " YES "
PIP_CONF = local . pip_conf
REPOSITORY_PYPI = try ( element ( var . package_managers . pypi , 0 ) , " " )
HAS_DOCKER = length ( var . package_managers . docker ) = = 0 ? " " : " YES "
REGISTER_DOCKER = join ( " \ n " , formatlist ( " register_docker \ " % s \ " " , var . package_managers . docker ) )
}
) )
run_on_start = true
}
@ -121,10 +152,13 @@ resource "coder_env" "jfrog_ide_store_connection" {
}
resource " coder_env " " goproxy " {
count = l ookup( var . package_managers , " go " , " " ) = = " " ? 0 : 1
count = l ength( var . package_managers . go ) = = 0 ? 0 : 1
agent_id = var . agent_id
name = " GOPROXY "
value = " https:// ${ local . username } : ${ data . coder_external_auth . jfrog . access_token } @ ${ local . jfrog_host } /artifactory/api/go/ ${ lookup ( var . package_managers , " go " , " " ) } "
value = join ( " , " , [
for repo in var . package_managers . go :
" https:// ${ local . username } : ${ artifactory_scoped_token . me . access_token } @ ${ local . jfrog_host } /artifactory/api/go/ ${ repo } "
] )
}
output " access_token " {