Esempio n. 1
0
class PoolCreateData(Base):
    pool_id = fields.Integer()
    cus = fields.Integer()
    sus = fields.Integer()
    ipv4us = fields.Integer()
    node_ids = fields.List(fields.String())
    currencies = fields.List(fields.String())
Esempio n. 2
0
class VirtualMachine(Base):
    id = fields.Integer()
    name = fields.String(default="")
    hub_url = fields.String(default="")
    description = fields.String(default="")
    network_connection = fields.List(fields.Object(ContainerNetworkConnection))
    network_id = fields.String()
    farmer_tid = fields.Integer()
    size = fields.Integer()
    info = fields.Object(ReservationInfo)
    ssh_keys = fields.List(fields.String())
    public_ip = fields.Integer()
    ipaddress = fields.IPAddress()
    SIZES = VMSIZES

    def resource_units(self):

        resource_units = ResourceUnitAmount()
        size = VMSIZES.get(self.size)
        if not size:
            raise j.exceptions.Input(f"VM size {self.size} not supported")

        resource_units.cru += size["cru"]
        resource_units.mru += size["mru"]
        resource_units.sru += size["sru"]
        return resource_units
Esempio n. 3
0
class GatewayProxy(Base):
    id = fields.Integer()
    domain = fields.String(default="")
    addr = fields.String(default="")
    port = fields.Integer()
    port_tls = fields.Integer()
    info = fields.Object(ReservationInfo)
Esempio n. 4
0
class PoolCreate(Base):
    json = fields.String()
    data_reservation = fields.Object(PoolCreateData)
    customer_tid = fields.Integer()
    customer_signature = fields.String()
    sponsor_tid = fields.Integer()
    sponsor_signature = fields.String()
Esempio n. 5
0
class Network(Base):
    name = fields.String(default="")
    workload_id = fields.Integer()
    iprange = fields.IPRange(default="10.10.0.0/16")
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    network_resources = fields.List(fields.Object(NetworkResource))
    farmer_tid = fields.Integer()
Esempio n. 6
0
class S3ZDB(VDCHostBase):
    size = fields.Integer()
    port = fields.Integer()
    namespace = fields.String()
    proxy_address = fields.String()

    @classmethod
    def from_workload(cls, workload):
        result_json = j.data.serializers.json.loads(workload.info.result.data_json)
        if not result_json:
            j.logger.warning(f"Couldn't get result details for zdb workload: {workload.id}")
            return
        if "IPs" in result_json:
            ip = result_json["IPs"][0]
        else:
            ip = result_json["IP"]
        namespace = result_json["Namespace"]
        port = result_json["Port"]
        zdb = cls()
        zdb.node_id = workload.info.node_id
        zdb.pool_id = workload.info.pool_id
        zdb.wid = workload.id
        zdb.size = workload.size
        zdb.ip_address = ip
        zdb.port = port
        zdb.namespace = namespace
        return zdb
Esempio n. 7
0
class TfgridSolution1(Base):
    id = fields.Integer()
    name = fields.String(default="")
    solution_type = fields.Enum(SolutionType)
    rid = fields.Integer()
    form_info = fields.Typed(dict)
    explorer = fields.String(default="")
Esempio n. 8
0
class Container(Base):
    id = fields.Integer()
    flist = fields.String(default="")
    hub_url = fields.String(default="")
    storage_url = fields.String(default="")
    environment = fields.Typed(dict)
    secret_environment = fields.Typed(dict)
    entrypoint = fields.String(default="")
    interactive = fields.Boolean(default=True)
    volumes = fields.List(fields.Object(ContainerMount))
    network_connection = fields.List(fields.Object(ContainerNetworkConnection))
    stats = fields.List(fields.Object(ContainerStats))
    farmer_tid = fields.Integer()
    logs = fields.List(fields.Object(ContainerLogs))
    capacity = fields.Object(ContainerCapacity)
    info = fields.Object(ReservationInfo)

    def resource_units(self):
        cap = self.capacity
        resource_units = ResourceUnitAmount()
        resource_units.cru = cap.cpu
        resource_units.mru = round(cap.memory / 1024 * 10000) / 10000
        storage_size = round(cap.disk_size / 1024 * 10000) / 10000
        storage_size = max(0, storage_size - 50)  # we offer the 50 first GB of storage for container root filesystem
        if cap.disk_type == DiskType.HDD:
            resource_units.hru += storage_size
        elif cap.disk_type == DiskType.SSD:
            resource_units.sru += storage_size
        return resource_units
