direxio-deployer 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/README_zh.md +3 -1
- package/SKILL.md +2 -2
- package/bin/direxio-deployer.mjs +1 -2
- package/package.json +2 -3
- package/references/deployment-lessons.md +5 -7
- package/references/deployment-workflow.md +1 -1
- package/references/tooling.md +11 -12
- package/references/user-journey.md +2 -2
- package/references/voip-turn-runbook.md +2 -2
- package/references/windows-deployment-notes.md +2 -1
- package/scripts/destroy.sh +24 -43
- package/scripts/json.mjs +841 -0
- package/scripts/lib/aws.sh +5 -1
- package/scripts/lib/json.sh +114 -0
- package/scripts/lib/operation_report.sh +8 -195
- package/scripts/lib/ops.sh +8 -21
- package/scripts/lib/state.sh +18 -44
- package/scripts/mcp-tools-list.mjs +21 -4
- package/scripts/orchestrate.sh +147 -249
- package/scripts/phases/s3_provision.sh +5 -10
- package/scripts/phases/s5_init_tokens.sh +7 -17
- package/scripts/phases/s6_wire_local.sh +9 -35
- package/scripts/phases/s7_verify_e2e.sh +5 -5
- package/scripts/pricing-estimate.sh +36 -80
- package/tests/aws_credentials_test.sh +0 -139
- package/tests/connect_daemon_runtime_check_test.sh +0 -120
- package/tests/default_paths_test.sh +0 -58
- package/tests/destroy_local_bridge_test.sh +0 -154
- package/tests/destroy_root_identity_test.sh +0 -91
- package/tests/destroy_route53_zone_test.sh +0 -80
- package/tests/domain_authoritative_dns_test.sh +0 -49
- package/tests/mcp_doctor_runtime_check_test.sh +0 -86
- package/tests/mcp_smoke_runtime_check_test.sh +0 -121
- package/tests/mcp_tools_runtime_check_test.sh +0 -123
- package/tests/npm_skill_distribution_test.sh +0 -95
- package/tests/operation_report_test.sh +0 -258
- package/tests/orchestrate_status_recovery_test.sh +0 -91
- package/tests/phase_timeout_test.sh +0 -88
- package/tests/pricing_estimate_test.sh +0 -159
- package/tests/render_userdata_remote_nodes_test.sh +0 -40
- package/tests/root_volume_tracking_test.sh +0 -41
- package/tests/route53_overwrite_guard_test.sh +0 -86
- package/tests/route53_zone_auto_create_test.sh +0 -66
- package/tests/runtime_summary_check_test.sh +0 -203
- package/tests/s6_wire_local_test.sh +0 -405
- package/tests/skill_structure_test.sh +0 -298
- package/tests/update_reset_ops_test.sh +0 -230
- package/tests/user_confirmation_gates_test.sh +0 -152
package/README.md
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
Install the deployer skill from npm, then place it into the current agent runtime's skill directory. Project-local installs are preferred because they keep the deployment skill scoped to the workspace that uses it.
|
|
23
23
|
|
|
24
|
+
The GitHub repository keeps tests for maintainers and CI, but the published npm package and installed skill copy exclude `tests/` to keep user installs small.
|
|
25
|
+
|
|
24
26
|
POSIX shells:
|
|
25
27
|
|
|
26
28
|
```bash
|
|
@@ -51,7 +53,7 @@ direxio-deployer skill install --agent codex --scope global
|
|
|
51
53
|
The installer writes `.direxio-skill-install.json` into the target directory and refuses to overwrite unmanaged existing content unless `--force` is provided. To pin a version, install that package version first:
|
|
52
54
|
|
|
53
55
|
```bash
|
|
54
|
-
npm install -g direxio-deployer@0.1.
|
|
56
|
+
npm install -g direxio-deployer@0.1.1
|
|
55
57
|
direxio-deployer skill update --agent codex --scope project --project .
|
|
56
58
|
```
|
|
57
59
|
|
package/README_zh.md
CHANGED
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
通过 npm 安装 deployer skill,再把它写入当前智能体运行时的 skill 目录。默认推荐 project-local 安装,让部署 skill 跟随当前 workspace。
|
|
21
21
|
|
|
22
|
+
GitHub 仓库保留测试用于维护和 CI,但发布到 npm 的包以及安装到智能体 skill 目录的副本不包含 `tests/`,以减小用户安装体积。
|
|
23
|
+
|
|
22
24
|
POSIX shell:
|
|
23
25
|
|
|
24
26
|
```bash
|
|
@@ -49,7 +51,7 @@ direxio-deployer skill install --agent codex --scope global
|
|
|
49
51
|
安装器会在目标目录写入 `.direxio-skill-install.json`,并拒绝覆盖没有该 manifest 的既有目录,除非显式传入 `--force`。如需固定版本,先安装指定 npm 版本:
|
|
50
52
|
|
|
51
53
|
```bash
|
|
52
|
-
npm install -g direxio-deployer@0.1.
|
|
54
|
+
npm install -g direxio-deployer@0.1.1
|
|
53
55
|
direxio-deployer skill update --agent codex --scope project --project .
|
|
54
56
|
```
|
|
55
57
|
|
package/SKILL.md
CHANGED
|
@@ -439,7 +439,7 @@ NS nameservers before authoritative DNS can resolve. Never use temporary
|
|
|
439
439
|
## Deployment Flow
|
|
440
440
|
|
|
441
441
|
1. Complete the Cloud Account And Domain Onboarding gate above for first-time users or whenever AWS credentials, domain ownership, or DNS authority are unclear.
|
|
442
|
-
2. Read `references/tooling.md`; inspect the user OS and install or prepare missing `bash`, `
|
|
442
|
+
2. Read `references/tooling.md`; inspect the user OS and install or prepare missing `bash`, `node`, `aws`, `ssh`, `scp`, `curl`, and DNS lookup capability only after approval.
|
|
443
443
|
3. Inspect DNS, AWS credentials, region defaults, local tooling, and existing deployment state before asking the user anything that can be discovered automatically.
|
|
444
444
|
**DNS tool preflight:** Before any DNS propagation or Route53 delegation
|
|
445
445
|
check, confirm the environment has at least one working DNS lookup path:
|
|
@@ -649,7 +649,7 @@ Ask once, plainly and in the user's language. The confirmation message must summ
|
|
|
649
649
|
- AWS credentials source, including whether root access keys are being used.
|
|
650
650
|
- AWS/domain onboarding status: active AWS account, real long-lived domain, access key CSV or AWS profile, DNS authority, and billing/deletion acknowledgement.
|
|
651
651
|
- Existing state action: `continue`, `destroy`, or different `DOMAIN`/service directory.
|
|
652
|
-
- Network/system installs: package managers, AWS CLI,
|
|
652
|
+
- Network/system installs: package managers, Node.js, AWS CLI, Git Bash/MSYS2/WSL, Homebrew, apt/dnf/yum/pacman/zypper.
|
|
653
653
|
|
|
654
654
|
After the user confirms the summary, proceed without re-confirming individual fields. Ask again only when the configuration materially changes, an unapproved destructive action becomes necessary, or an external action such as DNS must be completed by the user.
|
|
655
655
|
|
package/bin/direxio-deployer.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "direxio-deployer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Versioned Direxio deployer agent skill and portable deployment orchestration tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"agents/",
|
|
16
16
|
"bin/",
|
|
17
17
|
"references/",
|
|
18
|
-
"scripts/"
|
|
19
|
-
"tests/"
|
|
18
|
+
"scripts/"
|
|
20
19
|
],
|
|
21
20
|
"scripts": {
|
|
22
21
|
"test": "bash tests/npm_skill_distribution_test.sh && bash tests/skill_structure_test.sh && bash tests/s6_wire_local_test.sh && bash tests/render_userdata_remote_nodes_test.sh"
|
|
@@ -39,7 +39,7 @@ Use a POSIX shell that actually runs the deployment scripts:
|
|
|
39
39
|
|
|
40
40
|
```powershell
|
|
41
41
|
Get-Command bash.exe -All
|
|
42
|
-
bash -lc 'echo ok; command -v
|
|
42
|
+
bash -lc 'echo ok; command -v node; command -v aws; command -v ssh; command -v scp; command -v curl'
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
If `bash` prints the Windows Subsystem for Linux installation prompt or exits
|
|
@@ -47,11 +47,9 @@ before running `echo ok`, it is only the Windows WSL launcher and cannot run ops
|
|
|
47
47
|
until a WSL distro is installed. Use another POSIX shell such as Git Bash, MSYS2,
|
|
48
48
|
Cygwin, or a working WSL distro.
|
|
49
49
|
|
|
50
|
-
The orchestrator
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
When `.tools/bin/jq.exe` exists, compatible Windows POSIX shells can discover it
|
|
54
|
-
without manual PATH surgery.
|
|
50
|
+
The orchestrator uses the repository's Node.js JSON helper for local JSON
|
|
51
|
+
processing, so the POSIX shell that runs deployment scripts must be able to run
|
|
52
|
+
`node` against the same path style it passes to the scripts.
|
|
55
53
|
|
|
56
54
|
Prefer the `ssh`/`scp` that belongs to the same POSIX environment used for
|
|
57
55
|
`bash`. Windows OpenSSH can reject EC2 private keys because inherited ACLs make
|
|
@@ -132,7 +130,7 @@ Fix procedure:
|
|
|
132
130
|
|
|
133
131
|
1. Read the created or reused zone details from `state.json`:
|
|
134
132
|
```bash
|
|
135
|
-
|
|
133
|
+
node scripts/json.mjs get ~/.direxio/nodes/<service_id>/state.json resources
|
|
136
134
|
```
|
|
137
135
|
2. Delegate those NS servers at the current registrar, or use the provider API
|
|
138
136
|
if credentials are available.
|
|
@@ -282,7 +282,7 @@ If the domain is registered outside Route53, delegate the recorded nameservers
|
|
|
282
282
|
at the current registrar or through a provider API:
|
|
283
283
|
|
|
284
284
|
```bash
|
|
285
|
-
|
|
285
|
+
node scripts/json.mjs get ~/.direxio/nodes/<service_id>/state.json resources
|
|
286
286
|
```
|
|
287
287
|
|
|
288
288
|
After authoritative DNS returns the new IP, continue with the same state:
|
package/references/tooling.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
# Tooling By OS
|
|
2
2
|
|
|
3
|
-
Prepare `bash`, `
|
|
3
|
+
Prepare `bash`, `node`, `aws`, `ssh`, `scp`, `curl`, and at least one DNS lookup
|
|
4
4
|
tool. Always inspect first, then ask before installing or downloading.
|
|
5
5
|
|
|
6
6
|
## Detect
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
command -v bash aws
|
|
9
|
+
command -v bash node aws ssh scp curl
|
|
10
10
|
command -v dig nslookup getent
|
|
11
|
+
node --version
|
|
11
12
|
aws --version
|
|
12
|
-
jq --version
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
On Windows PowerShell:
|
|
16
16
|
|
|
17
17
|
```powershell
|
|
18
|
-
Get-Command "C:\Program Files\Git\bin\bash.exe","C:\Program Files\Git\usr\bin\bash.exe",aws,
|
|
18
|
+
Get-Command "C:\Program Files\Git\bin\bash.exe","C:\Program Files\Git\usr\bin\bash.exe",node,aws,ssh,scp,curl,nslookup,Resolve-DnsName -ErrorAction SilentlyContinue
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
## Windows
|
|
@@ -29,15 +29,14 @@ Common system installs:
|
|
|
29
29
|
|
|
30
30
|
```powershell
|
|
31
31
|
winget install --id Git.Git --exact
|
|
32
|
+
winget install --id OpenJS.NodeJS.LTS --exact
|
|
32
33
|
winget install --id Amazon.AWSCLI --exact
|
|
33
|
-
winget install --id jqlang.jq --exact
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
Workspace-local fallback when package managers are unavailable:
|
|
37
37
|
|
|
38
38
|
```powershell
|
|
39
39
|
New-Item -ItemType Directory -Force -Path .tools\bin | Out-Null
|
|
40
|
-
Invoke-WebRequest -Uri https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-windows-amd64.exe -OutFile .tools\bin\jq.exe
|
|
41
40
|
python -m venv .tools\awscli-venv
|
|
42
41
|
.\.tools\awscli-venv\Scripts\python.exe -m pip install --upgrade pip awscli
|
|
43
42
|
```
|
|
@@ -61,7 +60,7 @@ Run ops from Git Bash:
|
|
|
61
60
|
Preferred installs:
|
|
62
61
|
|
|
63
62
|
```bash
|
|
64
|
-
brew install awscli
|
|
63
|
+
brew install node awscli
|
|
65
64
|
```
|
|
66
65
|
|
|
67
66
|
If Homebrew is unavailable, ask before using the official AWS CLI pkg installer.
|
|
@@ -72,11 +71,11 @@ macOS already includes `ssh`, `scp`, `curl`, and `dig`.
|
|
|
72
71
|
Choose the detected package manager:
|
|
73
72
|
|
|
74
73
|
```bash
|
|
75
|
-
sudo apt-get update && sudo apt-get install -y awscli
|
|
76
|
-
sudo dnf install -y awscli
|
|
77
|
-
sudo yum install -y awscli
|
|
78
|
-
sudo pacman -Sy --needed aws-cli
|
|
79
|
-
sudo zypper install -y aws-cli
|
|
74
|
+
sudo apt-get update && sudo apt-get install -y nodejs awscli openssh-client curl dnsutils
|
|
75
|
+
sudo dnf install -y nodejs awscli openssh-clients curl bind-utils
|
|
76
|
+
sudo yum install -y nodejs awscli openssh-clients curl bind-utils
|
|
77
|
+
sudo pacman -Sy --needed nodejs aws-cli openssh curl bind-tools
|
|
78
|
+
sudo zypper install -y nodejs aws-cli openssh-clients curl bind-utils
|
|
80
79
|
```
|
|
81
80
|
|
|
82
81
|
If distro packages are too old or missing, ask before using the official AWS CLI zip installer.
|
|
@@ -13,7 +13,7 @@ Confirm these items before calling `scripts/orchestrate.sh`:
|
|
|
13
13
|
1. The final Matrix domain is selected, for example `__DOMAIN__`.
|
|
14
14
|
2. The user understands that Matrix `server_name` is bound to that domain.
|
|
15
15
|
3. The user has confirmed `CONFIRM_DOMAIN_BINDING=1`.
|
|
16
|
-
4. AWS CLI v2, `
|
|
16
|
+
4. Node.js, AWS CLI v2, `ssh`, `scp`, and `curl` are available.
|
|
17
17
|
5. AWS credentials are configured through `AWS_PROFILE` or environment variables.
|
|
18
18
|
6. `AWS_DEFAULT_REGION` is explicit.
|
|
19
19
|
7. `MESSAGE_SERVER_IMAGE` is selected, or the default `direxio/message-server:latest` is accepted.
|
|
@@ -23,7 +23,7 @@ On Windows, first verify that `bash` is a usable POSIX shell:
|
|
|
23
23
|
|
|
24
24
|
```powershell
|
|
25
25
|
Get-Command bash.exe -All
|
|
26
|
-
bash -lc 'echo ok; command -v
|
|
26
|
+
bash -lc 'echo ok; command -v node; command -v aws; command -v ssh; command -v scp; command -v curl'
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## Domain Modes
|
|
@@ -118,10 +118,10 @@ TURN 端口直连 coturn,Caddyfile **不加** TURN 反代。仅在文件头注
|
|
|
118
118
|
新增一项(用 password/agent_token 换 access_token 后查 turnServer):
|
|
119
119
|
```bash
|
|
120
120
|
# 换统一 access_token
|
|
121
|
-
at=$(curl -sk -X POST "https://$domain/_p2p/command" -H 'Content-Type: application/json' -d "{\"action\":\"portal.auth\",\"params\":{\"password\":\"$password\"}}" |
|
|
121
|
+
at=$(curl -sk -X POST "https://$domain/_p2p/command" -H 'Content-Type: application/json' -d "{\"action\":\"portal.auth\",\"params\":{\"password\":\"$password\"}}" | node scripts/json.mjs stdin-get access_token)
|
|
122
122
|
# 查 turnServer 必须非空、有 turn: uris、有 username/password、ttl>0
|
|
123
123
|
turn=$(curl -sk "https://$domain/_matrix/client/v3/voip/turnServer" -H "Authorization: Bearer $at")
|
|
124
|
-
echo "$turn" |
|
|
124
|
+
echo "$turn" | node scripts/json.mjs stdin-assert turn-credentials >/dev/null \
|
|
125
125
|
&& ok " ✓ TURN turnServer 非空且有效" || { warn " ✗ TURN turnServer 无效:$turn"; fails=$((fails+1)); }
|
|
126
126
|
```
|
|
127
127
|
|
|
@@ -30,7 +30,8 @@ When running `orchestrate.sh` as a background process, bash may buffer stdout be
|
|
|
30
30
|
Poll progress with:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
|
|
33
|
+
node scripts/json.mjs get ~/.direxio/nodes/<service_id>/state.json phase
|
|
34
|
+
node scripts/json.mjs get ~/.direxio/nodes/<service_id>/state.json phases
|
|
34
35
|
```
|
|
35
36
|
|
|
36
37
|
For real-time tailing, use `stdbuf` when available:
|
package/scripts/destroy.sh
CHANGED
|
@@ -27,20 +27,8 @@ destroy_now() {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
destroy_evidence_set() {
|
|
30
|
-
local key=$1 status=$2 detail=${3:-}
|
|
31
|
-
|
|
32
|
-
if jq --arg key "$key" \
|
|
33
|
-
--arg status "$status" \
|
|
34
|
-
--arg detail "$detail" \
|
|
35
|
-
--arg checked_at "$(destroy_now)" \
|
|
36
|
-
'.destroy_evidence[$key] = {
|
|
37
|
-
status: $status,
|
|
38
|
-
detail: $detail,
|
|
39
|
-
checked_at: $checked_at
|
|
40
|
-
}' "$SRC" > "$tmp"; then
|
|
41
|
-
mv "$tmp" "$SRC"
|
|
42
|
-
else
|
|
43
|
-
rm -f "$tmp"
|
|
30
|
+
local key=$1 status=$2 detail=${3:-}
|
|
31
|
+
if ! json_mutate "$SRC" destroy-evidence "$key" "$status" "$detail" "$(destroy_now)"; then
|
|
44
32
|
log " (failed to record destroy evidence for $key)"
|
|
45
33
|
fi
|
|
46
34
|
}
|
|
@@ -48,13 +36,7 @@ destroy_evidence_set() {
|
|
|
48
36
|
route53_a_record_present() {
|
|
49
37
|
local zone_id=$1 domain=$2 public_ip=$3 rrsets present
|
|
50
38
|
rrsets=$(aws route53 list-resource-record-sets --hosted-zone-id "$zone_id" --output json 2>/dev/null) || return 2
|
|
51
|
-
present=$(printf '%s\n' "$rrsets" |
|
|
52
|
-
any(.ResourceRecordSets[]?;
|
|
53
|
-
.Name == $name
|
|
54
|
-
and .Type == "A"
|
|
55
|
-
and any(.ResourceRecords[]?; .Value == $ip)
|
|
56
|
-
)
|
|
57
|
-
' 2>/dev/null) || return 2
|
|
39
|
+
present=$(printf '%s\n' "$rrsets" | json_stdin_route53_a_present "$domain." "$public_ip" 2>/dev/null) || return 2
|
|
58
40
|
[ "$present" = "true" ]
|
|
59
41
|
}
|
|
60
42
|
|
|
@@ -187,26 +169,25 @@ fi
|
|
|
187
169
|
[ -f "$SRC" ] || { echo "$SRC not found."; exit 1; }
|
|
188
170
|
P2P_ROOT=$(cd "${DIREXIO_HOME:-$HOME/.direxio}" 2>/dev/null && pwd -P || printf '%s' "${DIREXIO_HOME:-$HOME/.direxio}")
|
|
189
171
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
AGENT_SERVICE_ID=$(jq -r '.agent_service_id // empty' "$SRC")
|
|
172
|
+
REGION=$(json_get "$SRC" region)
|
|
173
|
+
INSTANCE_ID=$(json_get "$SRC" resources.instance_id)
|
|
174
|
+
ROOT_VOLUME_ID=$(json_get "$SRC" resources.root_volume_id)
|
|
175
|
+
EIP_ID=$(json_get "$SRC" resources.eip_id)
|
|
176
|
+
SG_ID=$(json_get "$SRC" resources.sg_id)
|
|
177
|
+
KEY_NAME=$(json_get "$SRC" resources.key_name)
|
|
178
|
+
KEY_FILE=$(json_get "$SRC" resources.key_file)
|
|
179
|
+
DOMAIN_MODE=$(json_get "$SRC" domain_mode)
|
|
180
|
+
DOMAIN=$(json_get "$SRC" domain)
|
|
181
|
+
AS_URL=$(json_get "$SRC" as_url)
|
|
182
|
+
PUBLIC_IP=$(json_get "$SRC" resources.public_ip)
|
|
183
|
+
ROUTE53_ZONE_ID=$(json_get "$SRC" resources.route53_zone_id)
|
|
184
|
+
ROUTE53_ZONE_NAME=$(json_get "$SRC" resources.route53_zone_name)
|
|
185
|
+
ROUTE53_ZONE_CREATED_BY_DEPLOYER=$(json_get "$SRC" resources.route53_zone_created_by_deployer)
|
|
186
|
+
CC_CONNECT_CONFIG=$(json_get "$SRC" cc_connect_config)
|
|
187
|
+
CC_CONNECT_BINARY=$(json_get "$SRC" cc_connect_binary)
|
|
188
|
+
CC_CONNECT_RUNTIME_DIR=$(json_get "$SRC" cc_connect_runtime_dir)
|
|
189
|
+
AGENT_SERVICE_DIR=$(json_get "$SRC" agent_service_dir)
|
|
190
|
+
AGENT_SERVICE_ID=$(json_get "$SRC" agent_service_id)
|
|
210
191
|
|
|
211
192
|
export NO_PROXY="*"; export no_proxy="*"
|
|
212
193
|
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy 2>/dev/null || true
|
|
@@ -240,7 +221,7 @@ find_route53_zone() {
|
|
|
240
221
|
fi
|
|
241
222
|
;;
|
|
242
223
|
esac
|
|
243
|
-
done < <(aws route53 list-hosted-zones --output json 2>/dev/null |
|
|
224
|
+
done < <(aws route53 list-hosted-zones --output json 2>/dev/null | json_stdin_tsv HostedZones Id Name)
|
|
244
225
|
[ -n "$best_id" ] && printf '%s\t%s\n' "$best_id" "$best_name"
|
|
245
226
|
}
|
|
246
227
|
|
|
@@ -289,7 +270,7 @@ EOF
|
|
|
289
270
|
|| log " (Route53 A record may already be absent or changed; check DNS manually)"
|
|
290
271
|
rm -f "$change_file"
|
|
291
272
|
if [ -n "${change_json:-}" ]; then
|
|
292
|
-
change_id=$(printf '%s\n' "$change_json" |
|
|
273
|
+
change_id=$(printf '%s\n' "$change_json" | json_stdin_get ChangeInfo.Id 2>/dev/null)
|
|
293
274
|
[ -n "$change_id" ] && aws route53 wait resource-record-sets-changed --id "$change_id" 2>/dev/null || true
|
|
294
275
|
fi
|
|
295
276
|
verify_route53_a_record_deleted "$zone_id" "$domain" "$public_ip"
|