
    _pcs()
    {
    local cur cur1 cur2 cur3
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    if [ "$COMP_CWORD" -gt "0" ]; then cur1="${COMP_WORDS[COMP_CWORD-1]}";fi
    if [ "$COMP_CWORD" -gt "1" ]; then cur2="${COMP_WORDS[COMP_CWORD-2]}";fi
    if [ "$COMP_CWORD" -gt "2" ]; then cur3="${COMP_WORDS[COMP_CWORD-3]}";fi

    
case "${cur3}" in
  config)
  case "${cur2}" in
    import-cman)
      ;;
    checkpoint)
      ;;
    export)
      case "${cur1}" in
        pcs-commands|pcs-commands-verbose)
          COMPREPLY=($(compgen -W "output=<filename>" -- ${cur}))
          return 0
          ;;
        *)
        ;;
      esac
      
      ;;
    *)
    ;;
  esac
  
    ;;
  constraint)
    ;;
  stonith)
    ;;
  status)
    ;;
  property)
    ;;
  resource)
    ;;
  node)
    ;;
  cluster)
    ;;
  pcsd)
    ;;
  acl)
    ;;
  *)
  ;;
esac


case "${cur2}" in
  config)
  case "${cur1}" in
    import-cman)
      COMPREPLY=($(compgen -W "output=<filename>" -- ${cur}))
      return 0
      ;;
    checkpoint)
      COMPREPLY=($(compgen -W "view restore" -- ${cur}))
      return 0
      ;;
    export)
      COMPREPLY=($(compgen -W "pcs-commands pcs-commands-verbose" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  constraint)
  case "${cur1}" in
    rule)
      COMPREPLY=($(compgen -W "remove add" -- ${cur}))
      return 0
      ;;
    colocation)
      COMPREPLY=($(compgen -W "show set remove add" -- ${cur}))
      return 0
      ;;
    order)
      COMPREPLY=($(compgen -W "show set remove" -- ${cur}))
      return 0
      ;;
    location)
      COMPREPLY=($(compgen -W "show remove add" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  stonith)
  case "${cur1}" in
    level)
      COMPREPLY=($(compgen -W "remove clear add verify" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  status)
    ;;
  property)
    ;;
  resource)
  case "${cur1}" in
    failcount)
      COMPREPLY=($(compgen -W "show reset" -- ${cur}))
      return 0
      ;;
    group)
      COMPREPLY=($(compgen -W "remove add" -- ${cur}))
      return 0
      ;;
    op)
      COMPREPLY=($(compgen -W "defaults remove add" -- ${cur}))
      return 0
      ;;
    relocate)
      COMPREPLY=($(compgen -W "dry-run show run clear" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  node)
    ;;
  cluster)
  case "${cur1}" in
    reload)
      COMPREPLY=($(compgen -W "corosync" -- ${cur}))
      return 0
      ;;
    remote-node)
      COMPREPLY=($(compgen -W "remove add" -- ${cur}))
      return 0
      ;;
    quorum)
      COMPREPLY=($(compgen -W "unblock" -- ${cur}))
      return 0
      ;;
    node)
      COMPREPLY=($(compgen -W "remove add" -- ${cur}))
      return 0
      ;;
    uidgid)
      COMPREPLY=($(compgen -W "add rm" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  pcsd)
    ;;
  acl)
  case "${cur1}" in
    permission)
      COMPREPLY=($(compgen -W "delete add" -- ${cur}))
      return 0
      ;;
    role)
      COMPREPLY=($(compgen -W "create unassign assign delete" -- ${cur}))
      return 0
      ;;
    group)
      COMPREPLY=($(compgen -W "create delete" -- ${cur}))
      return 0
      ;;
    user)
      COMPREPLY=($(compgen -W "create delete" -- ${cur}))
      return 0
      ;;
    *)
    ;;
  esac
  
    ;;
  *)
  ;;
esac


case "${cur1}" in
  config)
    COMPREPLY=($(compgen -W "backup import-cman checkpoint restore export" -- ${cur}))
    return 0
    ;;
  constraint)
    COMPREPLY=($(compgen -W "rule colocation order remove location ref" -- ${cur}))
    return 0
    ;;
  stonith)
    COMPREPLY=($(compgen -W "create describe update confirm list cleanup level fence delete" -- ${cur}))
    return 0
    ;;
  status)
    COMPREPLY=($(compgen -W "groups xml corosync nodes resources cluster pcsd" -- ${cur}))
    return 0
    ;;
  property)
    COMPREPLY=($(compgen -W "set unset" -- ${cur}))
    return 0
    ;;
  resource)
    COMPREPLY=($(compgen -W "debug-monitor meta failcount debug-start describe debug-demote ban delete unclone disable defaults clone utilization group agents op manage create update move cleanup unmanage master enable standards ungroup restart relocate list providers debug-promote clear debug-stop" -- ${cur}))
    return 0
    ;;
  node)
    COMPREPLY=($(compgen -W "unmaintenance standby utilization maintenance unstandby" -- ${cur}))
    return 0
    ;;
  cluster)
    COMPREPLY=($(compgen -W "start reload stop destroy cib-push edit disable remote-node corosync status cib setup sync report quorum node uidgid enable verify pcsd-status auth cib-upgrade kill" -- ${cur}))
    return 0
    ;;
  pcsd)
    COMPREPLY=($(compgen -W "sync-certificates certkey clear-auth" -- ${cur}))
    return 0
    ;;
  acl)
    COMPREPLY=($(compgen -W "disable permission role group enable user" -- ${cur}))
    return 0
    ;;
  *)
  ;;
esac



    if [ $COMP_CWORD -eq 1 ]; then
        COMPREPLY=( $(compgen -W "resource cluster stonith property acl constraint status config pcsd node" -- $cur) )
    fi
    return 0

    }
    complete -F _pcs pcs
    
