gpt4 book ai didi

ssh - 如果我们更改 SSH 端口,如何拥有一个幂等的 Ansible 剧本?

转载 作者:行者123 更新时间:2023-12-02 13:46:50 28 4
gpt4 key购买 nike

我的剧本需要更改 ssh 端口并更新防火墙规则。 (不幸的是,我无法使用所需的自定义端口直接“获取”新服务器)。

管理变更 during the execution is easy .

但是我不知道如何拥有 幂等 剧本。

  • 第一次运行必须在默认端口 (22) 上启动。
  • 下一次运行必须在自定义端口上启动。

  • solution可以完成,但有性能问题。

    Ansible 2.0+ 还有其他可能性吗?

    最佳答案

    你真的可以通过几种方式来解决这个问题。

    最简单的方法可能是将 SSH 端口配置简单地分离到一个单独的剧本/角色中,该剧本/角色将 SSH 端口指定为 22,但您的 list 通常会将 SSH 端口定义为您的自定义端口。

    ssh_port.yml

    - hosts: all
    vars:
    ansible_ssh_port: 22
    tasks:
    - name: change the default ssh port
    lineinfile ...
    notify: restart ssh

    handlers:
    - name: restart ssh
    service:
    name : sshd
    state: restarted

    然后,您将只在创建机器时运行此剧本,然后只一次又一次地重新运行您的主要剧本,回避这一步的幂等性。

    或者,如 Mikko Ohtamaa在评论中指出,当您更改端口时,您可以让 Ansible 修改您的 list 文件。这意味着您可以以幂等方式运行整个过程,因为下一次运行将连接到非默认 SSH 端口,然后简单地(显然毫无意义)检查 SSH 端口是否仍设置为所需的端口。您可以使用 "magic variable" 获取 list 文件。 inventory_file .一个粗略的例子可能如下所示:
    - name: change the default ssh port
    lineinfile ...
    notify: restart ssh

    - name: change ssh port used by ansible
    set_fact:
    ansible_ssh_port: {{ custom_ssh_port }}

    - name: change ssh port in inventory
    lineinfile:
    dest: inventory_file
    insert_after: '[all:vars]'
    line: 'ansible_ssh_port="{{ custom_ssh_port }}"'

    只要确保你有一个 inline group variables blockall在 list 文件中,这意味着将来针对此 list 运行的任何剧本都将连接到自定义 SSH 端口上包含的所有主机。

    如果您使用源代码控制,那么您还需要一个 local_action 任务将更改推送回您的远程。

    关于ssh - 如果我们更改 SSH 端口,如何拥有一个幂等的 Ansible 剧本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109279/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com