我正在运行 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) 我正在管理多个集群,并且希望将多个清单文件合并到一个清单中,该清单实际上如下所示:
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-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 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 2.7 列出收集到的事实中的所有网络接口。这个列表可能很长,尤其是在使用 Docker 和 Kubernetes(具有适当的 CNI,如 Weave Net)的情况下。
对于某些防火墙规则,我只对实际的物理NIC感兴趣。虽然例如ansible_default_ipv4.interface列出了其中之一,但在某些服务器(例如 DMZ / LAN)中可能会有更多。
如何在 Ansible 2.7 playbook 中获取物理网络适配器列表?这种机制应该适用于基于 Debian 的 Linux 发行版以及 RHEL。
我有一个库存,例如:
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)
我已经像这样组织了我的服务器变量:
group_vars/server_group2/app1
app1:
name1: value1
name2: value2
Run Code Online (Sandbox Code Playgroud)
group_vars/server_group2/app2
app2:
name1: value11
name2: value21
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”未定义
我哪里错了?
文档指定我可以使用 -i 在特定主机上运行我的剧本:
模式和 ansible-playbook 标志
您可以使用命令行选项更改剧本中定义的模式的行为。例如,您可以通过指定 -i 127.0.0.2, 运行定义主机的剧本:所有主机上。即使您的目标主机未在您的清单中定义,这也有效。您还可以使用 --limit 标志限制您针对特定运行的目标主机:*
但是,我尝试运行ansible-playbook <playbook> -i <new_hostname> -u <username>并且使用的库存仍然是我的默认库存。如何正确使用它?
我定义了一些主机变量:
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 调试模块创建以下结果的方法。
期望的结果
{
"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 的结果 …
- 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 秒的时间延迟?