问题标签 [ansible]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vagrant - Vagrant 中的故障转移供应商?
是否可以根据前一个供应商的成功或失败来运行一个 Vagrant 供应商?
我有一个配置了 Ansible 的 Vagrant VM,我想分发给其他人。问题是,其中一些人正在运行 Windows,而 Ansible 不支持 Windows。我可以解决这个问题,但我想抓住失败的供应商并做其他事情。
准确地说,我只想在 Ansible 配置程序失败时运行 shell 配置程序。Vagrantfile 只是 Ruby,所以看起来这应该是可能的,一种或另一种方式。
当尝试在 Windows 上运行 Ansible 配置器时,Vagrant 返回此错误:
ansible - 获取相对路径的任务文件目录
在我的剧本中,我运行一个 local_action 来执行脚本并存储值以供将来使用:
这很好,直到我将我的剧本移动到一个子目录中。事实证明,该命令从您当前的工作目录(您运行 ansible 的目录)运行,因此路径需要如下所示:
我有一个目录结构如下:
- group_vars/
- 角色/
- 鬼/
- 任务/
- 主要的.yml
- 模板/
- 释放.py
- 任务/
- 鬼/
- 网站.yml
但是角色/幽灵文件夹名称可以更改(并且硬编码不会让您从另一个目录运行剧本)。
如何获取 tasks/main.yml 的目录路径(发出 local_action 命令),以便我可以给出它的相对路径?
ansible - Ansible lineinfile 重复行
我在 /etc/foo.txt 有一个简单的文件。该文件包含以下内容:
我有以下 ansible playbook 任务来取消注释上面的行:
当我第一次运行 ansible-playbook 时,该行被取消注释并且 /etc/foo.txt 现在包含以下内容:
但是,如果我再次运行 ansible-playbook,我会得到以下信息:
如果我再次运行它,那么 /etc/foo.txt 文件将如下所示:
如何避免这种重复行?我只想取消注释“#bar”并完成它。
ansible - 针对不可用的主机运行 ansible playbook(关闭/离线)
可能会遗漏一些明显但可靠的剧本(这对于通过 ssh 连接的机器网络非常有用)没有一种机制来跟踪哪些剧本已针对哪些服务器运行,然后在节点弹出时重新运行/签到?该剧本工作正常,但如果在某些机器关闭/离线时执行它,那么这些主机会错过这些更改……我确信解决方案不能是一次又一次地运行所有剧本。
也许它是关于搜索正确的术语......如果有人理解这个问题,请帮助应该搜索什么,因为这必须是一个常见的要求......这是否称为自动配置(只是猜测)?
寻找一种特殊的方式,因为我喜欢它的两件事(基于 Python 和 SSH……不需要额外的客户端部署)
shell - 执行脚本为 Vagrant 设置 ansible(或其他供应商)?
我的总体目标是我的团队成员通常会克隆一个 git repo,cd 到其中,然后键入vagrant up
. 特别是,我不希望他们必须安装除了 vagrant 和 VM runner(即 VirtualBox)之外的任何东西。
对于 ansible,我将其包含在子树中。它很容易运行,例如source ansible/hacking/env-setup
. 但是,我希望它尽可能地防弹和标准化。
有没有办法vagrant up
运行像上面这样的脚本来启用配置器(在主机上)?还是我需要将其包装在 shell 脚本中?
[如果你想要一个vagrant up
shell 脚本的基本原理,Vagrant 会自动沿着源代码树查找合适的 Vagrantfile - 所以我的目标开发人员/设计人员不需要考虑 Vagrantfile 的位置。]
ansible - Ansible 报告应如何格式化脚本输出?
我正在使用 Ansible v1.3 在一组服务器上运行 bash 脚本。我试图让我的输出与 Ansible 期望正确格式化输出的内容一起工作,但我遗漏了一些东西。
我在某处读过(找不到链接!),如果脚本输出被格式化为 JSON,Ansible 会选择它并将其包含在输出中。
所以在脚本中,我做的最后一件事是:
我这样称呼我的脚本:
我得到的输出是这样的:
我期待看到这样的事情:
我错过了什么?
ansible - 在 Ansible 中,环境关键字是如何使用的?
我有一本安装 PythonBrew 的剧本。为此,我必须修改 shell 环境。因为 Ansible 中的 shell 步骤不是持久的,所以我必须在export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc;
每个 PythonBrew 相关命令的开头添加:
我想消除这种冗余。在Ansible 讨论组中,我被提到了environment
关键字。我查看了文档中的示例,但对我来说并没有点击。对我来说, environment 关键字看起来与任何其他变量都没有太大不同。
我一直在寻找其他示例,但只能找到这个非常简单的示例。
有人可以演示environment
关键字在 Ansible 中的作用,最好使用我上面提供的代码示例吗?
ansible - Ansible:测试是否可以在没有致命错误的情况下进行 SSH 登录?
我有一个安装手册,它采用新安装的 linux 实例,以默认用户身份登录(我们将调用 user1),创建另一个用户(我们将调用 user2),然后禁用 user1。因为 user1 只能在这组任务执行之前访问实例,所以这些任务位于一个特殊的 playbook 中,我们必须记住要在新实例上运行。之后,由于 user1 不再存在,所有的常用任务都由 user2 运行。
我想将 setup 和 common playbook 结合起来,这样我们就不必再手动运行 setup playbook 了。我尝试创建一个任务以查看实例上存在哪个用户,以通过尝试以 user1 身份通过 SSH 登录来使原始设置任务成为条件。问题是,如果我为任一用户尝试 SSH 登录,ansible 将退出并出现 FATAL 错误,因为它无法登录:新实例上尚不存在 user2,或者在设置 playbook 执行后 user1 已被禁用。
我相信通过 SSH 测试登录是从外部确定实例处于何种状态的唯一方法。有没有办法测试 SSH 登录而不会出现致命错误,然后根据结果有条件地执行任务?
ansible - 在 Ansible 中,如何在文件末尾添加一行?
我希望这很简单。我正在使用这样的lineinfile
模块:
我遇到的问题是它fi
用我的新行替换文件中的最后一行(即 ),而不是附加该行。这会产生语法错误。
我的参数是否正确?我尝试将正则表达式设置为'^'
和''
(空白)。还有其他方法可以解决这个问题吗?
我正在使用 Ansible 1.3.3。
linux - Ansible 等部署工具相对于 shell 的优势
目前我的所有部署脚本都在 shell 中,它安装了大约 10 个程序并对其进行配置。我看到它的方式 shell 是一个很棒的工具:
模块化:每个脚本只有一个程序,这样我可以将程序分布在不同的服务器上。
简单: Shell 脚本非常简单,不需要安装任何其他软件。
一键式:我只需要运行一次 shell 脚本,一切就都设置好了。
不可知论:大多数程序员都可以弄清楚 shell,不需要知道如何使用特定的程序。
版本控制:由于我的代码在GitHub 上,一个简单的 Git 拉取并重新启动所有主管将运行我的最新代码。