问题标签 [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.

0 投票
1 回答
881 浏览

ansible - 使用 Ansible 管理客户主机和应用程序的最佳实践

我的一些客户有他们网站的虚拟机,我想使用 Ansible 进行管理。

我相信角色是要走的路。我可以为客户的主机分配常见的角色,如“web 服务器”和“邮件守护程序”,以及使用参数化角色将多个 Wordpress 实例部署到一台主机。

我不确定如何将这些角色分配给我客户的主机。使用清单文件、组、剧本、host_vars、group_vars 等为主机分配角色(包括参数化角色的多次分配)的最佳实践是什么?我应该将每个主机添加到剧本并在那里分配角色吗?我是否应该只将角色分配给组(但是我不能添加多个参数化角色?或者我可以使用 host_vars 或类似的东西)?

0 投票
2 回答
950 浏览

python - Ansible购买域名并使用python解析xml输出

这是我的 Ansible 剧本中的一个动作:

它返回如下内容:

是否可以使用类似xmltodict.parse解析xml并将其转换为字典的东西?特别是我希望返回ApiResponse Status(返回错误或成功)和Error Number. 谢谢。

0 投票
1 回答
659 浏览

ruby - 从 Ansible Juniper NetConf 模块了解 Netconf::OpenError

我正在使用 Ansible 将配置推送到一些瞻博网络设备上。为了开始,我正在尝试从此处的官方演示中调整事实收集剧本。 我已修改主机文件以使用我的实际瞻博网络设备之一。Ansible 似乎知道所有模块库的位置,但由于某种原因,它抛出了一个似乎没有文档的错误:Netconf::OpenError

除了在我自己的主机上使用主机文件之外,我还在 tasks/nc_check.yml 中更改了端口 22 而不是端口 830。这是因为(据我所知),我可以进入交换机的只有 SSH(端口 22)

瞻博网络模块都是用 Ruby 编写的。以下是我安装的所有依赖项的版本:

下面是运行演示提供的相同剧本的输出。我的问题是:

  1. 似乎是什么导致了 Netconf::OpenError 错误?
  2. 我应该期望在瞻博网络交换机上为 Netconf 使用不同的端口吗?我会在瞻博网络配置中查看什么以了解要使用的端口?(EX4200 和 EX4500)

    ansible-playbook junos/get_junos_facts.yml -i hosts -vvv

    PLAY [显示 Junos Facts,确保使用 -v] * ** * ** * ** * ** * ***

    任务:[检查设备的 NETCONF 可达性] * ** * ** * ** * ** * *** <10.113.7.002> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-1384993979.41-2345029032433 && chmod a+rx $HOME/.ansible/tmp/ansible -1384993979.41-2345029032433 && echo $HOME/.ansible/tmp/ansible-1384993979.41-2345029032433'] <10.113.7.002> REMOTE_MODULE wait_for host="10.113.7.002" port=22 timeout="002" <10.13. /10.13 tmp/tmpwhWU6X TO /home/gateway/.ansible/tmp/ansible-1384993979.41-2345029032433/wait_for <10.113.7.002> EXEC ['/bin/sh', '-c', '/usr/bin/python /home/网关/.ansible/tmp/ansible-1384993979.41-2345029032433/wait_for;rm -rf /home/gateway/.ansible/tmp/ansible-1384993979.41-2345029032433/ >/dev/null 2>&1'] ok: [10.113.7.002] => {"changed": false, "elapsed": 0 , “物品”:

    任务:[联系目标以获取Junos事实] * ** * ** * ** * ** * **** <10.113.7.002> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-1384993979.48-89494360697375 && chmod a+rx $HOME/.ansible/tmp/ansible -1384993979.48-8949494360697375 && echo $ home/.ansible/tmp/ansible-138499397979.48-8949494949494360697375'] gateway/.ansible/tmp/ansible-1384993979.48-89494360697375/junos_get_facts <10.113.7.002> PUT /tmp/tmp28DLzs TO /home/gateway/.ansible/tmp/ansible-1384993979.48-89494360697375/arguments <10002>EC.1 /bin/sh', '-c', '/usr/local/bin/ruby /home/gateway/.ansible/tmp/ansible-1384993979.48-89494360697375/junos_get_facts /home/gateway/.ansible/tmp/ansible-1384993979.48 -89494360697375/参数;rm -rf /home/gateway/.ansible/tmp/ansible-1384993979.48-89494360697375/ >/dev/null 2>&1'] 失败:[10.113.7.002] => {"failed": true, "parsed": false无效的输出是:/var/lib/gems/1.9.1/gems/netconf-0.3.1/lib/net/netconf/transport.rb:49:inopen': Netconf::OpenError (Netconf::OpenError) from /var/lib/gems/1.9.1/gems/netconf-0.3.1/lib/net/netconf/transport.rb:28:in初始化'从 /var/lib/gems/1.9.1/gems/netconf-0.3.1/lib/net/netconf/ssh.rb:21:in initialize' from /home/gateway/.ansible/tmp/ansible-1384993979.48-89494360697375/junos_get_facts:46:innew' 来自 /home/gateway/.ansible/tmp/ansible- 1384993979.48-89494360697375/junos_get_facts:46:in `'

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

    PLAY RECAP * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * * 重试,使用:--limit @/主页/网关/get_junos_facts.retry

    10.113.7.002 :正常=1 更改=0 无法访问=0 失败=1

0 投票
7 回答
17862 浏览

git - ansible:git模块挂起

我正在使用 Ansible,我很难让 git 模块正常工作。我已经阅读了几篇有同样问题的人的帖子,我查看了 ansible 文档,我几乎尝试了所有内容。在他们使用 git 之前,我找到了一个清晰的教程,但是当我使用我的存储库时再次遇到问题......:/ git 任务只是挂起......没有错误,它只是卡住了!

这是我的主机文件:

这是在我计算机上的 virtualbox 上运行的 vagrant VM。

我从本教程中获取了剧本并执行了所有步骤,直到步骤 08:https ://github.com/leucos/ansible-tuto/tree/master/step-08

我在我的虚拟机上运行它,它工作正常,然后我添加了一个任务“部署我的代码”来使用我的存储库......但是这个任务不起作用。它是 bitbucket 上的私有存储库。这有什么不同吗?

用户可能有问题,或者用户正在运行 ansible,或者密钥等,但是我来回尝试了几个小时,现在我更加困惑......我只是不知道现在该怎么调试它找出什么是错的,我错过了什么。

谢谢。

0 投票
1 回答
64511 浏览

sudo - ansible playbooks中的user vs sudo vs sudo_user

我已经阅读了 Ansible 文档,但我仍然对 ansible playbook 中的以下三个参数感到有些困惑:user、sudo、sudo_user。

我尝试了以下具有不同参数组合的剧本:

  1. 用户:部署 => 作品

  2. user:deploy 和 sudo: True =>挂在 git 任务上

  3. user:deploy, sudo: True and sudo_user: deploy => Works

sudo_user 实际上做了什么?我何时以及为什么应该使用这些组合?

谢谢

0 投票
1 回答
36202 浏览

shell - Ansible Playbook 运行 Shell 命令

我最近为我的一台服务器深入研究了 Ansible,发现它非常有趣且节省时间。我正在运行一个 Ubuntu 专用服务器,并配置了许多用 Python 编写的 Web 应用程序和一些用 PHP 编写的 Web 应用程序。对于 Python,我使用 uwsgi 作为 HTTP 网关。我编写了 shell 脚本来启动/重新启动一些进程,以便运行特定 Web 应用程序的实例。我每次都要做的是,连接 ssh 并导航到该特定应用程序并运行脚本。

我需要的

我一直在尝试找到一种方法来编写 Ansible 剧本,以便在我的个人计算机上使用一行命令来完成所有这些工作,但我不知道如何做到这一点。我还没有在互联网上找到非常解释性(对于初学者)的文档或帮助。

问题

如何使用 Ansible playbook 重启 Nginx?如何通过进程 ID 杀死进程?

0 投票
2 回答
9726 浏览

ansible - 使用ansible,我将如何删除目录中指定集合以外的所有项目?

当然,我可以使用 shell 命令,但我希望有一种可行的方法来做到这一点,这样我就可以获得“已更改/未更改”的响应。

0 投票
2 回答
4676 浏览

php - ansible的优雅重载是幂等的吗?

我们现在正在调查 Ansible 来配置我们的服务器。这是一个相当默认的 nginx、php-fpm 和 mysql 设置。但是,我想知道这些软件包的安装以及如何使 playbook 在服务运行时具有幂等性。

对于 nginx,我们有一个默认值nginx.confconf.d/. 对于 php,我们有一个php.ini,一个php-fpm.conf,一个池pool.d/和一些 ini 文件conf.d/。在每个 ansible playbook 调用上覆盖所有文件的想法是什么?

如果所有配置都被覆盖,是否可以执行 aservice nginx reload甚至service php5-fpm reload在服务器负载较重的情况下?对于初始安装,areload不会启动服务器,所以我必须先检查状态,然后在start和之间切换reload

如果我寻找安装了 nginx 的剧本,他们通常使用将重新启动 nginx 的处理程序。但是,这并不优雅,所以我不太喜欢这种方法:

一般来说,在不强制重启的情况下,使用 ansible 和配置服务器以及nginx、php-fpm 和 mysql 等服务的常见模式是什么?

0 投票
1 回答
414 浏览

amazon-web-services - ansible 库存文件的正确语法是什么?

这是我的inventory.yml文件:

但我越来越--list ([Errno 8] Exec format error)

根据这个链接看起来不错,知道吗?

0 投票
1 回答
3189 浏览

provisioning - Ansible Playbook 为以后提供和保存主机

我正在尝试制作一些 Ansible 剧本,这些剧本将提供一个环境(n 个数据库、m 个 Web 服务器等)并保存这些主机以供以后使用,以便我可以针对它们运行部署。我能想到的最好的方法是https://gist.github.com/geowa4/7686681(复制如下)。这是因为它为各种服务器类型创建机器并将它们保存到主机文件中。我将使用新生成的 hosts 文件的部署脚本确保在部署源代码之前正确安装和配置了正确的包。这是使用 Ansible 完成配置和部署的唯一方法吗?如果我想动态添加一个新的 Web 服务器怎么办?我必须手动编辑静态主机文件吗?到目前为止,使用 Rackspace 的动态清单脚本,它只是列出了一大堆服务器,无法按类型对它们进行分组。如果我能得到它,我会欣喜若狂。

主机.j2:

主要.yml: