Redfish

Redfish 드라이버 참고 자료입니다. BMC로의 HTTPS 연결, 리소스 경로와 JSON 포인터로 적는 주소, 읽기, PATCH 쓰기, 그리고 형식.

Markdown으로 보기

Redfish 드라이버는 DMTF Redfish 관리 서비스를 읽고 씁니다. 대역 외 관리를 위해 서버 BMC(베이스보드 관리 컨트롤러)와 섀시와 그 밖의 데이터센터 하드웨어가 내놓는 REST API입니다. 이것은 평범한 클라이언트 모드 드라이버, 곧 Ganter Lab이 장비에 접속하는 드라이버이며 전송은 언제나 HTTPS입니다. 단단히 잠근 BMC는 그 밖의 것을 내놓지 않고, 드라이버도 스스로 평문 HTTP로 내려가지 않습니다.

이렇게 읽는 대표적인 지점은 전원 상태, 보안 부팅 상태, 섀시와 매니저의 상태 건전성, 펌웨어 버전, 그리고 열 관련 리소스에서 오는 온도와 팬 읽기입니다.

연결 칸

무엇인가 형식 기본값
호스트 Redfish 서비스의 호스트 이름이나 IP 주소. 호스트 이름 또는 IP 비어 있음
포트 서비스가 답하는 포트입니다. 관리 컨트롤러는 흔히 443에서 답하며, 다른 곳에 공개된 서비스는 여기에 그렇게 적습니다. 1에서 65535까지 443
사용자 이름 HTTP Basic 인증에 쓰는 BMC 계정입니다. 비우면 요청이 익명이 되고, 보호된 서비스는 그것에 권한 오류로 답합니다. 자유 입력 비어 있음
비밀번호 사용자 이름과 짝이 되는 비밀번호입니다. Windows 사용자별로 보호되어 저장되므로 구성 데이터베이스가 평문 값을 담는 일은 없습니다. 다른 Windows 계정에서 입력한 비밀번호는 읽을 수 없는 것으로 나오며 다시 입력해야 합니다. 자유 입력 비어 있음

접속할 때 드라이버는 서비스 뿌리(/redfish/v1/)를 읽어 서비스를 확인합니다. BMC의 TLS 인증서는 Windows의 보통 인증서 검사를 통과해야 합니다. 자체 서명한 BMC 인증서는 장치가 연결되기 전에 이 기기에서 신뢰해야 합니다. 실패한 연결은 Events 페이지와 그날의 로그 파일에 이유를 적으며 그 뒤에 바탕 오류를 함께 적으므로, 거부된 비밀번호와 신뢰하지 않은 인증서를 가려낼 수 있습니다.

읽기 주기는 설정할 수 있습니다. 스스로 값을 정하지 않은 모든 태그에는 장치의 기본값(1000 ms)이 적용됩니다.

태그 주소 지정

Redfish 태그의 주소는 리소스 경로와, 그 리소스가 돌려주는 문서 안을 가리키는 선택적인 JSON 포인터로 적습니다.

하는 일 기본값
리소스 경로 GET을 보낼 Redfish 리소스의, 서비스 뿌리에 상대적인 경로이며 예를 들어 redfish/v1/Chassis/1/Thermal입니다. 자유 입력(필수) 비어 있음
JSON 포인터 (비우면 문서 전체) 돌려받은 JSON에서 필드 하나를 고르는 RFC 6901 포인터이며 예를 들어 /Temperatures/0/ReadingCelsius입니다. 배열의 원소는 색인으로 가리키고, 필드 이름 안의 /~1로, ~~0으로 나타냅니다. 앞의 /가 빠져 있으면 대신 붙여 줍니다. 비워 두면 문서 전체를 글자로 돌려줍니다. JSON 포인터 또는 비움 비어 있음

조립된 주소의 예는 이렇습니다(버스 신호원 미리 보기에 읽기 전용으로 나옵니다).

  • redfish/v1/Systems/1#/PowerState는 시스템의 전원 상태를 문자열로 읽습니다.
  • redfish/v1/Chassis/1/Thermal#/Temperatures/0/ReadingCelsius는 첫 번째 온도 센서를 숫자로 읽습니다.
  • redfish/v1/Systems/1/SecureBoot#/SecureBootEnable은 보안 부팅을 부울로 읽습니다.

