是否可以将变量列表附加到ansible的静态列表中?
我可以将整个列表定义为变量:
my_list:
- 1
- 2
- 3
Run Code Online (Sandbox Code Playgroud)
然后在剧本中使用它
something: {{my_list}}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到如何做到这一点(伪代码):
list_to_append:
- 3
- 4
Run Code Online (Sandbox Code Playgroud)
然后在剧本中:
something:
- 1
- 2
- {{append: list_to_append}}
Run Code Online (Sandbox Code Playgroud)
如果这实际上是不可能的,你会对我的用例有什么建议?
我有一个参数中的项目列表,但其中一些是optional
并且应该可以使用变量进行修改.
换句话说:我有default values
+ optional values
可以或不可以通过变量添加.
在optional values
事先不知道,我可以添加1,2或其中的100个,所以它们不是静态的.
我基本上有一个默认静态列表++一个可附加的可配置变量列表.
编辑:我发现了这个,但它只适用于with_items,我需要在普通参数中:
with_flattened:
- "{{list1}}"
- "{{list2}}"
Run Code Online (Sandbox Code Playgroud) 我正在使用consul的healthcheck功能,并且我不断获取这些"死"容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fd397ba638 progrium/consul:latest "\"/bin/bash -c 'cur 15 minutes ago Dead
Run Code Online (Sandbox Code Playgroud)
什么是"死"容器?停止的容器何时变为"死"?
为了记录,我运行progrium/consul + gliderlabs/registrator图像+ SERVICE_XXXX_CHECK env变量来进行健康检查.它运行一个运行一个图像的健康检查脚本,每隔X秒,就像这样docker run --rm my/img healthcheck.sh
我对一般"死"意味着什么以及如何防止它发生感兴趣.另一个特殊的事情是我的死容器没有名字.
这是集装箱检查的一些信息:
"State": {
"Dead": true,
"Error": "",
"ExitCode": 1,
"FinishedAt": "2015-05-30T19:00:01.814291614Z",
"OOMKilled": false,
"Paused": false,
"Pid": 0,
"Restarting": false,
"Running": false,
"StartedAt": "2015-05-30T18:59:51.739464262Z"
},
Run Code Online (Sandbox Code Playgroud)
奇怪的是,只有每一个容器都会变得死亡并且不会被移除.
谢谢
编辑:查看日志,我发现了什么使容器停止失败:
Handler for DELETE /containers/{name:.*} returned error: Cannot destroy container 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
Driver aufs failed to remove root filesystem 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
rename /var/lib/docker/aufs/diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc
/var/lib/docker/aufs/ diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc-removing:
device …
Run Code Online (Sandbox Code Playgroud) 我想以某种方式在编译时获取val中的case类的字段的名称(可能是单例类型的字符串或符号?).
类似于以下内容:
import shapeless._
case class MyClass(field1: String, field2: Int)
val field1Lens = lens[MyClass] >> 'field1
// val name = field1Lens.name // it should be "field1", aka 'field1.name
Run Code Online (Sandbox Code Playgroud)
我没有必要使用镜头,任何有效的技术都很好(有什么LabelledGeneric
?).我想有一些东西,我可以获得案例类字段的名称,而无需单独指定它.这样,如果我重构field1
类中成员的名称,则name
相应地进行更改.
当然以下不起作用,因为宏在编译时不知道符号的名称:
val name = 'field1
val field1Lens = lens[MyClass] >> name // can't possibly work
Run Code Online (Sandbox Code Playgroud)
我试过lens[MyClass] >> name.narrow
但它也不起作用
这就是我目前正在做的事情,当然我不喜欢它:
// If I change the name of the field, compilation fails
// and I'm forced to check this line of code so I can …
Run Code Online (Sandbox Code Playgroud) 我可以很容易地为一个密封的案例类家族推导出一个编解码器,如下所示:
import io.circe._
import io.circe.generic.auto._
sealed trait Base
case class X(x: Int) extends Base
case class Y(y: Int) extends Base
object Test extends App {
val encoded = Encoder[Base].apply(Y(1))
val decoded = Decoder[Base].apply(encoded.hcursor)
println(decoded) // Right(Y(1))
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将类型成员添加到基类中,我就不能再这样做了,即使它受到密封特性的限制:
import io.circe._
import io.circe.generic.auto._
sealed trait Inner
case class I1(i: Int) extends Inner
case class I2(s: String) extends Inner
sealed trait Base { type T <: Inner }
case class X[S <: Inner](x: S) extends Base { final type T = S …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个查询/过滤器,仅当数组的同一项目满足多个条件时才与文档匹配。
假设这是文档:
{
arr: [
{ "f1" : "a" , f2 : true },
{ "f1" : "b" , f2 : false}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望能够检索在同一元素上有 N 个条件匹配的文档。例如:arr.f1 == "a" AND arr.f2 == true
应该与文档匹配但arr.f1 == "b" AND arr.f2 == true
不应该匹配。
我正在尝试嵌套布尔过滤器(除了这个过滤器之外我还有其他过滤器)但它不起作用,类似于
"bool" : {
"must": [
{ some other filter },
{"bool": {"must" : [
{"term" : {"arr.f1" : "a"}},
{"term" : {"arr.f2" : true}},
] }}
]
}
Run Code Online (Sandbox Code Playgroud)
知道该怎么做吗?谢谢
编辑:我更改了映射,现在嵌套查询按照 Val 的响应工作。我现在无法对嵌套字段执行“存在”过滤器:
简单的{ …