cb-spider icon indicating copy to clipboard operation
cb-spider copied to clipboard

[All Driver] Add VMInfo.Platform

Open powerkimhub opened this issue 2 years ago • 7 comments

@MZC-CSC @inno-cloudbarista @innodreamer (cc: @seokho-son @jihoon-seo)

[현황]

  • Spider 서버에서 생성된 VM 정보인 VMInfo를 제공할 때, (즉, ListVM, GetVM 등 API 반환시)
  • Linux와 Windows의 구분이 필요합니다.
    • 구분 정보 예시: VMInfo.SSHAccessPoint에 SSH 또는 RDP 형식 설정
      • 참고: SSHAccessPoint => AccessPoint 변경 예정
    • 구분 정보 예시: VMInfo.VMUserId에 cb-user 또는 Administrator 설정
  • Spider 서버에서는 Driver API 변경 없이 이를 해결 하기 위해서,
    • 최근에 포함된 checkImageWindowsOS()를 활용하고 있었습니다.

  • 그런데,
    • 이미지가 영구적이지 않기 때문에,(특히, MyImage)
    • VM 생성 이후에 활용된 이미지가 삭제 가능합니다.
  • 이미지가 삭제된 경우,
    • v0.7.0 배포 버전: ListVM, GetVM 정보를 호출하면 오류가 발생하고 있습니다. => MyImage를 이용한 VM 존재시 MyImage 먼저 삭제 금지, 먼저 삭제하면 VM 목록이 안보임
    • v0.7.1 버전: 임시 패치함, 이미지가 삭제된 경우에도 ListVM, GetVM 정보를 제공함
      • 단, SSHAccessPoint나 VMUserId가 empty인 CSP가 존재할 수 있음

  • 이에, 아래와 같은 반영 작업이 필요합니다.

[계획]

  • (1) VMInfo.Platform 정보 추가

    • 전제 조건: 모든 CSP가 Platform 정보를 API로 제공함을 가정 (제공하지 않는 CSP 공유 부탁 드립니다)
    • VMInfo.Platform 추가
    • Driver에서 CSP API로 Platform 정보를 얻어서 설정 (LINUX | WINDOWS)
      • 정보 예시: AWS의 경우 아래 캡춰 참고
  • (2) VMInfo.VMUserId를

    • Spider 서버에서 VMInfo.Platform 정보 참고하여 맞는 정보로 제공: cb-user 또는 Administrator
  • (3) VMInfo.AccessPoint 추가

    • VMInfo.SSHAccessPoint: deprecated 예정
    • VMInfo.AccessPoint 추가
    • Spider 서버에서 VMInfo.Platform 정보 참고하여 맞는 정보로 제공: IP:22 또는 IP:3389

[참고:AWS VM Platform 정보]

image

powerkimhub avatar Nov 25 '22 12:11 powerkimhub

@powerkimhub VM의 OS Platform의 정보를 이미지에 의존하지 않고, VM 자체에서 정보를 가져와 추가해주는걸로 이해하고 있습니다.

Azure는 VM 자체에 판별 가능한 정보를 포함하고 있어 해당 정보를 사용하고자 합니다. IBM-VPC는 VM의 RootVolume을 통해 OS Platform을 판별할 수 있을 것으로 추정되지만, 실제로 Volume에서 OS Platfrom 정보를 가지고 있는지 테스트를 통해 확인이 필요합니다. 테스트 후 적용하도록 하겠습니다.

Openstack, Cloudit은 메타데이터를 이용하여 데이터를 추가해야할 것 같아서 아래와 같이 진행하려고 합니다.

[Openstack] Openstack 자체에서 제공하진 않지만, 현재 Openstack의 VM 생성시, os_type이라는 메타데이터를 이용하여 OS Platform에 대한 정보를 삽입하고 있습니다. Linux일때는 문제가 없으나, Window일 경우에는 필수적으로 들어가야하는 정보기에 삽입된 정보인데 이 정보를 이용하려고합니다.

[Cloudit] 현재 VM 자체에 OS Platform을 표시하는 값은 존재하지 않습니다. 해당 기능을 위해, VM, MYImage이 생성될 경우 추가적인 메타데이터를 넣어 VM, MYImage 자체가 OS Platform을 가지고 있도록 세팅하여 구현이 가능할 것 같습니다.

inno-cloudbarista avatar Nov 28 '22 05:11 inno-cloudbarista

@powerkimhub NCP VPC driver에서, GetVM(), ListVM() 시 VMInfo.Platform 정보 추가 작업을 완료했고, 이 VMInfo.Platform 정보를 참고하여 user 계정 정보를 cb-user or Administrator로 return하도록 보완 완료했습니다.

innodreamer avatar Nov 28 '22 09:11 innodreamer

  • Azure / IBM-VPC / OpenStack / Cloudit : Added in https://github.com/cloud-barista/cb-spider/pull/865

powerkimhub avatar Dec 05 '22 06:12 powerkimhub

@powerkimhub

  • AWS의 경우 VM 자체에 Platform 정보를 제공하나 이는 Windows Instance만을 위한 것으로, 다른 OS는 빈 값으로 반환됩니다. (Windows의 경우 Windows 반환)

  • GCP의 경우 guestOsFeatures[].type 을 제공하며, 여기서도 Windows는 확인할 수 있으나 다른 OS는 확인이 어렵습니다.

  • Tencent의 경우 OsName 을 제공하며, 이름에서 Windows가 포함되는지 체크하는 방식으로 활용할 수 있을 것 같습니다.

  • Alibaba의 경우 OSType을 제공하며, 이를 통해 Windows / Linux를 확인할 수 있습니다.

