首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件化的地形和tfstate

文件化的地形和tfstate
EN

Stack Overflow用户
提问于 2018-09-19 17:59:40
回答 1查看 1.6K关注 0票数 0

我有一个码头集装箱可以运行地形。

别名terraform='docker run -i -t -v ~/..aws:/root/..aws:ro -v $(pwd):/app -w /app/ rubendob/terraform:0.11.8‘

只是官方影像的一份拷贝。没什么花哨的。

代码语言:javascript
复制
FROM golang:alpine
MAINTAINER "HashiCorp Terraform Team <terraform@hashicorp.com>"

ENV TERRAFORM_VERSION=0.11.8

RUN apk add --update git bash openssh

ENV TF_DEV=true
ENV TF_RELEASE=true

WORKDIR $GOPATH/src/github.com/hashicorp/terraform
RUN git clone https://github.com/hashicorp/terraform.git ./ && \
    git checkout v${TERRAFORM_VERSION} && \
    /bin/bash scripts/build.sh

RUN rm -rf /var/lib/apt/lists/*

WORKDIR $GOPATH
ENTRYPOINT ["terraform"]

所以我就这样打电话:

代码语言:javascript
复制
alias terraform='docker run -i -t -v ~/.aws:/root/.aws:ro -v $(pwd):/app -w /app/ rubendob/terraform:0.11.8'

然后我有了下一个文件夹结构,它运行良好,因为ups,我决定在dev文件夹中运行一些terraform的东西。

代码语言:javascript
复制
ls -ls tf
total 0
0 drwxr-xr-x  3 ruben.ortiz  staff   96 15 sep 23:43 dev
0 drwxr-xr-x  6 ruben.ortiz  staff  192 11 sep 19:53 modules
0 drwxr-xr-x  4 ruben.ortiz  staff  128 15 sep 12:39 prod

我运行集装箱就像

代码语言:javascript
复制
terraform plan tf/prod/

并且工作正常,但是容器创建了.terraform文件夹和tfstate,以及其他东西。

因此,如果我想运行相同的命令,但因为检测到和以前的.terraform文件夹,所以不能运行dev环境。

代码语言:javascript
复制
ls -lisah tf/.terraform/
total 8
901814 0 drwxr-xr-x   5 ruben.ortiz  staff   160B 15 sep 12:38 .
885805 0 drwxr-xr-x   6 ruben.ortiz  staff   192B 15 sep 23:54 ..
901815 0 drwxr-xr-x  15 ruben.ortiz  staff   480B 16 sep 00:05 modules
901821 0 drwxr-xr-x   3 ruben.ortiz  staff    96B 10 sep 23:02 plugins
901819 8 -rw-r--r--   1 ruben.ortiz  staff   567B 16 sep 18:43 terraform.tfstate

如果我输入dev文件夹,因为我刚刚为当前目录设置了卷,它就无法看到共享模块文件夹。

你们是怎么解决这个问题的?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-09-22 16:18:03

我必须同意这里的意见。我鼓励你重新评估你从这个过程中得到的好处。

尽管如此,它导致冲突的原因是因为您试图从一个公共目录中调用两个不同的工作区。您可以通过在输入容器时重写工作目录(请参阅https://docs.docker.com/engine/reference/run/#workdir)或简单地将目录更改为正确的上下文来避免这种情况。

我还建议您尝试使用不同的工作区来管理环境。

  1. 不要使用文件夹来管理您的IaC环境。这会导致漂移,因为您的基础结构没有通用模板。
  2. 请使用单个工作区和变量来控制环境规范。例如:编写模块,以便当您更改环境变量(var.stage是流行的)时,计划会改变以满足您的需求。通常情况下,环境应尽可能少的变化,数量,曝光和容量,通常是可变的配置。Dev可以在私有拓扑中部署具有1核和1GB RAM的1VM,但生产可能是3 VM,2核,4GB RAM和附加的公共拓扑。当然,您可以有更多的变化: dev可以在与应用程序相同的服务器上运行数据库进程,以节省成本,但是生产过程可能有一个专用的DB实例。所有这些都可以通过更改单变量、三元语句和插值来管理。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52411708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档