我有一个非常简单的ansible剧本,它代替了/etc/netplan/config.yml。
然后重新启动netplan。
问题在于,重新启动netplan时IP地址会更改,因此ans不确定地挂起。
如何避免这种情况?我只想运行命令而不等待响应,或者运行命令然后在新IP上进行测试。
我在文档中找不到任何内容,
它是一个非常简单的角色-
task/main.yml
- name: Updating Network Configuration
template: src=config.yml dest=/etc/netplan/config.yaml
notify: start netplan
handlers/main.yml
- name: start netplan
shell: netplan apply
我想添加,只需尝试一下..它应该触发/忘记但仍挂起
- name: start netplan
shell: netplan apply
async: 1
poll: 0
答案 0 :(得分:1)
我遇到了完全相同的问题,async
对我来说很好:
- name: Apply netplan
command: sudo netplan apply
async: 45
poll: 0
答案 1 :(得分:0)
我找到了解决此问题的方法。使用两个IP地址。这将使SSH会话始终保持打开状态。
您可以在/ etc / netplan中使用不同的名称创建多个.yaml文件。执行“ sudo netplan apply”时,netplan将在所有.yaml文件中应用IP地址。然后,您可以在Ansible剧本中配置新任务部分,以访问要保留的IP地址。使用命令:删除不需要的.yaml(使用旧IP地址),然后再次执行“ sudo netplan apply”。原谅我下面的凌乱代码,我才刚开始学习Ansible,所以不确定是否有更好的方法来完成此任务。
注意:下面的脚本在/ etc / netplan中已经有一个辅助.yaml文件,我只是出于个人目的编辑该文件
---
- name: Change the IP Address of the specified server
hosts: template_vm
gather_facts: no
become: yes
tasks:
- name: Including Environment Items
include_vars:
file: vm_settings.yaml
name: vm_settings
- name: uncomment out address lines
replace:
path: /etc/netplan/50-cloud-init.yaml
regexp: '^#\s\s\s\s\s\s\s\s\s\s\s\s'
replace: ' '
- name: set ip address
replace:
path: /etc/netplan/50-cloud-init.yaml
regexp: 'x.x.x.x'
replace: '{{vm_settings.ipaddress}}'
- name: configure DNS
lineinfile:
path: /etc/netplan/50-cloud-init.yaml
line: ' - 192.168.1.10'
insertbefore: .*8.8.8.8
- name: Apply netplan
command: sudo netplan apply
ignore_errors: true
- name: ping
shell: ping -c 1 -w 2 '{{vm_settings.ipaddress}}'
ignore_errors: true
- name: Access new ip address
hosts: new_vm_ip
gather_facts: no
become: yes
tasks:
- name: Including Environment Items
include_vars:
file: vm_settings.yaml
name: vm_settings
- name: Remove old yaml file created by vmware
command: rm -f /etc/netplan/99-netcfg-vmware.yaml
- name: Apply netplan again
command: sudo netplan apply
ignore_errors: true
- name: ping
shell: ping -c 1 -w 2 '{{vm_settings.ipaddress}}'
ignore_errors: true