LXD客户端
项目描述
为LXD REST API(目前处于高度开发中)提供的异步Python客户端。
使用方法
安装
pip install lxd
初始化客户端
import asyncio
from pathlib import Path
from yarl import URL
from lxd.client import lxd_client
async def main():
client = lxd_client(
URL('https://mylxd:8443/'),
cert_path=Path('~/.config/lxc/client.crt'),
key_path=Path('~/.config/lxc/client.key'),
endpoint_cert_path=Path('~/.config/lxc/servercerts/mylxd.crt'),
)
await client.authenticate(
cert_path=Path('~/.config/lxc/client.crt'),
password='your-trust-password'
)
asyncio.run(main())
示例用法
# Recursion 0 returns only links to objects,
# you can resolve them by awaiting
instance_links = await client.instances.list(recursion=0)
instance = await instance_links[0]
# Recursion 1 returns only some fields
instances = await client.instances.list(recursion=1)
# Recursion 2 returns all possible information
instances = await client.instances.list(recursion=2)
更改实例状态
from lxd.entities.instances import InstanceAction
instances = await client.instances.list()
operation = await client.instances.update_state(
instances[0].name, action=InstanceAction.STOP
)
await client.operations.wait(operation.id) # wait as long as possible
await client.operations.wait(operation.id, timeout=30) # 30s
获取事件流
async for event in client.server.get_events():
# See Event object for more properties
print(event.type)
print(event.metadata)
可用端点
服务器
server.get
获取服务器环境和配置。
# See lxd.entities.server.Server
info = await client.server.get()
print(info.config)
print(info.environment)
server.update_configuration
更新服务器配置。
await client.server.update_configuration({
'core.https_address': '0.0.0.0:8443'
'core.trust_password': 'very-strong-password'
})
server.update_configuration_subset
更新服务器配置的部分。
await client.server.update_configuration_subset({
'images.remote_cache_expiry': 2
})
server.get_resources
获取LXD服务器的硬件信息配置文件。
# See lxd.entities.server.ServerResources
server_resources = await client.server.get_resources()
print(server_resources.cpu)
server.get_events
使用WebSocket连接到事件API。
# Listen all events
async for event in client.server.get_events():
print(event.type)
print(event.metadata)
# Listen to specific events
async for event in client.server.get_events(type='operation'):
print(event.metadata.id)
print(event.metadata.status)
证书
certificates.list
返回受信任证书的列表。
# See lxd.entities.certificates.Certificate
certs = await client.certificates.list()
print(certs[0].fingerprint)
如果您传递recursion=0参数,lxd会只返回引用,这些引用在当前模块中表示为lxd.entities.certificates.CertificateLink对象。
如果您await这样的链接对象,您将获得该对象本身(每个await调用都会执行单独的HTTP请求)。
cert_links = await client.certificates.list(recursion=0)
certs = await asyncio.gather(*cert_links)
certificates.get
通过指纹从受信任存储中获取特定证书条目。
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.primitives import hashes
fprint = '97f267c0fe20fd013b6b4ba3f5440ea3e9361ce8568d41c633f28c620ab37ea0'
cert = await client.certificates.get(fprint)
cert_obj = load_pem_x509_certificate(cert.certificate.encode())
assert cert_obj.fingerprint(hashes.SHA256()).hex() == fprint
certificates.add
将证书添加到信任存储库作为受信任用户(客户端证书应该是受信任的)。
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa
private_key = rsa.generate_private_key(
public_exponent=65537, key_size=2048, backend=default_backend()
)
subj = x509.Name([
x509.NameAttribute(NameOID.COMMON_NAME, "alvassin@osx")
])
cert = x509.CertificateBuilder().subject_name(
subj
).issuer_name(
subj
).public_key(
private_key.public_key()
).serial_number(
x509.random_serial_number()
).not_valid_before(
datetime.utcnow()
).not_valid_after(
datetime.utcnow() + timedelta(days=365)
).sign(
private_key=private_key,
algorithm=hashes.SHA256(),
backend=default_backend()
)
await client.certificates.add(
cert.public_bytes(serialization.Encoding.PEM)
)
如果指定了密码参数,则将证书添加到信任存储库作为不受信任的用户。
await client.certificates.add(
cert.public_bytes(serialization.Encoding.PEM),
password='your-trust-password'
)
certificates.update_configuration
更新整个证书配置。
await client.certificates.update_configuration(
'97f267c0fe20fd013b6b4ba3f5440ea3e9361ce8568d41c633f28c620ab37ea0',
certificate='-----BEGIN CERTIFICATE-----\n...',
name='new-name',
projects=[],
restricted=False,
type='client'
)
certificates.update_configuration_subset
更新证书配置的一部分。
await client.certificates.update_configuration_subset(
'97f267c0fe20fd013b6b4ba3f5440ea3e9361ce8568d41c633f28c620ab37ea0',
name='another-name'
)
certificates.remove
从信任存储库中删除证书。
await client.certificates.remove(
'97f267c0fe20fd013b6b4ba3f5440ea3e9361ce8568d41c633f28c620ab37ea0'
)
实例
client.instances.list
client.instances.get
client.instances.create
client.instances.delete
client.instances.get_state
client.instances.update_state
操作
client.operations.list
client.operations.get
client.operations.wait
client.operations.cancel
待办事项
添加过滤支持。
项目详情
关闭
lxd-0.2.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 723b01b583422560f63033b6bb2999132c0df6f6ac27670d9644d60ba4c47cd6 |
|
MD5 | 0e2f89dde8b17afd8ad6c514d2ac0998 |
|
BLAKE2b-256 | 099629bcd95d5ec4558fc2f9853bab094d438952af79c28ff5cb9e00af8a1977 |