更改IP地址/重新启动Netplan

时间:2019-04-02 09:22:11

标签: ansible

我有一个非常简单的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

2 个答案:

答案 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