[实践OK]ansible下hosts配置中的yml文件中的host文件注释方法

jack 2026-4-1 16:15 | |
```
ansible如何注释掉yaml中的host 10.71.59.14::
    # Elasticsearch
    sec_weekly_log_elastic:          #Elastic服务器
      vars:
        project: sec_weekly_log_elastic
        app: es
      children:
        sec_weekly_log_elastic_sjq:
          hosts:
            10.71.59.14:
              app: sec_weekly_log_elasticsearch
```


这个问题很简单,但要注意 **YAML 语法层级**,否则很容易写错。

---

# ✅ 正确做法(直接注释 host)

你现在的结构:

```yaml
hosts:
  10.71.59.14:
    app: sec_weekly_log_elasticsearch
```

---

## 🥇 推荐写法(完整注释这个主机块)

```yaml
hosts:
  # 10.71.59.14:
  #   app: sec_weekly_log_elasticsearch
```

---

# 🧠 为什么必须“整块注释”

因为 YAML 是**缩进结构语言**:

👉 如果你只注释一行:

```yaml
hosts:
  # 10.71.59.14:
    app: sec_weekly_log_elasticsearch   ❌ 会报错
```

👉 解析会变成:

```yaml
hosts:
  app: sec_weekly_log_elasticsearch
```

👉 直接炸(结构错)

---

# 🥈 更优雅方式(推荐长期用)

👉 不用注释,直接**挪到 disabled group**

---

```yaml
all:
  children:
    sec_weekly_log_elastic:
      children:
        sec_weekly_log_elastic_sjq:
          hosts:
            # 生产
            # 10.71.59.14:

        sec_weekly_log_elastic_disabled:
          hosts:
            10.71.59.14:
              app: sec_weekly_log_elasticsearch
```

---

👉 好处:

* 不破坏结构
* 可随时恢复
* 可单独操作 disabled 组

---

# 🥉 另一种方式(最工程化)

👉 用变量控制是否生效:

```yaml
hosts:
  10.71.59.14:
    app: sec_weekly_log_elasticsearch
    enabled: false
```

然后 playbook:

```yaml
when: hostvars[inventory_hostname].enabled | default(true)
```

---

# ⚠️ 最常见错误总结

| 错误写法    | 问题       |
| ------- | -------- |
| 只注释 IP  | YAML结构破坏 |
| 留下子字段   | 解析异常     |
| 注释缩进不一致 | 直接报错     |

---

# 📌 一句话总结

> **YAML 中“注释主机”必须把 host 及其所有子字段一起注释,否则会破坏结构。**

---

如果你后面要做:

👉 “批量上下线主机(几十台)”

我可以帮你设计一套:

* enabled 开关机制
* 按环境/机房自动过滤
* 不用手动注释

这在你这种运维场景会非常实用。

作者:jack@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://www.jackxiang.com/post/13336/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]