AlaK4X
Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64



Your IP : 18.220.227.250


Current Path : /snap/lxd/29351/etc/bash_completion.d/
Upload File :
Current File : //snap/lxd/29351/etc/bash_completion.d/snap.lxd.lxc

_have lxc && {
  _lxd_complete()
  {
    _lxd_names()
    {
      local state=$1
      local keys=$2
      local project
      project=$(lxc project list -f csv | sed -n 's/^\([^(]\+\) (current),.*/\1/ p')
      project=${project:-"default"}

      local cmd="lxc list --format=csv --columns=ns --project $project"
      [ -n "$state" ] && cmd="$cmd | grep -E ',$state$'"

      COMPREPLY=( $( compgen -W \
        "$( eval $cmd | cut -d, -f1 ) $keys" "$cur" )
      )
    }

    _lxd_images()
    {
      COMPREPLY=( $( compgen -W "$( lxc image list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    _lxd_remotes()
    {
      COMPREPLY=( $( compgen -W "$( lxc remote list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    _lxd_profiles()
    {
      COMPREPLY=( $( compgen -W "$( lxc profile list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    _lxd_projects()
    {
      COMPREPLY=( $( compgen -W "$( lxc project list --format=csv | sed 's/,.\+//; s/ (current)$//' )" "$cur" ) )
    }

    _lxd_networks()
    {
      COMPREPLY=( $( compgen -W "$( lxc network list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    _lxd_restore_snapshots()
    {
      local name=$1

      local query="/1.0/instances/$name/snapshots"

      COMPREPLY=( $( compgen -W "$( lxc query $query | sed -nr "s \s*\"$query/+(\w*)\",* \1 p" )" "$cur" ) )
    }

    _lxd_storage_pools()
    {
      COMPREPLY=( $( compgen -W "$( lxc storage list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    _lxd_storage_volumes()
    {
      COMPREPLY=( $( compgen -W "$( lxc storage volume list --format=csv | cut -d, -f1 )" "$cur" ) )
    }

    COMPREPLY=()
    # ignore special --foo args
    if [[ ${COMP_WORDS[COMP_CWORD]} == -* ]]; then
      return 0
    fi

    if [ -n "${SNAP_COMMON:-""}" ]; then
      export LXD_DIR=${LXD_DIR:-"${SNAP_COMMON}/lxd/"}
    fi

    lxc_cmds="alias cluster config console copy delete exec export file \
      help image import info init launch list manpage monitor move network \
      operation pause profile project publish query remote rename \
      restart restore shell snapshot start stop storage version"

    global_keys="backups.compression_algorithm,
      core.https_address core.https_allowed_credentials \
      core.https_allowed_headers core.https_allowed_methods \
      core.https_allowed_origin candid.api.url candid.api.key candid.expiry \
      candid.domains cluster.https_address \
      core.metrics_address core.metrics_authentication \
      core.proxy_https core.proxy_http core.proxy_ignore_hosts \
      core.trust_password core.bgp_address core.bgp_asn core.bgp_routerid \
      core.debug_address cluster.offline_threshold \
      images.auto_update_cached images.auto_update_interval \
      images.compression_algorithm images.remote_cache_expiry \
      maas.api.url maas.api.key maas.machine cluster.images_minimal_replica \
      network.ovn.integration_bridge network.ovn.northbound_connection \
      oidc.client.id oidc.issuer oidc.audience \
      rbac.agent.url rbac.agent.username rbac.agent.public_key \
      rbac.agent.private_key rbac.api.expiry rbac.api.key rbac.api.url \
      storage.backups_volume storage.images_volume"

    container_keys="boot.autostart boot.autostart.delay \
      boot.autostart.priority boot.stop.priority \
      boot.host_shutdown_timeout environment. \
      limits.cpu limits.cpu.allowance limits.cpu.priority \
      limits.disk.priority limits.memory limits.memory.enforce \
      limits.memory.hugepages limits.kernel \
      limits.memory.swap limits.memory.swap.priority limits.network.priority \
      limits.processes linux.kernel_modules migration.incremental.memory \
      migration.incremental.memory.goal nvidia.runtime \
      nvidia.driver.capabilities nvidia.require.cuda nvidia.require.driver \
      migration.incremental.memory.iterations raw.apparmor raw.idmap raw.qemu \
      raw.qemu.conf raw.lxc raw.seccomp security.idmap.base security.idmap.isolated \
      security.idmap.size security.devlxd security.devlxd.images \
      security.nesting security.privileged security.protection.delete \
      security.protection.shift security.secureboot \
      security.syscalls.allow \
      security.syscalls.deny \
      security.syscalls.deny_compat security.syscalls.deny_default \
      security.syscalls.intercept.bpf security.syscalls.intercept.bpf.devices \
      security.syscalls.intercept.mknod security.syscalls.intercept.mount \
      security.syscalls.intercept.mount.allowed \
      security.syscalls.intercept.mount.fuse \
      security.syscalls.intercept.sched_setscheduler \
      security.syscalls.intercept.setxattr \
      security.syscalls.intercept.mount.shift \
      snapshots.schedule snapshots.schedule.stopped snapshots.pattern \
      snapshots.expiry \
      volatile.apply_quota volatile.apply_template volatile.base_image \
      volatile.idmap.base volatile.idmap.current volatile.idmap.next \
      volatile.last_state.idmap volatile.last_state.power \
      cloud-init.network-config cloud-init.user-data cloud-init.vendor-data"

    device_keys="limits.ingress limits.egress ipv4.routes \
      ipv4.routes.external ipv6.routes ipv6.routes.external parent \
      name mtu hwaddr vlan maas.subnet.ipv4 maas.subnet.ipv6 nictype \
      host_name limits.max \
      ipv4.address ipv6.address ipv4.host_address ipv6.host_address ipv4.gateway ipv6.gateway \
      security.mac_filtering security.ipv4_filtering security.ipv6_filtering vlan limits.read \
      limits.write path source optional readonly size recursive pool \
      propagation shift major minor uid gid mode required vendorid productid \
      pci id listen connect bind nat proxy_protocol security.uid security.gid \
      boot.priority"

    networks_keys="bgp.ipv4.nexthop bgp.ipv6.nexthop bridge.driver bridge.external_interfaces bridge.mode \
      bridge.mtu bridge.hwaddr dns.domain dns.mode dns.search fan.overlay_subnet fan.type \
      fan.underlay_subnet ipv4.address ipv4.dhcp ipv4.dhcp.expiry ipv4.dhcp.gateway \
      ipv4.dhcp.ranges ipv4.firewall ipv4.nat ipv4.nat.address ipv4.nat.order ipv4.ovn.ranges \
      ipv4.routes ipv4.routing ipv6.address ipv6.dhcp ipv6.dhcp.expiry ipv6.dhcp.ranges \
      ipv6.dhcp.stateful ipv6.firewall ipv6.nat ipv6.nat.address ipv6.nat.order ipv6.ovn.ranges \
      ipv6.routes ipv6.routing maas.subnet.ipv4 maas.subnet.ipv6 mtu network parent raw.dnsmasq vlan"

    project_keys="features.images features.profiles features.storage.volumes \
      limits.containers limits.virtual-machines limits.memory limits.processes limits.cpu \
      restricted restricted.containers.nesting restricted.containers.interception restricted.containers.lowlevel \
      restricted.containers.privilege restricted.virtual-machines.lowlevel restricted.devices.unix-char \
      restricted.devices.unix-block restricted.devices.unix-hotplug restricted.devices.infiniband \
      restricted.devices.gpu restricted.devices.usb restricted.devices.nic restricted.devices.disk \
      restricted.devices.pci restricted.devices.proxy"

    storage_pool_keys="source size btrfs.mount_options ceph.cluster_name \
      ceph.osd.pg_num ceph.osd.pool_name ceph.osd.data_pool_name \
      ceph.rbd.clone_copy ceph.rbd.du ceph.rbd.features ceph.user.name cephfs.cluster_name cephfs.path \
      cephfs.fscache cephfs.vg_name lvm.thinpool_name lvm.thinpool_metadata_size lvm.use_thinpool \
      lvm.vg_name rsync.bwlimit volatile.initial_source \
      volatile.pool.pristine volume.block.filesystem \
      volume.block.mount_options volume.size volume.zfs.remove_snapshots volume.zfs.delegate \
      volume.zfs.use_refquota zfs.clone_copy zfs.pool_name volume.zfs.reserve_space"

    storage_volume_keys="size block.filesystem block.mount_options \
      security.unmapped security.shifted zfs.remove_snapshots zfs.use_refquota zfs.reserve_space
      zfs.delegate"

    if [ $COMP_CWORD -eq 1 ]; then
      COMPREPLY=( $(compgen -W "$lxc_cmds" -- ${COMP_WORDS[COMP_CWORD]}) )
      return 0
    fi

    local no_dashargs
    cur=${COMP_WORDS[COMP_CWORD]}

    no_dashargs=(${COMP_WORDS[@]// -*})
    pos=$((COMP_CWORD - (${#COMP_WORDS[@]} - ${#no_dashargs[@]})))
    if [ -z "$cur" ]; then
      pos=$(($pos + 1))
    fi

    case ${no_dashargs[1]} in
      "config")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "get set unset show edit metadata template device trust" -- $cur) )
            ;;
          3)
            case ${no_dashargs[2]} in
              "trust")
                COMPREPLY=( $(compgen -W "add edit list list-tokens remove revoke-token show" -- $cur) )
                ;;
              "device")
                COMPREPLY=( $(compgen -W "add get set unset list show remove" -- $cur) )
                ;;
              "metadata")
                COMPREPLY=( $(compgen -W "show edit" -- $cur) )
                ;;
              "template")
                COMPREPLY=( $(compgen -W "list show create edit delete" -- $cur) )
                ;;
              "show"|"edit")
                _lxd_names
                ;;
              "get"|"set"|"unset")
                _lxd_names "" "$global_keys"
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "trust")
                _lxd_remotes
                ;;
              "device")
                _lxd_names
                ;;
              "get"|"set"|"unset")
                COMPREPLY=( $(compgen -W "$container_keys" -- $cur) )
                ;;
            esac
            ;;
          6)
            case ${no_dashargs[2]} in
              "device")
                case ${no_dashargs[3]} in
                "get"|"set"|"unset")
                  COMPREPLY=( $(compgen -W "$device_keys" -- $cur) )
                ;;
                esac
              ;;
            esac
            ;;
        esac
        ;;
      "copy")
        if [ $pos -lt 4 ]; then
          _lxd_names
        fi
        ;;
      "delete"|"info"|"move"|"publish"|"restart"|"snapshot"|"rename")
        _lxd_names
        ;;
      "start")
        _lxd_names "(STOPPED|FROZEN)"
        ;;
      "exec"|"console"|"stop"|"shell")
        _lxd_names "(RUNNING|READY)"
        ;;
      "file")
        COMPREPLY=( $(compgen -W "pull push edit delete" -- $cur) )
        ;;
      "help")
        COMPREPLY=( $(compgen -W "$lxc_cmds" -- $cur) )
        ;;
      "image")
        COMPREPLY=( $(compgen -W "import copy delete refresh export info list show edit alias" -- $cur) )
        ;;
      "init"|"launch")
        _lxd_images
        ;;
      "network")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "list show create get set unset delete edit rename attach attach-profile detach detach-profile info acl forward list-leases peer zone" -- $cur) )
            ;;
          3)
            case ${no_dashargs[2]} in
              "show"|"get"|"set"|"unset"|"delete"|"edit"|"rename"|"attach"|"attach-profile"|"detach"|"detach-profile"|"info"|"acl"|"forward"|"list-leases"|"peer"|"zone")
                _lxd_networks
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "get"|"set"|"unset")
                COMPREPLY=( $(compgen -W "$networks_keys" -- $cur) )
                ;;
              "attach"|"detach"|"detach-profile")
                _lxd_names
                ;;
              "attach-profile")
                _lxd_profiles
                ;;
            esac
        esac
        ;;
      "profile")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "list show create copy get set unset delete edit rename assign add remove device " -- $cur) )
            ;;
          3)
            case ${no_dashargs[2]} in
              "device")
                COMPREPLY=( $(compgen -W "list show remove get set unset add" -- $cur) )
                ;;
              "add"|"assign"|"remove")
                _lxd_names
                ;;
              *)
                _lxd_profiles
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "device"|"add"|"assign"|"remove")
                _lxd_profiles
                ;;
              *)
                COMPREPLY=( $(compgen -W "$container_keys" -- $cur) )
                ;;
            esac
            ;;
          6)
            case ${no_dashargs[2]} in
              "device")
                case ${no_dashargs[3]} in
                "get"|"set"|"unset")
                  COMPREPLY=( $(compgen -W "$device_keys" -- $cur) )
                ;;
                esac
              ;;
            esac
            ;;
        esac
        ;;
      "project")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "create delete edit get list rename set show switch unset " -- $cur) )
            ;;

          3)
            case ${no_dashargs[2]} in
              "get"|"set"|"unset"|"create"|"delete"|"edit"|"list"|"show"|"switch"|"rename")
                _lxd_projects
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "get"|"set"|"unset")
                COMPREPLY=( $(compgen -W "$project_keys" -- $cur) )
                ;;
            esac
            ;;
          5)
            case ${no_dashargs[2]} in
              "rename")
                _lxd_projects
                ;;
            esac
            ;;
        esac
        ;;
      "remote")
        COMPREPLY=( $(compgen -W \
          "add remove list rename set-url set-default get-default" -- $cur) )
        ;;
      "restore")
        case $pos in
          2)
            _lxd_names
            ;;
          3)
            _lxd_restore_snapshots ${no_dashargs[2]}
            ;;
        esac
        ;;
      "storage_pools")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "list show create get set unset delete edit" -- $cur) )
            ;;
          3)
            case ${no_dashargs[2]} in
              "show"|"get"|"set"|"unset"|"delete"|"edit")
                _lxd_storage_pools
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "get"|"set"|"unset")
                COMPREPLY=( $(compgen -W "$storage_pool_keys" -- $cur) )
                ;;
            esac
        esac
        ;;
      "storage_volumes")
        case $pos in
          2)
            COMPREPLY=( $(compgen -W "list show create rename get set unset delete edit attach attach-profile detach detach-profile" -- $cur) )
            ;;
          3)
            case ${no_dashargs[2]} in
              "show"|"get"|"set"|"unset"|"rename"|"delete"|"edit"|"attach"|"attach-profile"|"detach"|"detach-profile")
                _lxd_storage_volumes
                ;;
            esac
            ;;
          4)
            case ${no_dashargs[2]} in
              "get"|"set"|"unset")
                COMPREPLY=( $(compgen -W "$storage_volume_keys" -- $cur) )
                ;;
              "attach"|"detach"|"detach-profile")
                _lxd_names
                ;;
              "attach-profile")
                _lxd_profiles
                ;;
            esac
        esac
        ;;
      *)
        ;;
    esac

    return 0
  }

  complete -o default -F _lxd_complete lxc lxd.lxc
}