arc attach は、ローカルディレクトリをリモートの arc デーモンへ逆マウントし、そのリモートデーモン上の /modules/{namespace} の下に provider として公開します。これは arc afs mount とは逆方向です:リモートの何かをローカルの AFS にマウントするのではなく、ローカルの何かをリモートの AFS から見えるようにします。
使用法
arc attach --to <url> [options]厳密に必須なのは --to だけです。それ以外に何が必要かは、attach する対象が次の 3 種類のうちどれかによって決まります:
- ディレクトリ attach(デフォルト):
--namespace <name>+--source <dir>—— ローカルディレクトリを、リモートの/modules/{namespace}にマウントされた provider として公開する - host attach:
--as-host—— このホストの HostFace をリモートの/peers/{peer.json.id}にエクスポートする(--namespace/--sourceは不要) - engine attach:
--as-engine <name>単独 —— そのid の下に裸の code-agents engine を attach する;--as-hostと組み合わせた場合は、HostFace と並ぶ表示用メタデータになるだけ
オプション
--to <url>(必須):対象デーモンの URL。例:ws://host:4900やws://host:4900/ws/attach--namespace <name>:対象上で公開する namespace。/modules/{namespace}にマウントされる(ディレクトリ attach 用)--source <dir>:provider として公開するローカルディレクトリ(ディレクトリ attach 用)--as-engine <name>:engine id 単独;--as-hostと併用する場合は表示用メタデータのみ(リモート id はpeer.jsonのid)--as-host:このホストの HostFace を対象の/peers/{peer.json.id}にエクスポートする--readonly:source を読み取り専用として公開する(ディレクトリ attach 用)--replace:この namespace に既存の session があれば置き換える--token <token>:リモートデーモンの owner アクセストークン(loopback 対象ではスキップされる)--browser:認証フローのためにブラウザを開く(デフォルトtrue);無人実行では--tokenと一緒に--no-browserを渡す--json:デフォルトの人間向けテキストの代わりに、機械可読なイベントを stdout に出力する--view:出力ビューの形式(jsonは--jsonと等価)--instance <name>/-i:このコマンドがどのローカル ARC インスタンスに対して動作するか;省略するとdefault--home <dir>:インスタンスのルート(このホストのpeer.jsonと資格情報が置かれる場所;通常は不要)。どのインスタンスにするかを選ぶには--instanceを使う
SIGINT(Ctrl+C)を受けると、arc attach はグレースフルに detach し、リモート側がきれいにアンマウントできるようにします。
例
arc attach --to ws://host:4900 --namespace my-local-src --source ./src --readonly
arc attach --to ws://host:4900 --as-host--json
--json を付けると、すべての進行状況の行(Attaching...、to:、namespace:、source:、Press Ctrl+C to detach.、Detaching...)は stderr に移り、stdout には改行区切りの JSON イベントだけが残ります —— arc attach ... --json の出力を pipe するスクリプトは、人間向けの文章を除外する必要なく stdout をそのまま JSON として読めます:
$ arc attach --to ws://127.0.0.1:PORT/ws/attach --source /tmp --namespace test --jsonstdout(attach が成功した場合、この 1 行だけ):
{"event":"attached","sessionId":"sess_test_...","namespace":"test","targetPath":"/modules/test"}stderr(進行状況すべて、banner は省略):
Attaching...
to: ws://127.0.0.1:PORT/ws/attach
namespace: test
source: /tmp
Press Ctrl+C to detach.失敗した場合、--json は対応する JSON オブジェクトを stdout に追加しません —— stdout は空のままで、エラーは依然として stderr 上の人間向けの ERROR: ... 行のままです。これは検証エラー(必須の組み合わせが欠けている)と接続エラーの両方で同じで、どちらも exit 5 です:
$ arc attach --to ws://127.0.0.1:1/ws/attach --source /tmp --jsonstdout:(空)
stderr:
ERROR: attach requires --namespace and --source, or --as-engine, or --as-host$ arc attach --to ws://127.0.0.1:9/ws/attach --namespace test --source /tmp --jsonstdout:(空)
stderr:
Attaching...
to: ws://127.0.0.1:9/ws/attach
namespace: test
source: /tmp
ERROR: attach failed [cockpit-unreachable]: connect ECONNREFUSED 127.0.0.1:9