feat: update record set of dns zone
1. update record set tab in the dns zone detail page 2. update create record set 3. update edit record set 4. update delete record set 5. update record set detail Change-Id: I624c09b7ebab049371ffd0cbe73c6eec55f4a028
This commit is contained in:
parent
28c14c426c
commit
91aa92b55a
@ -2,14 +2,18 @@
|
||||
"3600": "3600",
|
||||
" You can go to the console to ": " You can go to the console to ",
|
||||
"\"Shared\" volume can be mounted on multiple instances": "\"Shared\" volume can be mounted on multiple instances",
|
||||
"\"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all\" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ipv4=192.1.1.1 is authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>": "\"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all\" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ipv4=192.1.1.1 is authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>",
|
||||
"'ip' rule represents IPv4 or IPv6 address, 'cert' rule represents TLS certificate, 'user' rule represents username or usergroup, 'cephx' rule represents ceph auth ID.": "'ip' rule represents IPv4 or IPv6 address, 'cert' rule represents TLS certificate, 'user' rule represents username or usergroup, 'cephx' rule represents ceph auth ID.",
|
||||
"-1 means no connection limit": "-1 means no connection limit",
|
||||
".": ".",
|
||||
"0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: \"issue\", \"issuewild\", \"iodef\"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>": "0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: \"issue\", \"issuewild\", \"iodef\"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>",
|
||||
"1. The backup can only capture the data that has been written to the volume at the beginning of the backup task, excluding the data in the cache at that time.": "1. The backup can only capture the data that has been written to the volume at the beginning of the backup task, excluding the data in the cache at that time.",
|
||||
"1. The name of the custom resource class property should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_BAREMETAL_SMALL).": "1. The name of the custom resource class property should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_BAREMETAL_SMALL).",
|
||||
"1. The name of the trait should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_TRAIT1).": "1. The name of the trait should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_TRAIT1).",
|
||||
"1. The volume associated with the backup is available.": "1. The volume associated with the backup is available.",
|
||||
"1. You can create {resources} using ports or port ranges.": "1. You can create {resources} using ports or port ranges.",
|
||||
"10 0 5060 server1.example.com. <ul><li>\"10\" is the priority of the record. The lower the value, the higher the priority.</li><li>0 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>": "10 0 5060 server1.example.com. <ul><li>\"10\" is the priority of the record. The lower the value, the higher the priority.</li><li>0 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>",
|
||||
"10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>": "10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>",
|
||||
"10s": "10s",
|
||||
"1D": "1D",
|
||||
"1H": "1H",
|
||||
@ -20,6 +24,7 @@
|
||||
"2. To ensure the integrity of the data, it is recommended that you suspend the write operation of all files when creating a backup.": "2. To ensure the integrity of the data, it is recommended that you suspend the write operation of all files when creating a backup.",
|
||||
"2. You can customize the resource class name of the flavor, but it needs to correspond to the resource class of the scheduled node (for example, the resource class name of the scheduling node is baremetal.with-GPU, and the custom resource class name of the flavor is CUSTOM_BAREMETAL_WITH_GPU=1).": "2. You can customize the resource class name of the flavor, but it needs to correspond to the resource class of the scheduled node (for example, the resource class name of the scheduling node is baremetal.with-GPU, and the custom resource class name of the flavor is CUSTOM_BAREMETAL_WITH_GPU=1).",
|
||||
"3. When using a port range to create a port mapping, the size of the external port range is required to be the same as the size of the internal port range. For example, the external port range is 80:90 and the internal port range is 8080:8090.": "3. When using a port range to create a port mapping, the size of the external port range is required to be the same as the size of the internal port range. For example, the external port range is 80:90 and the internal port range is 8080:8090.",
|
||||
"4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>": "4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>",
|
||||
"4. When you use a port range to create {resources}, multiple {resources} will be created in batches. ": "4. When you use a port range to create {resources}, multiple {resources} will be created in batches. ",
|
||||
"5min": "5min",
|
||||
"8 to 16 characters, at least one uppercase letter, one lowercase letter, one number and one special character.": "8 to 16 characters, at least one uppercase letter, one lowercase letter, one number and one special character.",
|
||||
@ -945,6 +950,7 @@
|
||||
"Execution Result": "Execution Result",
|
||||
"Existing Volume": "Existing Volume",
|
||||
"Exit Policy": "Exit Policy",
|
||||
"Exp: ": "Exp: ",
|
||||
"Expand": "Expand",
|
||||
"Expand Advanced Options": "Expand Advanced Options",
|
||||
"Expired Time": "Expired Time",
|
||||
@ -1808,6 +1814,7 @@
|
||||
"Please input IPv4 or IPv6 cidr, (e.g. 192.168.0.0/24, 2001:DB8::/48)": "Please input IPv4 or IPv6 cidr, (e.g. 192.168.0.0/24, 2001:DB8::/48)",
|
||||
"Please input a valid ip!": "Please input a valid ip!",
|
||||
"Please input at least 2 characters.": "Please input at least 2 characters.",
|
||||
"Please input at least one record": "Please input at least one record",
|
||||
"Please input auth key": "Please input auth key",
|
||||
"Please input cipher": "Please input cipher",
|
||||
"Please input cluster name": "Please input cluster name",
|
||||
@ -2454,6 +2461,7 @@
|
||||
"The min size is {size} GiB": "The min size is {size} GiB",
|
||||
"The name cannot be modified after creation": "The name cannot be modified after creation",
|
||||
"The name of the physical network to which a port is connected": "The name of the physical network to which a port is connected",
|
||||
"The name should be end with \".\"": "The name should be end with \".\"",
|
||||
"The name should contain letter or number, the length is 1 to 16, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "The name should contain letter or number, the length is 1 to 16, characters can only contain \"0-9, a-z, A-Z, -, _.\"",
|
||||
"The name should contain letter or number, the length is 2 to 64, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "The name should contain letter or number, the length is 2 to 64, characters can only contain \"0-9, a-z, A-Z, -, _.\"",
|
||||
"The name should start with letter or number, and be a string of 2 to 255, characters can only contain \"0-9, a-z, A-Z, -, _, .\"": "The name should start with letter or number, and be a string of 2 to 255, characters can only contain \"0-9, a-z, A-Z, -, _, .\"",
|
||||
@ -2955,6 +2963,7 @@
|
||||
"networks": "networks",
|
||||
"neutron agent": "neutron agent",
|
||||
"neutron agents": "neutron agents",
|
||||
"ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>": "ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>",
|
||||
"open external gateway": "open external gateway",
|
||||
"out": "out",
|
||||
"paste files to folder": "paste files to folder",
|
||||
|
@ -2,14 +2,18 @@
|
||||
"3600": "3600",
|
||||
" You can go to the console to ": "콘솔로 이동",
|
||||
"\"Shared\" volume can be mounted on multiple instances": "\"공유된\" 볼륨은 다수의 인스턴스에서 마운트가 가능합니다.",
|
||||
"\"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all\" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ipv4=192.1.1.1 is authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>": "",
|
||||
"'ip' rule represents IPv4 or IPv6 address, 'cert' rule represents TLS certificate, 'user' rule represents username or usergroup, 'cephx' rule represents ceph auth ID.": "‘ip’ 룰은 IPv4 또는 IPv6 주소를 나타내며 ’cert’ 룰은 TLS 인증서를 ‘user’ 룰은 사용자 이름과 사용자 그룹을 ’cephx’ 룰은 ceph auth ID 를 나타냅니다.",
|
||||
"-1 means no connection limit": "-1은 연결 제한이 없는 것을 의미합니다.",
|
||||
".": ".",
|
||||
"0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: \"issue\", \"issuewild\", \"iodef\"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>": "",
|
||||
"1. The backup can only capture the data that has been written to the volume at the beginning of the backup task, excluding the data in the cache at that time.": "백업 테스트 시작시 볼륨에 작성된 데이터 수집만 백업 가능하며 캐쉬에 저장된 데이터는 제외됩니다.",
|
||||
"1. The name of the custom resource class property should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_BAREMETAL_SMALL).": "사용자 리소스 클래스 속성의 이름은 CUSTOM_으로 시작되며, A ~ Z 대문자만 포함, 0 ~ 9 숫자 또는 언더스코어, 길이는 255자를 초과하지 않아야 합니다. (예: CUSTOM_BAREMETAL_SMALL).",
|
||||
"1. The name of the trait should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_TRAIT1).": "트레인 이름은 CUSTOM으로 시작되며 A ~ Z 대문자만 포함, 0 ~ 9 숫자 또는 언더스코어, 길이는 255자를 초과하지 않아야 합니다.(예: CUSTOM_TRAIT1)",
|
||||
"1. The volume associated with the backup is available.": "백업과 결합된 볼륨이 사용가능합니다.",
|
||||
"1. You can create {resources} using ports or port ranges.": "포트 또는 포트 범위로 {resource}를 생성 가능합니다.",
|
||||
"10 0 5060 server1.example.com. <ul><li>\"10\" is the priority of the record. The lower the value, the higher the priority.</li><li>0 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>": "",
|
||||
"10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>": "",
|
||||
"10s": "10s",
|
||||
"1D": "1D",
|
||||
"1H": "1H",
|
||||
@ -20,6 +24,7 @@
|
||||
"2. To ensure the integrity of the data, it is recommended that you suspend the write operation of all files when creating a backup.": "데이터 무결성을 검사하기 위해 백업 생성시 모든 파일에 대한 쓰기 동작을 중단하는 것을 권장합니다.",
|
||||
"2. You can customize the resource class name of the flavor, but it needs to correspond to the resource class of the scheduled node (for example, the resource class name of the scheduling node is baremetal.with-GPU, and the custom resource class name of the flavor is CUSTOM_BAREMETAL_WITH_GPU=1).": "플레이버의 리소스 클래스 이름에 대한 사용자화가 가능하지만 예약된 노드의 리소스 클레스에 대한 응답(?)이 필요합니다. (예를 들면 스케쥴링 노드의 리소스 클래스 이름은 baremetal.with-GPU이며 플레이버의 커스텀 리소스 클래스 이름은 CUSTOM_BAREMETAL_WITH_GPU=1)",
|
||||
"3. When using a port range to create a port mapping, the size of the external port range is required to be the same as the size of the internal port range. For example, the external port range is 80:90 and the internal port range is 8080:8090.": "포트 범위를 사용하여 포트 매핑을 생성할 때 외부 포트 범위의 크기는 내부 포트 범위의 크기와 동일해야 합니다. 예를 들어 외부 포트 범위가 80:90이면 내부 포트 범위는 8080:8090입니다.",
|
||||
"4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>": "",
|
||||
"4. When you use a port range to create {resources}, multiple {resources} will be created in batches. ": " {resources} 생성을 위해 포트 범위를 사용하면 배치로 다수의 {resources}가 생성됩니다.",
|
||||
"5min": "5분",
|
||||
"8 to 16 characters, at least one uppercase letter, one lowercase letter, one number and one special character.": "8 ~ 16 문자, 최소 대문자 한개, 소문자 한개, 숫자 한개, 특수 문자 한개",
|
||||
@ -945,6 +950,7 @@
|
||||
"Execution Result": "실행 결과",
|
||||
"Existing Volume": "존재하는 볼륨",
|
||||
"Exit Policy": "종료 정책",
|
||||
"Exp: ": "",
|
||||
"Expand": "확장",
|
||||
"Expand Advanced Options": "고급 옵션 보기",
|
||||
"Expired Time": "만료 시간",
|
||||
@ -1808,6 +1814,7 @@
|
||||
"Please input IPv4 or IPv6 cidr, (e.g. 192.168.0.0/24, 2001:DB8::/48)": "",
|
||||
"Please input a valid ip!": "",
|
||||
"Please input at least 2 characters.": "",
|
||||
"Please input at least one record": "",
|
||||
"Please input auth key": "",
|
||||
"Please input cipher": "",
|
||||
"Please input cluster name": "",
|
||||
@ -2454,6 +2461,7 @@
|
||||
"The min size is {size} GiB": "최소 크기는 {size} GiB입니다.",
|
||||
"The name cannot be modified after creation": "생성 후에는 이름을 수정할 수 없습니다.",
|
||||
"The name of the physical network to which a port is connected": "포트가 연결된 물리 네트워크의 이름",
|
||||
"The name should be end with \".\"": "",
|
||||
"The name should contain letter or number, the length is 1 to 16, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "이름은 문자나 숫자를 포함해야 하고, 길이는 1~16자 사이여야 하며, 문자는 \"0-9, a-z, A-Z, -, _.\"만 포함할 수 있습니다.",
|
||||
"The name should contain letter or number, the length is 2 to 64, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "이름은 문자나 숫자를 포함해야 하고, 길이는 2~64자 사이여야 하며, 문자는 \"0-9, a-z, A-Z, -, _.\"만 포함할 수 있습니다.",
|
||||
"The name should start with letter or number, and be a string of 2 to 255, characters can only contain \"0-9, a-z, A-Z, -, _, .\"": "이름은 문자나 숫자로 시작해야 하고, 2~255자 사이의 문자열이어야 하며, 문자는 \"0-9, a-z, A-Z, -, _, .\"만 포함할 수 있습니다.",
|
||||
@ -2955,6 +2963,7 @@
|
||||
"networks": "네트워크",
|
||||
"neutron agent": "",
|
||||
"neutron agents": "",
|
||||
"ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>": "",
|
||||
"open external gateway": "",
|
||||
"out": "",
|
||||
"paste files to folder": "",
|
||||
|
@ -2,14 +2,18 @@
|
||||
"3600": "",
|
||||
" You can go to the console to ": "您可以前往控制台 ",
|
||||
"\"Shared\" volume can be mounted on multiple instances": "“共享”云硬盘类型的云硬盘,可挂载到多台云主机上",
|
||||
"\"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all\" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ipv4=192.1.1.1 is authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>": "\"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all\" <ul><li><b>v=spf1:</b> 告诉服务器这包含SPF记录。每个SPF记录必须以该字符串开头。</li> <li><b>访客列表:</b> 是 SPF 记录的“访客列表”或授权 IP 地址列表。 在此示例中,SPF 记录告诉服务器 ipv4=192.1.1.1 被授权代表域发送电子邮件。</li> <li><b>include:examplesender.net: </b> 是 include 标记的示例,它告诉服务器哪些第三方组织有权代表域发送电子邮件。 此标记表示应检查所包含域 (examplesender.net) 的 SPF 记录内容,并且它包含的 IP 地址也应被视为已授权。 SPF 记录中可以包含多个域,但此标记仅适用于有效域。</li><li><b>-all:</b> SPF 记录中未列出的地址的服务器无权发送电子邮件,应被拒绝。</li></ul>",
|
||||
"'ip' rule represents IPv4 or IPv6 address, 'cert' rule represents TLS certificate, 'user' rule represents username or usergroup, 'cephx' rule represents ceph auth ID.": "'IP' 规则代表 IPv4 或 IPv6 地址,'Cert' 规则代表TLS 证书,'用户' 规则代表用户名或用户组,'Cephx' 规则代表 ceph auth ID。",
|
||||
"-1 means no connection limit": "-1表示无连接限制",
|
||||
".": "。",
|
||||
"0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: \"issue\", \"issuewild\", \"iodef\"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>": "0 iodef mailto:security@example.com <ul><li><b>0:</b> 是标志。 0-255 之间的无符号整数。</li> <li><b>iodef:</b> 一个 ASCII 字符串,表示记录所表示的属性的标识符。<br />可用标签:\"issue\", \"issuewild\", \"iodef\"</li><li><b>mailto:security@example.com:</b> 与标记关联的值。</li></ul>",
|
||||
"1. The backup can only capture the data that has been written to the volume at the beginning of the backup task, excluding the data in the cache at that time.": "1. 备份只能捕获在备份任务开始时已经写入磁盘的数据,不包括当时位于缓存的数据。",
|
||||
"1. The name of the custom resource class property should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_BAREMETAL_SMALL).": "1. 自定义资源属性的命名应该以 CUSTOM_ 开头、只能包含大写字母A ~ Z、数字0 ~ 9或下划线、长度不超过255个字符(比如:CUSTOM_BAREMETAL_SMALL)。",
|
||||
"1. The name of the trait should start with CUSTOM_, can only contain uppercase letters A ~ Z, numbers 0 ~ 9 or underscores, and the length should not exceed 255 characters (for example: CUSTOM_TRAIT1).": "1. 特性的命名应该以 CUSTOM_ 开头、只能包含大写字母A ~ Z、数字0 ~ 9或下划线、长度不超过255个字符(比如:CUSTOM_TRAIT1)。",
|
||||
"1. The volume associated with the backup is available.": "1. 备份关联的云硬盘处于可用状态。",
|
||||
"1. You can create {resources} using ports or port ranges.": "1. 可以使用端口或端口范围创建{resources}。",
|
||||
"10 0 5060 server1.example.com. <ul><li>\"10\" is the priority of the record. The lower the value, the higher the priority.</li><li>0 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>": "10 0 5060 server1.example.com。 <ul><li>\"10\" 是记录的优先级。值越小,优先级越高。</li><li>0是记录的权重。这是当存在多个相同优先级的匹配SRV记录时,该记录有机会被使用的权重。</li><li>5060是该记录的端口。这指定了应用程序或服务正在运行的端口。</li> <li>server1.example.com 是记录的目标。这指定了记录所针对的应用程序或服务的域。SRV 记录必须指定目标,该目标可以是 A 记录或 AAAA 记录,但不能使用 CNAME 记录。</li></ul>",
|
||||
"10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>": "10 mail.example.com <ul><li><b>10:</b> 优先级</li> <li><b>mail.example.com:</b> 值</li></ul >",
|
||||
"10s": "10秒",
|
||||
"1D": "1天",
|
||||
"1H": "1小时",
|
||||
@ -20,6 +24,7 @@
|
||||
"2. To ensure the integrity of the data, it is recommended that you suspend the write operation of all files when creating a backup.": "2. 为了保证数据的完整性,建议您在创建备份时暂停所有文件的写操作。",
|
||||
"2. You can customize the resource class name of the flavor, but it needs to correspond to the resource class of the scheduled node (for example, the resource class name of the scheduling node is baremetal.with-GPU, and the custom resource class name of the flavor is CUSTOM_BAREMETAL_WITH_GPU=1).": "2. 你可以自定义云主机类型的资源类名称,但需要与被调度节点的资源类对应;(比如:调度节点的资源类名称为 baremetal.with-GPU,云主机类型的自定义资源类名称为CUSTOM_BAREMETAL_WITH_GPU)。",
|
||||
"3. When using a port range to create a port mapping, the size of the external port range is required to be the same as the size of the internal port range. For example, the external port range is 80:90 and the internal port range is 8080:8090.": "3. 使用端口范围创建端口映射时,要求源端口范围大小与目标端口范围大小一致,如:源端口范围为80:90,目标端口范围为8080:8090。",
|
||||
"4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>": "4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 是算法:</b> 算法(0:保留;1:RSA;2:DSA;3:ECDSA;4:Ed25519;6:Ed第448章)</li> <li><b>2 是类型:</b>用于散列公钥的算法(0:保留;1:SHA-1;2:SHA-256)</li> <li><b>最后一个参数是指纹:</b>哈希结果的十六进制表示,作为文本</li></ul>",
|
||||
"4. When you use a port range to create {resources}, multiple {resources} will be created in batches. ": "4. 使用端口范围创建{resources}时,会批量创建多个{resources}。",
|
||||
"5min": "5分钟",
|
||||
"8 to 16 characters, at least one uppercase letter, one lowercase letter, one number and one special character.": "8个到16个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符。",
|
||||
@ -945,6 +950,7 @@
|
||||
"Execution Result": "执行结果",
|
||||
"Existing Volume": "已有硬盘",
|
||||
"Exit Policy": "退出策略",
|
||||
"Exp: ": "例如:",
|
||||
"Expand": "展开",
|
||||
"Expand Advanced Options": "展开高级选项",
|
||||
"Expired Time": "到期时间",
|
||||
@ -1808,6 +1814,7 @@
|
||||
"Please input IPv4 or IPv6 cidr, (e.g. 192.168.0.0/24, 2001:DB8::/48)": "请输入IPv4或IPv6网段地址,(如:192.168.0.0/24, 2001:DB8::/48)",
|
||||
"Please input a valid ip!": "请输入正确的IP地址",
|
||||
"Please input at least 2 characters.": "请输入至少2个字符",
|
||||
"Please input at least one record": "请输入至少一条记录",
|
||||
"Please input auth key": "请输入密钥",
|
||||
"Please input cipher": "请输入cipher",
|
||||
"Please input cluster name": "请输入集群名称",
|
||||
@ -2454,6 +2461,7 @@
|
||||
"The min size is {size} GiB": "最小内存为 {size} GiB",
|
||||
"The name cannot be modified after creation": "名称创建后不可修改",
|
||||
"The name of the physical network to which a port is connected": "端口连接到的物理网络的名称",
|
||||
"The name should be end with \".\"": "",
|
||||
"The name should contain letter or number, the length is 1 to 16, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "名称应包含字母或数字,长度为 1 到 16,且字符只能包含“0-9、a-z、A-Z、-、_”。",
|
||||
"The name should contain letter or number, the length is 2 to 64, characters can only contain \"0-9, a-z, A-Z, -, _.\"": "名称应包含字母或数字,长度为 2 到 64,且字符只能包含“0-9、a-z、A-Z、-、_”。",
|
||||
"The name should start with letter or number, and be a string of 2 to 255, characters can only contain \"0-9, a-z, A-Z, -, _, .\"": "名称应以字母或数字开头,长度为 2 到 255,且只包含“0-9, a-z, A-Z, -, _, .”。",
|
||||
@ -2955,6 +2963,7 @@
|
||||
"networks": "网络",
|
||||
"neutron agent": "网络服务",
|
||||
"neutron agents": "网络服务",
|
||||
"ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>": "ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>域的主名称服务器,即 ns1.example.com 或名称服务器列表中的第一个名称服务器。</li><li>域的负责方:admin.example.com。</li><li>每当您更新域时都会更改的时间戳。</li><li>区域刷新前的秒数。</li><li>刷新失败之前应该重试的秒数。</li><li>区域被视为不再具有权威性之前的秒数上限。</li><li> 否定结果 TTL(例如,在重新尝试之前,解析器应该在多长时间内认为子域的否定结果有效)。</li></ul>",
|
||||
"open external gateway": "开启公网网关",
|
||||
"out": "出",
|
||||
"paste files to folder": "粘贴文件到文件夹下",
|
||||
|
@ -12,9 +12,10 @@
|
||||
|
||||
import { inject, observer } from 'mobx-react';
|
||||
import Base from 'containers/TabDetail';
|
||||
import { DNSRecordSetsStore } from 'stores/designate/record-set';
|
||||
import { RECORD_STATUS, getRecordSetType } from 'resources/dns/record';
|
||||
import BaseDetail from './BaseDetail';
|
||||
import { DNSRecordSetsStore } from 'src/stores/designate/recordSets';
|
||||
import { DNS_RECORD_TYPE } from 'src/utils/dns-rrtype';
|
||||
import actionConfigs from '../actions';
|
||||
|
||||
export class RecordSetsDetail extends Base {
|
||||
init() {
|
||||
@ -30,11 +31,19 @@ export class RecordSetsDetail extends Base {
|
||||
}
|
||||
|
||||
get listUrl() {
|
||||
return this.getRoutePath('dnsZonesDetail', { id: this.detailData.zone_id }, { 'tab': 'record_sets' });
|
||||
return this.getRoutePath(
|
||||
'dnsZonesDetail',
|
||||
{ id: this.detailData.zone_id },
|
||||
{ tab: 'record_sets' }
|
||||
);
|
||||
}
|
||||
|
||||
get actionConfigs() {
|
||||
return actionConfigs;
|
||||
}
|
||||
|
||||
get policy() {
|
||||
return 'get_images';
|
||||
return 'get_recordset';
|
||||
}
|
||||
|
||||
get detailInfos() {
|
||||
@ -50,12 +59,13 @@ export class RecordSetsDetail extends Base {
|
||||
{
|
||||
title: t('Type'),
|
||||
dataIndex: 'type',
|
||||
render: (data) => data + (Object.keys(DNS_RECORD_TYPE).includes(data) ? " - " + DNS_RECORD_TYPE[data].name : "")
|
||||
render: (data) => getRecordSetType(data),
|
||||
},
|
||||
{
|
||||
title: t('Status'),
|
||||
dataIndex: 'status',
|
||||
}
|
||||
valueMap: RECORD_STATUS,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@ -65,12 +75,11 @@ export class RecordSetsDetail extends Base {
|
||||
title: t('Overview'),
|
||||
key: 'overview',
|
||||
component: BaseDetail,
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
return tabs;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default inject('rootStore')(observer(RecordSetsDetail));
|
||||
export default inject('rootStore')(observer(RecordSetsDetail));
|
||||
|
@ -11,7 +11,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
import { ConfirmAction } from 'containers/Action';
|
||||
import globalDNSRecordSetsStore from 'src/stores/designate/recordSets';
|
||||
import globalDNSRecordSetsStore from 'stores/designate/record-set';
|
||||
|
||||
export default class Delete extends ConfirmAction {
|
||||
get id() {
|
||||
@ -36,7 +36,7 @@ export default class Delete extends ConfirmAction {
|
||||
|
||||
allowedCheckFunction = () => true;
|
||||
|
||||
policy = 'instance:delete';
|
||||
policy = 'delete_recordset';
|
||||
|
||||
confirmContext = (data) => {
|
||||
const name = this.getName(data);
|
||||
@ -44,13 +44,13 @@ export default class Delete extends ConfirmAction {
|
||||
return t('Are you sure to {action}? (Record Set: {name} - {id})', {
|
||||
action: this.actionNameDisplay || this.title,
|
||||
name,
|
||||
id
|
||||
id,
|
||||
});
|
||||
};
|
||||
|
||||
onSubmit = (item) => {
|
||||
const zone_id = item.zone_id;
|
||||
const { zone_id } = item;
|
||||
const recordset_id = item.id;
|
||||
return globalDNSRecordSetsStore.delete({ zone_id, recordset_id });
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -12,17 +12,18 @@
|
||||
|
||||
import { ModalAction } from 'containers/Action';
|
||||
import { inject, observer } from 'mobx-react';
|
||||
import { getRecordSetFormItem } from 'src/resources/dns/record';
|
||||
import globalDNSRecordSetsStore from 'src/stores/designate/recordSets';
|
||||
import { DNS_RECORD_TYPE } from 'src/utils/dns-rrtype';
|
||||
import { getRecordSetFormItem, DNS_RECORD_TYPE } from 'resources/dns/record';
|
||||
import globalDNSRecordSetsStore from 'stores/designate/record-set';
|
||||
|
||||
export class Update extends ModalAction {
|
||||
init() {
|
||||
this.store = globalDNSRecordSetsStore;
|
||||
this.state = {
|
||||
...this.state,
|
||||
nameExtra: `Exp: ${DNS_RECORD_TYPE[this.item.type].nameExtra}`,
|
||||
recordsExtra: `Exp: ${DNS_RECORD_TYPE[this.item.type].recordsExtra}`,
|
||||
nameExtra: `${t('Exp: ')}${DNS_RECORD_TYPE[this.item.type].nameExtra}`,
|
||||
recordsExtra: `${t('Exp: ')}${
|
||||
DNS_RECORD_TYPE[this.item.type].recordsExtra
|
||||
}`,
|
||||
};
|
||||
}
|
||||
|
||||
@ -30,39 +31,47 @@ export class Update extends ModalAction {
|
||||
|
||||
static title = t('Update Record Set');
|
||||
|
||||
static buttonText = t('Update');
|
||||
|
||||
get name() {
|
||||
return t('Update Record Set');
|
||||
}
|
||||
|
||||
static policy = 'get_images';
|
||||
static policy = 'update_recordset';
|
||||
|
||||
static allowed() {
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
|
||||
get defaultValue() {
|
||||
const { ...values } = this.item;
|
||||
|
||||
const recordsData = [];
|
||||
values.records.map((item, index) =>
|
||||
recordsData.push({ index, value: item })
|
||||
);
|
||||
const { records, type, name, description, ttl } = this.item;
|
||||
const recordsData = records.map((item, index) => ({ index, value: item }));
|
||||
|
||||
return {
|
||||
type: values.type,
|
||||
name: values.name,
|
||||
description: values.description,
|
||||
ttl: values.ttl,
|
||||
type,
|
||||
name,
|
||||
description,
|
||||
ttl,
|
||||
records: recordsData,
|
||||
};
|
||||
}
|
||||
|
||||
get formItems() {
|
||||
return getRecordSetFormItem(this, this.currentFormValue);
|
||||
const formItems = getRecordSetFormItem(this, this.currentFormValue);
|
||||
const newItems = formItems.map((it) => {
|
||||
if (it.name === 'name' || it.name === 'type') {
|
||||
return {
|
||||
...it,
|
||||
disabled: true,
|
||||
};
|
||||
}
|
||||
return it;
|
||||
});
|
||||
return newItems;
|
||||
}
|
||||
|
||||
onSubmit = (values) => {
|
||||
const zone_id = this.item.zone_id;
|
||||
const { zone_id } = this.item;
|
||||
const recordset_id = this.item.id;
|
||||
|
||||
const { records, ...val } = values;
|
||||
|
@ -14,19 +14,19 @@
|
||||
|
||||
import Update from './Update';
|
||||
import Delete from './Delete';
|
||||
import Create from '../../../actions/Records/Create';
|
||||
|
||||
const actionConfigs = {
|
||||
rowActions: {
|
||||
firstAction: Update,
|
||||
moreActions: [
|
||||
{
|
||||
action: Update,
|
||||
},
|
||||
{
|
||||
action: Delete,
|
||||
},
|
||||
],
|
||||
},
|
||||
batchActions: [Delete]
|
||||
primaryActions: [Create],
|
||||
batchActions: [Delete],
|
||||
};
|
||||
|
||||
export default actionConfigs;
|
||||
|
@ -13,9 +13,10 @@
|
||||
import React from 'react';
|
||||
import Base from 'containers/List';
|
||||
import { inject, observer } from 'mobx-react';
|
||||
import globalDNSRecordSetsStore from "src/stores/designate/recordSets";
|
||||
import actionConfigs from './actions';
|
||||
import { Tag } from 'antd';
|
||||
import globalDNSRecordSetsStore from 'stores/designate/record-set';
|
||||
import { RECORD_STATUS, getRecordSetType } from 'resources/dns/record';
|
||||
import actionConfigs from './actions';
|
||||
|
||||
export class RecordSets extends Base {
|
||||
init() {
|
||||
@ -27,7 +28,7 @@ export class RecordSets extends Base {
|
||||
}
|
||||
|
||||
get policy() {
|
||||
return 'get_images';
|
||||
return 'get_recordsets';
|
||||
}
|
||||
|
||||
get actionConfigs() {
|
||||
@ -51,17 +52,20 @@ export class RecordSets extends Base {
|
||||
{
|
||||
title: t('Type'),
|
||||
dataIndex: 'type',
|
||||
render: (value) => getRecordSetType(value),
|
||||
},
|
||||
{
|
||||
title: t('Records'),
|
||||
dataIndex: 'records',
|
||||
render: (value) => value.map((item) => <Tag>{item}</Tag>)
|
||||
render: (value) => value.map((item) => <Tag key={item}>{item}</Tag>),
|
||||
stringify: (value) => value.join('\n'),
|
||||
},
|
||||
{
|
||||
title: t('Status'),
|
||||
dataIndex: 'status',
|
||||
valueMap: RECORD_STATUS,
|
||||
},
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,14 +14,17 @@
|
||||
|
||||
import { ModalAction } from 'containers/Action';
|
||||
import { inject, observer } from 'mobx-react';
|
||||
import globalDNSRecordSetsStore from 'src/stores/designate/recordSets';
|
||||
import { DNS_RECORD_TYPE } from 'src/utils/dns-rrtype';
|
||||
import { getRecordSetFormItem } from 'src/resources/dns/record';
|
||||
import globalDNSRecordSetsStore from 'stores/designate/record-set';
|
||||
import { getRecordSetFormItem, DNS_RECORD_TYPE } from 'resources/dns/record';
|
||||
|
||||
export class Create extends ModalAction {
|
||||
init() {
|
||||
this.store = globalDNSRecordSetsStore;
|
||||
this.state = { ...this.state, nameExtra: `Exp: ${DNS_RECORD_TYPE.A.nameExtra}`, recordsExtra: `Exp: ${DNS_RECORD_TYPE.A.recordsExtra}` };
|
||||
this.state = {
|
||||
...this.state,
|
||||
nameExtra: `${t('Exp: ')}${DNS_RECORD_TYPE.A.nameExtra}`,
|
||||
recordsExtra: `${t('Exp: ')}${DNS_RECORD_TYPE.A.recordsExtra}`,
|
||||
};
|
||||
}
|
||||
|
||||
static id = 'create-record-set';
|
||||
@ -32,7 +35,7 @@ export class Create extends ModalAction {
|
||||
return t('Create Record Set');
|
||||
}
|
||||
|
||||
static policy = 'get_images';
|
||||
static policy = 'create_recordset';
|
||||
|
||||
static allowed() {
|
||||
return Promise.resolve(true);
|
||||
@ -50,7 +53,8 @@ export class Create extends ModalAction {
|
||||
}
|
||||
|
||||
onSubmit = (values) => {
|
||||
const { id } = this.item;
|
||||
const { detail } = this.containerProps;
|
||||
const { id } = detail || this.item;
|
||||
const { records, ...val } = values;
|
||||
|
||||
const recordsItem = [];
|
||||
|
@ -11,9 +11,88 @@
|
||||
// limitations under the License.
|
||||
|
||||
import React from 'react';
|
||||
import { DNS_RECORD_TYPE } from 'src/utils/dns-rrtype';
|
||||
import { ipValidate } from 'utils/validate';
|
||||
import { isString } from 'lodash';
|
||||
import { ZONE_STATUS } from './zone';
|
||||
|
||||
export const DNS_RECORD_TYPE = {
|
||||
A: {
|
||||
name: t('Address Record'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: '192.168.1.1',
|
||||
},
|
||||
AAAA: {
|
||||
name: t('IPv6 Address Record'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: '2001:db8:3333:4444:5555:6666:7777:8888',
|
||||
},
|
||||
CAA: {
|
||||
name: t('Certificate Authority Authorization Record'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: t(
|
||||
'0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: "issue", "issuewild", "iodef"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>'
|
||||
),
|
||||
},
|
||||
CNAME: {
|
||||
name: t('Canonical Name Record'),
|
||||
nameExtra: 'first.example.com.',
|
||||
recordsExtra: 'other-example.com',
|
||||
},
|
||||
MX: {
|
||||
name: t('Mail Exchange Record'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: t(
|
||||
'10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>'
|
||||
),
|
||||
},
|
||||
NS: {
|
||||
name: t('Name Server'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: 'ns1.example.com',
|
||||
},
|
||||
PTR: {
|
||||
name: t('Pointer Record'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: '1.1.0.192.in-addr.arpa.',
|
||||
},
|
||||
SOA: {
|
||||
name: t('Start Of Authority'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: t(
|
||||
'ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>'
|
||||
),
|
||||
},
|
||||
SPF: {
|
||||
name: t('Sender Policy Framework'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: t(
|
||||
'"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ipv4=192.1.1.1 is authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>'
|
||||
),
|
||||
},
|
||||
SRV: {
|
||||
name: t('Service Locator'),
|
||||
nameExtra:
|
||||
'_sip._tcp.example.com. <ul><li><b>_sip:</b> represents the name of the service.</li> <li><b>_tcp:</b> represents the protocol of the service, this is usually either TCP or UDP.</li><li><b>example.com:</b> represents the domain in which this record is for.</li></ul>',
|
||||
recordsExtra: t(
|
||||
'10 0 5060 server1.example.com. <ul><li>"10" is the priority of the record. The lower the value, the higher the priority.</li><li>0 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>'
|
||||
),
|
||||
},
|
||||
SSHFP: {
|
||||
name: t('SSH Public Key Fingerprint'),
|
||||
nameExtra: 'example.com.',
|
||||
recordsExtra: t(
|
||||
'4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>'
|
||||
),
|
||||
},
|
||||
TXT: { name: t('Text Record'), nameExtra: 'example.com.' },
|
||||
};
|
||||
|
||||
export const getRecordSetType = (type) => {
|
||||
if (DNS_RECORD_TYPE[type]) {
|
||||
return `${type} - ${DNS_RECORD_TYPE[type].name}`;
|
||||
}
|
||||
return type;
|
||||
};
|
||||
|
||||
export const dnsRRTypeList = () => {
|
||||
return Object.keys(DNS_RECORD_TYPE)
|
||||
@ -22,17 +101,26 @@ export const dnsRRTypeList = () => {
|
||||
label: `${item} - ${DNS_RECORD_TYPE[item].name}`,
|
||||
value: item,
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
export const typeChange = (value) => {
|
||||
if (Object.keys(DNS_RECORD_TYPE).includes(value)) {
|
||||
this.setState({
|
||||
nameExtra: `Exp:${DNS_RECORD_TYPE[value].nameExtra}`,
|
||||
recordsExtra: isString(DNS_RECORD_TYPE[value].recordsExtra)
|
||||
? `Exp: ${DNS_RECORD_TYPE[value].recordsExtra}`
|
||||
: '',
|
||||
});
|
||||
export const nameRegex = /^.+\.$/;
|
||||
|
||||
export const nameMessage = t('The name should be end with "."');
|
||||
|
||||
export const validateName = (rule, value) => {
|
||||
if (!value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if (!nameRegex.test(value)) {
|
||||
return Promise.reject(nameMessage);
|
||||
}
|
||||
// const labels = value.trim().split('.');
|
||||
// if (labels.length <= 1) {
|
||||
// return Promise.reject(
|
||||
// new Error(t('More than one label is required, such as: "example.org."'))
|
||||
// );
|
||||
// }
|
||||
return Promise.resolve();
|
||||
};
|
||||
|
||||
export const getRecordSetFormItem = (self, currentFormValue) => {
|
||||
@ -45,9 +133,9 @@ export const getRecordSetFormItem = (self, currentFormValue) => {
|
||||
onChange: (value) => {
|
||||
if (Object.keys(DNS_RECORD_TYPE).includes(value)) {
|
||||
self.setState({
|
||||
nameExtra: `Exp:${DNS_RECORD_TYPE[value].nameExtra}`,
|
||||
nameExtra: `${t('Exp: ')}${DNS_RECORD_TYPE[value].nameExtra}`,
|
||||
recordsExtra: isString(DNS_RECORD_TYPE[value].recordsExtra)
|
||||
? `Exp: ${DNS_RECORD_TYPE[value].recordsExtra}`
|
||||
? `${t('Exp: ')}${DNS_RECORD_TYPE[value].recordsExtra}`
|
||||
: '',
|
||||
});
|
||||
}
|
||||
@ -62,9 +150,8 @@ export const getRecordSetFormItem = (self, currentFormValue) => {
|
||||
tip: () => (
|
||||
<div dangerouslySetInnerHTML={{ __html: self.state.nameExtra }} />
|
||||
),
|
||||
extra: (
|
||||
<div dangerouslySetInnerHTML={{ __html: self.state.nameExtra }} />
|
||||
),
|
||||
extra: <div dangerouslySetInnerHTML={{ __html: self.state.nameExtra }} />,
|
||||
validator: validateName,
|
||||
},
|
||||
{
|
||||
name: 'description',
|
||||
@ -83,6 +170,7 @@ export const getRecordSetFormItem = (self, currentFormValue) => {
|
||||
type: 'add-select',
|
||||
isInput: true,
|
||||
required: true,
|
||||
placeholder: t('Please input at least one record'),
|
||||
width: 280,
|
||||
tip: () => (
|
||||
<div dangerouslySetInnerHTML={{ __html: self.state.recordsExtra }} />
|
||||
@ -95,16 +183,19 @@ export const getRecordSetFormItem = (self, currentFormValue) => {
|
||||
const { isIPv4, isIpv6 } = ipValidate;
|
||||
|
||||
return new Promise((resolve) => {
|
||||
value && value.forEach((item) => {
|
||||
if (type === 'A' && !isIPv4(item.value)) {
|
||||
throw new Error(t('Please enter a valid IPv4 value.'));
|
||||
} else if (type === 'AAAA' && !isIpv6(item.value))
|
||||
throw new Error(t('Please enter a valid IPv6 value.'));
|
||||
});
|
||||
value &&
|
||||
value.forEach((item) => {
|
||||
if (type === 'A' && !isIPv4(item.value)) {
|
||||
throw new Error(t('Please enter a valid IPv4 value.'));
|
||||
} else if (type === 'AAAA' && !isIpv6(item.value))
|
||||
throw new Error(t('Please enter a valid IPv6 value.'));
|
||||
});
|
||||
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
export const RECORD_STATUS = ZONE_STATUS;
|
||||
|
@ -15,7 +15,6 @@ import { action } from 'mobx';
|
||||
import Base from 'stores/base';
|
||||
|
||||
export class DNSRecordSetsStore extends Base {
|
||||
|
||||
get client() {
|
||||
return client.designate.zones.recordsets;
|
||||
}
|
||||
@ -37,15 +36,16 @@ export class DNSRecordSetsStore extends Base {
|
||||
}
|
||||
|
||||
@action
|
||||
delete = ({ zone_id, recordset_id }) => this.submitting(this.client.delete(zone_id, recordset_id));
|
||||
delete = ({ zone_id, recordset_id }) =>
|
||||
this.submitting(this.client.delete(zone_id, recordset_id));
|
||||
|
||||
@action
|
||||
update = (zone_id, recordset_id, body) => this.submitting(this.client.update(zone_id, recordset_id, body));
|
||||
update = (zone_id, recordset_id, body) =>
|
||||
this.submitting(this.client.update(zone_id, recordset_id, body));
|
||||
|
||||
@action
|
||||
create = ({ id }, body) => this.submitting(this.client.create(id, body));
|
||||
|
||||
}
|
||||
|
||||
const globalDNSRecordSetsStore = new DNSRecordSetsStore();
|
||||
export default globalDNSRecordSetsStore;
|
||||
export default globalDNSRecordSetsStore;
|
@ -1,46 +0,0 @@
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
export const DNS_RECORD_TYPE = {
|
||||
A: { name: t('Address Record'), nameExtra: 'example.com', recordsExtra: '192.168.1.1' },
|
||||
AAAA: { name: t('IPv6 Address Record'), nameExtra: 'example.com', recordsExtra: '2001:db8:3333:4444:5555:6666:7777:8888' },
|
||||
CAA: {
|
||||
name: t('Certificate Authority Authorization Record'),
|
||||
nameExtra: 'example.com',
|
||||
recordsExtra: '0 iodef mailto:security@example.com <ul><li><b>0:</b> is flag. An unsigned integer between 0-255.</li> <li><b>iodef:</b> An ASCII string that represents the identifier of the property represented by the record.<br />Available Tags: "issue", "issuewild", "iodef"</li><li><b>mailto:security@example.com:</b> The value associated with the tag.</li></ul>'
|
||||
},
|
||||
CNAME: { name: t('Canonical Name Record'), nameExtra: 'first.example.com', recordsExtra: 'other-example.com' },
|
||||
MX: { name: t('Mail Exchange Record'), nameExtra: 'example.com', recordsExtra: '10 mail.example.com <ul><li><b>10:</b> Priority</li> <li><b>mail.example.com:</b> Value</li></ul>' },
|
||||
NS: { name: t('Name Server'), nameExtra: 'example.com', recordsExtra: 'ns1.example.com' },
|
||||
PTR: { name: t('Pointer Record'), nameExtra: 'example.com', recordsExtra: '1.1.0.192.in-addr.arpa.' },
|
||||
SOA: {
|
||||
name: t('Start Of Authority'),
|
||||
nameExtra: 'example.com',
|
||||
recordsExtra: 'ns1.example.com admin.example.com 2013022001 86400 7200 604800 300 <ul><li>The primary name server for the domain, which is ns1.example.com or the first name server in the vanity name server list.</li><li>The responsible party for the domain: admin.example.com.</li><li>A timestamp that changes whenever you update your domain.</li><li>The number of seconds before the zone should be refreshed.</li><li>The number of seconds before a failed refresh should be retried.</li><li>The upper limit in seconds before a zone is considered no longer authoritative.</li><li>The negative result TTL (for example, how long a resolver should consider a negative result for a subdomain to be valid before retrying).</li></ul>',
|
||||
},
|
||||
SPF: {
|
||||
name: t('Sender Policy Framework'),
|
||||
nameExtra: 'example.com',
|
||||
recordsExtra: '"v=spf1 ipv4=192.1.1.1 include:examplesender.email +all" <ul><li><b>v=spf1:</b> Tells the server that this contains an SPF record. Every SPF record must begin with this string.</li> <li><b>Guest List:</b> Then comes the “guest list” portion of the SPF record or the list of authorized IP addresses. In this example, the SPF record is telling the server that ip4=192.0.2.0 and ip4=192.0.2.1 are authorized to send emails on behalf of the domain.</li> <li><b>include:examplesender.net:</b> is an example of the include tag, which tells the server what third-party organizations are authorized to send emails on behalf of the domain. This tag signals that the content of the SPF record for the included domain (examplesender.net) should be checked and the IP addresses it contains should also be considered authorized. Multiple domains can be included within an SPF record but this tag will only work for valid domains.</li><li><b>-all:</b> Tells, the server that addresses not listed in the SPF record are not authorized to send emails and should be rejected.</li></ul>'
|
||||
},
|
||||
SRV: {
|
||||
name: t('Service Locator'),
|
||||
nameExtra: '_sip._tcp.example.com. <ul><li><b>_sip:</b> represents the name of the service.</li> <li><b>_tcp:</b> represents the protocol of the service, this is usually either TCP or UDP.</li><li><b>example.com:</b> represents the domain in which this record is for.</li></ul>',
|
||||
recordsExtra: '10 0 5060 server1.example.com. <ul><li>"10" is the priority of the record. The lower the value, the higher the priority.</li><li>20 is the weight of the record. This is the weight of which this record has a chance to be used when there are multiple matching SRV records of the same priority.</li><li>5060 is the port of the record. This specifies the port on which the application or service is running.</li> <li>server1.example.com is the target of the record. This specifies the domain of the application or service the record is for. SRV records must specify a target which is either an A record or AAAA record, and may not use CNAME records.</li></ul>'
|
||||
},
|
||||
SSHFP: {
|
||||
name: t('SSH Public Key Fingerprint'),
|
||||
nameExtra: 'example.com',
|
||||
recordsExtra: '4 2 123456789abcdef67890123456789abcdef67890123456789abcdef123456789 <ul> <li><b>4 is Algorithm:</b> Algorithm (0: reserved; 1: RSA; 2: DSA, 3: ECDSA; 4: Ed25519; 6:Ed448)</li> <li><b>2 is Type:</b> Algorithm used to hash the public key (0: reserved; 1: SHA-1; 2: SHA-256)</li> <li><b>Last parameter is Fingerprint:</b> Hexadecimal representation of the hash result, as text</li> </ul>'
|
||||
},
|
||||
TXT: { name: t('Text Record'), nameExtra: 'example.com' },
|
||||
};
|
Loading…
Reference in New Issue
Block a user