Coder中的Templates
Templates使用标准Terraform进行编写,并且把基础框架用作工作空间。(例如:aws_instance, kubernetes_pod, or both)。
在大多数情况下,小部分的使用者管理模板。然后其他的使用者从模板中部署他们的开发工作空间。
添加一个模板
# 创建一个本地文件夹存储模板
mkdir -p $HOME/coder/templates
cd $HOME/coder/templates# 从模板中启动一个例子(初始化)
coder templates init# 可选择的:修改模板
vim <模板名字>/main.tf# 把模板增加到Coder部署中
coder templates <create/update> <模板名字>
个性化模板
提供的例子模板并不是用于支持所有使用情况的。我们需要在运行
coder templates init
或
coder templates pull
通过编辑Terraform代码来添加需要的特点。
模板中的概念
模板是使用标准Terraform写的,Coder Terraform Provider被用来定义工作空间的生命周期并且建立从资源到Coder 的连接。
接下来的是模板中的一些关键概念的总览。可以在 Coder Terraform provider docs中查看所有的模板选项。
资源Resource
如果一个Coder的代理被连接到了一个资源,用户就可以通过SSH或者网页应用程序连接直接连接到这个资源。
Coder代理agent
一旦一个Coder的工作空间被创造了,Coder代理会在资源(docker_container)和Coder之间建立一个连接,这样用户就能够从web UI或者CLI中连接到他们的工作空间。模板能够有多种代理去允许用户连接到他们空间中的多种资源。
资源必须下载并且启动Coder代理二进制文件来链接到Coder。这意味着资源必须能够访问Coder的URL。
Coder代理的初始脚本如下:
data "coder_workspace" "me" {
}resource "coder_agent" "pod1" {os = "linux"arch = "amd64"
}resource "kubernetes_pod" "pod1" {spec {...container {command = ["sh", "-c", coder_agent.pod1.init_script]env {name = "CODER_AGENT_TOKEN"value = coder_agent.dev.token}}}
}
参数
模板通常包含参数。在Terraform中,这些参数通过variable块来定义的。有两种参数:
- 管理、模板范围的参数是在模板被创造或者更新时设立的。这些值通常是云配置的,例如VPC,同时要在模板的代码中使用sensitive = true进行注释。
- 用户、工作空间参数是在用户创造工作空间时设立的。这些值通常是个性化设置,例如地区偏好或者工作空间图像。
下面的模板样例使用管理员和用户参数去让开发者能从任何图像中建立工作空间,只要它处在恰当的注册表。
variable "image_registry_url" {description = "The image registry developers can sele"default = "artifactory1.organization.com`sensitive = true # admin (template-wide) parameter
}variable "docker_image_name" {description = "The image your workspace will start from"default = "base_image"sensitive = false # user (workspace) parameter
}resource "docker_image" "workspace" {# ... other configname = "${var.image_registry_url}/${var.docker_image_name}"
}
永久的和短暂的资源
可以使用工作空间的状态来确保在Coder罐中的一些资源是永久的,而其他的是短暂的。
开始、停止
Coder工作空间能够被开始和停止。这通常是用作节省云端花费或者强制实施暂时工作流。当一个工作空间被启动或者被停止,Coder 服务器运行一个额外的terraform apply通知Coder提供器:工作空间有一个新的转换状态。
下面的模板例子有一个永久的资源(docker图标),以及一个暂时的资源(docker volume)。
data "coder_workspace" "me" {
}resource "docker_volume" "home_volume" {# persistent resource (remains a workspace is stopped)count = 1name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root"
}resource "docker_container" "workspace" {# ephemeral resource (deleted when workspace is stopped, created when started)count = data.coder_workspace.me.start_count # 0 (stopped), 1 (started)volumes {container_path = "/home/coder/"volume_name = docker_volume.home_volume.nameread_only = false}# ... other config
}
在重建工作空间时使用更新后的图标
为了确保Coder在重建一个工作空间时使用更新的图标,管理者最好在模板中更新tag。(例如:my-image:v0.4.2
-> my-image:v0.4.3
)或者digest(my-image@sha256:[digest]
-> my-image@sha256:[new_digest]
)。
可选择地,如果你想从Coder中等待更长的启动次数,你可以设置imagePullPolicy为Always在Terraform 模板中。在设置时,如果有必要的话,Coder会在每一个build和update中检查image:tag。
resource "kubernetes_pod" "podName" {spec {container {image_pull_policy = "Always"}}
}
删除工作空间
当一个工作空间被删除,Coder服务器最终会运行一个terraform destroy来删除所有和这个工作空间有关联的资源。
Terraform的 prevent-destroy and ignore-changes meta-arguments可以被用作处理意外的数据丢失。
Coder的应用
默认情况下,所有的模板都允许开发者通过SSH或者网页终端进行连接。看Configuring Web IDEs可以知道如何给予用户对于额外的网页应用的访问。
创建以及故障排除的模板
利用Coder可以使用任何Terraform的资源。当在模板上工作时,可以参考以下的资源:
- 本篇文档
- example templates code
- Coder Terraform provider documentation
通常来说,可能会进入代理不能够连接的场景。这意味着开始脚本错误。
$ coder ssh myworkspace
Waiting for [agent] to connect...
尽管故障排除步骤随着资源进行变化,这里有一些通常的最好的操作:
- 确保资源安装了curl
- 确保资源能够访问Coder URL
- 手动连接到资源(例如:
docker exec
or AWS console)Coder代理的logs通常存储在/var/log/coder-agent.log
改变管理
运行coder templates update
Coder中的Templates相关推荐
- python templates_详解Python的Django框架中的templates设置
TEMPLATES Django 1.8的新特性 一个列表,包含所有在Django中使用的模板引擎的设置.列表中的每一项都是一个字典,包含某个引擎的选项. 以下是一个简单的设定,告诉Django模板引 ...
- 记录一下Embedded Coder 中自带的电机SMO无传感器滑模观测器控制的Simulink例程
在近几年的Embedded Coder Support Package的例程中,在电机控制方面都给出了基于滑模观测器的电机FOC控制模型,这说明SMO算法近些年来逐渐成熟并且广泛运用,毕竟官方都给了模 ...
- Templates在setting中设置所在目录
## mysite/mysite/settings.py ## mysite是项目名TEMPLATES = [{'BACKEND': 'django.template.backends.django. ...
- python页面跳转中_python web页面跳转
接到项目需求.需要搭建一个页面进行交互,慢慢来 b (2).jpg 使用python django框架进行页面的搭建 在项目文件下打开窗口,输入命令; django-admin startprojec ...
- Working with Symbols (在Balsamiq Mockups中复用自定义控件和页面模板)
这篇文章是Balsamiq Mockups网站<Working with Symbols>的译文. 原文在这里:Working with Symbols Symbol是Balsamiq M ...
- django使用templates模板
Django中Settings中Templates的路径设置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## mysite/mysite/settings.p ...
- springboot templates读取不到_整合spring mvc + mybatis,其实很简单,spring boot实践(5)
01 spring boot读取配置信息 02 多环境配置 03 处理全局异常 04 spring boot admin 主要通过spring boot整合spring mvc 以及mybatis实现 ...
- SpringBoot 项目中使用velocity模板(转载)
(不要使用这种模板了,spring boot最新版已经不支持了.使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/5194262 ...
- python templates_python templates在哪
展开全部 一个提e5a48de588b662616964757a686964616f31333363373731示 SyntaxError: EOL while scanning string lit ...
- thymeleaf 判断页面不显示_Thymeleaf 中 Spring Security 的使用 0151
Spring Security 可以在一些视图技术中进行控制显示效果.例如: JSP 或 Thymeleaf.在非前后端分离且使用 Spring Boot 的项目中多使 用 Thymeleaf 作为视 ...
最新文章
- ASP.NET 2.0的异步页面刷新真给劲
- C++类构造析构调用顺序训练(复习专用)
- GPS系统研发人员面试题(VC通讯)
- Taro+react开发(90):列表渲染key值
- SpringBoot热加载实现与类加载浅谈
- 一键开启微信“开关头像”,快试试!
- UVA10878 Decode the tape【编码】
- 《Effective STL中文版》译序
- Java---SSH(MVC)面试
- 工业基础类IFC—EXPRESS语言
- [快速学会Swift第三方库] SwiftyJSON篇
- 使用OpenSSL库接口,实现AES CBC加密,基于X509 base64编码证书的RSA非对称加密例子
- Win7下使用VirtualBox虚拟机安装OS X 10.9 Mavericks
- Linux基础(2)---系统基础
- html input 删除线,css样式实现字体删除线效果
- 产品设计公司的头脑风暴是什么?
- poj 1950 Dessert(dfs)
- 谈 Linux,Windows 和 Mac【转自王垠博客】
- Ucenter 修改创始人密码方法
- anaconda python 安装_python anaconda安装 (一)