问题标签 [ansible-playbook]

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.

0 投票
2 回答
1816 浏览

provisioning - Ansible 如何重播通知

目前我正在从 puppet 切换到Ansible,我对一些概念或至少 ansible 的工作方式有点困惑。

有关设置的一些信息:

我正在使用Ansible Best Practices中的示例,并使用多个角色(剧本)等来构建我的项目。

我正在使用 Vagrant 进行配置,盒子是 Saucy64 VBox。

混乱来自哪里:

当我配置并运行 ansible 时,任务开始执行,然后是通知堆栈。

例子:

最后一个任务:

然后是第一个通知:

现在这一切都很好。随着角色的增加,越来越多的通知出现了。

现在问题来了。

当通知失败时,配置将照常停止。但是通知堆栈是空的!这意味着在错误通知之后的所有通知都不会被执行!

如果是这样,那么如果您更改了 apache 的 vhosts 设置并通知 apache 服务重新加载,那么这将丢失。

举个例子(伪语言):

当上面执行时:

  1. Apache 模块已安装
  2. 虚拟主机启用
  3. PHP 尝试安装但失败
  4. 脚本退出
  5. (通知在哪里?)

现在在这一点上一切似乎都是合乎逻辑的,但 Ansible 再次尝试聪明(不!*)堆栈通知,因此重新加载和重新启动 apache 将导致在配置结束时重新启动 apache 运行。这意味着所有通知都将失败!!!

现在到这里对于某些人来说这也很好。他们会说,嘿,只需重新运行配置,通知就会启动,因此 apache 最终将重新加载,站点将再次启动。不是这种情况。

在更正安装 php 的代码后第二次运行脚本时,由于设计原因,通知将不会运行。为什么?

这就是原因:Ansible 会将成功执行的任务标记为“完成/绿色”,因此不会为这些任务注册任何通知。配置将成功,为了触发通知并因此重新启动 apache,您可以执行以下操作之一:

  1. 通过 ansible 或 ssh 向服务器运行直接命令
  2. 编辑脚本以触发任务
  3. 为此添加一个单独的任务
  4. 销毁盒子实例并重新配置

这非常令人沮丧,因为需要彻底清理盒子,或者我对 Ansible 的理解不正确?

是否有另一种“回收”/重播/强制执行通知的方法?

  • 聪明的做法是要么将任务标记为未完成,然后重新启动通知,要么将通知保留一个单独的队列作为它们自己的任务。*
0 投票
1 回答
3575 浏览

rbenv - 使用 Ansible 安装 Rbenv

我正在尝试使用 Ansible 在我的服务器上安装 Rbenv,但出现此错误:

任务:[rbenv | 创建临时目录] * ** * ** * ** * ** * ** * **** 致命:[localhost] => 条件表达式必须计算为 True 或 False:is_failed($rbuild_present)

致命:所有主机都已失败——正在中止

我的剧本是:

有任何想法吗?

0 投票
1 回答
704 浏览

ansible - Sudo 不适用于 Ansible AWX

我已经sudo_user进去了/etc/ansible/ansible.cfg

在我的剧本中,我设置了remote_usersudo_user并且sudo:yes(也尝试过sudo:True)在同一级别上,hosts: 然后我使用了一个角色:

外壳:cp -f src /usr/local/bin/dest

须藤:是的

并得到

