如何查看 ansible-playbook 命令的标准输出?-v 只显示 ansible 输出,而不是单个命令。如果我能立即弄清楚如何执行此操作,那就太好了,因此如果出现故障或挂起,我可以了解原因。
例如
- name: print to stdout
action: command echo "hello"
Run Code Online (Sandbox Code Playgroud)
会打印
TASK: [print variable] ********************************************************
hello
Run Code Online (Sandbox Code Playgroud) 我想使用ansible来管理一组现有的服务器。我创建了一个ansible_hosts文件,并-K使用仅针对单个主机的命令进行了成功测试(使用选项)
ansible -i ansible_hosts host1 --sudo -K # + commands ...
Run Code Online (Sandbox Code Playgroud)
我现在的问题是每个主机上的用户密码都不同,但是我在 Ansible 中找不到处理此问题的方法。
使用-K,我只被提示预先输入一个 sudo 密码,然后似乎在没有提示的情况下为所有后续主机尝试:
host1 | ...
host2 | FAILED => Incorrect sudo password
host3 | FAILED => Incorrect sudo password
host4 | FAILED => Incorrect sudo password
host5 | FAILED => Incorrect sudo password
Run Code Online (Sandbox Code Playgroud)
迄今为止的研究:
一个StackOverflow 问题,有一个不正确的答案(“使用-K”),作者的一个回答是“发现我需要无密码的 sudo”
Ansible 文档,其中说“使用无密码 sudo 使事情更容易自动化,但这不是必需的。” (强调我的)
此安全 StackExchange 问题将其视为NOPASSWD必需的读取
在 Ansible 2.4 中,该include模块已弃用。取而代之的是,它附带了两个替换模块,import_tasks以及include_tasks. 但它们有非常相似的描述:
include_tasks:包含一个文件,其中包含要在当前剧本中执行的任务列表。import_tasks:导入要添加到当前剧本以供后续执行的任务列表。什么时候用前者,什么时候用后者?
我正在使用 Ansible,并且我的库存/全部中有此配置:
[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
[all:children]
master
slave
Run Code Online (Sandbox Code Playgroud)
我不想为每个新实例重复所有参数。如何仅在一处配置它们?有没有这些参数的文件?
Ansible 标签只能用于运行任务/角色的子集。这意味着默认情况下所有任务都会执行,我们只能阻止某些任务执行。
我们可以限制任务仅在指定“foo”标签时执行吗?我们可以在when任务的一部分中使用当前标签吗?
如何使用 Ansible 将用户添加到其他组?例如,我想在sudo不替换用户现有组的情况下将用户添加到组中。
我从ansible开始,并将使用它在几个 Linux 发行版上安装软件包。
我在文档中看到yum和apt命令是分开的 - 统一它们并使用这样的东西的最简单方法是什么:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
Run Code Online (Sandbox Code Playgroud)
代替
- name: install the latest version of Apache on CentOS
yum: name=httpd state=latest
when: ansible_os_family == "RedHat"
- name: install the latest version of Apache on Debian
apt: pkg=httpd state=latest
when: ansible_os_family == "Debian"
Run Code Online (Sandbox Code Playgroud)
我理解这两个包管理器是不同的,但它们仍然有一组共同的基本用法。其他编排器(例如 salt)只有一个安装命令。
我的 ansible 盒子(流浪者)有一些奇怪的问题。
昨天一切正常,我的剧本运行良好。
今天,ansible 靠的是“收集事实”?
这是详细的输出:
<5.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: deploy
<5.xxx.xxx.xxx> REMOTE_MODULE setup
<5.xxx.xxx.xxx> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-
o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-s
sh-%h-%p-%r', '-o', 'Port=2221', '-o', 'KbdInteractiveAuthentication=no', '-o',
'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o
', 'PasswordAuthentication=no', '-o', 'User=deploy', '-o', 'ConnectTimeout=10',
'5.xxx.xxx.xxx', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1411372677
.18-251130781588968 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1411372677.18-2
51130781588968 && echo $HOME/.ansible/tmp/ansible-tmp-1411372677.18-251130781588
968'"]
Run Code Online (Sandbox Code Playgroud) 我有一个PGBouncer 的 Ansible 游戏,它显示了 PGBouncer 内置的统计模块的一些输出。
我的问题是,当 Ansible 将输出打印到终端时,它会破坏换行符。而不是看到
----------
| OUTPUT |
----------
Run Code Online (Sandbox Code Playgroud)
我懂了
----------\n| OUTPUT |\n----------
Run Code Online (Sandbox Code Playgroud)
有谁知道如何让 Ansible“漂亮地打印”输出?
有没有一种简单的方法可以将一个充满模板 .j2 文件夹的文件夹部署到 linux 盒子,使用与模板相同的名称,但没有 .j2 扩展名,而不是为每个文件使用模板模块?
现在我有一长串:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService
Run Code Online (Sandbox Code Playgroud)