Esempio n. 9
0
class K8s(Base):
    id = fields.Integer()
    size = fields.Integer()
    network_id = fields.String(default="")
    ipaddress = fields.IPAddress()
    cluster_secret = fields.String(default="")
    master_ips = fields.List(fields.IPAddress())
    ssh_keys = fields.List(fields.String())
    public_ip = fields.Integer()
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    info = fields.Object(ReservationInfo)
    datastore_endpoint = fields.String(default="")
    disable_default_ingress = fields.Boolean(default=True)

    SIZES = VMSIZES

    def resource_units(self):

        resource_units = ResourceUnitAmount()
        size = VMSIZES.get(self.size)
        if not size:
            raise j.exceptions.Input(f"kubernetes size {self.size} not supported")

        resource_units.cru += size["cru"]
        resource_units.mru += size["mru"]
        resource_units.sru += size["sru"]
        return resource_units
Esempio n. 10
0
class GatewayProxy(Base):
    id = fields.Integer()
    domain = fields.String(default="")
    addr = fields.String(default="")
    port = fields.Integer()
    port_tls = fields.Integer()
    info = fields.Object(ReservationInfo)

    def resource_units(self):
        return ResourceUnitAmount()
Esempio n. 11
0
class ZdbNamespace(Base):
    id = fields.Integer()
    node_id = fields.String(default="")
    size = fields.Integer()
    mode = fields.Enum(ZDBMode)
    password = fields.String(default="")
    disk_type = fields.Enum(DiskType)
    public = fields.Boolean(default=False)
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    info = fields.Object(ReservationInfo)
Esempio n. 12
0
class NetworkResource(Base):
    id = fields.Integer()
    name = fields.String(default="")
    network_iprange = fields.IPRange(default="10.10.0.0/16")
    wireguard_private_key_encrypted = fields.String(default="")
    wireguard_public_key = fields.String(default="")
    wireguard_listen_port = fields.Integer()
    iprange = fields.IPRange(default="10.10.10.0/24")
    peers = fields.List(fields.Object(WireguardPeer))
    info = fields.Object(ReservationInfo)
Esempio n. 13
0
class K8s(Base):
    id = fields.Integer()
    size = fields.Integer()
    network_id = fields.String(default="")
    ipaddress = fields.IPAddress()
    cluster_secret = fields.String(default="")
    master_ips = fields.List(fields.IPAddress())
    ssh_keys = fields.List(fields.String())
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    info = fields.Object(ReservationInfo)
Esempio n. 14
0
class Pool(Base):
    pool_id = fields.Integer()
    cus = fields.Float()
    sus = fields.Float()
    node_ids = fields.List(fields.String())
    last_updated = fields.DateTime()
    active_cu = fields.Float()
    active_su = fields.Float()
    empty_at = fields.Integer()  # can't be set to date because of max int64 value
    customer_tid = fields.Integer()
    active_workload_ids = fields.List(fields.Integer())
Esempio n. 15
0
class PoolPayment(Base):
    id = fields.Integer()
    farmer_id = fields.Integer()
    address = fields.String()
    expiration = fields.DateTime()
    asset = fields.String()
    amount = fields.Integer()
    paid = fields.Boolean()
    released = fields.Boolean()
    canceled = fields.Boolean()
    cause = fields.String()
Esempio n. 16
0
class TfgridSolutionsPayment1(Base):
    id = fields.Integer()
    rid = fields.Integer()
    explorer = fields.String(default="")
    currency = fields.String(default="")
    escrow_address = fields.String(default="")
    escrow_asset = fields.String(default="")
    total_amount = fields.String(default="")
    transaction_fees = fields.String(default="")
    payment_source = fields.String(default="")
    farmer_payments = fields.Typed(dict, default={})
    time = fields.DateTime(default=datetime.utcnow)
Esempio n. 17
0
class Farm(Base):
    id = fields.Integer()
    threebot_id = fields.Integer()
    iyo_organization = fields.String(default="")
    name = fields.String(default="")
    wallet_addresses = fields.List(fields.Object(WalletAddress))
    location = fields.Object(Location)
    email = fields.Email()
    resource_prices = fields.List(fields.Object(ResourceUnitPrice))
    prefix_zero = fields.IPRange()

    def __str__(self):
        return " - ".join([x for x in [self.name, str(self.location)] if x])
