小编Zei*_*tor的帖子

Docker-compose 卷路径编辑后不改变

我正在运行 a docker-compose up -d,收到以下错误消息:

Creating webserver ... 
Creating webserver ... error

ERROR: for webserver  Cannot start service webserver: error while mounting volume '/var/lib/docker/volumes/backend_dhparam/_data': failed to mount local volume: mount /home/root/SemanaOMnistack/backend/dhparam/:/var/lib/docker/volumes/backend_dhparam/_data, flags: 0x1000: no such file or directory

ERROR: for webserver  Cannot start service webserver: error while mounting volume '/var/lib/docker/volumes/backend_dhparam/_data': failed to mount local volume: mount /home/root/SemanaOMnistack/backend/dhparam/:/var/lib/docker/volumes/backend_dhparam/_data, flags: 0x1000: no such file or directory
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)

我的卷路径docker-compose.yml是:

volumes:
  certbot-etc:
  certbot-var:
  dhparam: …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

管理 Ansible YAML 库存文件中的“嵌套”组

我正在管理多个集群,并且希望将多个清单文件合并到一个清单中,该清单实际上如下所示:

all:
  children:
    cluster_one:
      children:
        controller:
          hosts:
            host1:
            host2:
            host3:
        compute:
          hosts:
            host4:
            host5:
            host6:
    cluster_two:
      children:
        controller:
          hosts:
            host11:
            host12:
            host13:
Run Code Online (Sandbox Code Playgroud)

我期待这最终会像这样解析:

[cluster_one]
host1
host2
host3
host4
host5
host6

[cluster_two]
host11
host12
host13

[controller]
host1
host2
host3
host11
host12
host13

[compute]
host4
host5
host6
Run Code Online (Sandbox Code Playgroud)

通过这种结构,我将能够使用主机模式请求“cluster_one 中的控制器” cluster_one:&controller,或者如果我想要所有集群中的所有控制器,我可以只请求 controller. 方便的!

不幸的是,它实际上是这样解析的:

[cluster_one]
host1
host2
host3
host4
host5
host6

[cluster_two]
host11
host12
host13

[controller]
host1
host2
host3
host11
host12
host13

[compute]
host4
host5
host6

[cluster_one:children]
controller
compute

[cluster_two:children]
controller …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-inventory

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

如何避免 Ansible 上的 Ask-vault-pass 参数?

我想做类似的事情

ansible-playbook myPlaybook.yml -i myHostFile 
Run Code Online (Sandbox Code Playgroud)

代替

ansible-playbook myPlaybook.yml -i myHostFile --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

ansible ansible-vault

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

在 ansible playbook 中使用 gitlab-ci vars

我想使用 Ansible playbook 在 docker 容器内设置远程环境。该剧本将从 gitlab-ci 运行,其中包含我在 Gitlab CI/CD 配置中设置的变量。我怎样才能做到这一点?

这是我想使用的模板。如何设置CI/CD 变量中的user_id和?password

tasks:
  - name: Run XYZ Container
    docker_container:
      name: XYZ
      restart_policy: on-failure
      image: xxxxxxxxxxx
      container_default_behavior: "compatibility"
      env:
        USER_ID= $USER_ID
        PASSWORD= $PASSWORD
Run Code Online (Sandbox Code Playgroud)

ansible gitlab-ci infrastructure-as-code cicd

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

如何使用 Ansible 获取物理网络接口列表

默认情况下,Ansible 2.7 列出收集到的事实中的所有网络接口。这个列表可能很长,尤其是在使用 Docker 和 Kubernetes(具有适当的 CNI,如 Weave Net)的情况下。

对于某些防火墙规则,我只对实际的物理NIC感兴趣。虽然例如ansible_default_ipv4.interface列出了其中之一,但在某些服务器(例如 DMZ / LAN)中可能会有更多。

如何在 Ansible 2.7 playbook 中获取物理网络适配器列表?这种机制应该适用于基于 Debian 的 Linux 发行版以及 RHEL。

ansible

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

如何在ansible中将主机与变量配对

我有一个库存,例如:

all:
  children:
    server_group1:
      hosts:
        host1:
    server_group2:
      children:
        app1:
          hosts:
            host2:
            host3:
        app2:
          hosts:
            host4:
            host5:
    server_group3:
...
Run Code Online (Sandbox Code Playgroud)

我已经像这样组织了我的服务器变量:

我试图以该组的名字命名我的字典(从而使它们独一无二)并在我的剧本中访问它:

hosts: server_group2
tasks:
  - name: check file
    local_action: stat path=path/to/test/{{hostvars[0].name1}}
    register: payld_txt

  - name: conditional transfer
    copy:
      src: path/to/test/{{hostvars[0].name1}}
      dest: /svr/path/{{hostvars[0].name2}}
    when: payld_txt.stat.exists
