cb-spider
cb-spider copied to clipboard
[All Driver] Add VMInfo.Platform
@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 설정
- 구분 정보 예시: VMInfo.SSHAccessPoint에 SSH 또는 RDP 형식 설정
- 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 정보]
@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을 가지고 있도록 세팅하여 구현이 가능할 것 같습니다.
@powerkimhub NCP VPC driver에서, GetVM(), ListVM() 시 VMInfo.Platform 정보 추가 작업을 완료했고, 이 VMInfo.Platform 정보를 참고하여 user 계정 정보를 cb-user or Administrator로 return하도록 보완 완료했습니다.
- Azure / IBM-VPC / OpenStack / Cloudit : Added in https://github.com/cloud-barista/cb-spider/pull/865
@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 @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 개 이미지)
-
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개 이미지)
-
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개 이미지)
-
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
- 이슈 현황 확인
- 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
@innodreamer
- 현 이슈 close 해도 되는지 확인 부탁드립니다.