Esempio n. 18
0
class Reservation(Base):
    id = fields.Integer()
    json = fields.String(default="")
    data_reservation = fields.Object(ReservationData)
    customer_tid = fields.Integer()
    customer_signature = fields.String(default="")
    next_action = fields.Enum(NextAction)
    signatures_provision = fields.List(fields.Object(Signature))
    signatures_farmer = fields.List(fields.Object(Signature))
    signatures_delete = fields.List(fields.Object(Signature))
    epoch = fields.DateTime(default=datetime.utcnow)
    metadata = fields.String(default="")
    results = fields.List(fields.Object(ReservationResult))
Esempio n. 19
0
class WorkloadsAmount(Base):
    network = fields.Integer()
    volume = fields.Integer()
    zdb_namespace = fields.Integer()
    container = fields.Integer()
    k8s_vm = fields.Integer()
    proxy = fields.Integer()
    reverse_proxy = fields.Integer()
    subdomain = fields.Integer()
    delegate_domain = fields.Integer()
Esempio n. 20
0
class Volume(Base):
    id = fields.Integer()
    size = fields.Integer()
    type = fields.Enum(DiskType)
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    info = fields.Object(ReservationInfo)

    def resource_units(self):
        resource_units = ResourceUnitAmount()
        if self.type == DiskType.HDD:
            resource_units.hru += self.size
        elif self.type == DiskType.SSD:
            resource_units.sru += self.size
        return resource_units
Esempio n. 21
0
class Gateway(Base):
    node_id = fields.String(default="")
    os_version = fields.String(default="")
    farm_id = fields.Integer()
    created = fields.DateTime()
    updated = fields.DateTime()
    uptime = fields.Integer()
    address = fields.String(default="")
    location = fields.Object(Location)
    public_key_hex = fields.String(default="")
    workloads = fields.Object(WorkloadsAmount)
    managed_domains = fields.List(fields.String())
    tcp_router_port = fields.Integer()
    dns_nameserver = fields.List(fields.String())
    free_to_use = fields.Boolean()
Esempio n. 22
0
class SSHClient(Client):

    name = fields.String()
    sshkey = fields.String()

    host = fields.String(default="127.0.0.1")
    user = fields.String(default="root")
    port = fields.Integer()
    forward_agent = fields.Boolean(default=True)
    connect_timeout = fields.Integer(default=10)

    # gateway = ?  FIXME: should help with proxyjumps. http://docs.fabfile.org/en/2.4/concepts/networking.html#ssh-gateways
    # connect_kwargs = ? FIXME: how to pass dict?
    inline_ssh_env = fields.Boolean(default=True) # whether to send environment variables “inline” as prefixes in front of command strings (export VARNAME=value && mycommand here), instead of trying to submit them through the SSH protocol itself (which is the default behavior). This is necessary if the remote server has a restricted AcceptEnv setting (which is the common default).

    def __init__(self):
        super().__init__()
        self.__client = None

    def _sshkey(self):
        return j.clients.sshkey.get(self.sshkey)
    
    @property
    def sshclient(self):
        if not self.__client:
            connection_kwargs = dict(
                                    host=self.host, user=self.user, port=self.port,
                                    forward_agent=self.forward_agent,
                                    connect_timeout=self.connect_timeout,
                                    connect_kwargs={
                                            "key_filename": self._sshkey().private_key_path,
            })
            # FIXME: coredump here.
            # if self._sshkey.passphrase:
            #     connection_kwargs["connect_kwargs"]["passphrase"] = self._sshkey().passphrase

            self.__client = j.core.executors.RemoteExecutor(**connection_kwargs)

        return self.__client

    def reset_connection(self):
        self.__client = None

    def __getattr__(self, name):
        return getattr(self.sshclient, name)

    def __dir__(self):
        return list(self.__dict__.keys()) + dir(self.sshclient)
Esempio n. 23
0
class Address(Base):
    x = fields.Integer()
    name = fields.String()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.x = 123
