AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 612017
Accepted
Antonis Christofides
Antonis Christofides
Asked: 2014-07-12 12:22:41 +0800 CST2014-07-12 12:22:41 +0800 CST 2014-07-12 12:22:41 +0800 CST

如何从服务器上不再使用的角色中清除内容?

  • 772

假设我有一个主机,其中包括一个 Web 服务器,相关的 Ansible 角色安装在其中nginx,在 中执行一些基本配置/etc/nginx,并在防火墙中打开端口 80 和 443。

在某些时候,我希望该特定主机不再是 Web 服务器,因为出于某种原因,我将该服务移到了其他地方。只是从[webservers]库存中删除服务器会在服务器中留下垃圾。理想情况下,我想卸载nginx,删除/etc/nginx目录(和其他一些目录),并关闭防火墙中的 80 和 443 端口。

在 Puppet 中,我可以做到这一点。作为 Web 服务器的主机将在其配置中具有以下内容:

class { 'nginx':
  ensure => present,
}

我所要做的就是用“缺席”代替“在场”。如果nginx该类编写得很好,它将撤消所做的更改。(通常管理员会将“present”替换为“absent”,稍后,当他确定所有受影响的主机都撤消了配置时,他将从清单中删除该项目。)

更重要的是,我认为Puppet防火墙模块会自动删除manifest中找不到的防火墙规则;所以我认为,对于防火墙,你甚至不需要做上面那个“缺席”的事情,反正防火墙会自动关闭。

如何使用 Ansible 实现这些目标?

ansible
  • 2 2 个回答
  • 13236 Views

2 个回答

  • Voted
  1. Best Answer
    Nick Groenen
    2014-07-13T07:53:29+08:002014-07-13T07:53:29+08:00

    使用 Ansible,您在执行此操作时与使用 Puppet 执行此操作的方式并没有什么不同。

    在您的示例中,您将设置

    class { 'nginx':
      ensure => absent,
    }
    

    您依赖于该 puppet 模块的作者编写了必要的代码来处理删除所有内容。不是每个 puppet 模块都有这个。

    同样,对于 Ansible,您可能拥有具有安装和删除它的必要步骤的角色。区别仅在于如何调用两者。

    一种方法可能是相关角色暴露一个变量来切换行为。例如,该 nginx 角色可能采用一个变量,该变量nginx_state采用值installed和absent.

    在角色中tasks/main.yml,角色作者可能有类似...

    - include: install.yml
      when: nginx_state|default('present') == "present"
    
    - include: uninstall.yml
      when: nginx_state|default('present') == "absent"
    

    ..在这两个有条件包含的文件之间拆分了相应的安装/卸载逻辑。

    Ansible 角色也可以嵌套。作为执行相同操作的另一种方式,角色作者可能会提供一个角色nginx,其中包含另一个角色,称为uninstalled. 然后你可以这样做:

    - name: Uninstall nginx
      hosts: some_group
      roles:
        - nginx/uninstalled
    

    与 Puppet 相比,Ansible 可以说对于应该如何做事的规则和指导方针较少,因此实践在野外会有所不同,但同样的概念也适用。

    • 13
  2. Mxx
    2014-07-12T20:27:14+08:002014-07-12T20:27:14+08:00

    由于您在 Ansible 中进行了配置/配置,因此您可以简单地炸毁整个服务器,重新安装/配置一个新服务器,并拥有一个干净的已知状态来运行它。

    如果您真的想为其他目的“重新配置”它,那么您需要创建一个新的剧本来执行必要的清理任务。

    据我所知,所有 Ansible打包模块都支持state=absent确保您的服务器上没有安装给定的包。此外,apt模块具有purge=yes将清理任何剩余的自定义配置文件的参数。

    您还可以创建任务来确认端口 80 是否有防火墙。但是,由于您不会在该端口上运行任何进程,因此防火墙不会对服务器的安全性产生任何影响。

    • 1

相关问题

  • Ansible 剧本,使用选项 --disabled-login 创建用户

  • ansible playbook,操作系统不同的用户

  • ansible:为什么文件模块会跳过?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve