ppio.sandbox.list() 方法列出 Sandbox。
获取到正在运行的 Sandbox 的信息后,你可以使用 ppio.sandbox.connect() 方法连接到它。
from ppio_sandbox import PPIO, SandboxQuery, SandboxState
ppio = PPIO()
sandbox = ppio.sandbox.create(
metadata={
'name': 'My Sandbox',
},
)
# 列出所有运行中的 Sandbox。
running_sandboxes_paginator = ppio.sandbox.list(
query=SandboxQuery(
state=[SandboxState.RUNNING],
),
)
running_sandboxes = running_sandboxes_paginator.next_items()
running_sandbox = running_sandboxes[0]
print('Running sandbox metadata:', running_sandbox.metadata)
print('Running sandbox id:', running_sandbox.sandbox_id)
print('Running sandbox started at:', running_sandbox.started_at)
print('Running sandbox end at:', running_sandbox.end_at)
print('Running sandbox template id:', running_sandbox.template_id)
print('Running sandbox state:', running_sandbox.state)
sandbox.kill()
import { PPIO, SandboxState } from 'ppio-sandbox'
const ppio = new PPIO()
// 创建 Sandbox。
const sandbox = await ppio.sandbox.create({
metadata: {
name: 'My Sandbox',
},
})
// 列出所有运行中的 Sandbox。
const runningSandboxesPaginator = await ppio.sandbox.list({
query: {
state: [SandboxState.RUNNING],
},
})
const runningSandboxes = await runningSandboxesPaginator.nextItems()
const runningSandbox = runningSandboxes[0]
console.log('Running sandbox metadata:', runningSandbox.metadata)
console.log('Running sandbox id:', runningSandbox.sandboxId)
console.log('Running sandbox started at:', runningSandbox.startedAt)
console.log('Running sandbox ends at:', runningSandbox.endAt)
console.log('Running sandbox template id:', runningSandbox.templateId)
console.log('Running sandbox state:', runningSandbox.state)
await sandbox.kill()
# 默认以 Pretty table 输出
ppio sandbox list
# 通过 metadata 过滤
ppio sandbox list --metadata key1=value1
# JSON 格式输出
ppio sandbox list --output json
筛选 Sandbox
你可以通过指定元数据(Metadata)键值对来筛选 Sandbox。 指定多个键值对时,只会返回同时匹配所有键值对的 Sandbox。 当你拥有大量 Sandbox 而只想查找其中特定的一部分时,这非常有用。筛选在服务端执行。from ppio_sandbox import PPIO, SandboxQuery
ppio = PPIO()
# 创建带元数据的 Sandbox。
sandbox = ppio.sandbox.create(
metadata={
'env': 'dev',
'app': 'my-app',
'user_id': '123',
},
)
# 列出所有 `user_id` 为 `123` 且 `env` 为 `dev` 的运行中 Sandbox。
paginator = ppio.sandbox.list(
query=SandboxQuery(
metadata={
'user_id': '123',
'env': 'dev',
}
),
)
for running_sandbox in paginator.next_items():
print(
'list running sandbox (%s) metadata:' % running_sandbox.sandbox_id,
running_sandbox.metadata,
)
sandbox.kill()
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
// 创建带元数据的 Sandbox。
const sandbox = await ppio.sandbox.create({
metadata: {
env: 'dev',
app: 'my-app',
userId: '123',
},
})
// 列出所有 `userId` 为 `123` 且 `env` 为 `dev` 的运行中 Sandbox。
const runningSandboxesPaginator = await ppio.sandbox.list({
query: {
metadata: { userId: '123', env: 'dev' },
},
})
const runningSandboxes = await runningSandboxesPaginator.nextItems()
for (const runningSandbox of runningSandboxes) {
console.log(
`list running sandbox (${runningSandbox.sandboxId}) metadata:`,
runningSandbox.metadata,
)
}
await sandbox.kill()
列出 Sandbox
ppio.sandbox.list() 方法现已支持分页。要进一步了解新版方法的分页技巧,请参阅高级分页章节。
from ppio_sandbox import PPIO
ppio = PPIO()
sandbox = ppio.sandbox.create()
# 列出所有 Sandbox(运行中和已暂停)
paginator = ppio.sandbox.list()
first_page = paginator.next_items()
if paginator.has_next:
next_page = paginator.next_items()
sandbox.kill()
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create()
const paginator = await ppio.sandbox.list()
// 获取第一页 Sandbox(运行中和已暂停)
const firstPage = await paginator.nextItems()
if (paginator.hasNext) {
// 获取下一页 Sandbox
const nextPage = await paginator.nextItems()
}
await sandbox.kill()
筛选 Sandbox
你可以根据 Sandbox 的当前状态进行筛选。state 参数接受running、paused 或两者同时指定,以返回处于指定状态的 Sandbox。
from ppio_sandbox import PPIO, SandboxQuery, SandboxState
ppio = PPIO()
sandbox = ppio.sandbox.create()
# 列出所有运行中或已暂停的 Sandbox。
paginator = ppio.sandbox.list(
query=SandboxQuery(
state=[SandboxState.RUNNING, SandboxState.PAUSED],
),
)
# 获取第一页 Sandbox(运行中和已暂停)
sandboxes = paginator.next_items()
sandbox.kill()
import { PPIO, SandboxState } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create()
// 列出所有运行中或已暂停的 Sandbox。
const paginator = await ppio.sandbox.list({
query: {
state: [SandboxState.RUNNING, SandboxState.PAUSED],
},
})
const sandboxes = await paginator.nextItems()
await sandbox.kill()
from ppio_sandbox import PPIO, SandboxQuery
ppio = PPIO()
# 创建带元数据的 Sandbox。
sandbox = ppio.sandbox.create(
metadata={
'env': 'dev',
'app': 'my-app',
'user_id': '123',
},
)
# 列出所有 `user_id` 为 `123` 且 `env` 为 `dev` 的 Sandbox。
paginator = ppio.sandbox.list(
query=SandboxQuery(
metadata={
'user_id': '123',
'env': 'dev',
}
),
)
sandboxes = paginator.next_items()
sandbox.kill()
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
// 创建带元数据的 Sandbox。
const sandbox = await ppio.sandbox.create({
metadata: {
env: 'dev',
app: 'my-app',
userId: '123',
},
})
// 列出所有 `userId` 为 `123` 且 `env` 为 `dev` 的 Sandbox。
const paginator = await ppio.sandbox.list({
query: {
metadata: { userId: '123', env: 'dev' },
},
})
const sandboxes = await paginator.nextItems()
await sandbox.kill()
高级分页
如需更精细地控制分页,可以指定每页返回的条目数量(默认值和最大值均为 100),并提供偏移参数(nextToken 或 next_token)来指定分页的起始位置。
from ppio_sandbox import PPIO
ppio = PPIO()
sandbox = ppio.sandbox.create()
paginator = ppio.sandbox.list(
limit=100,
# next_token='',
)
# 获取下一页
paginator.next_items()
# 是否有下一页
print('paginator.has_next: ', paginator.has_next)
# 下一页的偏移参数
print('paginator.next_token: ', paginator.next_token)
sandbox.kill()
import { PPIO } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create()
const paginator = await ppio.sandbox.list({
limit: 100,
// nextToken: '',
})
// 获取下一页
await paginator.nextItems()
// 分页器的其他属性
// 是否有下一页
console.log('paginator.hasNext: ', paginator.hasNext)
// 下一页的 token
console.log('paginator.nextToken: ', paginator.nextToken)
await sandbox.kill()
hasNext / has_next 在获取第一页之前初始值为 true,在返回最后一页之后变为 false。
from ppio_sandbox import PPIO, SandboxInfo
ppio = PPIO()
sandbox = ppio.sandbox.create()
paginator = ppio.sandbox.list()
# 获取所有 Sandbox
sandboxes: list[SandboxInfo] = []
while paginator.has_next:
items = paginator.next_items()
sandboxes.extend(items)
sandbox.kill()
import { PPIO, SandboxInfo } from 'ppio-sandbox'
const ppio = new PPIO()
const sandbox = await ppio.sandbox.create()
const paginator = await ppio.sandbox.list()
const sandboxes: SandboxInfo[] = []
while (paginator.hasNext) {
const items = await paginator.nextItems()
sandboxes.push(...items)
}
for (const sandbox of sandboxes) {
console.log(`list sandbox (${sandbox.sandboxId})`)
}
await sandbox.kill()