Run Code Online (Sandbox Code Playgroud)

我最终遇到了这个错误:

该任务包含一个带有未定义变量的选项。错误是:“name1”未定义

我哪里错了?

ansible ansible-inventory

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

如何在特定主机上运行 ansible:ansible-playbook -i <hostname>,

文档指定我可以使用 -i 在特定主机上运行我的剧本:

模式和 ansible-playbook 标志

您可以使用命令行选项更改剧本中定义的模式的行为。例如,您可以通过指定 -i 127.0.0.2, 运行定义主机的剧本:所有主机上。即使您的目标主机未在您的清单中定义,这也有效。您还可以使用 --limit 标志限制您针对特定运行的目标主机:*

但是,我尝试运行ansible-playbook <playbook> -i <new_hostname> -u <username>并且使用的库存仍然是我的默认库存。如何正确使用它?

ansible

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

Ansible“obj 必须是字典列表或嵌套字典”错误,条件检查不起作用

我定义了一些主机变量:

x_firewall_ports_v4:
  - port: '3306'
    rules:
      - ip: '1.2.3.4/32'
        proto: 'tcp'
        action: 'ACCEPT'
      - ip: '2.3.4.5/32'
        proto: 'tcp'
        action: 'ACCEPT'
Run Code Online (Sandbox Code Playgroud)

和一个剧本,现在只写出这些项目:

- debug:
    msg: "IP: {{ item.1.ip }}"
  loop: "{{ x_firewall_ports_v4 | subelements('rules') }}"
  when: x_firewall_ports_v4 is defined
Run Code Online (Sandbox Code Playgroud)

这很好用。因为我不想为我的所有服务器设置防火墙规则,所以最后有条件检查。x_firewall_ports_v4但是从主机定义中删除后,我收到此运行时错误:

TASK [firewall : debug] ********************************************************
fatal: [sql]: FAILED! => {"msg": "obj must be a list of dicts or a nested dict"}
Run Code Online (Sandbox Code Playgroud)

我认为问题可能是x_firewall_ports_v4也有子元素。但我是对的,如何测试x_firewall_ports_v4变量是否存在?尝试了带引号、双引号的条件,但显然它不起作用。

ansible

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

查找清单中每个主机的主机变量列表

我正在尝试找到一种使用 Ansible 调试模块创建以下结果的方法。

期望的结果

{
  "myserver01": {
    "host_var_one": "foo",
    "host_var_two": "bar"
  },
  "myserver02": {
    "host_var_one": "biz",
    "host_var_two": "baz"
  },
  "myserver03": {
    "host_var_one": "fizz",
    "host_var_two": "buzz"
  }
}
Run Code Online (Sandbox Code Playgroud)

库存示例

[my_servers]
myserver01 host_var_one=foo host_var_two=bar
myserver02 host_var_one=biz host_var_two=baz
myserver03 host_var_one=fizz host_var_two=buzz
Run Code Online (Sandbox Code Playgroud)

我希望能够提供主机变量列表,并将它们显示在清单中每个主机下的字典中,其中键是主机变量名称,值是主机变量值。理想情况下,在结果中包含另一个主机变量应该只需要向列表中添加另一个变量名称。

例如,在任务中,我会列出我想要的["host_var_one", "host_var_two"]清单中的每个主机,并获得上述所需的结果。

我有以下任务,有点接近我想要的。我只是想不出一种方法以上述格式列出每个主机所需的所有变量。以下仅适用于一个变量,并且不会列出变量名称及其值。

myplaybook.yml

---
- name: Test
  hosts: all
  gather_facts: yes
  user: ansible
  become: yes

  tasks:
    - name: Debug
      debug:
        msg: "{{ dict(query('inventory_hostnames', 'all') | zip(query('inventory_hostnames', 'all') | map('extract', hostvars, 'host_var_one'))) }}"
      run_once: yes
Run Code Online (Sandbox Code Playgroud)

myplaybook.yml 的结果 …

jinja2 ansible

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

如何在此 ansible 脚本中的主机之间添加 30 秒的时间延迟?

    - hosts: dr
      become: true
      become_user: root

      tasks:
        - name: yum
          shell: "hostname >> /tmp/ycu.txt; yum history | head -5 >> /tmp/ycu.txt"

        - name: Specifying a path directly
          fetch:
            src: /tmp/ycu.txt
            dest: /tmp/{{ inventory_hostname }}/
            flat: yes
Run Code Online (Sandbox Code Playgroud)

如何在此 ansible 脚本中的主机之间添加 30 秒的时间延迟?

sleep delay ansible

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