읽을 때 드라이버는 리소스에 GET을 보내고 JSON을 해석한 다음 포인터를 따라가, 그 결과를 태그가 선언한 데이터 형식으로 바꿉니다. 문서에서 아무것도 가리키지 못하는 포인터와, 문서가 JSON null로 담고 있는 필드는 둘 다 값 없음으로 읽힙니다. null이라는 낱말이 정상 읽기로 도착하는 대신 태그는 품질이 나쁜 것이 되고, 무엇을 보여 줄지는 그 읽기 실패 정책이 정합니다. JSON이 아닌 응답은 선언한 형식으로 곧바로 해석합니다.

쓰기

쓸 수 있는 접근 방식을 가진 태그는 주소가 가리키는 필드에 PATCH를 보냅니다. 드라이버는 포인터의 경로만 덮는 가장 작은 JSON 문서를 만들어(/Parent/Child라면 본문은 {"Parent":{"Child":<value>}}입니다) 리소스로 보냅니다. 여기에서 제약 둘이 따라옵니다.

  • 쓰기에는 JSON 포인터가 필요합니다. 문서 전체를 가리키는 태그(포인터가 비어 있는 태그)에는 쓸 수 없습니다. 태그 패널은 편집하는 동안 그 조합을 거부하며 칸이 빠졌다고 말하고, 그래도 서비스까지 닿은 시도는 이유를 진단 로그에 남기며 실패합니다.
  • 무엇을 쓸 수 있는지는 BMC가 정합니다. 서비스가 거부한 PATCH는 실패한 쓰기로 읽힙니다.

다른 곳에서와 마찬가지로 태그의 쓰기 상자에 입력하는 값은 공학값이며, Connector 페이지에서 설명하듯 원시값이 버스로 나가기 전에 태그의 변환 단계가 거꾸로 적용됩니다.

지원하는 데이터 형식

Boolean, Int32, Int64, Float, Double, String입니다. JSON 필드에 맞는 형식을 고르십시오. SecureBootEnable 같은 플래그에는 부울, 읽은 값에는 숫자, PowerStateHealth 같은 상태에는 문자열입니다.

명령

Redfish 서비스는 시킬 수 있는 일마다 액션을 하나씩 공개하며, 각각은 자기가 작용하는 리소스 아래 자기 경로에 있습니다. 스테이션은 그것을 추측하지 않습니다. 어떤 액션이 있는지는 하드웨어 자신의 설명서만이 말해 주기 때문입니다. 명령은 장치의 페이지에 있는 명령 카드에서 직접 선언합니다. 명령마다 이름과 액션 경로(redfish/v1/Systems/1/Actions/ComputerSystem.Reset), 그리고 원한다면 명령이 받는 값 하나의 이름(ResetType)을 담습니다. 행의 실행 동사가 명령을 보내고, 서비스가 무엇이라고 답했는지 알려 줍니다. 명령은 이 스테이션 자신의 OPC UA 주소 공간에서 장치의 메서드가 되기도 하므로, 메서드를 부를 수 있는 것이라면 무엇이든 그 명령을 낼 수 있습니다.

값은 요청 본문으로 실려 갑니다. 이미 JSON인 값은 적은 그대로 나가고, 그 밖의 것은 {"<선언한 이름>": "<값>"} 모양으로 나갑니다. 이것이 Redfish 자신의 리셋 액션이 기대하는 모양입니다.

장치 검색

장치 검색 단추는 서비스 하나를 읽습니다. 드라이버 페이지의 스캔 범위 카드에 그 주소(https://bmc-host, 또는 제조사가 설명하는 주소)를 적으면 스캔이 그 서비스의 첫 시스템과 매니저와 섀시를 훑어, 그 지점들을 갖춘 장치를 바로 추가할 수 있게 내놓습니다. 스캔은 HTTPS로, 자격 증명 없이 서비스를 읽습니다. 자격 증명을 담고 있을 장치가 생기기 전에 도는 스캔이기 때문입니다. 그러므로 요청마다 인증을 요구하는 서비스는 아무것도 답하지 않으며, 그런 서비스는 손으로 추가합니다. Redfish 자신의 SSDP 검색은 UDP 멀티캐스트를 쓰는데 인프로세스 드라이버는 그것을 하지 않으므로, 브로드캐스트로 찾아지는 것은 없습니다. 스캔은 사용자가 건네준 주소를 읽습니다.