小编Nic*_*Roz的帖子

在ansible中使用动态键名设置事实

我试图收缩几个类似代码的块,看起来像:

- ... multiple things is going here
  register: list_register
- name: Generating list
  set_fact: my_list="{{ list_register.results | map(attribute='ansible_facts.list_item') | list }}"

# the same code repeats...
Run Code Online (Sandbox Code Playgroud)

事实上,它们之间的唯一区别是我在这里使用不同的列表名称而不是 my_list

事实上我想这样做:

set_fact:
  "{{ some var }}" : "{{ some value }}"
Run Code Online (Sandbox Code Playgroud)

我遇到过这篇文章,但在这里找不到任何答案.

是可以这样做还是有任何解决方法?

variables dynamic ansible

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

Ansible集团的优先权

假设我在group_vars中有3个文件:

abc.yml
all.yml
xyz.yml
Run Code Online (Sandbox Code Playgroud)

并且在它们中定义了相同的变量:

- my_var: abc
- my_var: all
- my_var: xyz
Run Code Online (Sandbox Code Playgroud)

Ansible 文档说:

在任何部分中,重新定义var将覆盖先前的实例.如果多个组具有相同的变量,则加载的最后一个组获胜.如果你在play的vars:section中定义了两次变量,那么第二个获胜.

这是否意味着加载顺序是按字母顺序排列的,abc.yml具有最低优先级,而xyz.yml最高,或者它取决于组的顺序hosts

什么是装货单?


有趣的是,改变组中的组顺序hosts也是如此,但是以不可预测的方式.

我尝试运行ansible-playbook my_var.yml -c local(只返回变量值)的所有组合:

[all]
localhost

[xyz]
localhost

[abc]
localhost
Run Code Online (Sandbox Code Playgroud)

但我仍然无法弄清楚它是如何工作的.

variables redefinition ansible

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

使用ansible进行多级部署

如果您有不同的阶段变量,您建议使用ansible组织多阶段部署的方法是什么?

主要思想是为不同阶段定义组变量.

有两个技巧:

我想了解更多关于组织剧本,变量,主持人以及了解您的方法的优缺点的例子.

deployment environment-variables multistage ansible

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

在Ruby中删除额外的关键字参数

我定义了一个方法:

def method(one: 1, two: 2)
   [one, two]
end
Run Code Online (Sandbox Code Playgroud)

当我这样称呼时:

method one: 'one', three: 'three'
Run Code Online (Sandbox Code Playgroud)

我明白了:

ArgumentError: unknown keyword: three
Run Code Online (Sandbox Code Playgroud)

我不想逐个从散列中提取所需的键或排除额外的键.有没有办法绕过这种行为,除了定义这样的方法:

def method(one: 1, two: 2, **other)
  [one, two, other]
end
Run Code Online (Sandbox Code Playgroud)

ruby keyword-argument ruby-2.0

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

在Ansible中跳过整个循环

如果我想在Ansible中跳过整个循环,我该怎么办?

根据指导方针,

whenwith_items(参见循环)结合使用时,... when语句将针对每个项目单独处理.

从而在运行这样的剧本时

---
- hosts: all
  vars:
    skip_the_loop: true
  tasks:
    - command: echo "{{ item }}"
      with_items: [1, 2, 3]
      when: not skip_the_loop
Run Code Online (Sandbox Code Playgroud)

我明白了

skipping: [localhost] => (item=1) 
skipping: [localhost] => (item=2) 
skipping: [localhost] => (item=3)
Run Code Online (Sandbox Code Playgroud)

而我不希望每次都检查一个条件.

然后我想出了使用内联条件的想法

- hosts: all
  vars:
    skip_the_loop: true
  tasks:
    - command: echo "{{ item }}"
      with_items: "{{ [1, 2, 3] if not skip_the_loop else [] }}"
Run Code Online (Sandbox Code Playgroud)

它似乎解决了我的问题,但后来我没有得到任何输出.我只想说一句话:

skipping: Loop has been skipped
Run Code Online (Sandbox Code Playgroud)

loops jinja2 conditional-statements ansible

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

Docker 忽略多阶段构建的文件

我需要在第一阶段排除 Docker COPY 中的文件,但在第二阶段的另一个 COPY 中使用它,因为它会破坏 Docker 层缓存。

我的文件夹结构如下:

src/
public/
.env
package.json
nginx.conf
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile 如下所示:

FROM node:14 as builder                   # line-1
WORKDIR /app                              # line-2
COPY . /app                               # line-3 nginx.conf is copied but not needed
RUN yarn && yarn build                    # line-4

FROM nginx:1.21.1                         # line-5
WORKDIR /app                              # line-6
COPY --from=builder /app/build /app/build # line-7
COPY nginx.conf /app                      # line-8 nginx.conf is copied

CMD nginx -c /app/nginx.conf              # line-9
Run Code Online (Sandbox Code Playgroud)

当我更改nginx.confdocker 层缓存时,由于第三行,缓存变得无效。

我无法使用,.dockerignore因为它会在两个阶段都忽略它。 …

docker dockerfile docker-image docker-copy docker-layer

5
推荐指数
0
解决办法
1806
查看次数

Docker Standard_init_linux.go:207:exec用户进程导致“没有这样的文件或目录”

我的Dockerfile看起来像:

FROM ubuntu:18.04

RUN apt-get ...
...
COPY app /bin
Run Code Online (Sandbox Code Playgroud)

我的可执行文件app只是bash脚本:

make -f /app/makefile $@
Run Code Online (Sandbox Code Playgroud)

当我尝试跑步

docker run -v "`pwd`:/project" -it --rm my_image app
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

standard_init_linux.go:207: exec user process caused "exec format error"
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

entry-point docker dockerfile docker-entrypoint

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