`lxc list` does not respect filtering when JSON or YAML output is being used
Required information
- Distribution: Debian GNU/Linux
- Distribution version: 11
- The output of "lxc info" or if that fails:
Expand for the full output
config:
core.https_address: 127.0.0.1
api_extensions:
- storage_zfs_remove_snapshots
- container_host_shutdown_timeout
- container_stop_priority
- container_syscall_filtering
- auth_pki
- container_last_used_at
- etag
- patch
- usb_devices
- https_allowed_credentials
- image_compression_algorithm
- directory_manipulation
- container_cpu_time
- storage_zfs_use_refquota
- storage_lvm_mount_options
- network
- profile_usedby
- container_push
- container_exec_recording
- certificate_update
- container_exec_signal_handling
- gpu_devices
- container_image_properties
- migration_progress
- id_map
- network_firewall_filtering
- network_routes
- storage
- file_delete
- file_append
- network_dhcp_expiry
- storage_lvm_vg_rename
- storage_lvm_thinpool_rename
- network_vlan
- image_create_aliases
- container_stateless_copy
- container_only_migration
- storage_zfs_clone_copy
- unix_device_rename
- storage_lvm_use_thinpool
- storage_rsync_bwlimit
- network_vxlan_interface
- storage_btrfs_mount_options
- entity_description
- image_force_refresh
- storage_lvm_lv_resizing
- id_map_base
- file_symlinks
- container_push_target
- network_vlan_physical
- storage_images_delete
- container_edit_metadata
- container_snapshot_stateful_migration
- storage_driver_ceph
- storage_ceph_user_name
- resource_limits
- storage_volatile_initial_source
- storage_ceph_force_osd_reuse
- storage_block_filesystem_btrfs
- resources
- kernel_limits
- storage_api_volume_rename
- macaroon_authentication
- network_sriov
- console
- restrict_devlxd
- migration_pre_copy
- infiniband
- maas_network
- devlxd_events
- proxy
- network_dhcp_gateway
- file_get_symlink
- network_leases
- unix_device_hotplug
- storage_api_local_volume_handling
- operation_description
- clustering
- event_lifecycle
- storage_api_remote_volume_handling
- nvidia_runtime
- container_mount_propagation
- container_backup
- devlxd_images
- container_local_cross_pool_handling
- proxy_unix
- proxy_udp
- clustering_join
- proxy_tcp_udp_multi_port_handling
- network_state
- proxy_unix_dac_properties
- container_protection_delete
- unix_priv_drop
- pprof_http
- proxy_haproxy_protocol
- network_hwaddr
- proxy_nat
- network_nat_order
- container_full
- candid_authentication
- backup_compression
- candid_config
- nvidia_runtime_config
- storage_api_volume_snapshots
- storage_unmapped
- projects
- candid_config_key
- network_vxlan_ttl
- container_incremental_copy
- usb_optional_vendorid
- snapshot_scheduling
- snapshot_schedule_aliases
- container_copy_project
- clustering_server_address
- clustering_image_replication
- container_protection_shift
- snapshot_expiry
- container_backup_override_pool
- snapshot_expiry_creation
- network_leases_location
- resources_cpu_socket
- resources_gpu
- resources_numa
- kernel_features
- id_map_current
- event_location
- storage_api_remote_volume_snapshots
- network_nat_address
- container_nic_routes
- rbac
- cluster_internal_copy
- seccomp_notify
- lxc_features
- container_nic_ipvlan
- network_vlan_sriov
- storage_cephfs
- container_nic_ipfilter
- resources_v2
- container_exec_user_group_cwd
- container_syscall_intercept
- container_disk_shift
- storage_shifted
- resources_infiniband
- daemon_storage
- instances
- image_types
- resources_disk_sata
- clustering_roles
- images_expiry
- resources_network_firmware
- backup_compression_algorithm
- ceph_data_pool_name
- container_syscall_intercept_mount
- compression_squashfs
- container_raw_mount
- container_nic_routed
- container_syscall_intercept_mount_fuse
- container_disk_ceph
- virtual-machines
- image_profiles
- clustering_architecture
- resources_disk_id
- storage_lvm_stripes
- vm_boot_priority
- unix_hotplug_devices
- api_filtering
- instance_nic_network
- clustering_sizing
- firewall_driver
- projects_limits
- container_syscall_intercept_hugetlbfs
- limits_hugepages
- container_nic_routed_gateway
- projects_restrictions
- custom_volume_snapshot_expiry
- volume_snapshot_scheduling
- trust_ca_certificates
- snapshot_disk_usage
- clustering_edit_roles
- container_nic_routed_host_address
- container_nic_ipvlan_gateway
- resources_usb_pci
- resources_cpu_threads_numa
- resources_cpu_core_die
- api_os
- container_nic_routed_host_table
- container_nic_ipvlan_host_table
- container_nic_ipvlan_mode
- resources_system
- images_push_relay
- network_dns_search
- container_nic_routed_limits
- instance_nic_bridged_vlan
- network_state_bond_bridge
- usedby_consistency
- custom_block_volumes
- clustering_failure_domains
- resources_gpu_mdev
- console_vga_type
- projects_limits_disk
- network_type_macvlan
- network_type_sriov
- container_syscall_intercept_bpf_devices
- network_type_ovn
- projects_networks
- projects_networks_restricted_uplinks
- custom_volume_backup
- backup_override_name
- storage_rsync_compression
- network_type_physical
- network_ovn_external_subnets
- network_ovn_nat
- network_ovn_external_routes_remove
- tpm_device_type
- storage_zfs_clone_copy_rebase
- gpu_mdev
- resources_pci_iommu
- resources_network_usb
- resources_disk_address
- network_physical_ovn_ingress_mode
- network_ovn_dhcp
- network_physical_routes_anycast
- projects_limits_instances
- network_state_vlan
- instance_nic_bridged_port_isolation
- instance_bulk_state_change
- network_gvrp
- instance_pool_move
- gpu_sriov
- pci_device_type
- storage_volume_state
- network_acl
- migration_stateful
- disk_state_quota
- storage_ceph_features
- projects_compression
- projects_images_remote_cache_expiry
- certificate_project
- network_ovn_acl
- projects_images_auto_update
- projects_restricted_cluster_target
- images_default_architecture
- network_ovn_acl_defaults
- gpu_mig
- project_usage
- network_bridge_acl
- warnings
- projects_restricted_backups_and_snapshots
- clustering_join_token
- clustering_description
- server_trusted_proxy
- clustering_update_cert
- storage_api_project
- server_instance_driver_operational
- server_supported_storage_drivers
- event_lifecycle_requestor_address
- resources_gpu_usb
- clustering_evacuation
- network_ovn_nat_address
- network_bgp
- network_forward
- custom_volume_refresh
- network_counters_errors_dropped
- metrics
- image_source_project
- clustering_config
- network_peer
- linux_sysctl
- network_dns
- ovn_nic_acceleration
- certificate_self_renewal
- instance_project_move
- storage_volume_project_move
- cloud_init
- network_dns_nat
- database_leader
- instance_all_projects
- clustering_groups
- ceph_rbd_du
- instance_get_full
- qemu_metrics
- gpu_mig_uuid
- event_project
- clustering_evacuation_live
- instance_allow_inconsistent_copy
- network_state_ovn
- storage_volume_api_filtering
- image_restrictions
- storage_zfs_export
- network_dns_records
- storage_zfs_reserve_space
- network_acl_log
- storage_zfs_blocksize
- metrics_cpu_seconds
- instance_snapshot_never
- certificate_token
- instance_nic_routed_neighbor_probe
- event_hub
- agent_nic_config
- projects_restricted_intercept
- metrics_authentication
- images_target_project
- cluster_migration_inconsistent_copy
- cluster_ovn_chassis
- container_syscall_intercept_sched_setscheduler
- storage_lvm_thinpool_metadata_size
- storage_volume_state_total
- instance_file_head
- instances_nic_host_name
- image_copy_profile
- container_syscall_intercept_sysinfo
- clustering_evacuation_mode
api_status: stable
api_version: "1.0"
auth: trusted
public: false
auth_methods:
- tls
environment:
addresses:
- 127.0.0.1:8443
architectures:
- x86_64
- i686
certificate: |
-----BEGIN CERTIFICATE-----
MIICCDCCAY2gAwIBAgIRAMWgBXs4ePN18bALIodKjPEwCgYIKoZIzj0EAwMwNTEc
MBoGA1UEChMTbGludXhjb250YWluZXJzLm9yZzEVMBMGA1UEAwwMcm9vdEBhbGxh
ZGluMB4XDTIxMDkwMzA1NTc1NloXDTMxMDkwMTA1NTc1NlowNTEcMBoGA1UEChMT
bGludXhjb250YWluZXJzLm9yZzEVMBMGA1UEAwwMcm9vdEBhbGxhZGluMHYwEAYH
KoZIzj0CAQYFK4EEACIDYgAEQEip/SgQXvi0cEjvvXrn8R9a7d2T16cnd5NcTq2Q
U6tcIoU6XlLqWMwEaDgOFeaHOQE29P5+cSsbhTxIfQHQg9/Jg8H4xsTy0mwed0ug
wzdLDB9FKeCFUN44NiSEdbb3o2EwXzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAww
CgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAqBgNVHREEIzAhggdhbGxhZGluhwR/
AAABhxAAAAAAAAAAAAAAAAAAAAABMAoGCCqGSM49BAMDA2kAMGYCMQCLCIHI6XyJ
jmk5/t002rSxOC8GIMbr6gsqlNKtGH9LX21njYtF5MQ+1nD8aLjMNA0CMQDQnSUU
6FwaiTAVP4lPzZiTWfgAdgJlnXQxN/HPVt8IuELlXuxY4A+KG95+6w9IsJw=
-----END CERTIFICATE-----
certificate_fingerprint: 8ed1a33b3fb2d979ae9ed524a3752530bd334de17644bc0534b8dafc6340c246
driver: lxc | qemu
driver_version: 4.0.12 | 6.1.1
firewall: nftables
kernel: Linux
kernel_architecture: x86_64
kernel_features:
idmapped_mounts: "false"
netnsid_getifaddrs: "true"
seccomp_listener: "true"
seccomp_listener_continue: "true"
shiftfs: "false"
uevent_injection: "true"
unpriv_fscaps: "true"
kernel_version: 5.10.0-8-amd64
lxc_features:
cgroup2: "true"
core_scheduling: "true"
devpts_fd: "true"
idmapped_mounts_v2: "true"
mount_injection_file: "true"
network_gateway_device_route: "true"
network_ipvlan: "true"
network_l2proxy: "true"
network_phys_macvlan_mtu: "true"
network_veth_router: "true"
pidfd: "true"
seccomp_allow_deny_syntax: "true"
seccomp_notify: "true"
seccomp_proxy_send_notify_fd: "true"
os_name: Debian GNU/Linux
os_version: "11"
project: default
server: lxd
server_clustered: false
server_event_mode: full-mesh
server_name: alladin
server_pid: 669213
server_version: "5.1"
storage: dir
storage_version: "1"
storage_supported_drivers:
- name: lvm
version: 2.03.07(2) (2019-11-30) / 1.02.167 (2019-11-30) / 4.43.0
remote: false
- name: ceph
version: 15.2.16
remote: true
- name: btrfs
version: 5.4.1
remote: false
- name: cephfs
version: 15.2.16
remote: true
- name: dir
version: "1"
remote: false
Issue description
I just noticed that lxc list behaves differently depending on the output format selected. The IP address 192.168.97.58 refers to a nonexistent container on my machine.
In table (default), CSV and compact modes, it behaves correctly:
$ lxc list ipv4=192.168.97.58
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
$ lxc list ipv4=192.168.97.58 -f csv
$ lxc list ipv4=192.168.97.58 -f compact
NAME STATE IPV4 IPV6 TYPE SNAPSHOTS
But if I switch to either JSON mode or YAML mode, it ignores the filter altogether. Note how the outputted container has IP address 192.168.97.59, not 192.168.97.58.
$ lxc list ipv4=192.168.97.58 -f yaml
- architecture: x86_64
config:
image.architecture: amd64
image.description: ubuntu 22.04 LTS amd64 (release) (20220506)
image.label: release
image.os: ubuntu
image.release: jammy
image.serial: "20220506"
image.type: squashfs
image.version: "22.04"
volatile.base_image: dda8ea8622eab3df7f71b274a436ee972610efc85d66e0fee14bdb3b4d492072
volatile.cloud-init.instance-id: 8e236150-1e86-4036-a3bd-d4b3974737be
volatile.eth0.host_name: veth160350ef
volatile.eth0.hwaddr: 00:16:3e:94:33:0b
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.power: RUNNING
volatile.uuid: accd6a64-bb9b-4367-9642-08c22ca4a6ee
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""
created_at: 2022-05-12T05:39:03.074486106Z
expanded_config:
image.architecture: amd64
image.description: ubuntu 22.04 LTS amd64 (release) (20220506)
image.label: release
image.os: ubuntu
image.release: jammy
image.serial: "20220506"
image.type: squashfs
image.version: "22.04"
volatile.base_image: dda8ea8622eab3df7f71b274a436ee972610efc85d66e0fee14bdb3b4d492072
volatile.cloud-init.instance-id: 8e236150-1e86-4036-a3bd-d4b3974737be
volatile.eth0.host_name: veth160350ef
volatile.eth0.hwaddr: 00:16:3e:94:33:0b
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
volatile.last_state.power: RUNNING
volatile.uuid: accd6a64-bb9b-4367-9642-08c22ca4a6ee
expanded_devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: master-newt
status: Running
status_code: 103
last_used_at: 2022-05-12T05:39:08.241626008Z
location: none
type: container
project: default
backups: []
state:
status: Running
status_code: 103
disk: {}
memory:
usage: 173330432
usage_peak: 0
swap_usage: 0
swap_usage_peak: 0
network:
eth0:
addresses:
- family: inet
address: 192.168.97.59
netmask: "24"
scope: global
- family: inet6
address: fd42:ca9f:e5d0:40b7:a0a4:76ff:fe9b:a2c2
netmask: "64"
scope: global
- family: inet6
address: fe80::a0a4:76ff:fe9b:a2c2
netmask: "64"
scope: link
counters:
bytes_received: 36742
bytes_sent: 12546
packets_received: 138
packets_sent: 85
errors_received: 0
errors_sent: 0
packets_dropped_outbound: 0
packets_dropped_inbound: 0
hwaddr: a2:a4:76:9b:a2:c2
host_name: veth160350ef
mtu: 1500
state: up
type: broadcast
lo:
addresses:
- family: inet
address: 127.0.0.1
netmask: "8"
scope: local
- family: inet6
address: ::1
netmask: "128"
scope: local
counters:
bytes_received: 1436
bytes_sent: 1436
packets_received: 16
packets_sent: 16
errors_received: 0
errors_sent: 0
packets_dropped_outbound: 0
packets_dropped_inbound: 0
hwaddr: ""
host_name: ""
mtu: 65536
state: up
type: loopback
pid: 820862
processes: 52
cpu:
usage: 11840020000
snapshots: []
Ah yeah, there are a few things we should be doing here:
- Filtering should be possible and generally should be applied
- Columns however don't make sense and should cause an error if used with yaml/json
Having the same trouble - --format with yaml/json filtering is not working now.
It works few days ago, but not now with latest/stable: 5.1-1f6f485 2022-05-12 from snap.
At the same time lxc list $filter -f csv - works.
any update on this issue? As I can't deploy a new machine with snap on ubuntu as 5.0.1 has introduced the filtering issue that was not in 5.0.0 and has broken all my automation.
More than happy to help get a PR through to help if the issue.
@scotty-c we are intending to look at this ASAP, if you're able to have a go at fixing it, I would be happy to assign to you.
I will have sometime next week to have a look at the issue.
@scotty-c how ate you getting on with this? Thanks
@stgraber happy for me to take this one?
Yep!
Looking at this now.