mirror of
https://gitlab.com/TECHNOFAB/coder-templates.git
synced 2025-12-12 02:00:11 +01:00
111 lines
4.1 KiB
Jsonnet
111 lines
4.1 KiB
Jsonnet
local inka = import 'inka/main.libsonnet';
|
|
local docker = import 'docker/main.libsonnet';
|
|
local coder = import 'coder/main.libsonnet';
|
|
|
|
{
|
|
requirements: {
|
|
docker: docker.provider.require(),
|
|
coder: coder.provider.require(),
|
|
},
|
|
providers: {
|
|
docker: docker.provider.new(),
|
|
coder: coder.provider.new(),
|
|
},
|
|
parameters: {
|
|
cpu: coder.data.parameter.new(
|
|
'cpu', name='CPU [cores]', default=2048, mutable=true, icon='/icon/memory.svg',
|
|
option=[
|
|
coder.data.parameter.option.new('1 Core', value=1024),
|
|
coder.data.parameter.option.new('2 Cores', value=2048),
|
|
coder.data.parameter.option.new('4 Cores', value=4096),
|
|
],
|
|
),
|
|
memory: coder.data.parameter.new(
|
|
'memory', name='Memory [GB]', default=1024, mutable=true, icon='/icon/memory.svg',
|
|
option=[
|
|
coder.data.parameter.option.new('1GB', value=1024),
|
|
coder.data.parameter.option.new('2GB', value=2048),
|
|
coder.data.parameter.option.new('4GB', value=4096),
|
|
],
|
|
),
|
|
git_repo: coder.data.parameter.new(
|
|
'git_repo', name='Git Repository', default='', type='string', mutable=true,
|
|
),
|
|
#home_disk_size: coder.data.parameter.new(
|
|
# 'home_disk_size', name='Home disk size [GB]', default=10, type='number',
|
|
# mutable=false, icon='/emojis/1f4be.png',
|
|
# validation=[
|
|
# coder.data.parameter.validation.new(min=1, max=100),
|
|
# ],
|
|
#),
|
|
},
|
|
coder: {
|
|
auth: coder.data.git_auth.new('git_auth', { id: 'primary-gitlab', }),
|
|
provisioner: coder.data.provisioner.new('me'),
|
|
workspace: coder.data.workspace.new('me'),
|
|
agent: coder.agent.new(
|
|
'main', arch=self.provisioner.arch, os='linux', login_before_ready=false,
|
|
startup_script_timeout=180,
|
|
startup_script=|||
|
|
# install direnv & code-server
|
|
nix-env -iA nixpkgs.direnv nixpkgs.code-server
|
|
code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &
|
|
|||,
|
|
),
|
|
code_server: coder.app.new(
|
|
'code-server', agent_id=self.agent.id, slug='code-server',
|
|
display_name='Code Server', icon='/icon/code.svg', share='owner',
|
|
url='http://localhost:13337/?folder=/home/%s' % self.workspace.owner,
|
|
subdomain=false, healthcheck=[
|
|
coder.app.healthcheck.new(url='http://localhost:13337/healthz', interval=5, threshold=6),
|
|
],
|
|
),
|
|
},
|
|
docker: {
|
|
volume: docker.volume.new(
|
|
'home', name='coder-%s-home' % $.coder.workspace.id,
|
|
# not always supported
|
|
#driver_opts={ size: '%sG' % $.parameters.home_disk_size.value },
|
|
labels=[
|
|
docker.volume.labels.new('coder.owner', $.coder.workspace.owner),
|
|
docker.volume.labels.new('coder.owner_id', $.coder.workspace.owner_id),
|
|
docker.volume.labels.new('coder.workspace_id', $.coder.workspace.id),
|
|
docker.volume.labels.new('coder.workspace_name_at_creation', $.coder.workspace.name),
|
|
],
|
|
_extra={
|
|
lifecycle: [{ ignore_changes: 'all' }],
|
|
}
|
|
),
|
|
container: docker.container.new(
|
|
'workspace', name='coder-%s-workspace' % $.coder.workspace.id, cpu_shares=$.parameters.cpu.value,
|
|
memory=$.parameters.memory.value, image='nixos/nix:latest', hostname=$.coder.workspace.name,
|
|
entrypoint=[
|
|
'sh',
|
|
'-c',
|
|
inka.functions.replace(
|
|
$.coder.agent.init_script,
|
|
'"/localhost|127.0.0.1/"',
|
|
'"host.docker.internal"',
|
|
),
|
|
],
|
|
#runtime='sysbox-runc', storage_opts={ size: '10G' },
|
|
env=[
|
|
'CODER_AGENT_TOKEN=%s' % $.coder.agent.token,
|
|
],
|
|
host=[
|
|
docker.container.host.new('host.docker.internal', 'host-gateway')
|
|
],
|
|
volumes=[
|
|
docker.container.volumes.new(
|
|
container_path='/home/%s' % $.coder.workspace.owner, volume_name=self.volume.name, read_only=false,
|
|
),
|
|
],
|
|
labels=[
|
|
docker.container.labels.new('coder.owner', $.coder.workspace.owner),
|
|
docker.container.labels.new('coder.owner_id', $.coder.workspace.owner_id),
|
|
docker.container.labels.new('coder.workspace_id', $.coder.workspace.id),
|
|
docker.container.labels.new('coder.workspace_name_at_creation', $.coder.workspace.name),
|
|
],
|
|
),
|
|
},
|
|
}
|