티스토리 뷰

오랜만에 블로그에 글을 올려보기로 했다. 이번에 올릴 글은 오픈스택 컴퓨트 노드에서 DHCP 가상 네트워크를 찾는 스크립트이다. 오픈스택에서 네트워크를 생성하고, DHCP를 활성화하면 인스턴스가 생성이 되면서 인스턴스가 존재하는 컴퓨트 노드에 DHCP 에이전트가 생성된다. 그리고, 해당 DHCP 에이전트는 컴퓨트 노드에 ovnmeta라는 가상네트워크를 생성한다. 원래 ovnmeta 는 오픈스택에서 네트워크를 생성하면 네트워크 UUID를 사용하여 ovnmeta 뒤의 UUID가 생성이 되는데, 무슨일인지 모르겠지만, 최근 확인된 RHOSP 16.2 환경에서 ovnmeta-uuid 가 오픈스택에서 생성한 네트워크의 uuid가 아님을 알게 되었다. 그래서, 해당 네트워크에 해당하는 DHCP 가상 네트워크에서 내가 찾고자 하는 네트워크를 찾으려면 컴퓨트 노드에서 생성된 모든 가상네트워크를 일일이 하나씩 살펴봐야 한다는 결론이 나온다. 언제 매번 그려고 있나라는 생각이 들어 스크립트를 짜다보니 아래와 같은 스크립트가 탄생을 했다.

#!/bin/bash

## 1. 파라메터로 찾고자 하는 IP를 입력받아 Find_IP라는 변수에 저장한다.
Find_IP=$1
Find_YN=0

## 2. Find_IP라는 변수에 값이 있으면 IP를 찾기 시작한다.
if [ -n "$Find_IP" ]; then
  ## 2.1 ip netns show 명령어 결과를 가지고 가상 네트워크 목록을 추출한다.
  for i in $(ip netns show | awk '{print $1}'); do
    ## 2.2 ip netns exec 명령어를 이용하여 앞에서 찾은 가상 네트워크에 찾고자 하는 IP가 있는지 확인한다.
    Find_count=$(ip netns exec $i ip -4 a | grep $Find_IP | wc -l)
    
    ## 2.3 확인 된 IP 개수를 가지고 IP 존재여부를 확인한다.
    if [ $Find_count -eq 1 ]; then
      Find_YN=1
      echo ">>>> $i <<<<"
      ip netns exec $i ip -4 a
    fi
  done
  
  ## 2.4 이때 IP가 검색되지 않았다면 IP가 검색되지 않았다고 알려준다.
  if [ $Find_YN -eq 0 ]; then
    echo "Can't find this ip >>>> $Find_IP"
  fi
## 3. 만일 IP가 없다면 스크립트 사용 설명을 안내한다.
else
  echo -e "Please input with ip. \n\nUsage:: sh find-ipnetns.sh 192.168.0"
fi

그럼, ovnmeta-uuid 정보는 어디에서 확인할 수 있을까? 이걸 확인하려면 컨트롤러 노드에 접속해 ovn database 에 접속해야 한다. 그리고, ovn-sbctl list 명령어를 이용하여 Port_Binding 을 살펴보면 해당 uuid를 찾아볼 수 있다.

[root@ctrl01 ~]# podman ps | grep ovn-db
78b79bb088f1  cluster.common.tag/openstack-ovn-northd:pcmklatest        /bin/bash /usr/io...   2 days ago    UP 2 dyas ago    ovn-dbs-bundle-podman-0

[root@ctrl01 ~]# podman exec -ti ovn-dbs-bundle-podman-0 bash
[root@ctrl01 /]# ovn-sbctl list Port_Binding
_uuid               : a7d301ff-f767-4153-8eb1-9f6debfcf00f
chassis             : 3b94f4db-fa0b-48d5-849f-4d89013e90c6
datapath            : 50617d66-452a-48cb-9d7c-95bdbf2aee0c
encp                : []
external_ids        : {name=exam-orca-net, "neuton:cidrs"="192.168.0.205/24", "neutron:device_id"="ccbf3938-28a0-462c-95b7-7900a88e4be6", "neutron:device_owner"="compute:com1", "neutron:network_name"=neutron-d0cb58a5-11cf-4727-a91a-9077901c1a06", "neutron:port_name"="exam_orca_net", "neutron:project_id"=b5ab00ac7749782b546f9ae4c0c6a, "neutron:revision_number"="38", "neutron:security_group_id"="7fe03ffb-1922-443a-8e9a-eecca77298af"}
gateway_chassis     : []
ha_chassis_group    : []
logical_port        : "9628005f-7017-4ce1-808e-e8db6ed9d1a0"
mac                 : ["fa:16:3e:98:68:45 192.168.0.205"]
nat_addresses       : []
options             : {mcast_flood_reports="true", requested=cn01.openstack.local}
parent_port         : []
tag                 : []
tunnel_key          : 14
type                : ""
up                  : true
virtual_parent      : []
...

[root@ctrl01 /]# ovn-sbctl list Port_Binding | grep 50617d66-452a-48cb-9d7c-95bdbf2aee0c
datapath            : 50617d66-452a-48cb-9d7c-95bdbf2aee0c
...

요즘 기억이 잘 나지 않는다. 그래서, 그때 그때 정리를 해 놓지 않으면 시간이 조금만 지나가면 왜 그랬는지 생각이 나질 않는다. 그래서, 메모를 하는 습관을 가져야 하는데, 그마저도 귀차니즘에 빠져 잘 못한다. 그래서, 요즘은 나보다 나이있는 분들이 열정이 가지고 사는 모습을 보면 매우 존경스럽다. 나도 나이를 좀 더 먹는다면 그러면 다시 없던 열정이 살아나려나~~

댓글
댓글쓰기 폼