标准错误:cp:无法创建常规文件`/usr/local/bin/dest':权限被拒绝

AWX 中的凭据设置正确 - 我可以在远程计算机上以所需用户的身份手动登录并使用 sudo cp 复制文件。我不知道我做错了什么。

0 投票
1 回答
1284 浏览

nginx - 带有 Flask 应用程序的 Nginx、Ansible 和 uWSGI,内部服务器错误

我已经使用标题中的软件在 EC2 上部署了我的应用程序,但我收到了内部服务器错误。是我一直在关注的教程。

这是我尝试通过浏览器访问应用程序的错误日志:

0 投票
1 回答
6313 浏览

ansible - 更改 Ansible AWX/Tower 中的默认项目基本路径

我想使用自定义项目基本路径。据我了解,我需要更改 /etc/awx/settings.py 中的 PROJECTS_ROOT。但是,当我这样做时没有任何反应......我需要做些什么来手动重新加载 settings.py 吗?

0 投票
1 回答
11358 浏览

ansible - ansible: recursive loop detected in template string

In a playbook, I am using a role this way:

And in the "project" role, I actually have a dependency that wants to use the project_name variable of the "project" role:

But I get an error:

Is changing the name of the "project_name" variable the only solution?

Thanks

0 投票
4 回答
10588 浏览

ansible - Ansible:如何在分配 DNS 之前设置主机名

在将主机名分配给服务器之前,有没有人有更好的解决方案来配置具有主机名的实例?

假设我们正在使用 AWS 并实例化实例ec2-1-2-3-4.compute-1.amazonaws.com。配置完成后,我们最终会在new-instance.example.com的 DNS 中为其分配一个 CNAME,以替换已经投入生产的现有实例。

new-instance.example.com已经存在并且正在生产中,因此我们无法将 CNAME 重新分配给ec2-1-2-3-4.compute-1.amazonaws.com直到机器配置正确并且我们准备切换。但是,我们现在希望实例上的内部配置文件和主机名是new-instance.example.com,以便为 DNS 更改做准备。所以我们不能使用inventory_hostname变量,因为它将是ec2-1-2-3-4.compute-1.amazonaws.com。我也有不需要使用新主机名的普通生产服务器,所以我希望能够将现有的inventory_hostname与它们一起使用。

到目前为止,我最好的想法是在库存文件中分配一个变量:

在剧本中,我可以测试是否存在new_hostname。如果new_hostname存在,则使用它,如果不存在,则使用inventory_hostname。这将导致致命错误,除非error_on_undefined_vars设置为false并且我不希望设置它以提供防止拼写错误的好处。下面是一个失败的例子。

测试手册:

结果:

为每台服务器设置new_hostname是可行的,但我不想为每台服务器都设置它,只是那些需要新主机名的服务器。它还破坏了主机名分组,例如:

ec2-1-2-3-[4:5].compute-1.amazonaws.com

如果new_hostname存在,则有效:

结果:

但是,如果error_on_undefined_vars设置为默认值true,并且未设置new_hostname,则会失败。

此策略的最佳实践?

0 投票
1 回答
6991 浏览

ansible - 为什么这个 ansible lineinfile 任务总是触发通知?

以下任务总是触发通知

第一次运行 ansible 时,应用了预期的更改,并更改了行。如果我再次运行它,ansible 将其视为“已更改”,即使正则表达式不可能匹配,因为该行已变为“bind-address = 0.0.0.0”

为什么 ?

0 投票
7 回答
70027 浏览

nginx - Nginx 错误:(13:权限被拒绝)同时连接到上游

我的nginx-error.log文件中出现此错误:

浏览器还显示 502 Bad Gateway Error。a的输出curl是一样的,Bad Gateway html

我试图通过将权限更改为/tmp/uwsgi.sock777 来修复它。那没有用。我也把自己加入了这个www-data小组(几个看起来相似的问题暗示了这一点)。此外,没有骰子。

这是我的nginx.conf文件:

nginx.conf

我正在用 Nginsx 和 Uwsgi 运行一个 Flask 应用程序,只是为了在我的解释中透彻。如果有人有任何想法,我将不胜感激。


编辑

我被要求提供我的 uwsgi 配置文件。所以,我从来没有亲自写过我的 nginx 或我的 uwsgi 文件。我按照这里的指南使用 ansible-playbook 设置所有内容。该nginx.conf文件是自动生成的,但/etc/uwsgi除了和文件夹中的README文件外,没有任何内容。我需要为 uwsgi 创建自己的配置文件吗?我的印象是 ansible 处理了所有这些事情。apps-enabledapps-available

我相信ansible-playbook自从我运行此命令以来,我的 uwsgi 配置就知道了

它启动并输出:

0 投票
2 回答
3917 浏览

amazon-web-services - 如何使用 Ansible 创建 AWS EC2 实例并将其分配给 ELB?

我正在尝试使用 Ansible 创建 EC2 实例,配置 Web 服务器,然后将其注册到负载均衡器。我创建 EC2 实例和配置 Web 服务器都没有问题,但是根据我使用的代码,所有尝试将其注册到现有负载均衡器都会失败,并出现不同的错误。

有没有人成功做到这一点?

以下是 ec2 和 ec2_elb 模块的 Ansible 文档的链接:

http://docs.ansible.com/ec2_module.html

http://docs.ansible.com/ec2_elb_module.html

或者,如果无法针对 ELB 创建后注册 EC2 实例,我会选择另一个“播放”,它收集具有特定名称的所有 EC2 实例并循环它们,将它们添加到 ELB。