• Stars
    star
    507
  • Rank 87,068 (Top 2 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DropletKit is the official DigitalOcean API client for Ruby.

DropletKit

Build Status Gem Version

DropletKit is the official DigitalOcean V2 API client. It supports everything the API can do with a simple interface written in Ruby.

Installation

Add this line to your application's Gemfile:

gem 'droplet_kit'

And then execute:

$ bundle

Or install it yourself as:

$ gem install droplet_kit

Usage

You'll need to generate an access token in DigitalOcean's control panel at https://cloud.digitalocean.com/settings/applications

Using your access token, retrieve a client instance.

require 'droplet_kit'
client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')

Timeout

You may also set timeout and time to first byte options on the client.

require 'droplet_kit'
client = DropletKit::Client.new(
  access_token: 'YOUR_TOKEN',
  open_timeout: 60, # time to first byte in seconds
  timeout:      120, # response timeout in seconds
)

Custom User-Agent

If you would like to include a custom User-Agent header beyond what DropletKit uses, you can pass one in at the client initialization like so:

require 'droplet_kit'
client = DropletKit::Client.new(access_token: 'YOUR_TOKEN', user_agent: 'custom')

Design

DropletKit follows a strict design of resources as methods on your client. For examples, for droplets, you will call your client like this:

client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')
client.droplets #=> DropletsResource

DropletKit will return Plain Old Ruby objects(tm) that contain the information provided by the API. For actions that return multiple objects, the request won't be executed until the result is accessed. For example:

client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')

# Returns an instance of a Paginated Resource.
client.droplets.all
# => #<DropletKit::PaginatedResource:0x000000010d556c3a>

# Returns the first Droplet.
client.droplets.all.first
# => <DropletKit::Droplet {:@id=>1, :@name=>"mydroplet", ...}>

# Returns an array of Droplet IDs.
client.droplets.all.map(&:id)
# => [1]

When you'd like to save objects, it's your responsibility to instantiate the objects and persist them using the resource objects. Let's use creating a Droplet as an example:

client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')
droplet = DropletKit::Droplet.new(name: 'mysite.com', region: 'nyc2', image: 'ubuntu-14-04-x64', size: 's-1vcpu-1gb')
created = client.droplets.create(droplet)
# => DropletKit::Droplet(id: 1231, name: 'something.com', ...)

To retrieve objects, you can perform this type of action on the resource (if the API supports it):

client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')
droplet = client.droplets.find(id: 123)
# => DropletKit::Droplet(id: 1231, name: 'something.com', ...)

All Resources and actions.

CDN resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.cdns #=> DropletKit::CertificateResource
cdn = DropletKit::CDN.new(
  origin: 'myspace.nyc3.digitaloceanspaces.com',
  ttl: 1800,
  custom_domain: 'www.myacme.xyz',
  certificate_id: 'a6689b98-2bb9-40be-8638-fb8426aabd26'
)

Actions supported:

  • client.cdns.find(id: 'id')
  • client.cdns.all()
  • client.cdns.create(cdn)
  • client.cdns.update_ttl(id: 'id', ttl: 3600)
  • client.cdns.update_custom_domain(id: 'id', custom_domain: 'www.myacme.xyz', certificate_id: 'a6689b98-2bb9-40be-8638-fb8426aabd26')
  • client.cdns.flush_cache(id: 'id', files: ['*', 'path/to/css/*'])
  • client.cdns.delete(id: 'id')

Certificate resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.certificates #=> DropletKit::CertificateResource

Actions supported:

  • client.certificates.find(id: 'id')
  • client.certificates.all()
  • client.certificates.create(certificate)
  • client.certificates.delete(id: 'id')

Database resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.databases #=> DropletKit::DatabaseResource
database_cluster = DropletKit::DatabaseCluster.new(
  name: 'backend',
  engine: 'pg',
  version: '10',
  region: 'nyc3',
  size: 'db-s-2vcpu-4gb',
  num_nodes: 2,
  tags: ['production']
)

Actions supported:

  • client.databases.find_cluster(id: 'id')
  • client.databases.all_clusters()
  • client.databases.create_cluster(database_cluster)
  • client.databases.resize_cluster(database_cluster, id: 'id')
  • client.databases.migrate_cluster(database_cluster, id: 'id')
  • client.databases.set_maintenance_window(database_maintenance_window, id: 'id')
  • client.databases.update_maintenance_window(database_maintenance_window, id: 'id')
  • client.databases.list_backups(id: 'id')
  • client.databases.restore_from_backup(database_backup)
  • client.databases.delete_cluster(id: 'id')
  • client.databases.create_db(database, id: 'id')
  • client.databases.find_db(id: 'id', name: 'name')
  • client.databases.all_dbs(id: 'id')
  • client.databases.delete_db(id: 'id', name: 'name')
  • client.databases.list_firewall_rules(id: 'id')
  • client.databases.set_firewall_rules(database_firewall_rules, id: 'id')
  • client.databases.create_read_only_replica(database_read_only_replica, id: 'id')
  • client.databases.find_read_only_replica(id: 'id', name: 'name')
  • client.databases.list_read_only_replicas(id: 'id')
  • client.databases.delete_read_only_replica(id: 'id', name: 'name')
  • client.databases.create_database_user(database_user, id: 'id')
  • client.databases.find_database_user(id: 'id', name: 'name')
  • client.databases.list_database_users(id: 'id')
  • client.databases.reset_database_user_auth(reset_auth, id: 'id', name: 'name')
  • client.databases.delete_database_user(id: 'id', name: 'name')
  • client.databases.create_connection_pool(database_connection_pool, id: 'id')
  • client.databases.find_connection_pool(id: 'id', name: 'name')
  • client.databases.list_connection_pools(id: 'id')
  • client.databases.delete_connection_pool(id: 'id', name: 'name')
  • client.databases.set_eviction_policy(database_eviction_policy, id: 'id')
  • client.databases.get_eviction_policy(id: 'id')
  • client.databases.set_sql_mode(database_sql_mode, id: 'id')
  • client.databases.get_sql_mode(id: 'id')

Droplet resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.droplets #=> DropletKit::DropletResource

Actions supported:

  • client.droplets.all()
  • client.droplets.all(tag_name: 'tag_name')
  • client.droplets.find(id: 'id')
  • client.droplets.create(droplet)
  • client.droplets.create_multiple(droplet)
  • client.droplets.delete(id: 'id')
  • client.droplets.delete_for_tag(tag_name: 'tag_name')
  • client.droplets.kernels(id: 'id')
  • client.droplets.snapshots(id: 'id')
  • client.droplets.backups(id: 'id')
  • client.droplets.actions(id: 'id')

Droplet Action resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.droplet_actions #=> DropletKit::DropletAction

Actions supported:

  • client.droplet_actions.reboot(droplet_id: droplet.id)
  • client.droplet_actions.power_cycle(droplet_id: droplet.id)
  • client.droplet_actions.power_cycle_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.shutdown(droplet_id: droplet.id)
  • client.droplet_actions.shutdown_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.power_off(droplet_id: droplet.id)
  • client.droplet_actions.power_off_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.power_on(droplet_id: droplet.id)
  • client.droplet_actions.power_on_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.password_reset(droplet_id: droplet.id)
  • client.droplet_actions.enable_ipv6(droplet_id: droplet.id)
  • client.droplet_actions.enable_ipv6_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.enable_backups(droplet_id: droplet.id)
  • client.droplet_actions.enable_backups_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.disable_backups(droplet_id: droplet.id)
  • client.droplet_actions.disable_backups_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.upgrade(droplet_id: droplet.id)
  • client.droplet_actions.enable_private_networking(droplet_id: droplet.id)
  • client.droplet_actions.enable_private_networking_for_tag(tag_name: 'tag_name')
  • client.droplet_actions.snapshot(droplet_id: droplet.id, name: 'Snapshot Name')
  • client.droplet_actions.snapshot_for_tag(tag_name: 'tag_name', name: 'Snapshot Name')
  • client.droplet_actions.change_kernel(droplet_id: droplet.id, kernel: 'kernel_id')
  • client.droplet_actions.rename(droplet_id: droplet.id, name: 'New-Droplet-Name')
  • client.droplet_actions.rebuild(droplet_id: droplet.id, image: 'image_id')
  • client.droplet_actions.restore(droplet_id: droplet.id, image: 'image_id')
  • client.droplet_actions.resize(droplet_id: droplet.id, size: 's-1vcpu-1gb')
  • client.droplet_actions.find(droplet_id: droplet.id, id: action.id)
  • client.droplet_actions.action_for_id(droplet_id: droplet.id, type: 'event_name', param: 'value')
  • client.droplet_actions.action_for_tag(tag_name: 'tag_name', type: 'event_name', param: 'value')

Domain resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.domains #=> DropletKit::DomainResource

Actions supported:

  • client.domains.all()
  • client.domains.create(domain)
  • client.domains.find(name: 'name')
  • client.domains.delete(name: 'name')

Domain record resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.domain_records #=> DropletKit::DomainRecordResource
domain_record = DropletKit::DomainRecord.new(
  type: 'CNAME',
  name: 'www',
  data: '@',
  ttl: 1800
)

Actions supported:

  • client.domain_records.all(for_domain: 'for_domain')
  • client.domain_records.create(domain_record, for_domain: 'for_domain')
  • client.domain_records.find(for_domain: 'for_domain', id: 'id')
  • client.domain_records.delete(for_domain: 'for_domain', id: 'id')
  • client.domain_records.update(domain_record, for_domain: 'for_domain', id: 'id')

Firewall resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.firewalls #=> DropletKit::FirewallResource

inbound_rule = DropletKit::FirewallInboundRule.new(
  protocol: 'icmp',
  ports: '0',
  sources: {
    tags: ['frontend', 'backend'],
    load_balancer_uids: ['d2d3920a-9d45-41b0-b018-d15e18ec60a4'],
    kubernetes_ids: ['a47b6fb1-4791-4b29-aae1-2b1b9f68a2da']
  }
)

outbound_rule = DropletKit::FirewallOutboundRule.new(
  protocol: 'icmp',
  ports: '0',
  destinations: {
    addresses: ["127.0.0.0"],
    droplet_ids: [456, 789]
  }
)

firewall = DropletKit::Firewall.new(
  name: 'firewall',
  inbound_rules: [
    inbound_rule
  ],
  outbound_rules: [
    outbound_rule
  ],
  droplet_ids: [123],
  tags: ['backend']
)

Actions supported:

  • client.firewalls.find(id: 'id')
  • client.firewalls.create(firewall)
  • client.firewalls.update(firewall, id: 'id')
  • client.firewalls.all()
  • client.firewalls.all_by_droplet(droplet_id: 'id')
  • client.firewalls.delete(id: 'id')
  • client.firewalls.add_droplets([droplet.id], id: 'id')
  • client.firewalls.remove_droplets([droplet.id], id: 'id')
  • client.firewalls.add_tags([tag.name], id: 'id')
  • client.firewalls.remove_tags([tag.name], id: 'id')
  • client.firewalls.add_rules(inbound_rules: [inbound_rule], outbound_rules: [outbound_rule], id: 'id')
  • client.firewalls.remove_rules(inbound_rules: [inbound_rule], outbound_rules: [outbound_rule], id: 'id')

Image resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.images #=> DropletKit::ImageResource

Actions supported:

  • client.images.all()
  • client.images.find(id: 'id')
  • client.images.delete(id: 'id')
  • client.images.update(image, id: 'id')

Image Action Resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.image_actions #=> DropletKit::ImageActionResource

Image Actions Supported:

  • client.image_actions.all(image_id: 123)
  • client.image_actions.find(image_id: 123, id: 123455)
  • client.image_actions.transfer(image_id: 123, region: 'nyc3')

Invoice resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.invoices #=> DropletKit::InvoiceResource

Actions supported:

  • client.invoices.list()
  • client.invoices.find(id:123)

Kubernetes Resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.kubernetes_clusters #=> DropletKit::KubernetesClusterResource

Actions supported

When the arguments below refer to cluster, they refer to:

cluster = DropletKit::KubernetesCluster.new(name: "foo", region: "nyc1", ...) # cluster attributes

When the arguments below refer to node_pool, they refer to:

node_pool = DropletKit::KubernetesNodePool.new(name: 'frontend', size: 's-1vcpu-1gb', count: 3, ...) # Node Pool attributes
  • client.kubernetes_clusters.all()
  • client.kubernetes_clusters.find(id: 'cluster_id')
  • client.kubernetes_clusters.create(cluster)
  • client.kubernetes_clusters.kubeconfig(id: 'cluster_id')
  • client.kubernetes_clusters.update(cluster, id: 'cluster_id')
  • client.kubernetes_clusters.delete(id: 'cluster_id')
  • client.kubernetes_clusters.node_pools(id: 'cluster_id')
  • client.kubernetes_clusters.find_node_pool(id: 'cluster_id', pool_id: 'node_pool_id')
  • client.kubernetes_clusters.create_node_pool(node_pool, id: 'cluster_id')
  • client.kubernetes_clusters.update_node_pool(node_pool, id: 'cluster_id', pool_id: 'node_pool_id')
  • client.kubernetes_clusters.delete_node_pool(id: 'cluster_id', pool_id: 'node_pool_id')
  • client.kubernetes_clusters.recycle_node_pool([node_id, node_id, ...], id: 'cluster_id', pool_id: 'node_pool_id')
  • client.kubernetes_options.all()

Load balancer resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.load_balancers #=> DropletKit::LoadBalancerResource

Actions supported:

  • client.load_balancers.find(id: 'id')
  • client.load_balancers.all()
  • client.load_balancers.create(load_balancer)
  • client.load_balancers.update(load_balancer, id: 'id')
  • client.load_balancers.delete(id: 'id')
  • client.load_balancers.add_droplets([droplet.id], id: 'id')
  • client.load_balancers.remove_droplets([droplet.id], id: 'id')
  • client.load_balancers.add_forwarding_rules([forwarding_rule], id: 'id')
  • client.load_balancers.remove_forwarding_rules([forwarding_rule], id: 'id')

Region resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.regions #=> DropletKit::RegionResource

Actions supported:

  • client.regions.all()

Size resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.sizes #=> DropletKit::SizeResource

Actions supported:

  • client.sizes.all()

SSH key resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.ssh_keys #=> DropletKit::SSHKeyResource

When you want to create a droplet using your stored SSH key.

client = DropletKit::Client.new(access_token: 'YOUR_TOKEN')
my_ssh_keys = client.ssh_keys.all.collect {|key| key.fingerprint}
droplet = DropletKit::Droplet.new(name: 'mysite.com', region: 'nyc2', image: 'ubuntu-14-04-x64', size: 's-1vcpu-1gb', ssh_keys: my_ssh_keys)
created = client.droplets.create(droplet)
# => DropletKit::Droplet(id: 1231, name: 'something.com', ...)

Actions supported:

  • client.ssh_keys.all()
  • client.ssh_keys.create(ssh_key)
  • client.ssh_keys.find(id: 'id')
  • client.ssh_keys.delete(id: 'id')
  • client.ssh_keys.update(ssh_key, id: 'id')

Project resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.projects #=> DropletKit::ProjectResource

Actions supported:

  • client.projects.all()
  • client.projects.find(id: 'id')
  • client.projects.find_default is equivalent to client.projects.find(id: DropletKit::Project::DEFAULT)
  • client.projects.create(DropletKit::Project.new(name: 'name', purpose: 'Service or API'))
  • client.projects.update(project, id: 'id')
  • client.projects.delete(id: 'id')
  • client.projects.list_resources(id: 'id')
  • client.projects.assign_resources([DropletKit::Droplet.new(id: 123), "do:space:myspace.com"], id: 'id')

Tag resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.tags #=> DropletKit::TagResource

Actions supported:

  • client.tags.all()
  • client.tags.find(name: 'name')
  • client.tags.create(DropletKit::Tag.new(name: 'name'))
  • client.tags.delete(name: 'name')
  • client.tags.tag_resources(name: 'name', resources: [{ resource_id => 'droplet_id', resource_type: 'droplet' },{ resource_id => 'image_id', resource_type: 'image' }])
  • client.tags.untag_resources(name 'name', resources: [{ resource_id => 'droplet_id', resource_type: 'droplet' },{ resource_id => 'image_id', resource_type: 'image' }])

Account resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.account #=> DropletKit::AccountResource

Actions supported:

  • client.account.info()

Balance resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.balance #=> DropletKit::BalanceResource

Actions supported:

  • client.balance.info()

Reserved IP resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.reserved_ips #=> DropletKit::ReservedIpResource

Actions supported:

  • client.reserved_ips.all()
  • client.reserved_ips.find(ip: 'ip address')
  • client.reserved_ips.create(reserved_ip)
  • client.reserved_ips.delete(ip: 'ip address')

Reserved IP Action resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.reserved_ip_actions #=> DropletKit::ReservedIpActionResource

Actions supported:

  • client.reserved_ip_actions.assign(ip: reserved_ip.ip, droplet_id: droplet.id)
  • client.reserved_ip_actions.unassign(ip: reserved_ip.ip)

Volume resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.volumes #=> DropletKit::VolumeResource

Actions supported:

  • client.volumes.all()
  • client.volumes.find(id: 'id')
  • client.volumes.create(volume)
  • client.volumes.snapshots(id: 'id')
  • client.volumes.create_snapshot(id: 'id', name: 'snapshot-name')
  • client.volumes.delete(id: 'id')

Volume Action resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.volume_actions #=> DropletKit::VolumeActionResource

Actions supported:

  • client.volume_actions.attach(volume_id: volume.id, droplet_id: droplet.id, region: droplet.region.slug)
  • client.volume_actions.detach(volume_id: volume.id, droplet_id: droplet.id, region: droplet.region.slug)
  • client.volume_actions.resize(volume_id: volume.id, size_gigabytes: 123, region: droplet.region.slug)

Snapshot resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.snapshots #=> DropletKit::SnapshotResource

Actions supported:

  • client.snapshots.all(resource_type: 'droplet')
  • client.snapshots.find(id: 'id')
  • client.snapshots.delete(id: 'id')

VPC resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.vpcs #=> DropletKit::VPCResource

Actions supported:

  • client.vpcs.find(id: 'id')
  • client.vpcs.all()
  • client.vpcs.create(vpc)
  • client.vpcs.update(vpc, id: 'id')
  • client.vpcs.patch(vpc, id: 'id')
  • client.vpcs.delete(id: 'id')
  • client.vpcs.all_members(id: 'id')

Container Registry resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.container_registry #=> DropletKit::ContainerRegistryResource

Actions supported:

  • client.container_registry.get()
  • client.container_registry.create(registry)
  • client.container_registry.delete()
  • client.container_registry.docker_credentials()

Container Registry Repository resource

client = DropletKit::Client.new(access_token: 'TOKEN')
client.container_registry_repository #=> DropletKit::ContainerRegistryRepositoryResource

Actions supported:

  • client.container_registry_repository.all(registry_name: 'registry')
  • client.container_registry_repository.tags(registry_name: 'registry', repository: 'repo')
  • client.container_registry_repository.delete_tag(registry_name: 'registry', repository: 'repo', tag: 'tag')
  • client.container_registry_repository.delete_manifest(registry_name: 'registry', repository: 'repo', manifest_digest: 'sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221')

Contributing

  1. Fork it ( https://github.com/digitalocean/droplet_kit/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Releasing

See RELEASE for details

More Repositories

1

nginxconfig.io

⚙️ NGINX config generator on steroids 💉
JavaScript
27,244
star
2

doctl

The official command line interface for the DigitalOcean API.
Go
3,155
star
3

godo

DigitalOcean Go API client
Go
1,328
star
4

go-libvirt

Package libvirt provides a pure Go interface for interacting with Libvirt. Apache 2.0 Licensed.
Go
815
star
5

do_user_scripts

Shell
804
star
6

Kubernetes-Starter-Kit-Developers

Hands-on tutorial and Automation stack for an operations-ready DigitalOcean Kubernetes (DOKS) cluster.
HCL
748
star
7

go-qemu

Go packages to interact with QEMU using the QEMU Machine Protocol (QMP). Apache 2.0 Licensed.
Go
719
star
8

do-agent

Collects system metrics from DigitalOcean Droplets
Go
586
star
9

csi-digitalocean

A Container Storage Interface (CSI) Driver for DigitalOcean Block Storage
Go
572
star
10

clusterlint

A best practices checker for Kubernetes clusters. 🤠
Go
544
star
11

vulcan

Vulcan extends Prometheus adding horizontal scalability and long-term storage
Go
531
star
12

digitalocean-cloud-controller-manager

Kubernetes cloud-controller-manager for DigitalOcean (beta)
Go
520
star
13

hacktoberfest

Hacktoberfest - App to manage the annual open-source challenge, used for the 2019 & 2020 seasons.
Ruby
510
star
14

terraform-provider-digitalocean

Terraform DigitalOcean provider
Go
492
star
15

action-doctl

GitHub Actions for DigitalOcean - doctl
JavaScript
454
star
16

ceph_exporter

Prometheus exporter that scrapes meta information about a ceph cluster.
Go
396
star
17

engineering-code-of-conduct

Code of Conduct for DigitalOcean's Engineering Team
289
star
18

go-openvswitch

Go packages which enable interacting with Open vSwitch and related tools. Apache 2.0 Licensed.
Go
282
star
19

kubernetes-sample-apps

Example DigitalOcean Kubernetes workload with service exposed through a DO load-balancer.
Python
252
star
20

marketplace-partners

Image validation, automation, and other tools for DigitalOcean Marketplace Vendors and Custom Image users
Shell
193
star
21

gta

gta: do transitive analysis to find packages whose dependencies have changed
Go
182
star
22

heartbot

A shot of love for your favorite chat client.
CoffeeScript
178
star
23

marketplace-kubernetes

This repository contains the source code and deployment scripts for Kubernetes-based applications listed in the DigitalOcean Marketplace.
Shell
159
star
24

prometheus-client-c

A Prometheus Client in C
C
154
star
25

go-smbios

Package smbios provides detection and access to System Management BIOS (SMBIOS) and Desktop Management Interface (DMI) data and structures. Apache 2.0 Licensed.
Go
152
star
26

kartograph

Kartograph makes it easy to generate and convert JSON. It's intention is to be used for API clients.
Ruby
147
star
27

OpenVPN-Pihole

https://marketplace.digitalocean.com/apps/openvpn-pihole
Shell
146
star
28

captainslog

A Syslog Protocol Parser
Go
136
star
29

resource_kit

Resource Kit provides tools to aid in making API Clients. Such as URL resolving, Request / Response layer, and more.
Ruby
134
star
30

go-workers2

better-go-workers
Go
131
star
31

supabase-on-do

HCL
129
star
32

droplet-1-clicks

Packer build scripts for DigitalOcean Marketplace 1-clicks.
Shell
114
star
33

doks-debug

A Docker image with Kubernetes manifests for investigation and troubleshooting.
Dockerfile
109
star
34

openapi

The OpenAPI v3 specification for DigitalOcean's public API.
JavaScript
104
star
35

sample-dockerfile

⛵ App Platform sample Docker application.
Go
92
star
36

container-blueprints

DigitalOcean Kubernetes(DOKS) Solution Blueprints
HCL
92
star
37

app_action

Deploy to DigitalOcean Container Registry and App Platform
Go
90
star
38

DOKS

Managed Kubernetes designed for simple and cost effective container orchestration.
80
star
39

pydo

Official DigitalOcean Python Client based on the DO OpenAPIv3 specification
Python
78
star
40

do-markdownit

Markdown-It plugin for the DigitalOcean Community.
JavaScript
77
star
41

do-operator

The Kubernetes Operator for DigitalOcean
Go
76
star
42

navigators-guide

Book and code examples that help to build infrastructure on DigitalOcean
Shell
76
star
43

sample-django

Django sample app for DigitalOcean App Platform
Python
76
star
44

logtalez

logtalez is a minimal command line client (and API) for retrieving log streams from the rsyslog logging daemon over zeromq.
Go
73
star
45

databases

66
star
46

sample-nodejs

⛵ App Platform sample Node.js application.
JavaScript
65
star
47

sample-nextjs

⛵ App Platform sample Next.js application.
JavaScript
61
star
48

debian-sys-maint-roll-passwd

Script to update password for MySQL user "debian-sys-maint"
Shell
58
star
49

sample-python

⛵ App Platform sample Python application.
Python
57
star
50

vmtop

Real-time monitoring of KVM/Qemu VMs
Python
54
star
51

kubecon-2022-doks-workshop

HCL
48
star
52

k8s-staticroute-operator

Create static routes for your k8s nodes using CRDs.
Python
48
star
53

sample-flask

Sample Flask Application to be deployed on DigitalOcean's App Platform
HTML
48
star
54

pgremapper

CLI tool for manipulating Ceph's upmap exception table.
Go
46
star
55

sample-laravel

⛵ App Platform sample Laravel application.
PHP
45
star
56

sample-golang

⛵ App Platform sample Golang application.
Go
40
star
57

sample-functions-nodejs-qrcode

HTML
39
star
58

sample-monorepo

Sample mono repo app (with multiple components) on the DigitalOcean App Platform.
Go
38
star
59

tos

DigitalOcean's Terms of Service agreement
37
star
60

droplet-agent

Droplet Agent is the daemon that runs on customer droplets to enable some features such as web console access.
Go
37
star
61

ansible-collection

DigitalOcean Ansible Collection
Python
34
star
62

sample-php

⛵ App Platform sample PHP application.
PHP
33
star
63

openvswitch_exporter

Command openvswitch_exporter implements a Prometheus exporter for Open vSwitch.
Go
32
star
64

sample-html

⛵ App Platform sample HTML application.
HTML
31
star
65

sample-functions-nodejs-helloworld

JavaScript
31
star
66

sample-react

⛵ App Platform sample React application.
JavaScript
30
star
67

mastodon-on-kubernetes

Setting up Mastodon on DigitalOcean Kubernetes
HCL
30
star
68

sample-functions-python-jokes

Python
30
star
69

flipop

Floating IP Controller for Kubernetes
Go
29
star
70

marketplace-pi-hole-vpn

Pi-hole VPN image for Marketplace with Unbound & Wireguard
Shell
29
star
71

sample-functions-golang-helloworld

Go
29
star
72

go-metadata

Go client for the metadata API.
Go
27
star
73

github-changelog-generator

A tool to generate changelog entries from GitHub repositories.
Go
26
star
74

omniauth-digitalocean

DigitalOcean OAuth2 Strategy for OmniAuth
Ruby
26
star
75

sample-push-to-deploy-doks

Push-to-deploy example using DOCR and DOKS
Python
25
star
76

netbox-ip-controller

A Kubernetes controller to import the IP addresses and metadata of pods and services into NetBox.
Go
25
star
77

sample-functions-python-helloworld

Python
23
star
78

terraform-vault-github-oidc

Terraform module to configure Vault for GitHub OIDC authentication from Action runners.
HCL
22
star
79

terraform-provider-sendgrid

Sendgrid Terraform Provider
Go
20
star
80

sample-expressjs

⛵ App Platform sample Express.js application.
19
star
81

sample-nuxtjs

⛵ App Platform sample Nuxt.js application.
Vue
19
star
82

production-ready-kubernetes-workshop

The repository for DigitalOcean's Production Ready Kubernetes Workshop
Python
18
star
83

sample-vuejs

⛵ App Platform sample Vue.js application.
Vue
17
star
84

sample-functions-python-twilio-sms

Sending sms via Twilio
Python
16
star
85

sample-functions-php-helloworld

A PHP helloworld sample function for Cloud Functions
PHP
15
star
86

sample-rails

⛵ App Platform sample Ruby on Rails application.
Ruby
15
star
87

sample-functions-php-numberstowords

PHP
15
star
88

sample-hugo

⛵ App Platform sample Hugo application.
15
star
89

sample-functions-python-sendgrid-email

Sending emails via Sendgrid API
Python
14
star
90

github-pr-resource

Github pull request resource for Concourse
Go
13
star
91

icingaweb2-module-netboximport

Icinga2 Director integration for Netbox
PHP
12
star
92

docker-shipit-engine

Docker image for https://github.com/Shopify/shipit-engine
Ruby
11
star
93

sample-functions-golang-presigned-url

Creating a presigned url for DO's Spaces
Go
10
star
94

digitalocean-ceph-lab

Terraform and Ansible automation to provision and configure a Ceph test environment on DigitalOcean.
HCL
10
star
95

k8s-adoption-journey

Hands-on tutorial for going from Day-1 to production on DigitalOcean Kubernetes. Goes with "Kubernetes Adoption Journey" document.
Python
9
star
96

sample-laravel-api

⛵ App Platform sample Laravel API application.
PHP
9
star
97

gnulib

A mirror of the gnulib portability and testing suite for internal builds that use it as a submodule
C
8
star
98

serverless-jamstack

Contains sample code for a serverless Jamstack tutorial published on docs.digitalocean.com
JavaScript
8
star
99

golang-slackbot

Composed slackbot golang function with 3 sample functions
Go
8
star
100

marketplace-blueprints

HCL
8
star