본문으로 건너뛰기

사용자 정의 매크로

매크로는 무인 파일이나 설치 후 스크립트에 가변 데이터(구성 설정)를 추가할 수 있는 기능을 제공합니다. Lenovo XClarity Administrator에서 JSON 형식을 사용하여 사용자 지정 구성 설정 파일을 만들어 사용자 정의 설정을 정의할 수 있습니다.

각 사용자 정의 구성 설정의 값은 OS 배포 중에 지정된 사용자 입력에 따라 다릅니다.

사용자 정의 구성 설정을 XClarity Administrator로 가져올 때 XClarity Administrator에서 JSON 스키마의 유효성을 검사합니다. 유효성 검사가 통과되면 XClarity Administrator가 각 설정에 대해 사용자 지정 매크로를 생성합니다.

무인 파일이나 설치 후 스크립트에 사용자 정의 매크로를 삽입하려면, 오브젝트의 고유한 이름을 사용하고 마침표를 사용하여 중첩된 오브젝트를 구분한 다음 매크로 이름을 해시 기호(#)로 묶습니다(예, # server_settings.server0.locale#).

  • 오브젝트 이름을 포함하지 마십시오.

  • 템플리트에서 오브젝트를 작성할 때, 이름은 0부터 시작하는 고유 번호(예, server0 및 server1)로 추가됩니다.

  • 각 사용자 정의 설정 옆에 있는 도움말 아이콘(도움말 아이콘) 위에 놓으면 사용자 정의 설정 탭의 OS 이미지 배포 대화 상자에서 각 매크로의 이름을 볼 수 있습니다.

구성 설정

다음과 같은 사용자 정의 구성 설정을 정의할 수 있습니다.
  • 모든 대상 서버에 공통이거나 특정 대상 서버에 고유합니다.

  • OS 이미지 프로필을 배포할 때 정적(구성 불가능) 값 또는 동적(구성 가능) 값을 입력합니다.

  • 템플릿을 기반으로 다양한 요소를 갖습니다. 예를 들어 배포 중에 0~3 개의 NTP 서버를 지정하는 구성 설정을 정의할 수 있습니다.

일반 설정

OS 배포 중에 OS 이미지 배포 대화 상자의 일반 설정 탭에 있는 UI 요소가 content 오브젝트에 표시된 오브젝트를 기반으로 렌더링됩니다. 오브젝트는 모든 대상 서버에서 OS 배포에 필요한 설정 및 값을 설명합니다.

모든 서버에 공통적인 설정을 표시하려면 JSON 파일에 "common":true 이름/값 쌍이 포함된 중첩된 오브젝트가 있는 상위 오브젝트가 있어야 합니다.

다음 예제에서는 모든 서버에 동일한 구성 가능(동적) NTP 서버를 사용합니다.
{
"category": "dynamic",
"content": [{
"category": "dynamic",
"common": true,
"description": "NTP Servers",
"label": "NTP Servers",
"maxElements": 3,
"minElements": 0,
"name": "common-ntpservers",
"optional": true,
"template": [{
"autoCreateInstance": true,
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string"
}],
"type": "array"
},
...,
}
다음 예제에서는 동일한 구성 가능(정적) 설치 후 스크립트 로그 디렉토리를 사용합니다.
{
"category": "dynamic",
"content": [{
"category": "static",
"common": true,
"description": "Directory location for post-installation script logging.",
"name": "logpath",
"optional": false,
"type": "string",
"value": "/tmp/mylogger.log"
},
...,
}
서버 특정 설정

OS 배포 중에 OS 이미지 배포 대화 상자의 서버 특정 설정 탭에 있는 UI 요소가 템플릿의 content 오브젝트에 표시된 오브젝트를 기반으로 렌더링됩니다. 오브젝트는 특정 대상 서버에서 OS 배포에 필요한 설정 및 값을 설명합니다.

서버 특정 값이 UI에 수집되면 template 오브젝트를 기반으로 각 대상 서버에 대한 content 오브젝트가 JSON에 생성됩니다. 각 content 오브젝트에는 고유한 nametargetServer 필드가 있으며 해당 서버에 대한 값이 입력되어 있습니다.

서버 특정 설정을 표시하려면 JSON 파일에 다음 내용이 포함된 상위 오브젝트가 있어야 합니다.

  • "category":"dynamic" 이름/값 쌍.

  • "common":false 이름/값 쌍이 포함된 중첩된 오브젝트. 상위 오브젝트의 콘텐츠에서는 한 "common": false 오브젝트만 지원됩니다.

  • 내장 콘텐츠 오브젝트가 있는 템플릿 오브젝트. 이 템플릿 배열에는 하나의 객체만 포함될 수 있습니다.

예를 들어 각 대상 서버에 대해 고유한 OS 로케일을 정의하는 경우
{
"category": "dynamic",
"content": [{
"category": "dynamic",
"common": false,
"name": "server-settings",
"optional": false,
"template": [{
"category": "dynamic",
"common": false,
"content": [{
"category": "dynamic",
"choices": ["en_US", "pt_BR", "ja_JP"],
"common": false,
"label": "OS Locale",
"name": "locale",
"optional": false,
"type": "string",
"value": "en_US"
}],
"name": "server",
"optional": false,
"type": "assoc_array"
}],
"type": "assoc_array"
},
...,
}

JSON 사양

다음 표는 JSON 사양에서 허용되는 필드를 설명합니다.

매개변수필수/옵션유형설명
autoCreateInstance옵션Boolean배포 시 템플릿 오브젝트의 인스턴스가 JSON 파일에 자동으로 생성되는지 여부를 나타냅니다. 이는 다음 값 중 하나입니다.
  • true. 배포 시 템플릿 오브젝트의 인스턴스가 JSON 파일에 자동으로 생성됩니다.
  • false. (기본값) 배포 시 템플릿 오브젝트의 인스턴스가 JSON 파일에 자동으로 생성되지 않습니다.
이 필드는 템플릿 오브젝트에만 배치할 수 있습니다.
category필수String각 설정의 값이 채워지는 방법을 나타냅니다. 이는 다음 값 중 하나입니다.
  • dynamic. 런타임 시 사용자가 값을 입력합니다. Lenovo XClarity Administrator가 OS 배포 중에 이 값을 묻습니다.

  • predefined. Lenovo XClarity Administrator에서 값을 미리 설정합니다.

  • static. 값이 스키마에 지정되며 런타임 시 변경되지 않습니다.

중첩된 오브젝트는 상위 오브젝트에서 이 필드의 값을 상속받습니다.

category가 상위 오브젝트에서 static으로 설정된 경우 모든 중첩된 오브젝트에서도 static으로 설정되어야 합니다. category가 상위 오브젝트에서 dynamic으로 설정된 경우 중첩된 오브젝트에서 static 또는 dynamic으로 설정될 수 있습니다.

choices옵션type 속성과 일치하는 값의 배열OS 배포(예, ["enabled","disabled"]) 중에 선택할 수 있는 구성 설정의 정적 값(예, string 또는 integer) 배열.
common옵션Boolean이 구성 스키마가 모든 대상 서버에 적용되는지 여부를 나타냅니다.
  • true. 이 오브젝트는 모든 대상 서버에 적용됩니다.

  • false. (기본값) 이 오브젝트는 특정 대상 서버에 적용됩니다.

중첩된 오브젝트는 상위 오브젝트에서 이 필드의 값을 상속받습니다.

common이 상위 오브젝트에서 true로 설정된 경우 모든 중첩된 오브젝트에서도 true로 설정되어야 합니다. common이 상위 오브젝트에서 false로 설정된 경우 모든 중첩된 오브젝트에서 false로 설정되어야 합니다.

content옵션오브젝트 배열스키마에서 중첩된 오브젝트를 나타내는 패턴입니다.

OS 배포 중에 사용자 입력 데이터가 수집되면 이 필드는 배포용으로 생성된 구성 설정 파일의 인스턴스에서 지정된 템플릿의 최종 값을 나타내는 데 사용됩니다.

default옵션type에 따라 다름기본값.
description옵션String오브젝트에 대한 설명입니다.
label옵션StringOS 배포 중에 표시되는 사용자 인터페이스의 설정 레이블입니다.
max옵션Integertype이 정수로 설정된 경우 최대값입니다.

기본값은 무제한입니다.

maxElements옵션Integer이 오브젝트에 대한 배열의 최대 항목 수입니다.
-min옵션Integertype이 정수로 설정된 경우 최소값입니다.

기본값은 0입니다.

minElements옵션Integer이 오브젝트에 대한 배열의 최소 항목 수입니다.
name필수String오브젝트의 고유 이름입니다.

이 이름에는 영숫자(az, AZ 및 0-9), 밑줄(_) 및 대시(-)만 사용할 수 있습니다.

name을 무인 파일의 사용자 지정 매크로로 참조할 수 있습니다. 중첩된 name 오브젝트를 참조하는 경우 마침표를 사용하여 각 오브젝트를 구분합니다(예: mydeploy.node.locale).

optional필수Boolean오브젝트가 옵션인지 여부를 나타냅니다. 이는 다음 값 중 하나입니다.
  • true. 이 필드는 옵션입니다.

  • false. 이 필드는 필수입니다.

regex옵션String값의 유효성을 검사하는 정규 표현식입니다(예, "[\\w\\.]{1,64}$").
script옵션문자열 배열이 오브젝트의 데이터에 대한 종속성이 있는 스크립트 목록(쉼표로 구분)입니다(예, ["/opt/lenovo/saphana/bin/saphana-create-saphana.sh", "create_hana.sh"]).
스크립트는 설치 스크립트 또는 사용자 지정 소프트웨어로 OS 이미지 프로필에 사용할 수 있어야 합니다.
targetServer옵션StringOS 배포의 대상이 되는 서버의 UUID입니다.

common이 true인 경우 이 필드는 비어 있거나 널일 수 있으며 대상 서버는 OS 배포 중에 지정됩니다.

template옵션오브젝트 배열재사용 가능한 오브젝트를 나타내는 패턴입니다.

OS 배포 중에 이 템플릿은 오브젝트의 여러 인스턴스를 나타낼 수 있습니다. minElements maxElements 필드를 사용하여 인스턴스 수를 제한할 수 있습니다.

다음 예제에서는 템플릿을 사용하여 1 - 3 NTP 서버 배열을 나타냅니다.
{
"category": "dynamic",
"common": true,
"description": "NTP Servers",
"label": "NTP Servers",
"maxElements": 3,
"minElements": 0,
"name": "common-ntpservers",
"optional": true,
"template": [{
"autoCreateInstance": true,
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string"
}],
"type": "array"
},
OS 배포 중에 사용자 입력 값이 수집되면 OS가 배포될 각 장치에 대한 특정 콘텐츠가 포함된 구성 설정 파일의 인스턴스가 만들어집니다.
{
"category": "dynamic",
"common": true,
"description": "NTP Servers",
"label": "NTP Servers",
"maxElements": 3,
"minElements": 0,
"name": "common-ntpservers",
"optional": true,
"content": [{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver0",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string",
"value": "192.0.2.1"
}],
"template": [{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string"
}],
"type": "array"
}
  • 템플릿은 서버 특정 오브젝트의 최상위 수준에서 필요합니다(common = false).

  • categorystatic인 경우 템플릿 필드는 무시됩니다.

type필수String오브젝트의 데이터 유형입니다. 이는 다음 값 중 하나입니다.
  • array

  • assoc_array

  • boolean

  • integer

  • 암호

  • string

  • user_data

value옵션String구성 설정에 대한 단일 정적 값입니다.
  • default가 설정되어 있는 경우 이 필드는 비어 있거나 null일 수 있습니다. 그렇지 않으면 type이 일치하는 값을 지정하십시오.

  • typepassword인 경우 암호화되지 않은 문자열을 지정하십시오.

  • typeassoc_array 또는 array인 경우 비어 있는 content 필드도 지정해야 합니다.

  • typeuser_data인 경우 유효한 JSON 형식 value를 지정하십시오.

  • regex가 설정된 경우 이 값은 지정된 정규 표현식을 사용하여 유효성이 검사됩니다.

다음 구성 설정 예제에서는 사용자 지정 프로필에 추가될 수 있는 SLES 배포에 대한 로케일 설정을 정의합니다.
{
"category": "dynamic",
"content": [{
"category": "dynamic",
"common": false,
"name": "server-settings",
"optional": false,
"template": [{
"autoCreateInstance": true,
"category": "dynamic",
"common": false,
"content": [{
"category": "dynamic",
"choices": ["en_US", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the OS language locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "OS Locale",
"name": "locale",
"optional": false,
"type": "string",
"value": "en_US"
},
{
"category": "dynamic",
"choices": ["english-us", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the keyboard locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "Keyboard Locale",
"name": "keyboardLocale",
"optional": false,
"type": "string",
"value": "english-us"
}],
"name": "server",
"optional": false,
"type": "assoc_array"
}],
"type": "assoc_array"
},
{
"category": "dynamic",
"common": true,
"description": "NTP Servers",
"label": "NTP Servers",
"maxElements": 3,
"minElements": 0,
"name": "common-ntpservers",
"optional": true,
"template": [{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string"
}],
"type": "array"
},
{
"category": "static",
"common": true,
"description": "Directory for post-installation script logging.",
"name": "logpath",
"optional": false,
"type": "string",
"value": "/tmp/mylogger.log"
}],
"description": "Custom configuration file for deployment of custom locale, NTP server,
and directory for post-installation script logs.",
"label": "My Custom Deployment",
"name": "myCustomDeploy",
"optional": false,
"type": "array"
}
다음 예제는 배포 중에 사용자 입력 값이 정의된 후 호스트 시스템에서 생성되는 구성 설정 파일의 인스턴스입니다.
{
"category": "dynamic",
"content": [{
"category": "dynamic",
"common": false,
"name": "server-settings",
"optional": false,
"content": [{
"category": "dynamic",
"common": false,
"content": [{
"category": "dynamic",
"choices": ["en_US", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the OS language locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "OS Locale",
"name": "locale",
"optional": false,
"type": "string",
"value": "en_US"
},
{
"category": "dynamic",
"choices": ["english-us", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the keyboard locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "Keyboard Locale",
"name": "keyboardLocale",
"optional": false,
"type": "string",
"value": "english-us"
}],
"name": "server0",
"optional": false,
"type": "assoc_array",
"targetServer": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
},
{
"category": "dynamic",
"common": false,
"content": [{
"category": "dynamic",
"choices": ["en_US", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the OS language locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "OS Locale",
"name": "locale",
"optional": false,
"type": "string",
"value": "en_US"
},
{
"category": "dynamic",
"choices": ["english-us", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the keyboard locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "Keyboard Locale",
"name": "keyboardLocale",
"optional": false,
"type": "string",
"value": "english-us"
}],
"name": "server1",
"optional": false,
"type": "assoc_array",
"targetServer": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
}],
"template": [{
"category": "dynamic",
"common": false,
"content": [{
"category": "dynamic",
"choices": ["en_US", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the OS language locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "OS Locale",
"name": "locale",
"optional": false,
"type": "string",
"value": "en_US"
},
{
"category": "dynamic",
"choices": ["english-us", "pt_BR", "ja_JP"],
"common": false,
"description": "This parameter defines the keyboard locale to use with this deployment.
English, Brazilian Portuguese, and Japanese are supported.",
"label": "Keyboard Locale",
"name": "keyboardLocale",
"optional": false,
"type": "string",
"value": "english-us"
}],
"name": "server",
"optional": false,
"type": "assoc_array"
}],
"type": "assoc_array"
},
{
"category": "dynamic",
"common": true,
"description": "NTP Servers",
"label": "NTP Servers",
"maxElements": 3,
"minElements": 0,
"name": "common-ntpservers",
"optional": true,
"content": [{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver0,
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string",
"value": "192.0.2.1"
},
{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver1",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string",
"value": "192.0.2.2"
}],
"template": [{
"category": "dynamic",
"common": true,
"description": "A NTP Server",
"label": "NTP Server",
"name": "ntpserver",
"optional": true,
"regex": "[\\w\\.]{1,64}$",
"type": "string"
}],
"type": "array"
},
{
"category": "static",
"common": true,
"description": "Directory for post-installation script logs.",
"name": "logpath",
"optional": false,
"type": "string",
"value": "/tmp/mylogger.log"
}],
"description": "Custom configuration file for deployment of custom locale, NTP server,
and directory for post-installation script logs.",
"label": "My Custom Deployment",
"name": "myCustomDeploy",
"optional": false,
"type": "array"
}