小编jon*_*mix的帖子

Terraform:将文件复制到 GCP 计算实例

这肯定不会那么复杂吧?我尝试过很多方法,但都失败了。

简单地使用本来file provisioner是最简单的选择,但没有效果。问题是,计算实例没有配置为标准的密码,并且没有密钥。

因此,这导致我尝试这样的事情:

resource "google_compute_instance" "test-build" {
...
  metadata {
    ssh-keys = "jon:${file("./gcloud_instance.pub")}"
  }
...

provisioner "file" {
  source      = "test/test_file"
  destination = "/tmp/test_file.txt"

  connection {
    type     = "ssh"
    private_key = "${file("./gcloud_instance")}"
    agent = "false"
  }
}
Run Code Online (Sandbox Code Playgroud)

再次,无济于事。(仅供参考,密钥对是我创建的,并且我确认公钥已推送到计算实例)

我什至尝试将其拆分为模块,然后一个接一个地运行..但似乎我们无法在 null_resource 中使用文件提供程序。所以这也行不通。

有没有人找到一种方法可以有效地做到这一点?

google-cloud-platform terraform devops

6
推荐指数
1
解决办法
6627
查看次数

dotenv 不会加载到 docker 容器中

我正在尝试在 docker 容器中运行 python 应用程序。python 应用程序从文件中获取秘密.env,并dotenv.load_dotenv在 python 中使用来提取秘密。当我在本地运行时,工作得非常好。所以我认为这与在基础映像上运行的 Python 版本有关。 .我已经尝试使用与本地运行完全相同的版本,但仍然失败。

Docker 文件:

FROM python:latest
WORKDIR /casp
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /casp
ENTRYPOINT [ "python3" ]
CMD [ "main.py" ]
Run Code Online (Sandbox Code Playgroud)

在我的Python应用程序中:

from pathlib import Path
from dotenv import load_dotenv

env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
Run Code Online (Sandbox Code Playgroud)

我实际上尝试完全放弃这个想法,并恢复到在 using 中传递环境变量,docker run -e但是,事实证明也Flask依赖于dot_env,因此它也在那里失败。

我已经做了相当多的查找,似乎很多人确实遇到了 Docker / Dotenv 问题,但似乎没有一个与此直接匹配。

以前的帖子表明它可能与位置有关,但这里的路径实际上只是./env与容器匹配,因为WORKDIR创建了然后将整个应用程序目录复制到其中,其中包括.envmain.py。 …

python docker

5
推荐指数
1
解决办法
5687
查看次数

glob() 排除子目录

所以我正在编写一个脚本,该脚本将通过一堆日志文件查找字符串和服务器名称。

在我的测试中,我glob()用来创建要浏览的文件列表。

但是,为了改进我的测试,我从实时系统(11GB!)复制了一个日志目录 - 事情并不像以前那样顺利......看起来 glob 将子目录视为文件,因此readlines()正在努力阅读它们。

我不关心子目录中的文件,我只想扫描本机目录中的文件。

我想我可以用它os.walk()来实现这一点,例如:

logs = next(os.walk('var/opt/server/log/current'))[2]
Run Code Online (Sandbox Code Playgroud)

与之相反:

logs = glob('/var/opt/server/log/current/*')
Run Code Online (Sandbox Code Playgroud)

因为我正在学习 python,我想确保我以正确的方式学习东西..那么我上面所说的是否正确?或者我应该glob()以稍微不同的方式使用来实现这个目标?

python linux logging glob

3
推荐指数
1
解决办法
6194
查看次数

Terraform:计数 == true

我之前在我的 TF 代码中使用过这个:

count   = "${var.whatever == "true" ? 1 : 0}"
Run Code Online (Sandbox Code Playgroud)

这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似的东西,如果var.whatever等于true,则计数等于length(var.whatever)

这行得通吗?

count = "${var.whatever == "true" ? ${length(var.whatever) : 0}"

只是我对 TF 的印象一直是不能嵌套插值。

另外,这让我想到了另一个有趣的问题……你们用什么来测试语法?我并不是要检查 TF 代码,我的意思是运行代码来测试这样的事情?我不想只是部署到开发人员,只是为了测试我的 TF 代码的输出。我想知道是否有某种东西,像贝壳一样,我可以按原样测试这些东西bash或其他东西。有什么想法吗?

terraform

2
推荐指数
1
解决办法
8684
查看次数

Terraform:使用共享 VPC 创建 GCP 项目

我现在已经花了很长时间来解决这个问题..所以主机项目已经存在..并且已经设置了所有VPN和网络。我希望通过 Terraform 创建一个新项目,并允许它使用主机项目共享 VPC。

每当我遇到一个问题并最终解决它时,我就会遇到另一个问题。

现在我看到:

google_compute_shared_vpc_service_project.project: googleapi: Error 404: The resource 'projects/intacct-staging-db3b7e7a' was not found, notFound
* google_compute_instance.dokku: 1 error(s) occurred:
Run Code Online (Sandbox Code Playgroud)

也:

 google_compute_instance.dokku: Error loading zone 'europe-west2-a': googleapi: Error 404: Failed to find project intacct-staging, notFound
Run Code Online (Sandbox Code Playgroud)

我最初确信它是排序的,这就是为什么我正在尝试配置depends_on,尝试整理顺序。这似乎还没有解决它。

简单地阅读它,google_compute_shared_vpc_service_project就其而言并不存在google_compute_shared_vpc_service_project。尽管我已添加以下内容google_compute_shared_vpc_service_project

depends_on = ["google_project.project",
    "google_compute_shared_vpc_host_project.host_project",
  ]
Run Code Online (Sandbox Code Playgroud)

也许,因为宿主项目已经存在,我应该使用data它来引用它而不是resource

我的完整 TF 文件在这里:

provider "google" {
 region = "${var.gcp_region}"
 credentials = "${file("./creds/serviceaccount.json")}"
}
resource "random_id" "id" {
 byte_length = 4
 prefix      = "${var.project_name}-" …
Run Code Online (Sandbox Code Playgroud)

cloud google-cloud-platform terraform

-1
推荐指数
1
解决办法
2158
查看次数