Esempio n. 24
0
class KubernetesNode(VDCHostBase):
    role = fields.Enum(KubernetesRole)
    public_ip = fields.IPRange()
    _size = fields.Integer()

    @property
    def size(self):
        return VDC_SIZE.K8SNodeFlavor(self._size)

    @classmethod
    def from_workload(cls, workload):
        node = cls()
        node.wid = workload.id
        node.ip_address = workload.ipaddress
        if workload.master_ips:
            node.role = KubernetesRole.WORKER
        else:
            node.role = KubernetesRole.MASTER
        node.node_id = workload.info.node_id
        node.pool_id = workload.info.pool_id
        if workload.public_ip:
            zos = get_zos()
            public_ip_workload = zos.workloads.get(workload.public_ip)
            address = str(netaddr.IPNetwork(public_ip_workload.ipaddress).ip)
            node.public_ip = address

        node._size = (
            VDC_SIZE.K8SNodeFlavor(workload.size).value
            if workload.size in [size.value for size in K8S_SIZES]
            else VDC_SIZE.K8SNodeFlavor.SMALL.value
        )
        return node
Esempio n. 25
0
class VMachine(VDCWorkloadBase):
    name = fields.String()
    public_ip = fields.Object(PublicIP)
    size = fields.Integer()
    resources = fields.Typed(dict)
    ip_address = fields.String(default="")

    @classmethod
    def from_workload(cls, workload):
        vmachine = cls()
        vmachine.wid = workload.id
        metadata = j.sals.reservation_chatflow.reservation_chatflow.decrypt_reservation_metadata(workload.info.metadata)
        metadata = j.data.serializers.json.loads(metadata)
        vmachine.name = metadata["form_info"]["name"]
        vmachine.pool_id = workload.info.pool_id
        vmachine.node_id = workload.info.node_id
        vmachine.size = workload.size
        vmachine.resources = VMSIZES.get(workload.size)
        vmachine.ip_address = workload.ipaddress
        if workload.public_ip:
            vmachine.public_ip.wid = workload.public_ip
            zos = get_zos()
            public_ip_workload = zos.workloads.get(workload.public_ip)
            address = str(netaddr.IPNetwork(public_ip_workload.ipaddress).ip)
            vmachine.public_ip.address = address

        return vmachine
Esempio n. 26
0
class Address(Base):
    x = fields.Integer()
    name = fields.String()

    def __init__(self):
        super().__init__()
        self.x = 123
Esempio n. 27
0
class Container(Base):
    id = fields.Integer()
    flist = fields.String(default="")
    hub_url = fields.String(default="")
    storage_url = fields.String(default="")
    environment = fields.Typed(dict)
    secret_environment = fields.Typed(dict)
    entrypoint = fields.String(default="")
    interactive = fields.Boolean(default=True)
    volumes = fields.List(fields.Object(ContainerMount))
    network_connection = fields.List(fields.Object(ContainerNetworkConnection))
    stats_aggregator = fields.List(fields.Object(Statsaggregator))
    farmer_tid = fields.Integer()
    logs = fields.List(fields.Object(ContainerLogs))
    capacity = fields.Object(ContainerCapacity)
    info = fields.Object(ReservationInfo)
Esempio n. 28
0
class GatewayDelegate(Base):
    id = fields.Integer()
    domain = fields.String(default="")
    info = fields.Object(ReservationInfo)

    def resource_units(self):
        return ResourceUnitAmount()
Esempio n. 29
0
class Gateway4to6(Base):
    id = fields.Integer()
    public_key = fields.String(default="")
    info = fields.Object(ReservationInfo)

    def resource_units(self):
        return ResourceUnitAmount()
Esempio n. 30
0
class SonicClient(Client):
    host = fields.String(default="127.0.0.1")
    port = fields.Integer(default=1491)
    password = fields.String(default="pass")

    def __init__(self):
        super().__init__()

        self.cached_client_search = None
        self.cached_client_ingest = None

        self.push = self.client_ingest.push
        self.pop = self.client_ingest.pop
        self.count = self.client_ingest.count
        self.flush = self.client_ingest.flush
        self.flush_collection = self.client_ingest.flush_collection
        self.flush_bucket = self.client_ingest.flush_bucket
        self.flush_object = self.client_ingest.flush_object

        self.query = self.client_search.query
        self.suggest = self.client_search.suggest

    @property
    def client_ingest(self):
        if not self.cached_client_ingest:
            self.cached_client_ingest = IngestClient(host=self.host, port=self.port, password=self.password)
        return self.cached_client_ingest

    @property
    def client_search(self):
        if not self.cached_client_search:
            self.cached_client_search = SearchClient(host=self.host, port=self.port, password=self.password)
        return self.cached_client_search