Skip to content
Snippets Groups Projects
Commit 8411847b authored by xiaohua guan's avatar xiaohua guan Committed by Yas Naoi
Browse files

Issue #3081060 by Xiaohua Guan, yas: Manage K8s Quotas

parent c45bd457
No related branches found
No related tags found
No related merge requests found
Showing
with 1228 additions and 3 deletions
langcode: en
status: true
dependencies:
module:
- k8s
id: k8s_resource_quota_delete_action
label: 'Delete Resource Quota(s)'
type: k8s_resource_quota
plugin: entity:delete_action:k8s_resource_quota
configuration: { }
langcode: en
status: true
dependencies:
module:
- cloud
- k8s
id: k8s_resource_quota
label: 'K8s Resource Quota'
module: views
description: 'Replaces the ListBuilder for K8s Resource Quota entities'
tag: ''
base_table: k8s_resource_quota
base_field: id
core: 8.x
display:
default:
display_plugin: default
id: default
display_title: Master
position: 0
display_options:
access:
type: ViewsCloudContextAccess
options:
perm: 'list k8s resource quota'
cache:
type: tag
options: { }
query:
type: views_query
options:
disable_sql_rewrite: false
distinct: false
replica: false
query_comment: ''
query_tags: { }
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
pager:
type: full
options:
items_per_page: 50
offset: 0
id: 0
total_pages: null
expose:
items_per_page: true
items_per_page_label: 'Items per page'
items_per_page_options: '10, 15, 20, 25, 50, 100'
items_per_page_options_all: true
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
tags:
previous: ‹‹
next: ››
first: '« First'
last: 'Last »'
style:
type: table
options:
grouping: { }
row_class: ''
default_row_class: true
override: true
sticky: true
caption: ''
summary: ''
description: ''
columns:
k8s_resource_quota_bulk_form: k8s_resource_quota_bulk_form
namespace: namespace
name: name
created: created
operations: operations
info:
k8s_resource_quota_bulk_form:
align: ''
separator: ''
empty_column: false
responsive: ''
namespace:
sortable: true
default_sort_order: asc
align: ''
separator: ''
empty_column: false
responsive: ''
name:
sortable: true
default_sort_order: asc
align: ''
separator: ''
empty_column: false
responsive: ''
created:
sortable: true
default_sort_order: desc
align: ''
separator: ''
empty_column: false
responsive: ''
operations:
align: ''
separator: ''
empty_column: false
responsive: ''
default: namespace
empty_table: false
row:
type: fields
fields:
k8s_resource_quota_bulk_form:
id: k8s_resource_quota_bulk_form
table: k8s_resource_quota
field: k8s_resource_quota_bulk_form
label: ''
exclude: false
alter:
alter_text: false
element_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
plugin_id: k8s_resource_quota_bulk_form
entity_type: k8s_resource_quota
namespace:
id: namespace
table: k8s_resource_quota
field: namespace
relationship: none
group_type: group
admin_label: ''
label: Namespace
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: entity_link
settings:
target_type: k8s_namespace
field_name: name
comma_separated: false
html_generator_class: ''
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
entity_type: k8s_resource_quota
entity_field: namespace
plugin_id: field
name:
id: name
table: k8s_resource_quota
field: name
relationship: none
group_type: group
admin_label: ''
label: Name
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
entity_type: k8s_resource_quota
entity_field: name
plugin_id: field
created:
id: created
table: k8s_resource_quota
field: created
relationship: none
group_type: group
admin_label: ''
label: Created
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: timestamp
settings:
date_format: short
custom_date_format: ''
timezone: ''
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
entity_type: k8s_resource_quota
entity_field: created
plugin_id: field
operations:
id: operations
table: k8s_resource_quota
field: operations
relationship: none
group_type: group
admin_label: ''
label: 'Operations links'
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
destination: false
entity_type: null
entity_field: null
plugin_id: entity_operations
filters:
namespace:
id: namespace
table: k8s_resource_quota
field: namespace
relationship: none
group_type: group
admin_label: ''
operator: '='
value: ''
group: 1
exposed: true
expose:
operator_id: namespace_op
label: Namespace
description: ''
use_operator: false
operator: namespace_op
identifier: namespace
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
anonymous: '0'
administrator: '0'
placeholder: ''
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
entity_type: k8s_resource_quota
entity_field: namespace
plugin_id: string
sorts: { }
title: 'K8s Resource Quotas'
header: { }
footer: { }
empty: { }
relationships: { }
arguments:
cloud_context:
id: cloud_context
table: k8s_resource_quota
field: cloud_context
relationship: none
group_type: group
admin_label: ''
default_action: default
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: raw
default_argument_options:
index: 2
use_alias: false
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
glossary: false
limit: 0
case: none
path_case: none
transform_dash: false
break_phrase: false
entity_type: k8s_resource_quota
entity_field: cloud_context
plugin_id: string
display_extenders: { }
filter_groups:
operator: AND
groups: { }
cache_metadata:
max-age: 0
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- url.query_args
- user.permissions
tags: { }
list:
display_plugin: page
id: list
display_title: List
position: 1
display_options:
display_extenders: { }
path: clouds/k8s/%cloud_context/resource_quota
cache_metadata:
max-age: 0
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- url.query_args
- user.permissions
tags: { }
......@@ -21,3 +21,7 @@ views.field.cron_job_bulk_form:
views.field.job_bulk_form:
type: views_field_bulk_form
label: 'job bulk form'
views.field.resource_quota_bulk_form:
type: views_field_bulk_form
label: 'resource quota bulk form'
......@@ -202,3 +202,21 @@ function k8s_update_8212() {
];
cloud_update_yml_definitions($files, 'k8s');
}
/**
* Add entity type k8s_resource_quota and view k8s_resource_quota.
*/
function k8s_update_8213() {
// Add entity type k8s_resource_quota.
$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$entity_type = \Drupal::entityTypeManager()->getDefinition('k8s_resource_quota');
$definition_update_manager->uninstallEntityType($entity_type);
$definition_update_manager->installEntityType($entity_type);
// Add view k8s_resource_quota.
$files = [
'views.view.k8s_resource_quota.yml',
'system.action.k8s_resource_quota_delete_action.yml',
];
cloud_update_yml_definitions($files, 'k8s');
}
......@@ -238,3 +238,40 @@ entity.k8s_job.delete:
title: 'Delete'
appears_on:
- entity.k8s_job.canonical
####################
# K8s Resource Quota
####################
entity.k8s_resource_quota.add_form:
route_name: entity.k8s_resource_quota.add_form
title: 'Add K8s Resource Quota'
appears_on:
- view.k8s_resource_quota.list
entity.k8s_resource_quota.refresh:
route_name: entity.k8s_resource_quota.list_update
title: 'Refresh'
appears_on:
- view.k8s_resource_quota.list
entity.k8s_resource_quota.collection:
route_name: view.k8s_resource_quota.list
title: 'List K8s Resource Quotas'
appears_on:
- entity.k8s_resource_quota.add_form
- entity.k8s_resource_quota.edit_form
- entity.k8s_resource_quota.delete_form
- entity.k8s_resource_quota.canonical
entity.k8s_resource_quota.edit:
route_name: entity.k8s_resource_quota.edit_form
title: 'Edit'
appears_on:
- entity.k8s_resource_quota.canonical
entity.k8s_resource_quota.delete:
route_name: entity.k8s_resource_quota.delete_form
title: 'Delete'
appears_on:
- entity.k8s_resource_quota.canonical
......@@ -44,6 +44,12 @@ k8s.local_tasks.job:
base_route: 'k8s.local_tasks.cloud_context'
weight: 70
k8s.local_tasks.resource_quota:
title: 'Resource Quotas'
route_name: 'view.k8s_resource_quota.list'
base_route: 'k8s.local_tasks.cloud_context'
weight: 80
k8s.local_tasks.pod.view:
title: 'Info'
route_name: 'entity.k8s_pod.canonical'
......
......@@ -51,6 +51,7 @@ function k8s_update_resources($cloud_context) {
$k8s_service->updateServices();
$k8s_service->updateCronJobs();
$k8s_service->updateJobs();
$k8s_service->updateResourceQuotas();
}
/**
......@@ -315,6 +316,7 @@ function k8s_form_views_exposed_form_alter(&$form, FormStateInterface $form_stat
'views-exposed-form-k8s-service-list',
'views-exposed-form-k8s-cron-job-list',
'views-exposed-form-k8s-job-list',
'views-exposed-form-k8s-resource-quota-list',
])) {
return FALSE;
}
......
......@@ -138,3 +138,23 @@ edit k8s job:
delete k8s job:
title: 'Delete k8s job'
description: 'Allow users to delete k8s job'
############################
# K8s Resource Quota
############################
add k8s resource quota:
title: 'Add k8s resource quota'
description: 'Allow users to add k8s resource quota'
list k8s resource quota:
title: 'List k8s resource quota'
description: 'Allow users to list k8s resource quota'
view k8s resource quota:
title: 'View k8s resource quota'
description: 'Allow users to view k8s cron resource quota'
edit k8s resource quota:
title: 'Edit k8s resource quota'
description: 'Allow users to edit k8s resource quota'
delete k8s resource quota:
title: 'Delete k8s resource quota'
description: 'Allow users to delete k8s resource quota'
......@@ -94,6 +94,17 @@ entity.k8s_job.list_update:
options:
perm: 'edit k8s job'
entity.k8s_resource_quota.list_update:
path: '/clouds/k8s/{cloud_context}/resource_quota/update'
defaults:
_controller: '\Drupal\k8s\Controller\ApiController::updateResourceQuotaList'
requirements:
# Use custom access that will check for cloud_context and the desired permission.
# Desired permission is passed as an option in the "perm" variable
_custom_access: '\Drupal\cloud\Controller\CloudConfigController::access'
options:
perm: 'edit k8s resource quota'
entity.k8s_pod.log_form:
path: '/clouds/k8s/{cloud_context}/pod/{k8s_pod}/log'
defaults:
......
<?php
namespace Drupal\k8s\Plugin\Action;
use Drupal\Core\Action\Plugin\Action\DeleteAction;
/**
* Redirects to a Resource Quota form.
*
* @Action(
* id = "entity:delete_action:k8s_resource_quota",
* label = @Translation("Delete Resource Quota"),
* type = "k8s_resource_quota"
* )
*/
class DeleteResourceQuota extends DeleteAction {
}
......@@ -126,6 +126,13 @@ class ApiController extends ControllerBase implements ApiControllerInterface {
return $this->updateEntityList('job', $cloud_context);
}
/**
* {@inheritdoc}
*/
public function updateResourceQuotaList($cloud_context) {
return $this->updateEntityList('resource_quota', $cloud_context);
}
/**
* Helper method to update entities.
*
......
......@@ -84,4 +84,15 @@ interface ApiControllerInterface {
*/
public function updateJobList($cloud_context);
/**
* Update all resource quotas.
*
* @param string $cloud_context
* Cloud context string.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* A redirect response object that may be returned by the controller.
*/
public function updateResourceQuotaList($cloud_context);
}
<?php
namespace Drupal\k8s\Controller;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\cloud\Traits\AccessCheckTrait;
/**
* Access controller for the Resource Quota entity.
*
* @see \Drupal\k8s\Entity\K8sResourceQuota.
*/
class K8sResourceQuotaAccessControlHandler extends EntityAccessControlHandler {
use AccessCheckTrait;
/**
* {@inheritdoc}
*/
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
$view_namespace_perm = 'view k8s namespace ' . $entity->getNamespace();
switch ($operation) {
case 'view':
return $this->allowedIfCanAccessCloudConfig(
$entity,
$account,
[$view_namespace_perm, 'view k8s resource quota']
);
case 'update':
case 'edit':
return $this->allowedIfCanAccessCloudConfig(
$entity,
$account,
[$view_namespace_perm, 'edit k8s resource quota']
);
case 'delete':
return $this->allowedIfCanAccessCloudConfig(
$entity,
$account,
[$view_namespace_perm, 'delete k8s resource quota']
);
}
// Unknown operation, no opinion.
return AccessResult::neutral();
}
/**
* {@inheritdoc}
*/
protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
return $this->allowedIfCanAccessCloudConfig(
NULL,
$account,
'add k8s resource quota'
);
}
}
<?php
namespace Drupal\k8s\Entity;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Defines the Resource Quota entity.
*
* @ingroup k8s
*
* @ContentEntityType(
* id = "k8s_resource_quota",
* label = @Translation("Kubernetes Resource Quota"),
* handlers = {
* "view_builder" = "Drupal\k8s\Entity\K8sResourceQuotaViewBuilder",
* "list_builder" = "Drupal\cloud\Controller\CloudContentListBuilder",
* "views_data" = "Drupal\k8s\Entity\K8sResourceQuotaViewsData",
* "access" = "Drupal\k8s\Controller\K8sResourceQuotaAccessControlHandler",
* "form" = {
* "add" = "Drupal\k8s\Form\K8sResourceQuotaCreateForm",
* "edit" = "Drupal\k8s\Form\K8sResourceQuotaEditForm",
* "delete" = "Drupal\k8s\Form\K8sResourceQuotaDeleteForm",
* "delete-multiple-confirm" = "Drupal\k8s\Form\K8sResourceQuotaDeleteMultipleForm",
* },
* "route_provider" = {
* "html" = "Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider",
* },
* },
* base_table = "k8s_resource_quota",
* admin_permission = "administer k8s resource quota",
* fieldable = TRUE,
* entity_keys = {
* "id" = "id",
* "label" = "name",
* "uuid" = "uuid",
* },
* links = {
* "canonical" = "/clouds/k8s/{cloud_context}/resource_quota/{k8s_resource_quota}",
* "collection" = "/clouds/k8s/{cloud_context}/resource_quota",
* "add-form" = "/clouds/k8s/{cloud_context}/resource_quota/add",
* "edit-form" = "/clouds/k8s/{cloud_context}/resource_quota/{k8s_resource_quota}/edit",
* "delete-form" = "/clouds/k8s/{cloud_context}/resource_quota/{k8s_resource_quota}/delete",
* "delete-multiple-form" = "/clouds/k8s/{cloud_context}/resource_quota/delete_multiple",
* },
* field_ui_base_route = "k8s_resource_quota.settings"
* )
*/
class K8sResourceQuota extends CloudContentEntityBase implements K8sResourceQuotaInterface {
/**
* {@inheritdoc}
*/
public function getName() {
return $this->get('name')->value;
}
/**
* {@inheritdoc}
*/
public function setName($name) {
return $this->set('name', $name);
}
/**
* {@inheritdoc}
*/
public function getNamespace() {
return $this->get('namespace')->value;
}
/**
* {@inheritdoc}
*/
public function setNamespace($namespace) {
return $this->set('namespace', $namespace);
}
/**
* {@inheritdoc}
*/
public function getLabels() {
return $this->get('labels');
}
/**
* {@inheritdoc}
*/
public function setLabels($labels) {
return $this->set('labels', $labels);
}
/**
* {@inheritdoc}
*/
public function getAnnotations() {
return $this->get('annotations');
}
/**
* {@inheritdoc}
*/
public function setAnnotations($annotations) {
return $this->set('annotations', $annotations);
}
/**
* {@inheritdoc}
*/
public function getStatusHard() {
return $this->get('status_hard');
}
/**
* {@inheritdoc}
*/
public function setStatusHard($status_hard) {
return $this->set('status_hard', $status_hard);
}
/**
* {@inheritdoc}
*/
public function getStatusUsed() {
return $this->get('status_used');
}
/**
* {@inheritdoc}
*/
public function setStatusUsed($status_used) {
return $this->set('status_used', $status_used);
}
/**
* {@inheritdoc}
*/
public function getDetail() {
return $this->get('detail')->value;
}
/**
* {@inheritdoc}
*/
public function setDetail($detail) {
return $this->set('detail', $detail);
}
/**
* {@inheritdoc}
*/
public function getRefreshed() {
return $this->get('refreshed')->value;
}
/**
* {@inheritdoc}
*/
public function setRefreshed($time) {
return $this->set('refreshed', $time);
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields['id'] = BaseFieldDefinition::create('integer')
->setLabel(t('ID'))
->setDescription(t('The ID of the Resource Quota entity.'))
->setReadOnly(TRUE);
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The UUID of the Resource Quota entity.'))
->setReadOnly(TRUE);
$fields['cloud_context'] = BaseFieldDefinition::create('string')
->setRequired(TRUE)
->setLabel(t('Cloud ID'))
->setDescription(t('A unique machine name for the cloud provider.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'string',
'weight' => -5,
]);
$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The resource quota name.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'string',
'weight' => -5,
])
->setReadOnly(TRUE);
$fields['namespace'] = BaseFieldDefinition::create('string')
->setLabel(t('Namespace'))
->setDescription(t('The namespace of resource quota.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'string',
'weight' => -5,
])
->setReadOnly(TRUE);
$fields['labels'] = BaseFieldDefinition::create('key_value')
->setLabel(t('Labels'))
->setDescription(t('Map of string keys and values that can be used to organize and categorize (scope and select) objects.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setDisplayOptions('view', [
'type' => 'key_value_formatter',
'weight' => -5,
]);
$fields['annotations'] = BaseFieldDefinition::create('key_value')
->setLabel(t('Annotations'))
->setDescription(t('Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setSetting('max_length', 4096)
->setDisplayOptions('view', [
'type' => 'key_value_formatter',
'weight' => -5,
]);
$fields['status_hard'] = BaseFieldDefinition::create('key_value')
->setLabel(t('Hard (status)'))
->setDescription(t('Hard is the set of enforced hard limits for each named resource.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setDisplayOptions('view', [
'type' => 'key_value_formatter',
'weight' => -5,
]);
$fields['status_used'] = BaseFieldDefinition::create('key_value')
->setLabel(t('Used (status)'))
->setDescription(t('Used is the current observed total usage of the resource in the namespace.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setDisplayOptions('view', [
'type' => 'key_value_formatter',
'weight' => -5,
]);
$fields['detail'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Detail'))
->setDescription(t('Resource Quota detail.'))
->setRequired(TRUE)
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'pre_string_formatter',
'weight' => -5,
])
->setDisplayOptions('form', [
'type' => 'string_textarea',
'settings' => [
'rows' => 20,
],
])
->addConstraint('yaml_array_data');
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the entity was created.'));
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the entity was last edited.'));
$fields['refreshed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Refreshed'))
->setDescription(t('The time that the entity was last refreshed.'));
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The user ID of the Pod entity author.'))
->setRevisionable(TRUE)
->setSetting('target_type', 'user')
->setSetting('handler', 'default')
->setDefaultValueCallback('Drupal\node\Entity\Node::getCurrentUserId')
->setTranslatable(TRUE)
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'author',
'weight' => 0,
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => 5,
'settings' => [
'match_operator' => 'CONTAINS',
'size' => '60',
'autocomplete_type' => 'tags',
'placeholder' => '',
],
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
return $fields;
}
}
<?php
namespace Drupal\k8s\Entity;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\user\EntityOwnerInterface;
/**
* Provides an interface defining a Resource Quota entity.
*
* @ingroup k8s
*/
interface K8sResourceQuotaInterface extends ContentEntityInterface, EntityOwnerInterface {
/**
* {@inheritdoc}
*/
public function getCloudContext();
/**
* {@inheritdoc}
*/
public function getName();
/**
* {@inheritdoc}
*/
public function setName($name);
/**
* {@inheritdoc}
*/
public function getNamespace();
/**
* {@inheritdoc}
*/
public function setNamespace($namespace);
/**
* {@inheritdoc}
*/
public function getLabels();
/**
* {@inheritdoc}
*/
public function setLabels($labels);
/**
* {@inheritdoc}
*/
public function getAnnotations();
/**
* {@inheritdoc}
*/
public function setAnnotations($annotations);
/**
* {@inheritdoc}
*/
public function getStatusHard();
/**
* {@inheritdoc}
*/
public function setStatusHard($status_hard);
/**
* {@inheritdoc}
*/
public function getStatusUsed();
/**
* {@inheritdoc}
*/
public function setStatusUsed($status_used);
/**
* {@inheritdoc}
*/
public function getDetail();
/**
* {@inheritdoc}
*/
public function setDetail($detail);
/**
* {@inheritdoc}
*/
public function created();
/**
* {@inheritdoc}
*/
public function changed();
/**
* {@inheritdoc}
*/
public function getRefreshed();
/**
* {@inheritdoc}
*/
public function setRefreshed($time);
}
<?php
namespace Drupal\k8s\Entity;
use Drupal\cloud\Entity\CloudViewBuilder;
/**
* Provides the resource quota view builders.
*/
class K8sResourceQuotaViewBuilder extends CloudViewBuilder {
/**
* {@inheritdoc}
*/
protected function getFieldsetDefs() {
return [
[
'name' => 'resource_quota',
'title' => t('Resource Quota'),
'open' => TRUE,
'fields' => [
'name',
'namespace',
'created',
'labels',
'annotations',
],
],
[
'name' => 'status',
'title' => t('Status'),
'open' => TRUE,
'fields' => [
'status_hard',
'status_used',
],
],
[
'name' => 'resource_quota_detail',
'title' => t('Detail'),
'open' => FALSE,
'fields' => [
'detail',
],
],
[
'name' => 'others',
'title' => t('Others'),
'open' => FALSE,
'fields' => [
'cloud_context',
'uid',
],
],
];
}
}
<?php
namespace Drupal\k8s\Entity;
use Drupal\views\EntityViewsData;
/**
* Provides the views data for the Resource Quota entity type.
*/
class K8sResourceQuotaViewsData extends EntityViewsData {
/**
* {@inheritdoc}
*/
public function getViewsData() {
$data = parent::getViewsData();
$data['k8s_resource_quota']['resource_quota_bulk_form'] = [
'title' => $this->t('Resource Quota operations bulk form'),
'help' => $this->t('Add a form element that lets you run operations on multiple Resource Quotas.'),
'field' => [
'id' => 'resource_quota_bulk_form',
],
];
// Additional information for Views integration, such as table joins, can be
// put here.
$data['k8s_resource_quota']['table']['base']['access query tag'] = 'k8s_entity_views_access_with_namespace';
return $data;
}
}
......@@ -9,7 +9,7 @@ use Drupal\k8s\Service\K8sServiceException;
/**
* Form controller for the Namespace entity edit forms.
*
* @ingroup aws_cloud
* @ingroup k8s
*/
class K8sCronJobEditForm extends K8sContentForm {
......
......@@ -9,7 +9,7 @@ use Drupal\k8s\Service\K8sServiceException;
/**
* Form controller for the Namespace entity edit forms.
*
* @ingroup aws_cloud
* @ingroup k8s
*/
class K8sDeploymentEditForm extends K8sContentForm {
......
......@@ -9,7 +9,7 @@ use Drupal\k8s\Service\K8sServiceException;
/**
* Form controller for the Namespace entity edit forms.
*
* @ingroup aws_cloud
* @ingroup k8s
*/
class K8sJobEditForm extends K8sContentForm {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment