👋

awscliコマンド補完で sqlite3.OperationalError: no such table: param_table

2021/03/21に公開

asdfで入れたawscli でコマンド補完が失敗していたので行ったワークアラウンドを書きます
awscliのコマンド補完の準備は こちら

発生していた問題

aws e<TAB> で補完しようとして以下のように失敗

$ aws eTraceback (most recent call last):
  File "/home/kefi/.asdf/installs/awscli/2.1.31/venv/bin/aws_completer", line 7, in <module>
    exec(compile(f.read(), __file__, 'exec'))
  File "/home/kefi/.asdf/installs/awscli/2.1.31/bin/aws_completer", line 36, in <module>
    main()
  File "/home/kefi/.asdf/installs/awscli/2.1.31/bin/aws_completer", line 28, in main
    autocomplete(command_line, command_index)
  File "/home/kefi/.asdf/installs/awscli/2.1.31/awscli/autocomplete/main.py", line 55, in autocomplete
    results = completer.autocomplete(command_line, position)
  File "/home/kefi/.asdf/installs/awscli/2.1.31/awscli/autocomplete/completer.py", line 42, in autocomplete
    parsed = self._parser.parse(command_line, index)
  File "/home/kefi/.asdf/installs/awscli/2.1.31/awscli/autocomplete/parser.py", line 146, in parse
    global_args = self._index.arg_names(lineage=[], command_name='aws')
  File "/home/kefi/.asdf/installs/awscli/2.1.31/awscli/autocomplete/local/model.py", line 121, in arg_names
    results = db.execute(self._ARG_NAME_QUERY,
  File "/home/kefi/.asdf/installs/awscli/2.1.31/awscli/autocomplete/db.py", line 56, in execute
    return self._connection.execute(query, kwargs)
sqlite3.OperationalError: no such table: param_table

sqliteのデータベースを確認したところ空っぽだった

$ ll ~/.asdf/installs/awscli/2.1.31/awscli/data/ac.index
-rw-r--r-- 1 kefi kefi 0 Mar 21 07:11 /home/kefi/.asdf/installs/awscli/2.1.31/awscli/data/ac.index

MetricMike/asdf-awscliではinstall時に gen-ac-index が実行されていなかったことが原因ぽかった

解決策

gen-ac-indexを実行する

$ cd ~/.asdf/installs/awscli/2.1.31
$ source venv/bin/activate
(venv) $ python scripts/gen-ac-index --include-builtin-index
$ deactivate

ac.indexが正しく作成されて、sqlite3.OperationalError: no such table: param_table が発生しなくなり、コマンド補完ができるようになった

$ ll ~/.asdf/installs/awscli/2.1.31/awscli/data/ac.index
-rw-r--r-- 1 kefi kefi 9355264 Mar 21 07:32 /home/kefi/.asdf/installs/awscli/2.1.31/awscli/data/ac.index
$ sqlite3 ~/.asdf/installs/awscli/2.1.31/awscli/data/ac.index
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
apicall_table  command_table  param_table

ちょうどプルリクがでてた

https://github.com/MetricMike/asdf-awscli/pull/4

linuxでawscli v2のインストールであれば上記のプルリクによって、今回のワークアラウンドを行わなくてもコマンド補完も問題なく動くようになりそう

Discussion