diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap b/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap index b67ddac26fd7e..3a85403c5649a 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap +++ b/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap @@ -94,121 +94,284 @@ Array [ ] `; -exports[`extend index management ilm summary extension should return extension when index has lifecycle error 1`] = ` -Array [ -

- Index lifecycle management -

, -
, -
-

-

-
-
- illegal_argument_exception: setting [index.lifecycle.rollover_alias] for index [testy3] is empty or not defined -
-
, -
, +exports[`extend index management ilm summary extension should render a phase definition panel when lifecycle has phase definition 1`] = ` +
+ +
- - Lifecycle policy - + Policy name
- +
+ Current phase +
+
+ - testy - + + + Hot + + +
- - Current action - + Current action
- rollover + + rollover +
- - Failed step - + Current action time
- check-rollover-ready + 2018-12-07 13:02:55 +
+
+ Current step +
+
+ + test +
+
+
+
+

+ Current phase definition +

+
+
+
+
+          
+            {
+  "policy": "testy",
+  "phase_definition": {
+    "min_age": "0s",
+    "actions": {
+      "rollover": {
+        "max_size": "1gb"
+      }
+    }
+  },
+  "version": 1,
+  "modified_date_in_millis": 1544031699844
+}
+          
+        
+
+
+
+
+`; + +exports[`extend index management ilm summary extension should render a step info panel when lifecycle is waiting for a step completion 1`] = ` +
+
+
+ +
- - Current phase - + Policy name +
+
+ testy +
+
+ Current phase +
+
+ + + + Hot + + + +
+
+ Current action
- hot + + rollover +
- - Current action time - + Current action time
- - Phase definition - + Current step
-
-
- -
-
+ + test +
-
, -] +
+
+
+
+

+ Current step info +

+
+
+
+            
+              {
+  "message": "Waiting for all shard copies to be active",
+  "shards_left_to_allocate": -1,
+  "all_shards_active": false,
+  "number_of_replicas": 2
+}
+            
+          
+
+
+
+
+
+
`; -exports[`extend index management ilm summary extension should return extension when index has lifecycle policy 1`] = ` -Array [ -

- Index lifecycle management -

, -
, +exports[`extend index management ilm summary extension should render an error panel when index has lifecycle error 1`] = ` +
+ +
- - Lifecycle policy - + Policy name
- +
+ Current phase +
+
+ - testy - + + + Hot + + + +
+
+ Current action +
+
+ + rollover +
- - Current action - + Current action time
- complete + 2018-12-07 13:02:55
- - Failed step - + Current step
- - + + ERROR +
+
+
+
+

+ Lifecycle error +

+
+
+
+            
+              {
+  "failed_step": "check-rollover-ready",
+  "step_info": {
+    "type": "illegal_argument_exception",
+    "reason": "setting [index.lifecycle.rollover_alias] for index [testy3] is empty or not defined"
+  }
+}
+            
+          
+
+
+
+
+
+
+`; + +exports[`extend index management ilm summary extension should render the tab when index has lifecycle policy 1`] = ` +
+
+
+ +
- - Current phase - + Policy name +
+
+ testy +
+
+ Current phase +
+
+ + + + new + + + +
+
+ Current action
- new + + complete +
- - Current action time - + Current action time
2018-12-07 13:02:55
+
+ Current step +
+
+ + complete + +
-
, -] +
+
+
`; exports[`extend index management remove lifecycle action extension should return extension when all indices have lifecycle policy 1`] = ` diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx b/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx index 244536ad4afef..e26000bcacc7d 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx +++ b/x-pack/plugins/index_lifecycle_management/__jest__/extend_index_management.test.tsx @@ -22,6 +22,7 @@ import { init as initHttp } from '../public/application/services/http'; import { init as initUiMetric } from '../public/application/services/ui_metric'; import { indexLifecycleTab } from '../public/extend_index_management/components/index_lifecycle_summary'; import { Index } from '@kbn/index-management-plugin/common'; +import { findTestSubject } from '@elastic/eui/lib/test'; const { httpSetup } = init(); @@ -111,6 +112,33 @@ const indexWithLifecycleError: Index = { type: 'illegal_argument_exception', reason: 'setting [index.lifecycle.rollover_alias] for index [testy3] is empty or not defined', }, + }, +}; +const indexWithLifecyclePhaseDefinition: Index = { + health: 'yellow', + status: 'open', + name: 'testy3', + uuid: 'XL11TLa3Tvq298_dMUzLHQ', + primary: 1, + replica: 1, + documents: 2, + documents_deleted: 0, + size: '6.5kb', + primary_size: '6.5kb', + aliases: 'none', + isFrozen: false, + hidden: false, + ilm: { + index: 'testy3', + managed: true, + policy: 'testy', + lifecycle_date_millis: 1544020872361, + phase: 'hot', + phase_time_millis: 1544187775891, + action: 'rollover', + action_time_millis: 1544187775891, + step: 'test', + step_time_millis: 1544187776208, phase_execution: { policy: 'testy', // @ts-expect-error ILM type is incorrect https://github.com/elastic/elasticsearch-specification/issues/2326 @@ -120,6 +148,39 @@ const indexWithLifecycleError: Index = { }, }, }; +const indexWithLifecycleWaitingStep: Index = { + health: 'yellow', + status: 'open', + name: 'testy3', + uuid: 'XL11TLa3Tvq298_dMUzLHQ', + primary: 1, + replica: 1, + documents: 2, + documents_deleted: 0, + size: '6.5kb', + primary_size: '6.5kb', + aliases: 'none', + isFrozen: false, + hidden: false, + ilm: { + index: 'testy3', + managed: true, + policy: 'testy', + lifecycle_date_millis: 1544020872361, + phase: 'hot', + phase_time_millis: 1544187775891, + action: 'rollover', + action_time_millis: 1544187775891, + step: 'test', + step_time_millis: 1544187776208, + step_info: { + message: 'Waiting for all shard copies to be active', + shards_left_to_allocate: -1, + all_shards_active: false, + number_of_replicas: 2, + }, + }, +}; moment.tz.setDefault('utc'); @@ -245,6 +306,11 @@ describe('extend index management', () => { describe('ilm summary extension', () => { const IlmComponent = indexLifecycleTab.renderTabContent; + const policyPropertiesPanel = 'policyPropertiesPanel'; + const policyStepPanel = 'policyStepPanel'; + const policyErrorPanel = 'policyErrorPanel'; + const phaseDefinitionPanel = 'phaseDefinitionPanel'; + test('should not render the tab when index has no index lifecycle policy', () => { const shouldRenderTab = indexLifecycleTab.shouldRenderTab && @@ -254,22 +320,58 @@ describe('extend index management', () => { expect(shouldRenderTab).toBeFalsy(); }); - test('should return extension when index has lifecycle policy', () => { + test('should render the tab when index has lifecycle policy', () => { + const shouldRenderTab = + indexLifecycleTab.shouldRenderTab && + indexLifecycleTab.shouldRenderTab({ + index: indexWithLifecyclePolicy, + }); + expect(shouldRenderTab).toBeTruthy(); const ilmContent = ( ); - expect(ilmContent).toBeDefined(); const rendered = mountWithIntl(ilmContent); expect(rendered.render()).toMatchSnapshot(); + expect(findTestSubject(rendered, policyPropertiesPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, phaseDefinitionPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyStepPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyErrorPanel).exists()).toBeFalsy(); }); - test('should return extension when index has lifecycle error', () => { + test('should render an error panel when index has lifecycle error', () => { const ilmContent = ( ); - expect(ilmContent).toBeDefined(); const rendered = mountWithIntl(ilmContent); expect(rendered.render()).toMatchSnapshot(); + expect(findTestSubject(rendered, policyPropertiesPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, phaseDefinitionPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyStepPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyErrorPanel).exists()).toBeTruthy(); + }); + + test('should render a phase definition panel when lifecycle has phase definition', () => { + const ilmContent = ( + + ); + const rendered = mountWithIntl(ilmContent); + expect(rendered.render()).toMatchSnapshot(); + expect(findTestSubject(rendered, policyPropertiesPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, phaseDefinitionPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, policyStepPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyErrorPanel).exists()).toBeFalsy(); + }); + + test('should render a step info panel when lifecycle is waiting for a step completion', () => { + const ilmContent = ( + + ); + const rendered = mountWithIntl(ilmContent); + expect(rendered.render()).toMatchSnapshot(); + expect(findTestSubject(rendered, policyPropertiesPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, phaseDefinitionPanel).exists()).toBeFalsy(); + expect(findTestSubject(rendered, policyStepPanel).exists()).toBeTruthy(); + expect(findTestSubject(rendered, policyErrorPanel).exists()).toBeFalsy(); }); }); diff --git a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx index 162457479788f..0afe886bf1706 100644 --- a/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/extend_index_management/components/index_lifecycle_summary.tsx @@ -5,240 +5,241 @@ * 2.0. */ -import React, { FunctionComponent, Fragment, useState } from 'react'; +import React, { FunctionComponent } from 'react'; import moment from 'moment-timezone'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; import { - EuiCallOut, EuiCodeBlock, - EuiFlexGroup, + EuiLink, EuiFlexItem, - EuiDescriptionList, - EuiDescriptionListTitle, - EuiDescriptionListDescription, + EuiFlexGroup, + EuiPanel, + EuiText, EuiSpacer, - EuiTitle, - EuiLink, - EuiPopover, - EuiPopoverTitle, + EuiDescriptionList, + EuiBadgeProps, + EuiBadge, + EuiCode, } from '@elastic/eui'; +import { euiThemeVars } from '@kbn/ui-theme'; import { ApplicationStart } from '@kbn/core/public'; import { Index } from '@kbn/index-management-plugin/common'; import { IndexDetailsTab } from '@kbn/index-management-plugin/common/constants'; import { IlmExplainLifecycleLifecycleExplainManaged } from '@elastic/elasticsearch/lib/api/types'; +import { Phase } from '../../../common/types'; import { getPolicyEditPath } from '../../application/services/navigation'; -const getHeaders = (): Array<[keyof IlmExplainLifecycleLifecycleExplainManaged, string]> => { - return [ - [ - 'policy', - i18n.translate( - 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.lifecyclePolicyHeader', +const phaseToBadgeMapping: Record = { + hot: { + color: euiThemeVars.euiColorVis9, + label: 'Hot', + }, + warm: { + color: euiThemeVars.euiColorVis5, + label: 'Warm', + }, + cold: { + color: euiThemeVars.euiColorVis1, + label: 'Cold', + }, + frozen: { + color: euiThemeVars.euiColorVis4, + label: 'Frozen', + }, + delete: { + color: 'default', + label: 'Delete', + }, +}; + +interface Props { + index: Index; + getUrlForApp: ApplicationStart['getUrlForApp']; +} + +export const IndexLifecycleSummary: FunctionComponent = ({ index, getUrlForApp }) => { + const { ilm: ilmData } = index; + // only ILM managed indices render the ILM tab + const ilm = ilmData as IlmExplainLifecycleLifecycleExplainManaged; + + // if ilm.phase is an unexpected value, then display a default badge + const phaseBadgeConfig = phaseToBadgeMapping[ilm.phase as Phase] ?? { + color: 'default', + label: ilm.phase, + }; + const lifecycleProperties = [ + { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.policyNameTitle', { - defaultMessage: 'Lifecycle policy', + defaultMessage: 'Policy name', } ), - ], - [ - 'phase', - i18n.translate( - 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentPhaseHeader', + description: ilm.policy, + }, + { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentPhaseTitle', { defaultMessage: 'Current phase', } ), - ], - [ - 'action', - i18n.translate( - 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionHeader', + description: {phaseBadgeConfig.label}, + }, + ]; + if (ilm.action) { + lifecycleProperties.push({ + title: i18n.translate( + 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTitle', { defaultMessage: 'Current action', } ), - ], - [ - 'action_time_millis', - i18n.translate( - 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTimeHeader', + description: {ilm.action}, + }); + } + if (ilm.action_time_millis) { + lifecycleProperties.push({ + title: i18n.translate( + 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTimeTitle', { defaultMessage: 'Current action time', } ), - ], - [ - 'failed_step', - i18n.translate( - 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.failedStepHeader', + description: moment(ilm.action_time_millis).format('YYYY-MM-DD HH:mm:ss'), + }); + } + if (ilm.step) { + lifecycleProperties.push({ + title: i18n.translate( + 'xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentStepTitle', { - defaultMessage: 'Failed step', + defaultMessage: 'Current step', } ), - ], - ]; -}; - -interface Props { - index: Index; - getUrlForApp: ApplicationStart['getUrlForApp']; -} - -export const IndexLifecycleSummary: FunctionComponent = ({ index, getUrlForApp }) => { - const [showPhaseExecutionPopover, setShowPhaseExecutionPopover] = useState(false); - const { ilm: ilmData } = index; - // only ILM managed indices render the ILM tab - const ilm = ilmData as IlmExplainLifecycleLifecycleExplainManaged; - - const togglePhaseExecutionPopover = () => { - setShowPhaseExecutionPopover(!showPhaseExecutionPopover); - }; - const closePhaseExecutionPopover = () => { - setShowPhaseExecutionPopover(false); - }; - const renderPhaseExecutionPopoverButton = () => { - const button = ( - - - - ); - return ( - - - - - - - - - - - - - {JSON.stringify(ilm.phase_execution, null, 2)} - - - - - ); - }; - const buildRows = () => { - const headers = getHeaders(); - const rows: { - left: JSX.Element[]; - right: JSX.Element[]; - } = { - left: [], - right: [], - }; - headers.forEach(([fieldName, label], arrayIndex) => { - const value = ilm[fieldName]; - let content; - if (fieldName === 'action_time_millis') { - content = moment(value as string).format('YYYY-MM-DD HH:mm:ss'); - } else if (fieldName === 'policy') { - content = ( - - {value} - - ); - } else { - content = value; - } - content = content || '-'; - const cell = ( - - - {label} - - - {content} - - - ); - if (arrayIndex % 2 === 0) { - rows.left.push(cell); - } else { - rows.right.push(cell); - } + description: {ilm.step}, }); - if (ilm.phase_execution) { - rows.right.push(renderPhaseExecutionPopoverButton()); - } - return rows; - }; - - const { left, right } = buildRows(); + } return ( <> - -

- -

-
- {ilm.step_info && ilm.step_info.type ? ( - <> - - - } - iconType="cross" - > - {ilm.step_info.type}: {ilm.step_info.reason} - - - ) : null} - {ilm.step_info && ilm.step_info!.message ? ( - <> - - - } - > - {ilm.step_info!.message} - - - ) : null} - - - - {left} + + + + + + +

+ +

+
+
+ + + + + +
+ + + +
- - {right} + + {ilm.step_info && ilm.step === 'ERROR' && ( + // there is an error + <> + + +

+ +

+ + + {JSON.stringify( + { failed_step: ilm.failed_step, step_info: ilm.step_info }, + null, + 2 + )} + +
+
+ + + )} + {ilm.step_info && ilm.step !== 'ERROR' && ( + // ILM is waiting for the step to complete + <> + + +

+ +

+ + + {JSON.stringify(ilm.step_info, null, 2)} + +
+
+ + + )} + {ilm.phase_execution && ( + + +

+ +

+
+ + + {JSON.stringify(ilm.phase_execution, null, 2)} + +
+ )}
diff --git a/x-pack/plugins/index_lifecycle_management/tsconfig.json b/x-pack/plugins/index_lifecycle_management/tsconfig.json index e69bfeb2cc92d..6632d318e5d9f 100644 --- a/x-pack/plugins/index_lifecycle_management/tsconfig.json +++ b/x-pack/plugins/index_lifecycle_management/tsconfig.json @@ -35,6 +35,7 @@ "@kbn/core-http-browser", "@kbn/config-schema", "@kbn/shared-ux-router", + "@kbn/ui-theme", "@kbn/shared-ux-link-redirect-app" ], "exclude": [ diff --git a/x-pack/plugins/index_management/public/application/services/routing.ts b/x-pack/plugins/index_management/public/application/services/routing.ts index 3ec13eca06516..02e1410e9551c 100644 --- a/x-pack/plugins/index_management/public/application/services/routing.ts +++ b/x-pack/plugins/index_management/public/application/services/routing.ts @@ -34,10 +34,6 @@ export const getTemplateCloneLink = (name: string, isLegacy?: boolean) => { return encodeURI(url); }; -export const getILMPolicyPath = (policyName: string) => { - return `/data/index_lifecycle_management/policies/edit/${encodeURIComponent(policyName)}`; -}; - export const getIndexListUri = (filter?: string, includeHiddenIndices?: boolean) => { const hiddenIndicesParam = typeof includeHiddenIndices !== 'undefined' ? includeHiddenIndices : false; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 059a8c7c25d5e..3279c3e57be7e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -20096,17 +20096,7 @@ "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardDocsLabel": "Maximum de documents dans la partition principale", "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardSizeLabel": "Taille de partition principale maximale", "xpack.indexLifecycleMgmt.hotPhase.rolloverFieldTitle": "Substitution", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.actionStatusTitle": "Statut d'action", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionHeader": "Action actuelle", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTimeHeader": "Temps de l'action actuelle", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentPhaseHeader": "Phase actuelle", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.failedStepHeader": "Étape ayant échoué", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.lifecyclePolicyHeader": "Stratégie de cycle de vie", "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.phaseDefinitionTitle": "Définition de la phase", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionButton": "Afficher la définition", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionDescriptionTitle": "Définition de la phase", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryErrorMessage": "Erreur de cycle de vie des index", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryTitle": "Gestion du cycle de vie des index", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyButtonText": "Ajouter une stratégie", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyToIndexError": "Erreur lors de l'ajout d'une stratégie à l'index", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.cancelButtonText": "Annuler", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index d885d3d36a74a..50331bea5d8f0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -20109,17 +20109,7 @@ "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardDocsLabel": "主シャードの最大ドキュメント数", "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardSizeLabel": "最大プライマリシャードサイズ", "xpack.indexLifecycleMgmt.hotPhase.rolloverFieldTitle": "ロールオーバー", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.actionStatusTitle": "アクションステータス", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionHeader": "現在のステータス", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTimeHeader": "現在のアクション時間", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentPhaseHeader": "現在のフェーズ", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.failedStepHeader": "失敗したステップ", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.lifecyclePolicyHeader": "ライフサイクルポリシー", "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.phaseDefinitionTitle": "フェーズ検知", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionButton": "フェーズ検知を表示", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionDescriptionTitle": "フェーズ検知", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryErrorMessage": "インデックスライフサイクルエラー", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryTitle": "インデックスライフサイクル管理", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyButtonText": "ポリシーを追加", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyToIndexError": "インデックスへのポリシーの追加中にエラーが発生しました", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.cancelButtonText": "キャンセル", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 5a074d95474cd..04b702d75a397 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -20109,17 +20109,7 @@ "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardDocsLabel": "主要分片中的最大文档数", "xpack.indexLifecycleMgmt.hotPhase.maximumPrimaryShardSizeLabel": "最大主分片大小", "xpack.indexLifecycleMgmt.hotPhase.rolloverFieldTitle": "滚动更新", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.actionStatusTitle": "操作状态", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionHeader": "当前操作", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentActionTimeHeader": "当前操作名称", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.currentPhaseHeader": "当前阶段", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.failedStepHeader": "失败的步骤", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.headers.lifecyclePolicyHeader": "生命周期策略", "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.phaseDefinitionTitle": "阶段定义", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionButton": "显示阶段定义", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.showPhaseDefinitionDescriptionTitle": "阶段定义", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryErrorMessage": "索引生命周期错误", - "xpack.indexLifecycleMgmt.indexLifecycleMgmtSummary.summaryTitle": "索引生命周期管理", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyButtonText": "添加策略", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.addPolicyToIndexError": "向索引添加策略时出错", "xpack.indexLifecycleMgmt.indexManagementTable.addLifecyclePolicyConfirmModal.cancelButtonText": "取消",