diff --git a/playbooks/first.play.yml b/playbooks/first.play.yml new file mode 100644 index 0000000000000000000000000000000000000000..96369b2e97e1601d3022b5a5a3ec898de51974da --- /dev/null +++ b/playbooks/first.play.yml @@ -0,0 +1,101 @@ +--- +- name: Configure network interfaces + hosts: all + become: true + vars: + gns3_hosts: + H1: + interfaces: + - name: "eth0" + address: "1.0.0.3" + netmask: "255.255.255.0" + gateway: "1.0.0.1" + + R1: + interfaces: + - name: eth1 + address: "1.0.0.1" + netmask: "255.255.255.0" + - name: eth0 + address: "2.0.0.1" + netmask: "255.255.255.0" + routes: + - network: "3.0.0.0/24" + via: "2.0.0.2" + + R2: + interfaces: + - name: eth0 + address: "2.0.0.2" + netmask: "255.255.255.0" + - name: eth1 + address: "3.0.0.2" + netmask: "255.255.255.0" + routes: + - network: "1.0.0.0/24" + via: "2.0.0.1" + + H2: + interfaces: + - name: eth0 + address: "3.0.0.3" + netmask: "255.255.255.0" + gateway: "3.0.0.2" + + tasks: + # - name: "Debug interfaces" + # ansible.builtin.debug: + # msg: "{{ item.name }}" + # loop: "{{ gns3_hosts[inventory_hostname].interfaces }}" + + # - name: "Debug routes" + # ansible.builtin.debug: + # msg: "{{ item.network }}" + # loop: "{{ gns3_hosts[inventory_hostname].routes }}" + + # - name: "Debug YAML" + # ansible.builtin.debug: + # msg: "{{ item.interfaces }}" + # loop: "{{ gns3_hosts[inventory_hostname] | dict2items }}" + # tags: debug_yaml + + - name: "Ensure /etc/network/interfaces.d exists" + ansible.builtin.file: + path: /etc/network/interfaces.d + state: directory + mode: '0755' + + - name: "Configure network interfaces" + ansible.builtin.template: + src: "./templates/interfaces.j2" + dest: "/etc/network/interfaces.d/{{ item.name }}" + owner: "root" + group: "root" + mode: "0644" + loop: "{{ gns3_hosts[inventory_hostname].interfaces }}" + notify: Restart networking + + - name: "Configure routes" + ansible.builtin.template: + src: "./templates/routes.j2" + dest: "/etc/network/interfaces.d/{{ inventory_hostname }}_routes" + owner: "root" + group: "root" + mode: "0644" + loop: "{{ gns3_hosts[inventory_hostname].routes }}" + when: inventory_hostname != "H1" and inventory_hostname != "H2" + notify: Restart networking + + # - name: Verify H1 can ping H2 + # command: ping -c 3 3.0.0.3 + # register: ping_result + # changed_when: false + # failed_when: ping_result.rc != 0 + # when: inventory_hostname == "H1" + + handlers: + - name: "Restart networking" + ansible.builtin.systemd: + name: networking + state: restarted + enabled: true diff --git a/playbooks/inventory.ini b/playbooks/inventory.ini new file mode 100644 index 0000000000000000000000000000000000000000..03ce03bfb22cc622158587decb853b5296e5be86 --- /dev/null +++ b/playbooks/inventory.ini @@ -0,0 +1,7 @@ +[hosts] +H1 +H2 + +[routers] +R1 +R2 diff --git a/playbooks/templates/interfaces.j2 b/playbooks/templates/interfaces.j2 new file mode 100644 index 0000000000000000000000000000000000000000..30c42c9abf975011282fdd0ddfcb6aa4075dd6ea --- /dev/null +++ b/playbooks/templates/interfaces.j2 @@ -0,0 +1,8 @@ +auto {{ item.name }} +iface {{ item.name }} inet static + address {{ item.address }} + netmask {{ item.netmask }} +{% if item.gateway is defined %} + gateway {{ item.gateway }} +{% endif %} + diff --git a/playbooks/templates/routes.j2 b/playbooks/templates/routes.j2 new file mode 100644 index 0000000000000000000000000000000000000000..9ea96c67481dcc50eadc8a51cd4504fed539f77d --- /dev/null +++ b/playbooks/templates/routes.j2 @@ -0,0 +1,4 @@ +{% if item.network is defined %} + up ip route add {{ item.network }} via {{ item.via }} + down ip route del {{ item.network }} via {{ item.via }} +{% endif %}