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