小编Gio*_*tti的帖子

将列表变量附加到Ansible中的另一个列表

是否可以将变量列表附加到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)

jinja2 ansible ansible-playbook

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

在consul healthcheck运行后,状态为"Dead"的Docker容器

我正在使用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)

docker consul

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

如何使用shapeless在编译时将case类字段的名称作为字符串/符号获取?

我想以某种方式在编译时获取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)

scala shapeless

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

为密封的案例类家族派生circe Codec,其中基本特征具有(密封的)类型成员

我可以很容易地为一个密封的案例类家族推导出一个编解码器,如下所示:

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)

json scala shapeless circe

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

Elasticsearch bool 过滤器用于数组同一元素上的多个条件

我正在尝试创建一个查询/过滤器,仅当数组的同一项目满足多个条件时才与文档匹配。

假设这是文档:

{
  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 的响应工作。我现在无法对嵌套字段执行“存在”过滤器:

简单的{ …

elasticsearch

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