背景:
这是一个 Ansible 剧本,使用模板从模板构建 yaml 文件。所以基本上我有一个 jinja2 模板文件,其中一行如下:
private_key: {{ myvar }}
Run Code Online (Sandbox Code Playgroud)
Ansible 使用 yaml 来定义变量。所以我会填写这样的myvar值。这里我使用|特殊字符来定义多行字符串:
myvar: |
- "-----BEGIN PRIVATE KEY-----"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "zzzzzzzzzzzzzzzzzz="
- "-----END PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)
然而,输出修剪掉了缩进:
private_key:
- "-----BEGIN PRIVATE KEY-----"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "zzzzzzzzzzzzzzzzzz="
- "-----END PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)
由于输出文件本身就是一个yaml,所以我需要保留缩进。似乎不管怎样我都会失去缩进。
我需要最终结果看起来完全像这样:
private_key:
- "-----BEGIN PRIVATE KEY-----"
- …Run Code Online (Sandbox Code Playgroud) 我看到这里有类似的问题,但没有什么能完全帮助我.我还查看了有关命名空间的官方文档,但找不到任何真正帮助我的文档,也许我只是对XML格式化方面的新手.我明白也许我需要创建自己的命名空间字典?无论哪种方式,这是我的情况:
我从API调用中得到一个结果,它给了我一个XML,它在我的Python应用程序中存储为一个字符串.
我想要完成的只是抓取这个XML,交换一个微小的值(b:字符串值用户ConditionValue/Default但这与此问题无关)然后将其保存为字符串以便稍后在Rest POST中发送呼叫.
源XML看起来像这样:
<Context xmlns="http://Test.the.Sdk/2010/07" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<xmlns i:nil="true" xmlns="http://schema.test.org/2004/07/Test.Soa.Vocab" xmlns:a="http://schema.test.org/2004/07/System.Xml.Serialize"/>
<Conditions xmlns:a="http://schema.test.org/2004/07/Test.Soa.Vocab">
<a:Condition>
<a:xmlns i:nil="true" xmlns:b="http://schema.test.org/2004/07/System.Xml.Serialize"/>
<Identifier>a23aacaf-9b6b-424f-92bb-5ab71505e3bc</Identifier>
<Name>Code</Name>
<ParameterSelections/>
<ParameterSetCollections/>
<Parameters/>
<Summary i:nil="true"/>
<Instance>25486d6c-36ba-4ab2-9fa6-0dbafbcf0389</Instance>
<ConditionValue>
<ComplexValue i:nil="true"/>
<Text i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<Default>
<ComplexValue i:nil="true"/>
<Text xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<b:string>NULLCODE</b:string>
</Text>
</Default>
</ConditionValue>
<TypeCode>String</TypeCode>
</a:Condition>
<a:Condition>
<a:xmlns i:nil="true" xmlns:b="http://schema.test.org/2004/07/System.Xml.Serialize"/>
<Identifier>0af860f6-5611-4a23-96dc-eb3863975529</Identifier>
<Name>Content Type</Name>
<ParameterSelections/>
<ParameterSetCollections/>
<Parameters/>
<Summary i:nil="true"/>
<Instance>6364ec20-306a-4cab-aabc-8ec65c0903c9</Instance>
<ConditionValue>
<ComplexValue i:nil="true"/>
<Text i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<Default>
<ComplexValue i:nil="true"/>
<Text xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<b:string>Standard</b:string>
</Text>
</Default>
</ConditionValue>
<TypeCode>String</TypeCode>
</a:Condition>
</Conditions>
Run Code Online (Sandbox Code Playgroud)
我的工作是交换其中一个值,保留源的整个结构,并使用它在应用程序中稍后提交POST.
我遇到的问题是,当它保存到字符串或文件时,它完全混淆了名称空间:
<ns0:Context xmlns:ns0="http://Test.the.Sdk/2010/07" xmlns:ns1="http://schema.test.org/2004/07/Test.Soa.Vocab" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/Arrays" …Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本来创建实例的AMI图像。
我的目标是仅保存根卷。
我正在使用boto3。
我的测试实例附加了2个EBS卷。我只想用AMI保存根卷。
这是我的代码的工作方式:
instance.create_image,以触发,并通过唯一的BlockDeviceMappings根设备。预期结果: AMI只有我在create_image呼叫中定义的块设备。
实际结果是: AMI具有连接至该源实例,所有的块的装置,而不管所述显式的BlockDeviceMappings期间定义create_image
在下面的代码中,我编写了一个函数,该函数将已收集的源实例数据带到其他位置。我仅定义根卷信息,BlockDeviceMappings没有声明附加到源卷的任何其他设备。
def create_image(inst, instance, inst_dict):
nowtime = datetime.datetime.now().strftime('%Y-%m-%d')
try:
image = instance.create_image(
BlockDeviceMappings=[
{
'DeviceName': inst_dict[inst]['root_dev_name'],
'Ebs': {
'Encrypted': inst_dict[inst]['vol_encr'],
'DeleteOnTermination': inst_dict[inst]['vol_del_rule'],
'VolumeSize': inst_dict[inst]['vol_size'],
'VolumeType': inst_dict[inst]['root_dev_type']
},
},
],
Description=inst_dict[inst]['inst_name'] + " " + str(nowtime),
DryRun=False,
Name=inst_dict[inst]['inst_name'] + " " + str(nowtime),
NoReboot=True
)
except Exception, e:
logging.error("Failed to create image! Instance: " …Run Code Online (Sandbox Code Playgroud) 在基于 CentOS7 的 Docker 容器中运行 php-fpm 应用程序。
由于我使用 Docker,我必须将所有进程的日志输出写入 PID 1 的输出。通过这种方式,Docker 引擎可以获取日志以供以后处理(因此它们显示在 中docker logs)。
我可以通过/proc/1/fd/2在任何应用程序中毫无问题地写入所有日志来实现此目的。我可以用 nginx 来做到这一点,并且只是这样做,echo "test" > /proc/1/fd/2它对于docker logs.
然而,对于 php 软件,我想做同样的事情,但/proc/1/fd/2无论我做什么,我似乎都无法获取文件流。
PHP-FPM 产生许多子进程。因此,我必须显式写入 PID 1 的 stdout!
所以我正在做这样的事情:
$handle = fopen("/proc/1/fd/2", "w");
fwrite($handle, $msg);
fclose($handle);
Run Code Online (Sandbox Code Playgroud)
我刚刚得到Warning: fopen(/proc/1/fd/2): failed to open stream: No such file or directory
注意:我也用https://www.php.net/manual/en/function.file-put-contents.php尝试过此操作,并且发生了相同的结果。它本质上是 fopen、fwrite、fclose 的包装。
我尝试将它扔到符号链接上:
bash-4.2$ ls -l /tmp/stdout
lrwxrwxrwx. 1 nginx nginx 12 Apr 10 11:19 …Run Code Online (Sandbox Code Playgroud) 给定以下字符串:
mystring = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
目标是用其他字符交换字符位置范围。
例如,将字符 20-24 替换为ABCDE. 结果如下:
XXXXXXXXXXXXXXXXXXXABCDEXXXXXXXXXXXXXXX
测试:
mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
mystring[20:24] = 'ABCDE'
Run Code Online (Sandbox Code Playgroud)
我收到错误:TypeError: 'str' object does not support item assignment
最终目标是可重用的函数,例如:
def replace_chars(some_string, start_char, end_char, replace_string):
if len(replace_string) == (end_char_pos - start_char_pos + 1):
some_string[start_char:end_char] = replace_string
else:
print "replace string invalid length"
sys.exit(1)
return mystring
new_string = replace_chars('XYZXYZ', 2, 4, 'AAA')
Run Code Online (Sandbox Code Playgroud)
我意识到可以将未更改的范围填充到新字符串中:
mystring = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
mystring = mystring[0:19] + 'ABCDE' + mystring[25:38]
Run Code Online (Sandbox Code Playgroud)
然而,这将迫使更多的计算,因为这将针对文件中的行发生数千次。不同的行有不同的长度,并且交换的字符位置也不同。这样做似乎是一个很长的解决方法,我应该能够直接插入到位的字符位置。
感谢任何帮助,谢谢!
使用Jenkins 多分支流水线作业时,如果您Suppress Automatic SCM trigger在作业中选择,它将在索引分支后停止构建作业(强大的功能)。
然而,出于某种原因,这也会终止从 SCM 事件触发构建的能力!
有什么方法可以阻止构建在分支发现(分支索引)后触发,但仍然通过 SCM 事件正常构建?
这与一年多前回答的问题相同:Jenkinsfile get current tag
那里接受的答案对我不起作用,我认为从那时起,管道内的行为一定已经发生了变化。
我的存储库有标签(推送到原点!),并且我添加了 Jenkins 选项来发现标签,但是我无法从管道步骤中获取或引用它们。它只是显示为空。
我有一个带有发布标签集的 git 存储库:
myhost$ git fetch
myhost$ git tag
0.0.42
myhost$ git tag --sort version:refname
0.0.42
Run Code Online (Sandbox Code Playgroud)
在 Jenkinsfile 中我尝试过:
sh "git tag --sort version:refname | tail -1 > version.tmp"
sh "cat version.tmp"
Run Code Online (Sandbox Code Playgroud)
和:
sh(returnStdout: true, script: "git tag --sort version:refname | tail -1").trim()
Run Code Online (Sandbox Code Playgroud)
两者都没有返回(null)
遵循此文档:http : //pm2.keymetrics.io/docs/usage/startup/#saving-current-process-list
pm2 save 将当前进程列表保存到 $PM2_HOME/.pm2/dump.pm2
这一切都很完美,但我如何“取消保存”?
显然可以删除,dump.pm2但我不知道这样做的影响或潜在的工件。
地形信息:
如果我运行terraform plan或terraform apply针对现有堆栈,则没有任何待处理的更改,状态完全是最新的。
resource "aws_security_group" "sg_apps" {
name = "Custom apps ${var.env}"
description = "Custom apps ${var.env}"
vpc_id = data.terraform_remote_state.vpc.outputs.vpc_east_id
tags = {
Name = "Custom apps ${var.env} - TF"
}
ingress {
from_port = 3306
to_port = 3306
protocol = "tcp"
cidr_blocks = [
data.terraform_remote_state.vpc.outputs.m-1a_cidr,
data.terraform_remote_state.vpc.outputs.m-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1a_cidr,
]
}
ingress {
from_port = 8800
to_port = 8808
protocol = "tcp"
cidr_blocks = [
data.terraform_remote_state.vpc.outputs.m-1a_cidr,
data.terraform_remote_state.vpc.outputs.m-1b_cidr,
data.terraform_remote_state.vpc.outputs.p-1b_cidr, …Run Code Online (Sandbox Code Playgroud) Python 2.7 Boto3
我正在尝试获取实例何时停止或上一次状态转换发生的时间或实例处于当前状态的持续时间的时间戳。
我的目标是测试实例是否已停止x小时。
例如,
instance = ec2.Instance('myinstanceID')
if int(instance.state['Code']) == 80:
stop_time = instance.state_change_time() #Dummy method.
Run Code Online (Sandbox Code Playgroud)
或类似的东西。
我看到boto3有一个launch_time方法。还有很多使用state_transition_reason和分析状态变化的方法,state_reason但是我看不到关于状态转换时间戳的任何信息。
我一定要错过一些东西。
这是实例“状态”方法的Boto3文档...
state
(dict) --
The current state of the instance.
Code (integer) --
The low byte represents the state. The high byte is an opaque internal value and should be ignored.
0 : pending
16 : running
32 : shutting-down
48 : terminated
64 : stopping
80 : stopped
Name (string) --
The …Run Code Online (Sandbox Code Playgroud) 我正在使用keymetrics官方图像docker hub链接构建一个非常基本的容器
但这不是一个node.js或pm2问题,而是一个非常多的Docker问题,尤其是 docker build
Dockerfile(npm install)中的步骤将节点程序包下拉到node_modules文件夹中-IT WORKS。创建文件夹并下载文件,并在生成输出中显示(如下)。
问题在于,该RUN命令完成后,中间容器将被删除,而我丢失了node_modules文件夹。
我的dockerfile有一些ls -l命令来阐明文件的状态。
保留在工作目录(/app)中的唯一文件是我使用COPY命令从主机复制的文件
这是我的Dockerfile:
FROM keymetrics/pm2:latest
# Bundle APP files
COPY src src/
COPY package.json .
COPY pm2.json .
# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL info
RUN pwd && ls -l /app && npm install && ls -l
# Show current folder structure in logs
RUN ls -l
CMD [ "pm2-docker", "start", "pm2.json" ]
Run Code Online (Sandbox Code Playgroud)
生成命令:
docker build -t localapps/pm2_test_app:0.0.4 .
建立输出
Sending build …Run Code Online (Sandbox Code Playgroud) 我计划的步骤(我的目标):
rs.initiate())在副本集配置期间禁用身份验证,但是在尝试添加成员时,我收到“未授权在本地执行命令”。
以下是我在尚未启用身份验证的全新 Mongo 安装上运行的步骤 ---
检查是否--auth未启用:
root@3106f5453c95:/# ps -ef |grep mongod
mongodb 1 0 1 16:34 ? 00:00:01 mongod --bind_ip_all --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
mongod.conf
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
replication:
replSetName: rsprod
security:
keyFile: /data/db/replicaSetKey.key
Run Code Online (Sandbox Code Playgroud)
以下命令在 3 节点集中的一台主机上运行:
启动副本集没有问题:
root@b902fd176bdd:/# mongo --eval 'rs.initiate()'
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
{
"info2" : "no configuration specified. Using a default configuration …Run Code Online (Sandbox Code Playgroud) 在这种情况下,我有3个布尔变量(已经设置为true或false)
这里的目标是确定是否一组布尔变量中的一个以上设置为true
现在,我写了以下内容,它可以正常工作:
boolval := 0
if *firstbool {
boolval++
}
if *secondbool {
boolval++
}
if *thirdbool {
boolval++
}
if boolval > 1 {
// More than 1 of the bool vars are true
}
Run Code Online (Sandbox Code Playgroud)
如果我要写连续的if{}语句,我总是标记我的逻辑,所以我想问一下天才,你将如何做到这一点。