2017-09-19 15 views
-1

네트워크 장비에서 일상적인 작업을 자동화하기 위해 게임을 사용하고 실험을 시작했습니다. 나는 기본적인 지식을 습득하고 그 과정에서 배울 수 있었지만, 지식이 제한적이라는 것을 안다. 나는이 플레이 북을 볼 때 얼마나 많은 것들이 여분으로 여겨 질지를 알아야만한다. 중복을 제거하고 물건을 만드는 더 좋은 방법이 있다고 가정해야한다. 더 효율적이고 더 깨끗합니다.나의 플레이 북 효율성 향상에 대한 조언?

예 몇 가지 아이디어를 얻으려면 기기 그룹에서 새 VLAN을 구성하는 것이 좋습니다.

일반적으로 새로운 VLAN을 먼저 두 개의 배포 스위치에 구성한 다음이 두 스위치에 VLAN을 추가해야하는 특정 인터페이스가 있어야합니다.

그래서,이 첫 번째 부분에 대한 내 호스트에서 "DIST"라는 그룹의 두 호스트가하는 파일 :

- name: Add Heartbeat VLAN to DIST 
    hosts: dist 
    connection: local 
    gather_facts: no 

    tasks: 
    - name: Include Login Credentials 
    include_vars: secrets.yml 

    - name: Define Provider 
    set_fact: 
     provider: 
     host: "{{ ansible_host }}" 
     username: "{{ creds['username'] }}" 
     password: "{{ creds['password'] }}" 

    tasks: 
    - name: Ensure VLAN Exists 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id="2600" state=present host={{ ansible_host }} 

    - name: Ensure VLAN Name Configured 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id={{ item.vid }} name={{ item.name }} host={{ ansible_host }} state=present 
     with_items: 
     - { vid: 2600, name: Ansible Heartbeat VLAN } 

    - name: ASSIGN VLAN TO TRUNK PORTS 
     nxos_switchport: 
     interface: "{{ item.interface }}" 
     mode: trunk 
     trunk_vlans: "{{ item.vlan }}" 
     provider: "{{ provider }}" 
     with_items: 
     - { interface: po850, vlan: 2600 } 
     - { interface: po860, vlan: 2600 } 
     - { interface: po865, vlan: 2600 } 
     - { interface: po868, vlan: 2600 } 
     - { interface: po871, vlan: 2600 } 
     - { interface: po872, vlan: 2600 } 
     - { interface: po875, vlan: 2600 } 
     - { interface: po877, vlan: 2600 } 
     - { interface: po884, vlan: 2600 } 

:

다음
[dist] 
DIST01 ansible_host=10.10.1.1 
DIST02 ansible_host=10.10.1.2 

나는 내 플레이 북에 다음을 생성 따라서 해당 그룹의 각 호스트에 대해 인터페이스/포트 목록을 반복하고 지정된 vlan을 추가합니다.

질문 # 1. "비효율적 인"것으로 가장 먼저 눈에 띄는 것은 모든 장소에서 "vlan : 2600"을 지정해야한다는 것이 현명하지 않다고 생각하는 것입니다.

나는 단지 vlan을 변수로 설정해야한다고 생각 하겠지만 (어디서나 플레이 북에서? 다른 일부 파일에서는 호출됩니까?) 각 경우에 사용할 수 있습니다. 작업의

다음 세트 :

이전 작업 후 그 다음에 배치하고 거기에 새로운 VLAN을 구성 할 VLAN을 필요로 각각의 액세스 스위치에 연결하기 위해 우리를 필요로한다.

내가 여기에 들어가는 문제는 각 스위치의 포트 채널이 다른 인터페이스 #입니다. 따라서 장치 목록을 반복하여 동일한 구성을 적용 할 수는 없습니다. 내가 무엇을해야 예를 들어

이 같은 것입니다 :

host: ACCESS01 interface: po850 vlan: 2600 
host: ACCESS02 interface: po860 vlan: 2600 
host: ACCESS03 interface: po870 vlan: 2600 

그래서 각 호스트/대한 해당 스위치에 연결된 인터페이스에 VLAN을 추가 전환합니다.

각 장치에 대해 해당 스위치를 구성 할 인터페이스를 지정하는 새 작업을 만들었습니다.

예 :

- name: Add Heartbeat VLAN to ACCESS01 
    hosts: ACCESS01 
    connection: local 
    gather_facts: no 

    tasks: 
    - name: Include Login Credentials 
    include_vars: secrets.yml 

    - name: Define Provider 
    set_fact: 
     provider: 
     host: "{{ ansible_host }}" 
     username: "{{ creds['username'] }}" 
     password: "{{ creds['password'] }}" 

    tasks: 
    - name: Ensure VLAN Exists 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id="2600" state=present host={{ ansible_host }} 

    - name: Ensure VLAN Name Configured 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id={{ item.vid }} name={{ item.name }} host={{ ansible_host }} state=present 
     with_items: 
     - { vid: 2600, name: Ansible Heartbeat VLAN } 

    - name: ASSIGN VLAN TO PORTS 
     nxos_switchport: 
     interface: "{{ item.interface }}" 
     mode: trunk 
     trunk_vlans: "{{ item.vlan }}" 
     provider: "{{ provider }}" 
     with_items: 
     - { interface: po850, vlan: 2600 } 


