我想将 ansible 运行限制为所有不在 windows 组中的网络服务器。我在创建新组时完成了这项工作:
[test]
webservers:!windows
Run Code Online (Sandbox Code Playgroud)
并像这样运行它:
ansible-playbook -i inventories/staging/ site.yml --limit test
Run Code Online (Sandbox Code Playgroud)
但是当我试图避免组定义并将所有内容放入限制语句时,它失败了!windows 事件未找到
ansible-playbook -i inventories/staging/ site.yml --limit "webservers:!windows"
Run Code Online (Sandbox Code Playgroud)
这是不支持还是我有什么问题?
我完成了一个直接使用同步命令在两台服务器之间传输文件的教程,我正在尝试将文件从源传输到目标,其中源将有 1 个服务器,目标将在清单文件中拥有多个服务器,如下所示:
[source]
server_1
[destination]
server_2
server_3
server_4
Run Code Online (Sandbox Code Playgroud)
并根据特定条件,我将选择“同步推送”来传输文件的服务器。但是我尝试了很多方法来提取服务器,但我什至无法选择主机:
-hosts: "{{ groups['destination'][0] }}"
-hosts: "{{destination.0}}"
-hosts: "{{destination[0]}}"
Run Code Online (Sandbox Code Playgroud)
这些都给我带来了以下错误:
有问题的行似乎是:
- 主机:“{{目的地}}”
^此处我们可能是错的,但这看起来可能是缺少引号的问题。当模板表达式括号开始值时,始终引用它们。例如:
Run Code Online (Sandbox Code Playgroud)with_items: - {{ foo }}
应写为:
Run Code Online (Sandbox Code Playgroud)with_items: - "{{ foo }}"
如何从 ansible playbook 的清单文件中选择目标服务器?
当我尝试使用 ping 我的 Windows 实例时ansible windows -i hosts.ini -m win_ping
,出现以下错误:
54.197.197.91 | UNREACHABLE! => {
"changed": false,
"msg": "plaintext: the specified credentials were rejected by the server",
"unreachable": true
}
Run Code Online (Sandbox Code Playgroud)
我的hosts.ini
文件看起来像:
[windows]
54.197.197.91
[windows:vars]
ansible_ssh_user=Administrator
ansible_ssh_pass=MyPassword123!
ansible_ssh_port=5985
ansible_connection=winrm
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我这样做了:
ansible-vault create secret.yml
Run Code Online (Sandbox Code Playgroud)
并在那里输入我的密码,如下所示:
win_initial_password: MyPassword123!
Run Code Online (Sandbox Code Playgroud)
然后,我的hosts.ini
文件看起来像:
[windows]
54.197.197.91
[windows:vars]
ansible_ssh_user=Administrator
ansible_ssh_pass={{ win_initial_password }}
ansible_ssh_port=5985
ansible_connection=winrm
Run Code Online (Sandbox Code Playgroud)
当我尝试 ping 时,出现以下错误:
54.197.197.91 | FAILED! => {
"failed": true,
"msg": "the field 'password' has an invalid value, which …
Run Code Online (Sandbox Code Playgroud) 库存文件:
[1]
IP
[2]
IP
[1:vars]
foo=test
Run Code Online (Sandbox Code Playgroud)
如何访问foo
将在组[2]上执行的角色变量?
我的 Mac 运行的是 macOS 10.13、python 2.7.13 和 3.6.2
Ansible 是 2.3.1.0 - http://prntscr.com/grjh34
当我尝试运行 EC2 外部清单脚本时,出现ImportError: No module named ansible.module_utils - http://prntscr.com/grjhoq
如何修复?
我正在尝试为 Ansible 设置动态清单以与 Azure 一起使用,但我收到一些消息,因为 Ansible 无法解析我的 yaml 文件。
到目前为止我做了什么:
创建了 Azure 服务主体并将凭据添加到 /home/user/.azure/credentials (我知道他们建议将它们放在 /home/.azure/credentials 中,我尝试过这样做,但我的 Ansible 似乎在 /home 中查找它们/用户目录。
我将 python 插件(原始的、未经编辑的插件)及其 yaml 配置文件放置在 /etc/ansible/inventory_plugins 中。配置文件如下所示:
plugin: azure_rm
include_vm_resource_groups:
- vm_1197_rg
auth_source: auto
Run Code Online (Sandbox Code Playgroud)
- 使用以下命令测试功能:ansible all -m ping -i ./myazure_rm.yml
输出:
ansible 2.8.1 配置文件 = /etc/ansible/ansible.cfg 配置模块搜索路径 = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python模块位置 = /usr/lib/python2.7/site-packages/ansible 可执行文件位置 = /bin/ansible python 版本 = 2.7.5 (默认,2019 年 4 月 9 日,14:30:50) [GCC 4.8.5 20150623 ( Red Hat 4.8.5-36)] 使用 /etc/ansible/ansible.cfg 作为配置文件 由于清单源不存在或当前用户无法读取而跳过 azure_rm …
我正在寻找在 groovy 中转换列表
array = ['hostname1','hostname2','hostname3']
Run Code Online (Sandbox Code Playgroud)
转换为 Ansible inventory Yaml 格式,类似于
---
all:
hosts:
hostname1:
hostname2:
hostname3:
Run Code Online (Sandbox Code Playgroud)
欢迎任何建议。