Alibaba를 제외한 나머지 CSP는 Windows인지만 확인할 수 있습니다. Linux의 여부는 확인이 어려운데 그럼 Windows가 아닌 경우 Linux로 설정해도 문제가 없는 부분일까요?

MZC-CSC avatar Dec 15 '22 02:12 MZC-CSC

@MZC-CSC @inno-cloudbarista : 아래와 같이 Platform Type 수정 부탁 드립니다. @innodreamer : 참고하시기 바랍니다.


  • 현재는 제안 주신 방법처럼 하는 것이 좋을 듯합니다.
  • 대신, 기존 Driver API:VMHandler 내의 Platform Type을 다음처럼 변경하도록 하겠습니다.
    • 사유: macos 등을 포함하는 범위로 수정
  • AS-IS
    type Platform string
    const (
            LINUX   Platform = "LINUX"
            WINDOWS Platform = "WINDOWS"
    )
    
  • TO-BE
    type Platform string
    const (
            LINUX           Platform = "LINUX"         // deprecated, will be deleted
            LINUX_UNIX      Platform = "LINUX/UNIX"  <========= 추가
            WINDOWS         Platform = "WINDOWS"
    )
    

[부연 설명]

  • 아래 [Memo] 분석에 따르면,

  • 현재 Cloud의 OS는 대략 다음처럼 분류 할 수 있을 것 같습니다.

    • Linux/Unix 계열: Ubuntu, Redhat, ..., MacOS
    • Windows 계열: Windows server 2012, ...
  • AWS 경우 macos가 좀 고민되긴 했는데,

    • macos는 BSD에 뿌리를 두고 있고,

    • BSD는 UNIX family로 분류하고 있네요.

      • 참고: https://en.wikipedia.org/wiki/Berkeley_Software_Distribution
    • [Memo]의 AWS Image 정보를 보면 이를 'Linux/UNIX'로 PlatformDetails 정보로 분류하고 있습니다.

    • 또한, AWS SDK Instance 정보에서도 Windows는 Platform 변수로 값을 제공하지만,

      • 그 외의 OS는 Platform을 명시하지 않고 PlatformDetails로 값을 제공하고 있습니다.
      • ref) https://raw.githubusercontent.com/aws/aws-sdk-go/main/service/ec2/api.go
        // The value is Windows for Windows instances; otherwise blank.
        Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"`
        
        // The platform details value for the instance. For more information, see AMI
        // billing information fields (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html)
        // in the Amazon EC2 User Guide.
        PlatformDetails *string `locationName:"platformDetails" type:"string"`
        
    • 그런데, 사실 다음 링크에서 보이는 바와 같이 PlatformDetails의 포함된 값은 과금을 위한 분류로 보입니다.

      • 그래서, instance.PlatformDetails 정보로도 OS를 세분하여 구분하기는 힘들 것 같습니다.
      • ref) https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/billing-info-fields.html

[Memo]

  • AWS, GCP, Tencent Public Image 정보에서 Platform 관련 정보 분석

  • AdminWeb:Image 정보 => file로 추출 => OS filtering 통한 CSP별로 제공하는 OS 정보 확인

  • AWS Image 정보 (OHIO: 총 11,395 개 이미지)

image

  • grep Platform aws-ohio-image.txt |grep -v "PlatformDetails:Linux/UNIX" |grep -v "PlatformDetails:Windows" |grep -v "PlatformDetails:Red Hat Enterprise" |grep -v "PlatformDetails:SUSE Linux" |grep -v "PlatformDetails:SQL Server"

  • GCP Image 정보 (IOWA: 총 6,614개 이미지)

image

  • grep Family gcp-iowa-image.txt |grep -v "/projects/ubuntu" |grep -v "/projects/windows" |grep -v "/projects/rhel" |grep -v "/projects/centos" | grep -v "/projects/suse" |grep -v "/projects/debian"|grep -v "/projects/cos" |grep -v "/projects/gce-uefi-images"
  • Tencent Image 정보 (SEOUL: 총 86개 이미지)

image

  • grep Platform tencent-seoul-image.txt |grep -v openSUSE |grep -v Rocky |grep -v FreeBSD |grep -v Fedora |grep -v CoreOS |grep -v AlmaLinux |grep -v Windows |grep -v Debian |grep -v Ubuntu |grep -v CentOS |grep -v TencentOS |grep -v OpenCloudOS

powerkimhub avatar Dec 15 '22 09:12 powerkimhub

  • 이슈 현황 확인
  • NHN, KT, KT-VPC: 진행중 (@innodreamer )
  • 그외 CSP 적용 완료
    • 참고: grep -r "LINUX_UNIX"
    aws/resources/VMHandler.go:             vmInfo.Platform = irs.LINUX_UNIX
    gcp/resources/VMHandler.go:     vmInfo.Platform = irs.LINUX_UNIX
    azure/resources/VMHandler.go:   if imageOsType == irs.LINUX_UNIX {
    alibaba/resources/VMHandler.go:         vmInfo.Platform = irs.LINUX_UNIX
    tencent/resources/VMHandler.go:                 vmInfo.Platform = irs.LINUX_UNIX
    ibmcloud-vpc/resources/VMHandler.go:                    vmInfo.Platform = irs.LINUX_UNIX
    openstack/resources/VMHandler.go:               return irs.LINUX_UNIX, nil
    ncpvpc/resources/VMHandler.go:          vmInfo.Platform = irs.LINUX_UNIX
    ncp/resources/VMHandler.go:             vmInfo.Platform = irs.LINUX_UNIX
    

powerkimhub avatar Dec 07 '23 08:12 powerkimhub

@innodreamer

  • 현 이슈 close 해도 되는지 확인 부탁드립니다.

powerkimhub avatar Jan 27 '24 03:01 powerkimhub