这肯定不会那么复杂吧?我尝试过很多方法,但都失败了。
简单地使用本来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 中使用文件提供程序。所以这也行不通。
有没有人找到一种方法可以有效地做到这一点?
我正在尝试在 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创建了然后将整个应用程序目录复制到其中,其中包括.env和main.py。 …
所以我正在编写一个脚本,该脚本将通过一堆日志文件查找字符串和服务器名称。
在我的测试中,我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()以稍微不同的方式使用来实现这个目标?
我之前在我的 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或其他东西。有什么想法吗?
我现在已经花了很长时间来解决这个问题..所以主机项目已经存在..并且已经设置了所有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)