我的手册需要更改ssh端口并更新防火墙规则。 (不幸的是,我不能直接使用所需的自定义端口获得"新服务器。)
管理变更during the execution is easy。
但我不知道如何拥有幂等剧本。
可以完成solution,但会遇到性能问题。
Ansible 2.0 +还有其他可能吗?
答案 0 :(得分:1)
你可以通过几种方式实现这一点。
最简单的方法可能是简单地将SSH端口配置分成单独的Playbook /角色,将SSH端口指定为22,但是您的库存通常会将SSH端口定义为自定义端口。
- 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,您可以在更改端口时修改您的库存文件。这意味着您可以在端到端地运行整个事件,因为下一次运行将连接非默认SSH端口,然后简单地(毫无意义地)检查SSH端口是否仍然设置为所需的端口。您可以使用"magic variable" 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 }}"'
只需确保您在广告资源文件中有all
O(n)
,这意味着针对此广告资源的任何Playbook的所有未来版本都将连接到您自定义内容中包含的所有主机SSH端口。
如果您使用源代码管理,那么您还需要一个local_action任务将更改推送回您的遥控器。