chore: Implement HetznerVolume model and use it instead dynamic json
parent
4da4ed6afd
commit
ffa13aee04
|
@ -131,8 +131,9 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<GenericResult> createVolume() async {
|
Future<GenericResult<HetznerVolume?>> createVolume() async {
|
||||||
Response? createVolumeResponse;
|
Response? createVolumeResponse;
|
||||||
|
HetznerVolume? volume;
|
||||||
final Dio client = await getClient();
|
final Dio client = await getClient();
|
||||||
try {
|
try {
|
||||||
createVolumeResponse = await client.post(
|
createVolumeResponse = await client.post(
|
||||||
|
@ -146,6 +147,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
'format': 'ext4'
|
'format': 'ext4'
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
volume = HetznerVolume.fromJson(createVolumeResponse.data);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
return GenericResult(
|
return GenericResult(
|
||||||
|
@ -158,7 +160,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
return GenericResult(
|
return GenericResult(
|
||||||
data: createVolumeResponse.data,
|
data: volume,
|
||||||
success: true,
|
success: true,
|
||||||
code: createVolumeResponse.statusCode,
|
code: createVolumeResponse.statusCode,
|
||||||
message: createVolumeResponse.statusMessage,
|
message: createVolumeResponse.statusMessage,
|
||||||
|
|
|
@ -113,3 +113,24 @@ class HetznerLocation {
|
||||||
static HetznerLocation fromJson(final Map<String, dynamic> json) =>
|
static HetznerLocation fromJson(final Map<String, dynamic> json) =>
|
||||||
_$HetznerLocationFromJson(json);
|
_$HetznerLocationFromJson(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class HetznerVolume {
|
||||||
|
HetznerVolume(
|
||||||
|
this.id,
|
||||||
|
this.sizeByte,
|
||||||
|
this.serverId,
|
||||||
|
this.name,
|
||||||
|
this.linuxDevice,
|
||||||
|
);
|
||||||
|
final int id;
|
||||||
|
final int sizeByte;
|
||||||
|
final int? serverId;
|
||||||
|
final String name;
|
||||||
|
|
||||||
|
@JsonKey(name: 'linux_device')
|
||||||
|
final String? linuxDevice;
|
||||||
|
|
||||||
|
static HetznerVolume fromJson(final Map<String, dynamic> json) =>
|
||||||
|
_$HetznerVolumeFromJson(json);
|
||||||
|
}
|
||||||
|
|
|
@ -119,3 +119,21 @@ Map<String, dynamic> _$HetznerLocationToJson(HetznerLocation instance) =>
|
||||||
'description': instance.description,
|
'description': instance.description,
|
||||||
'network_zone': instance.zone,
|
'network_zone': instance.zone,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
HetznerVolume _$HetznerVolumeFromJson(Map<String, dynamic> json) =>
|
||||||
|
HetznerVolume(
|
||||||
|
json['id'] as int,
|
||||||
|
json['sizeByte'] as int,
|
||||||
|
json['serverId'] as int?,
|
||||||
|
json['name'] as String,
|
||||||
|
json['linux_device'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$HetznerVolumeToJson(HetznerVolume instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'id': instance.id,
|
||||||
|
'sizeByte': instance.sizeByte,
|
||||||
|
'serverId': instance.serverId,
|
||||||
|
'name': instance.name,
|
||||||
|
'linux_device': instance.linuxDevice,
|
||||||
|
};
|
||||||
|
|
|
@ -441,7 +441,7 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final volume = volumeResult.data['volume'];
|
final volume = volumeResult.data!;
|
||||||
final serverApiToken = StringGenerators.apiToken();
|
final serverApiToken = StringGenerators.apiToken();
|
||||||
final hostname = getHostnameFromDomain(
|
final hostname = getHostnameFromDomain(
|
||||||
installationData.serverDomain.domainName,
|
installationData.serverDomain.domainName,
|
||||||
|
@ -455,7 +455,7 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
dnsProviderType:
|
dnsProviderType:
|
||||||
dnsProviderToInfectName(installationData.dnsProviderType),
|
dnsProviderToInfectName(installationData.dnsProviderType),
|
||||||
hostName: hostname,
|
hostName: hostname,
|
||||||
volumeId: volume['id'],
|
volumeId: volume.id,
|
||||||
base64Password: base64.encode(
|
base64Password: base64.encode(
|
||||||
utf8.encode(installationData.rootUser.password ?? 'PASS'),
|
utf8.encode(installationData.rootUser.password ?? 'PASS'),
|
||||||
),
|
),
|
||||||
|
@ -464,7 +464,7 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!serverResult.success || serverResult.data == null) {
|
if (!serverResult.success || serverResult.data == null) {
|
||||||
await _adapter.api().deleteVolume(volume['id']);
|
await _adapter.api().deleteVolume(volume.id);
|
||||||
await Future.delayed(const Duration(seconds: 5));
|
await Future.delayed(const Duration(seconds: 5));
|
||||||
if (serverResult.message != null &&
|
if (serverResult.message != null &&
|
||||||
serverResult.message == 'uniqueness_error') {
|
serverResult.message == 'uniqueness_error') {
|
||||||
|
@ -530,11 +530,11 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
ip4: serverResult.data['server']['public_net']['ipv4']['ip'],
|
ip4: serverResult.data['server']['public_net']['ipv4']['ip'],
|
||||||
createTime: DateTime.now(),
|
createTime: DateTime.now(),
|
||||||
volume: ServerVolume(
|
volume: ServerVolume(
|
||||||
id: volume['id'],
|
id: volume.id,
|
||||||
name: volume['name'],
|
name: volume.name,
|
||||||
sizeByte: volume['size'],
|
sizeByte: volume.sizeByte,
|
||||||
serverId: volume['server'],
|
serverId: volume.serverId,
|
||||||
linuxDevice: volume['linux_device'],
|
linuxDevice: volume.linuxDevice,
|
||||||
),
|
),
|
||||||
apiToken: serverApiToken,
|
apiToken: serverApiToken,
|
||||||
provider: ServerProviderType.hetzner,
|
provider: ServerProviderType.hetzner,
|
||||||
|
@ -564,7 +564,7 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
CallbackDialogueChoice(
|
CallbackDialogueChoice(
|
||||||
title: 'modals.try_again'.tr(),
|
title: 'modals.try_again'.tr(),
|
||||||
callback: () async {
|
callback: () async {
|
||||||
await _adapter.api().deleteVolume(volume['id']);
|
await _adapter.api().deleteVolume(volume.id);
|
||||||
await Future.delayed(const Duration(seconds: 5));
|
await Future.delayed(const Duration(seconds: 5));
|
||||||
final deletion = await deleteServer(hostname);
|
final deletion = await deleteServer(hostname);
|
||||||
if (deletion.success) {
|
if (deletion.success) {
|
||||||
|
@ -673,17 +673,12 @@ class HetznerServerProvider extends ServerProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final volumeId = result.data['volume']['id'];
|
|
||||||
final volumeSize = result.data['volume']['size'];
|
|
||||||
final volumeServer = result.data['volume']['server'];
|
|
||||||
final volumeName = result.data['volume']['name'];
|
|
||||||
final volumeDevice = result.data['volume']['linux_device'];
|
|
||||||
volume = ServerVolume(
|
volume = ServerVolume(
|
||||||
id: volumeId,
|
id: result.data!.id,
|
||||||
name: volumeName,
|
name: result.data!.name,
|
||||||
sizeByte: volumeSize,
|
sizeByte: result.data!.sizeByte,
|
||||||
serverId: volumeServer,
|
serverId: result.data!.serverId,
|
||||||
linuxDevice: volumeDevice,
|
linuxDevice: result.data!.linuxDevice,
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
|
|
Loading…
Reference in New Issue