- name: Add Heartbeat VLAN to ACCESS02 
    hosts: ACCESS02 
    connection: local 
    gather_facts: no 

    tasks: 
    - name: Include Login Credentials 
    include_vars: secrets.yml 

    - name: Define Provider 
    set_fact: 
     provider: 
     host: "{{ ansible_host }}" 
     username: "{{ creds['username'] }}" 
     password: "{{ creds['password'] }}" 

    tasks: 
    - name: Ensure VLAN Exists 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id="2600" state=present host={{ ansible_host }} 

    - name: Ensure VLAN Name Configured 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id={{ item.vid }} name={{ item.name }} host={{ ansible_host }} state=present 
     with_items: 
     - { vid: 2600, name: Ansible Heartbeat VLAN } 

    - name: ASSIGN VLAN TO PORTS 
     nxos_switchport: 
     interface: "{{ item.interface }}" 
     mode: trunk 
     trunk_vlans: "{{ item.vlan }}" 
     provider: "{{ provider }}" 
     with_items: 
     - { interface: po860, vlan: 2600 } 

- name: Add Heartbeat VLAN to ACCESS03 
    hosts: ACCESS03 
    connection: local 
    gather_facts: no 

    tasks: 
    - name: Include Login Credentials 
    include_vars: secrets.yml 

    - name: Define Provider 
    set_fact: 
     provider: 
     host: "{{ ansible_host }}" 
     username: "{{ creds['username'] }}" 
     password: "{{ creds['password'] }}" 

    tasks: 
    - name: Ensure VLAN Exists 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id="2600" state=present host={{ ansible_host }} 

    - name: Ensure VLAN Name Configured 
     provider: "{{ provider }}" 
     nxos_vlan: vlan_id={{ item.vid }} name={{ item.name }} host={{ ansible_host }} state=present 
     with_items: 
     - { vid: 2600, name: Ansible Heartbeat VLAN } 

    - name: ASSIGN VLAN TO PORTS 
     nxos_switchport: 
     interface: "{{ item.interface }}" 
     mode: trunk 
     trunk_vlans: "{{ item.vlan }}" 
     provider: "{{ provider }}" 
     with_items: 
     - { interface: po870, vlan: 2600 } 

그래서 당신은 ... 나는 일이 거의 동일은 다시 내가 더 좋은 방법이 있다고 가정해야하고 내가 충분히 모르는 이상 반복 보면 알 참조 혼자서 해결할 수는 없습니다.

질문 # 2.나는 플레이 북에서 각 작업에 대해 다음을 반복 처리하는 더 좋은 방법이 생각 :

tasks: 
     - name: Include Login Credentials 
     include_vars: secrets.yml 

     - name: Define Provider 
     set_fact: 
      provider: 
      host: "{{ ansible_host }}" 
      username: "{{ creds['username'] }}" 
      password: "{{ creds['password'] }}" 

질문 # 3, 나는 아마도 그냥 플레이 북 또는 다른 파일 중 일부 경우이 데이터를 나열 할 수 어쩌면 그런 다음 데이터를 반복하여 어떤 포트를 구성해야하는지 결정할 수있는 작업을 만드시겠습니까?

host: ACCESS01 interface: po850 vlan: 2600 
host: ACCESS02 interface: po860 vlan: 2600 
host: ACCESS03 interface: po870 vlan: 2600 

내 마음이에 논리의 일종

는 "호스트"다음 "ACCESS01을"동일한 경우처럼, 인터페이스는 po850 동일 뭔가 될 것입니다.

그래서 작업은 현재 작업중인 호스트에 따라 채워지는 변수를 참조 할 수 있습니까?

플레이 북과 내 지식에 대한 의견을 높이고 조언을 주시면 대단히 감사하겠습니다. 나는 이것을 달성하기 위해 가장 "ansiblistic"한 방법을 찾고 있다고 생각한다. 허? 질문 # 1

답변

0

, 당신은 다음과 같이 사용할 수 있습니다

: 하나 이상의 인터페이스 (들)에 다른 VLAN을 할당 할 경우

- name: ASSIGN VLAN TO TRUNK PORTS 
    nxos_switchport: 
    interface: "{{ item.interface }}" 
    mode: trunk 
    trunk_vlans: "{{ item.vlan | default('2600') }}" 
    provider: "{{ provider }}" 
    with_items: 
    - interface: po850 
    - interface: po860 
    - interface: po865 
    - interface: po868 
    - interface: po871 
    - interface: po872 
    - interface: po875 
    - interface: po884 

는, 다음과 같이 사용할 수 있습니다

- { interface: po850, vlan: 2700 } 

희망이 도움이됩니다.