Configuration
Certain aspects of the TUI can be configured using configuration file.
Config file can be in the yaml or json format and placed under
XDG_CONFIG_HOME/openstack_tui
named as config.yaml
or views.yaml
.
It is possible to split configuration parts into dediated files (i.e.
views.yaml
for configuring views). Files are merged in no particular order
(in difference to the clouds.yaml/secure.yaml
) so it is not possible to
predict the behavior when configuration option is being set in different files
with different value.
Default config
---
# Mode keybindings in the following form
# <Mode>:
# <shortcut>:
# action: <ACTION TO PERFORM>
# description: <DESCRIPTION USED IN TUI>
mode_keybindings:
Home: {}
# Block Storage views
BlockStorageBackups:
"y":
action: DescribeApiResponse
description: YAML
BlockStorageSnapshots:
"y":
action: DescribeApiResponse
description: YAML
BlockStorageVolumes:
"y":
action: DescribeApiResponse
description: YAML
"ctrl-d":
action: DeleteBlockStorageVolume
description: Delete
# Compute views
ComputeAggregates:
"y":
action: DescribeApiResponse
description: YAML
ComputeServers:
"y":
action: DescribeApiResponse
description: YAML
"0":
action:
SetComputeServerListFilters: {}
description: Default filters
type: Filter
"1":
action:
SetComputeServerListFilters: {"all_tenants": "true"}
description: All tenants (admin)
type: Filter
"ctrl-d":
action: DeleteComputeServer
description: Delete
"c":
action: ShowServerConsoleOutput
description: Console output
"a":
action: ShowComputeServerInstanceActions
description: Instance actions
ComputeServerInstanceActions:
"y":
action: DescribeApiResponse
description: YAML
"e":
action: ShowComputeServerInstanceActionEvents
description: Events
ComputeFlavors:
"y":
action: DescribeApiResponse
description: YAML
"s":
action: ShowComputeServersWithFlavor
description: Servers
ComputeHypervisors:
"y":
action: DescribeApiResponse
description: YAML
# DNS views
DnsRecordsets:
"y":
action: DescribeApiResponse
description: YAML
"0":
action:
SetDnsRecordsetListFilters: {}
description: Default filters
type: Filter
DnsZones:
"y":
action: DescribeApiResponse
description: YAML
"<enter>":
action: ShowDnsZoneRecordsets
description: Recordsets
"ctrl-d":
action: DeleteDnsZone
description: Delete
# Identity views
IdentityApplicationCredentials:
"y":
action: DescribeApiResponse
description: YAML
IdentityGroups:
"y":
action: DescribeApiResponse
description: YAML
"u":
action: ShowIdentityGroupUsers
description: Group users
"d":
action: IdentityGroupDelete
description: Delete (todo!)
"a":
action: IdentityGroupCreate
description: Create new group (todo!)
IdentityGroupUsers:
"y":
action: DescribeApiResponse
description: YAML
"a":
action: IdentityGroupUserAdd
description: Add new user into group (todo!)
"r":
action: IdentityGroupUserRemove
description: Remove user from group (todo!)
IdentityProjects:
"y":
action: DescribeApiResponse
description: YAML
"s":
action: SwitchToProject
description: Switch to project
IdentityUsers:
"y":
action: DescribeApiResponse
description: YAML
"ctrl-d":
action: IdentityUserDelete
description: Delete
"e":
action: IdentityUserFlipEnable
description: Enable/Disable user
"a":
action: IdentityUserCreate
description: Create new user (todo!)
"p":
action: IdentityUserSetPassword
description: Set user password (todo!)
"c":
action: ShowIdentityUserApplicationCredentials
description: Application credentials
# Image views
ImageImages:
"y":
action: DescribeApiResponse
description: YAML
"0":
action:
SetImageListFilters: {}
description: Default filters
type: Filter
"1":
action:
SetImageListFilters: {"visibility": "public"}
description: public
type: Filter
"2":
action:
SetImageListFilters: {"visibility": "shared"}
description: shared
type: Filter
"3":
action:
SetImageListFilters: {"visibility": "private"}
description: private
type: Filter
"ctrl-d":
action: DeleteImage
description: Delete
# LoadBalancer views
LoadBalancers:
"y":
action: DescribeApiResponse
description: YAML
"l":
action: ShowLoadBalancerListeners
description: Listeners
"p":
action: ShowLoadBalancerPools
description: Pools
LoadBalancerListeners:
"y":
action: DescribeApiResponse
description: YAML
LoadBalancerPools:
"y":
action: DescribeApiResponse
description: YAML
"<enter>":
action: ShowLoadBalancerPoolMembers
description: Members
"h":
action: ShowLoadBalancerPoolHealthMonitors
description: HealthMonitors
LoadBalancerPoolMembers:
"y":
action: DescribeApiResponse
description: YAML
LoadBalancerHealthMonitors:
"y":
action: DescribeApiResponse
description: YAML
# Network views
NetworkNetworks:
"y":
action: DescribeApiResponse
description: YAML
"<enter>":
action: ShowNetworkSubnets
description: Subnets
NetworkRouters:
"y":
action: DescribeApiResponse
description: YAML
NetworkSubnets:
"y":
action: DescribeApiResponse
description: YAML
"0":
action:
SetNetworkSubnetListFilters: {}
description: All
type: Filter
NetworkSecurityGroups:
"y":
action: DescribeApiResponse
description: YAML
"<enter>":
action: ShowNetworkSecurityGroupRules
description: Rules
NetworkSecurityGroupRules:
"y":
action: DescribeApiResponse
description: YAML
"0":
action:
SetNetworkSecurityGroupRuleListFilters: {}
description: All
type: Filter
# Global keybindings
# <KEYBINDING>:
# action: <ACTION>
# description: <TEXT>
global_keybindings:
"<q>":
action: Quit
description: Quit
"<Ctrl-c>":
action: Quit
description: Quit
"<Ctrl-z>":
action: Suspend
description: Suspend
"F1":
action:
Mode:
mode: Home
stack: false
description: Home
"F2":
action: CloudSelect
description: Select cloud
":":
action: ApiRequestSelect
description: Select resource
"<F4>":
action: SelectProject
description: Select project
"<ctrl-r>":
action: Refresh
description: Reload data
# Mode aliases
# <ALIAS>: <MODE>
mode_aliases:
"aggregates (compute)": "ComputeAggregates"
"application credentials (identity)": "IdentityApplicationCredentials"
"backups": "BlockStorageBackups"
"flavors": "ComputeFlavors"
"groups (identity)": "IdentityGroups"
"host-aggregates (compute)": "ComputeAggregates"
"hypervisors (compute)": "ComputeHypervisors"
"images": "ImageImages"
"loadbalancers": "LoadBalancers"
"lb (loadbalancers)": "LoadBalancers"
"listeners (loadbalancer)": "LoadBalancerListeners"
"lbl (loadbalancer listeners)": "LoadBalancerListeners"
"pool (loadbalancer)": "LoadBalancerPools"
"lbp (loadbalancer pools)": "LoadBalancerPools"
"healthmonitors (loadbalancer)": "LoadBalancerHealthMonitors"
"lbhm (loadbalancer health monitors)": "LoadBalancerHealthMonitors"
"nets": "NetworkNetworks"
"networks": "NetworkNetworks"
"projects": "IdentityProjects"
"recordsets (dns)": "DnsRecordsets"
"routers": "NetworkRouters"
"security groups (network)": "NetworkSecurityGroups"
"security group rules (network)": "NetworkSecurityGroupRules"
"servers": "ComputeServers"
"sg": "NetworkSecurityGroups"
"sgr": "NetworkSecurityGroupRules"
"snapshots": "BlockStorageSnapshots"
"subnets (network)": "NetworkSubnets"
"volumes": "BlockStorageVolumes"
"users": "IdentityUsers"
"zones (dns)": "DnsZones"
# View output
# <RESOURCE_KEY>:
# fields: <ARRAY OF COLUMNS TO SHOW>
# wide: true
views:
# Block Storage
block_storage.backup:
default_fields: [id, name, az, size, status, created_at]
block_storage.snapshots:
default_fields: [id, name, status, created_at]
block_storage.volume:
default_fields: [id, name, az, size, status, updated_at]
# compute
compute.aggregate:
default_fields: [name, uuid, az, updated_at]
compute.flavor:
default_fields: [id, name, vcpus, ram, disk, swap]
compute.hypervisor:
default_fields: [ip, hostname, status, state]
compute.server/instance_action/event:
default_fields: [event, result, start_time, finish_time, host]
compute.server/instance_action:
default_fields: [id, action, message, start_time, user_id]
compute.server:
default_fields: [id, name, flavor, status, created, updated]
fields:
- name: flavor
json_pointer: "/original_name"
# dns
dns.recordset:
default_fields: [name, status, type, created, updated]
dns.zone:
default_fields: [name, status, type, email, created, updated]
# identity
identity.group:
default_fields: [id, name, domain, description]
identity.project:
default_fields: [id, name, parent_id, enabled, domain_id]
identity.user/application_credential:
default_fields: [id, name, expires_at, unrestricted, description]
identity.user:
default_fields: [name, enabled, password_expires_at]
# image
image.image:
default_fields: [id, name, distro, version, visibility, min_disk, min_ram]
# load balancer
load-balancer.healthmonitor:
default_fields: [id, name, status, type]
load-balancer.listener:
default_fields: [id, name, status, protocol, port]
load-balancer.loadbalancer:
default_fields: [id, name, status, address]
load-balancer.pool/member:
default_fields: [id, name, status, port]
load-balancer.pool:
default_fields: [id, name, status, protocol]
# network
network.network:
default_fields: [id, name, status, description, created_at, updated_at]
network.router:
default_fields: [id, name, status, description, created_at, updated_at]
network.subnet:
default_fields: [id, name, cidr, description, created_at]
network.security_group_rule:
default_fields: [id, ethertype, direction, protocol, port_range_min, port_range_max, description]
network.security_group:
default_fields: [id, name, description, created_at, updated_at, description]
Views configuration
Every resource view can be configured in a separate section of the config.
Resource key in a form fields
is an array of field names to be
populated. All column names are forcibly converted to the UPPER CASE.
Resource view options
-
default_fields (list[str])
A list of fields to be displayed by default (in not wide mode). If not specified, only certain fields determined internally are displayed. Output columns are sorted in the order given in the list.
-
wide (bool)
If set to true, display all fields. If set to false, display only the default_fields.
-
fields (list[obj])
A list of column configuration. Consists of:
-
name (str) - field name (resource attribute name)
-
width (int) - column width in characters
-
min_width (int) - minimum column width in characters
-
max_width (int) - maximum column width in characters
-
json_pointer (str) - JSON pointer to the extract from the resource field. This is only applied in the list and not
wide
mode.
-