小编Mol*_*pad的帖子

在 terraform 中连接字符串和列表变量

我需要以 ["0.0.0.0/23","0.0.0.1/23",...] 等形式将 cidr 块列表传递给模块。

我有两个从子网数据源获取的 cidr 块,我可以将其作为示例引用:

cidr_blocks = [data.aws_subnet.subnet1.id,data.aws_subnet.subnet2.id]
Run Code Online (Sandbox Code Playgroud)

我还有一个变量,根据环境,有一个特定的 cidr_blocks 列表要传入,设置为例:

custom_cidrs = [""0.0.0.0/23","0.0.0.1/23","0.0.0.2/23"]
Run Code Online (Sandbox Code Playgroud)

我想要做的是在模块中,将所有这些 cidr 连接在一起以创建一个列表。我尝试了一些不同的方法,包括 concat 和 list()。我只是无法正确理解语法。

对于某些情况,它们不会设置自定义 cidr 块,只有子网 cidrs,因此在这种情况下,我的自定义 cidr 将设置为:

custom_cidrs = []
Run Code Online (Sandbox Code Playgroud)

任何有关如何将两个输出和自定义列表合并为一个输出的帮助将不胜感激。

我想我可能必须首先从两个输出创建一个列表,然后将两个列表连接在一起,但并不完全确定。我可以用一个命令来完成吗?

我正在使用 terraform 版本 0.12.28

terraform terraform-provider-aws

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

docker 容器中的 Java 内存设置

我有一个基于 Java8 OpenJDK 的 Java 应用程序。它运行在一个 docker 容器中,该容器的容量限制为 20GB。

tomcat的-Xms和-Xmx设置设置如下:

-Xms = 容器内存的 60%(由 cgroup 指定) - 因此 12GB -Xmx = 容器内存的 80%(由 cgroup 指定) - 因此 16GB

这会在容器上留下 4GB 的可用空间,这通常很好,但有时在负载下,我会看到 docker 容器因 OOM 而退出(并且 java 进程被终止),因为容器内存使用量已超过 20GB。

我知道 -Xmx 设置是针对堆的,而不是针对整个 Java 进程和 JVM,因此预计容器上的 4GB“净空”就足够了,但看起来还不够。

我知道所有用例都大不相同,但我的问题是,一般来说,对于内存限制为 20GB 的容器来说,设置 -Xmx 设置是否太高。

我正在考虑使用 MaxRAM 设置,同样,我知道它只决定堆内存,但我不确定这是否会产生积极的影响?

通常情况下,您使用 MaxRAM 或 -Xmx 之一,还是同时设置两者有什么好处?

如果我使用 MaxRAM 而不是 -Xmx,java 将如何向堆分配内存?是否有一个简单的算法,例如 MaxRAM 设置的 50%?java 这样做会更有效地管理内存吗?

java memory jvm docker

4
推荐指数
1
解决办法
5630
查看次数

使用 SCM 存储库中的文件夹列表填充 jenkinsfile 中的选择参数

我有一个 Jenkinsfile,它驱动一个管道,用户必须在 bitbucket 存储库中选择一个特定文件夹作为目标。我希望动态填充该选择参数下拉列表。

目前,我已经按照这个通用示例硬编码了选择参数列表:

choice(name: 'IMAGE', choices: ['workload-x','workload-y','workload-z'])
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以从 jenkinsfile 本身内部实现,或者我是否必须为此创建一个特定的 groovy 脚本然后调用它。不管怎样,我有点迷失,因为我对詹金斯还很陌生,而且才刚刚开始使用 Jenkinsfiles。

一些试验和错误谷歌搜索允许我创建一个 groovy 脚本,它使用 json slurper 返回存储库中的文件夹名称数组:

import groovy.json.JsonSlurper
import jenkins.model.Jenkins

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
        com.cloudbees.plugins.credentials.Credentials.class,
        Jenkins.instance,
        null,
        null
    );

def credential = creds.find {it.id == "MYBITBUCKETCRED"}

if (!credential) { return "Unable to pickup credential from Jenkins" }
username = credential.username
pass = credential.password.toString()

def urlStr = "https://bitbucket.mydomain.com/rest/api/1.0/projects/MYPROJECT/repos/MYREPO/browse/"

