0

Initiate a Droplet Action

by
Published Dec 20, 2024

To initiate an action on a Droplet send a POST request to `/v2/droplets/$DROPLET_ID/actions`.

Script digitalocean Verified

The script

Submitted by hugo697 Bun
Verified 536 days ago
1
//native
2
type Digitalocean = {
3
  token: string;
4
};
5
/**
6
 * Initiate a Droplet Action
7
 * To initiate an action on a Droplet send a POST request to
8
`/v2/droplets/$DROPLET_ID/actions`.
9
 */
10
export async function main(
11
  auth: Digitalocean,
12
  droplet_id: string,
13
  body:
14
    | {
15
        type:
16
          | "enable_backups"
17
          | "disable_backups"
18
          | "reboot"
19
          | "power_cycle"
20
          | "shutdown"
21
          | "power_off"
22
          | "power_on"
23
          | "restore"
24
          | "password_reset"
25
          | "resize"
26
          | "rebuild"
27
          | "rename"
28
          | "change_kernel"
29
          | "enable_ipv6"
30
          | "snapshot";
31
      }
32
    | ({
33
        type:
34
          | "enable_backups"
35
          | "disable_backups"
36
          | "reboot"
37
          | "power_cycle"
38
          | "shutdown"
39
          | "power_off"
40
          | "power_on"
41
          | "restore"
42
          | "password_reset"
43
          | "resize"
44
          | "rebuild"
45
          | "rename"
46
          | "change_kernel"
47
          | "enable_ipv6"
48
          | "snapshot";
49
      } & {
50
        backup_policy?: {
51
          plan?: "daily" | "weekly";
52
          weekday?: "SUN" | "MON" | "TUE" | "WED" | "THU" | "FRI" | "SAT";
53
          hour?: 0 | 4 | 8 | 12 | 16 | 20;
54
          window_length_hours?: number;
55
          retention_period_days?: number;
56
        } & {};
57
      })
58
    | ({
59
        type:
60
          | "enable_backups"
61
          | "disable_backups"
62
          | "reboot"
63
          | "power_cycle"
64
          | "shutdown"
65
          | "power_off"
66
          | "power_on"
67
          | "restore"
68
          | "password_reset"
69
          | "resize"
70
          | "rebuild"
71
          | "rename"
72
          | "change_kernel"
73
          | "enable_ipv6"
74
          | "snapshot";
75
      } & { image?: number })
76
    | ({
77
        type:
78
          | "enable_backups"
79
          | "disable_backups"
80
          | "reboot"
81
          | "power_cycle"
82
          | "shutdown"
83
          | "power_off"
84
          | "power_on"
85
          | "restore"
86
          | "password_reset"
87
          | "resize"
88
          | "rebuild"
89
          | "rename"
90
          | "change_kernel"
91
          | "enable_ipv6"
92
          | "snapshot";
93
      } & { disk?: false | true; size?: string })
94
    | ({
95
        type:
96
          | "enable_backups"
97
          | "disable_backups"
98
          | "reboot"
99
          | "power_cycle"
100
          | "shutdown"
101
          | "power_off"
102
          | "power_on"
103
          | "restore"
104
          | "password_reset"
105
          | "resize"
106
          | "rebuild"
107
          | "rename"
108
          | "change_kernel"
109
          | "enable_ipv6"
110
          | "snapshot";
111
      } & { image?: string | number })
112
    | ({
113
        type:
114
          | "enable_backups"
115
          | "disable_backups"
116
          | "reboot"
117
          | "power_cycle"
118
          | "shutdown"
119
          | "power_off"
120
          | "power_on"
121
          | "restore"
122
          | "password_reset"
123
          | "resize"
124
          | "rebuild"
125
          | "rename"
126
          | "change_kernel"
127
          | "enable_ipv6"
128
          | "snapshot";
129
      } & { name?: string })
130
    | ({
131
        type:
132
          | "enable_backups"
133
          | "disable_backups"
134
          | "reboot"
135
          | "power_cycle"
136
          | "shutdown"
137
          | "power_off"
138
          | "power_on"
139
          | "restore"
140
          | "password_reset"
141
          | "resize"
142
          | "rebuild"
143
          | "rename"
144
          | "change_kernel"
145
          | "enable_ipv6"
146
          | "snapshot";
147
      } & { kernel?: number })
148
    | ({
149
        type:
150
          | "enable_backups"
151
          | "disable_backups"
152
          | "reboot"
153
          | "power_cycle"
154
          | "shutdown"
155
          | "power_off"
156
          | "power_on"
157
          | "restore"
158
          | "password_reset"
159
          | "resize"
160
          | "rebuild"
161
          | "rename"
162
          | "change_kernel"
163
          | "enable_ipv6"
164
          | "snapshot";
165
      } & { name?: string }),
166
) {
167
  const url = new URL(
168
    `https://api.digitalocean.com/v2/droplets/${droplet_id}/actions`,
169
  );
170

171
  const response = await fetch(url, {
172
    method: "POST",
173
    headers: {
174
      "Content-Type": "application/json",
175
      Authorization: "Bearer " + auth.token,
176
    },
177
    body: JSON.stringify(body),
178
  });
179
  if (!response.ok) {
180
    const text = await response.text();
181
    throw new Error(`${response.status} ${text}`);
182
  }
183
  return await response.json();
184
}
185