• 엑셀(Excel)을 넣으면 자동으로 Terraform(.tf)파일로 변환-2

    2024. 3. 18.

    by. Daramu

    엑셀파일을 json 형태로 변환했다.

     

    시트가 key값이 되고, 안에 들어있는 각 열의 첫번째(A)값이 다시 key, 내용물이 value였다.

     

    여기까지 생각이 미쳤을때 정말 금방이라고 생각했다.

    하지만 예상치 못한 복병을 마주쳤다.

     

    바로 "랜덤성"이다.

     

    가령 subnet을 받을 수 있는 엑셀 시트가 있다고 치자, 처음의 생각은 단순했다. 사용자가 입력하면 count로 해당 json의 값을 모으고, value값으로 집어넣는다.

     

    그렇기에 main.tf 파일을 사전에 만들어두고, variable.tf파일을 파이썬을 통해 생성하는 방향으로 잡았다.

    실제로 초기에는 잘 동작했다. vpn과 subnet이 여러개 올 것을 가정하고 해당 값을 배열로 추출해 list형태로 늘여놓고, 해당 list만큼의 count를 반복한다.

     

    resource "blabla" {
      count = length(var.subnet)

      subnet_ip = var.subnet

      ....

    }

     

    초기에는 이 생각이 잘 들어맞았다.

    사용자가 subnet을 "랜덤"한 갯수를 입력하면 해당하는 갯수로 잘 생성할 수 있었다.

    그렇기에 금방 할 것이라 생각했지만, 문제는 따로있었다.

     

    바로 "위치의 랜덤"이다.

    사용자는 public과 private을 착하게 구분하지 않는다.

    그렇게 안내하더라도 다르게 쓸 가능성을 염두해 둬야했다.

     

    그래서 처음에 생각한 것은 public과 private을 나누고, 해당하는 배열을 만드는 것이었다.

    어차피 json의 값 중에 하나는 public/private이 들어있으니 해당 기준으로 list를 만드는건 어렵지 않았다.

     

    이때까지만 해도 나는 "위치의 랜덤"을 해결했다고 생각했다.

     

    하지만 "진정한 랜덤"은 아직 시작도 하지 않았다....

     

    바로 public/private을 랜덤하게 입력한건 처리했다 치는데, subnet이 속한 vpc를 랜덤하게 입력했을 경우...를..생각해야 했기 때문이다.

     

    자. ncp에서 제공하는 subnet에 대한 terraform 파일이다.

    여기서 subnet을 count로 생성한다고 가정하자. public/private은 list로 나눴다. 문제가 뭐겠는가?

     

    바로 "vpc_no"다. 리스트로 정렬해 하나씩 집어넣는다 하여도 사용자는 "랜덤한 순서로 vpc를 넣는다."라는 가정이 들어갔기에 여기서부터 난이도가 안드로메다로 날아가기 시작했다.

     

    최초에 생각했던 것은

     

    "아. 그럼 우선 vpc로 나눠서 정렬하고, 다시 public/private으로 나눠서 두번에 걸쳐 list를 생성하자."

     

    였다.

    나의 생각을 구현하는 것에도 많은 어려움이 있었다.

    vpc를 정렬했다 가정하자, 그럼 list가 만들어졌을것 아닌가? 그럼 subnet에 해당하는 정보도 그 정렬한 vpc값을 따라가야한다. vpc와 subnet은 하나의 세트다. vpc정렬을 위해 subnet과 vpc간의 1:1 매칭의 순서가 어그러진다면 그건 그거대로 코미디일게 분명했다.

     

    다행히 어차피 variable값으로 들어갈건 정해져있었고, 해당하는 값만을 몇개의 json으로 생성하고 정렬이 가능해보였다.

    그런 작업을 하던중에 이런 생각이 들었다.

     

    "아니, 단순 vpc와 subnet을 연결하는 것 만으로 배열을 몇개나 만드는거지? 정렬은 몇번을 하는거고? 뒤에 vm을 만들때는 vpc와 subnet, vm을 또 일일히 다 정렬하고, 배열을 만들고, count로 돌린다고??"

     

    ...말도 안되는 일이었다.

    mysql, nas... 수많은 서비스가 있는데 그 모든걸 배열로 만드는건 대단히 수고스러울 뿐만 아니라, 너무나도 취약해보였다. 배열이 조금만 어그러지면 제대로 생성조차 되지 않을게 분명했다.

     

    그래. 모든 문제는 "갯수도, 순서로 랜덤한 json파일을 알맞게 tf파일로 변환하는 것." 그게 문제였다......

    그래서 하루 종일 고민했다. 어떻게 해야할까. 어떤 방식이 가장 에러에 대한 내성이 튼튼하고, 쉽게 이해할 수 있을까.

     

    복잡할 수록 겉보기에는 좋아보일지라도 쉽게 무너진다. 에러가 발생할 경우 최악의 상황에는 모든 코드(배열)을 갈아 엎어야할 필요성마자도 보였다.

     

    그건 아니었다. 만들기도 어렵고 유지보수도 어렵다면 그건 그냥 쓰레기라는 생각이 들었다.

     

    ...생각을 처음으로 돌아갈 시점이었다. 

    댓글