HttpURLConnection conn = (HttpURLConnection) new URL(urlStr).openConnection()
String encoded = Base64.getEncoder().encodeToString((username + ":" + pass).getBytes("UTF-8"));
conn.setRequestProperty("Authorization", "Basic " + …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins-groovy jenkins-pipeline

4
推荐指数
1
解决办法
9028
查看次数

为PHP docker映像安装/配置SQL Server PDO驱动程序

我有一个简单的docker文件,如下所示:

FROM php:7.2-apache
COPY src/ /var/www/html/
Run Code Online (Sandbox Code Playgroud)

通常,为了安装用于Mongo或MySQL连接的驱动程序,我可以通过将以下内容添加到dockerfile中来实现:

docker-php-ext-install mongo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想将php应用程序连接到SQL Server数据库,并且我了解为php 7.x做到这一点的最佳方法是使用PDO驱动程序,但是我不熟悉如何在dockerfile中配置它。

我试过进行pecl安装,例如添加:

RUN pecl install sqlsrv pdo_sqlsrv
Run Code Online (Sandbox Code Playgroud)

但是,这失败了,并且出现了一些错误,这些错误似乎并没有向我指出正确的方向。

我只是在寻找一种简单的方法来在dockerfile或使用docker run中完成此操作。

有关更多信息,这是我遇到的错误:

/tmp/pear/temp/sqlsrv/shared/xplat.h:30:17: fatal error: sql.h: No such file or directory
 #include <sql.h>
                 ^
compilation terminated.
Makefile:194: recipe for target 'conn.lo' failed
make: *** [conn.lo] Error 1
ERROR: `make' failed
The command '/bin/sh -c pecl install sqlsrv pdo_sqlsrv     && docker-php-ext-enable pdo_sqlsrv' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

谢谢大家

php sql-server pdo docker

3
推荐指数
2
解决办法
2726
查看次数

从特定行号拖尾日志文件

我知道如何使用特定行数来拖尾文本文件,

tail -n50 /this/is/my.log
Run Code Online (Sandbox Code Playgroud)

但是,如何使该行计数成为变量?

假设我有一个大型日志文件,它由某个程序每天附加到,日志文件中的所有行都以这种格式的日期时间开头:

Day Mon YY HH:MM:SS
Run Code Online (Sandbox Code Playgroud)

每天我都想输出日志文件的尾部,但只输出前几天的记录。假设这个输出在午夜之后运行,我不担心尾部会溢出到第二天。

我只是希望能够根据昨天日期的第一次出现来计算出要拖尾的行数...

那可能吗?

bash tail less-unix

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

EKS 节点组 Terraform - 将标签添加到特定节点

我通过 Terraform 为 EKS 提供托管节点。那里没有问题,一切正常。

我的问题是,我想向我的节点之一添加一个标签,以用作我的部署之一中的节点选择器。我有一个由 EBS 持久卷支持的应用程序,该卷显然仅在单个可用区中可用,因此我希望我的 pod 安排在那里。

我可以很容易地添加标签:

kubectl label nodes <my node> <key>=<value>
Run Code Online (Sandbox Code Playgroud)

实际上这很好,直到您执行诸如将节点组更新到下一个版本之类的操作。这些标签不会持续存在,这是有道理的,因为它们不受亚马逊管理。

有没有办法通过 terraform 或其他方式来设置这些标签并使它们持续存在。我注意到 Terraform 的 EKS 提供程序有一个标签选项,但似乎会将标签添加到节点组中的所有节点,而这不是我想要的。我环顾四周,但找不到任何东西。

kubernetes terraform amazon-eks

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

Docker 容器中的 HTTP 请求因 HTTPS 端点而失败

我在 golang 中构建了一个小型应用程序,使用 alpine:golang 基本映像,该映像除其他外还消耗来自 HTTP.get 的响应。

我请求的 api 端点通过 HTTPS 运行(https://jsonplaceholder.typicode.com/users

代码在本地运行良好,并且 docker 映像构建良好,但运行时出现以下错误:

The HTTP request failed with error Get "https://jsonplaceholder.typicode.com/users": x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是一个特定的 Docker 问题(我无法从其他 docker 容器卷取 HTTPS)、我的网络限制(我没有使用 VPN,但我们确实使用 zScaler),或者我是否需要包含/configure 一些东西作为我的 Dockerfile 的一部分。我的 dockerfile 看起来像:

FROM alpine:golang

#Create and set the working directory
RUN mkdir /app 
WORKDIR /app 

# Copy all the go scripts into the image working directory
COPY /pipelines/core/rtbf-pipeline-1 ./


# Make the binaries executable
RUN chmod +x /app/rtbf-pipeline-1 …
Run Code Online (Sandbox Code Playgroud)

rest https go docker

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

在 Jenkinsfile 中将参数传递给 shell 脚本时替换错误

在 Jenkinsfile 中,我尝试通过设置 shell 脚本的 stdOut 来设置环境变量。该脚本包含一个返回 InstanceID 的 AWS 命令​​:

stage('Set InstanceID') {
         steps {
             script {
           env.IID = sh (script: 'scripts/get-node-id.sh "${params.ENVIRONMENT}" "${params.NODE}"', returnStdout: true).trim()
             }
          }
    }
Run Code Online (Sandbox Code Playgroud)

无论我做什么或使用多少个反斜杠来转义引号,都不起作用。我收到严重的替换错误。我也尝试过不加双引号。

如果我在 shell 脚本参数中进行硬编码,它就可以正常运行。

如果我想使用此处的参数值,如何使其工作?

jenkins jenkins-groovy jenkins-pipeline

0
推荐指数
1
解决办法
6979
查看次数

terraform 中的 GCE 关闭脚本

我想知道在配置 GCE VM 时是否可以在 terraform 中指定关闭脚本

目前,我正在使用 GCE 来运行 GitHub Actions Runners,并且我想在虚拟机关闭时彻底取消注册运行器。

如果我决定迁移到抢占式虚拟机或托管实例组,这一点非常重要。对于后者,我计划实现一个云功能来根据需求缩小和扩大运行器实例。

我已成功使用启动脚本在 terraform 中配置我的虚拟机,因为该脚本有详细记录,但我看不到指定关闭脚本的方法。那可能吗?也许以某种方式使用元标记?

谢谢

terraform terraform-provider-gcp

0
推荐指数
1
解决办法
1133
查看次数