mirror of
https://github.com/hanzoai/bootnode.git
synced 2026-09-30 20:46:32 +00:00
Prefer to create delta snapshot if possible
This commit is contained in:
@@ -55,7 +55,7 @@ logs:
|
||||
kubectl logs geth-$(net) -f
|
||||
|
||||
ssh:
|
||||
kubectl exec -it geth-$(net) -- /bin/bash
|
||||
kubectl exec -it geth-$(net)-02 -- /bin/bash
|
||||
|
||||
attach:
|
||||
kubectl exec -it geth-$(net)-01 -- $(geth) attach
|
||||
|
||||
+26
-9
@@ -22,9 +22,34 @@ class Bootnode(object):
|
||||
print('{0}\t{1}\t{2}'.format(snap.name, snap.link, snap.status))
|
||||
|
||||
def get_last_snapshot(self, network=None):
|
||||
snap = self.gcloud.last_snapshot(network=network)
|
||||
snap = self.gcloud.get_last_snapshot(network=network)
|
||||
print('{0}\t{1}\t{2}'.format(snap.name, snap.link, snap.status))
|
||||
|
||||
def snapshot_pod(self, name):
|
||||
pod = self.kube.get_pod(name)
|
||||
if pod.syncing():
|
||||
raise Exception('Pod not synced: ""' % pod.name)
|
||||
name = "{0}-{1}-{2}".format(pod.client, pod.network, pod.block_number())
|
||||
print(self.gcloud.snapshot_disk(pod.disk, name, pod_name=pod.name))
|
||||
|
||||
def update_snapshot(self, network=None):
|
||||
if not network:
|
||||
raise Exception('Network must be specified')
|
||||
|
||||
# Re-use last snapshot so subsequent snapshots are just deltas,
|
||||
# otherwise find any sync'd pod and start there
|
||||
snap = self.gcloud.get_last_snapshot(network=network)
|
||||
if snap:
|
||||
pod = self.kube.get_pod(snap.pod)
|
||||
else:
|
||||
pod = self.kube.get_synced_pod(network)
|
||||
|
||||
if not pod or pod.syncing():
|
||||
raise Exception('Pod not synced: ""' % pod.name)
|
||||
|
||||
name = "{0}-{1}-{2}".format(pod.client, pod.network, pod.block_number())
|
||||
print(self.gcloud.snapshot_disk(pod.disk, name, pod_name=pod.name))
|
||||
|
||||
# Pods
|
||||
def list_pods(self, network=None):
|
||||
for pod in self.kube.list_pods(network=network):
|
||||
@@ -43,14 +68,6 @@ class Bootnode(object):
|
||||
print('{0}\t{1}\t{2}\t{3}'.format(pod.name, pod.phase,
|
||||
pod.block_number(), pod.ip))
|
||||
|
||||
def snapshot_pod(self, name, pod_name=None, network=None):
|
||||
if pod_name:
|
||||
pod = self.kube.get_pod(pod_name)
|
||||
else:
|
||||
pod = self.kube.get_synced_pod(network)
|
||||
|
||||
print(self.gcloud.snapshot_disk(pod.disk, name))
|
||||
|
||||
# Scaling
|
||||
def scale_up(args):
|
||||
pass
|
||||
|
||||
+10
-3
@@ -48,6 +48,9 @@ class Snapshot(object):
|
||||
self.network = bits[1]
|
||||
self.block = int(bits[2])
|
||||
|
||||
# self.pod = obj['labels']['pod']
|
||||
self.pod = 'geth-testnet-02'
|
||||
|
||||
self.id = obj['id']
|
||||
self.created_at = obj['creationTimestamp']
|
||||
self.disk_size = obj['diskSizeGb'] + 'Gi'
|
||||
@@ -105,12 +108,16 @@ class Gcloud(object):
|
||||
return [s for s in snaps if s.network == network]
|
||||
|
||||
def get_last_snapshot(self, network=None):
|
||||
return max(self.list_snapshots(network), key=lambda x: x.created_at)
|
||||
return max(self.list_snapshots(network), key=lambda x: x.block)
|
||||
|
||||
def snapshot_disk(self, disk, name, project=None, zone=None):
|
||||
def snapshot_disk(self, disk, name, pod_name=None, project=None, zone=None):
|
||||
if not project:
|
||||
project = self.project
|
||||
if not zone:
|
||||
zone = self.zone
|
||||
body = {
|
||||
'name': name,
|
||||
'labels': {'pod-name': pod_name},
|
||||
}
|
||||
return self.api.disks().createSnapshot(project=project, zone=zone,
|
||||
disk=disk, body={'name': name}).execute()
|
||||
disk=disk, body=body).execute()
|
||||
|
||||
@@ -13,6 +13,9 @@ def run_command(cmd, args):
|
||||
# Create kwargs from args specified
|
||||
kwargs = dict(map(lambda k: (k, getattr(args, k)), keys))
|
||||
|
||||
# Clear out any default args that are unspecified
|
||||
kwargs = {k: v for k, v in kwargs.items() if v is not None}
|
||||
|
||||
# Call relevant method on Bootnode
|
||||
getattr(bootnode, cmd)(**kwargs)
|
||||
|
||||
@@ -37,10 +40,14 @@ if __name__ == '__main__':
|
||||
last_parser.set_defaults(command='get_last_snapshot')
|
||||
|
||||
snapshot_pod_parser = subparsers.add_parser('snapshot-pod', help='Snapshot pod')
|
||||
snapshot_pod_parser.add_argument('--pod_name', help='Name of pod to snapshot')
|
||||
snapshot_pod_parser.add_argument('name', help='Name of snapshot')
|
||||
snapshot_pod_parser.add_argument('name', help='Name of pod to snapshot')
|
||||
snapshot_pod_parser.set_defaults(command='snapshot_pod')
|
||||
|
||||
update_snapshot_parser = subparsers.add_parser('update-snapshot',
|
||||
help='Update snapshot for a given network')
|
||||
update_snapshot_parser.add_argument('network', help='Network to update snapshot for')
|
||||
update_snapshot_parser.set_defaults(command='update_snapshot')
|
||||
|
||||
# Pods
|
||||
list_parser = subparsers.add_parser('pods', help='List pods')
|
||||
list_parser.set_defaults(command='list_pods')
|
||||
|
||||
Reference in New Issue
Block a user