<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gravity</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/</link><description>Recent content on Gravity</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-2170--beryju-gravity.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title>Scopes</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/scopes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/scopes/</guid><description>&lt;p&gt;The scope for any particular request is found in the following way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checking if the DHCP Peer address is within any of the scopes CIDR, or&lt;/li&gt;
&lt;li&gt;Checking if the Address of the interface the request was received on is within any of the scopes CIDR, or&lt;/li&gt;
&lt;li&gt;Checking if the Scope has the &lt;code&gt;default&lt;/code&gt; flag set to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Afterwards, all matching scopes are sorted by the length of the Scope&amp;rsquo;s CIDR Prefix, and the longest prefix match is chosen.&lt;/p&gt;</description></item><item><title>Zones</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/zones/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/zones/</guid><description>&lt;h2 id="handlers"&gt;Handlers&lt;/h2&gt;
&lt;p&gt;The order of handler matters; Gravity will send a query to each handler in the order they are configured until a response is returned.&lt;/p&gt;
&lt;p&gt;The handler configuration consists of a list of individual handler configurations. All list entries require a &lt;code&gt;type&lt;/code&gt; attribute which must match one of the headers listed below. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;forward_blocky&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;to&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;8.8.8.8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cache_ttl&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;forward_ip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;to&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;8.8.8.8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;memory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;etcd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="etcd"&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Attempt to reply to query by looking for records in etcd. Keep in mind that because this is configured on zone level, this handler will only look for matching records in the current zone.&lt;/p&gt;</description></item><item><title>Options</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/options/</guid><description>&lt;h2 id="tag"&gt;Tag&lt;/h2&gt;
&lt;h3 id="tagname"&gt;&lt;code&gt;tagName&lt;/code&gt;:&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;tagName&lt;/code&gt; corresponds to a human-readable name for a DHCP option tag; any of these tag names can be used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;subnet_mask&lt;/code&gt; &lt;em&gt;(DHCP option 1)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;router&lt;/code&gt; &lt;em&gt;(DHCP option 3)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;time_server&lt;/code&gt; &lt;em&gt;(DHCP option 4)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name_server&lt;/code&gt; &lt;em&gt;(DHCP option 6)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;domain_name&lt;/code&gt; &lt;em&gt;(DHCP option 15)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tftp_server&lt;/code&gt; &lt;em&gt;(DHCP option 66)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bootfile&lt;/code&gt; &lt;em&gt;(DHCP option 67)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Conflicts with &lt;code&gt;tag&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="tag-1"&gt;&lt;code&gt;tag&lt;/code&gt;:&lt;/h3&gt;
&lt;p&gt;This field allows for setting the raw DHCP option tag to any value.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Conflicts with &lt;code&gt;tagName&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Reference</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/reference/</guid><description>&lt;div id="docsy_swagger_ui"&gt;&lt;/div&gt;
&lt;script&gt;
 window.onload = function () {
 const ui = SwaggerUIBundle({
 url: "/schema.yaml",
 dom_id: '#docsy_swagger_ui',
 presets: [
 SwaggerUIBundle.presets.apis,
 SwaggerUIStandalonePreset
 ]
 });
 window.ui = ui;
 };
&lt;/script&gt;</description></item><item><title/><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/_gravity-hook-env/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/_gravity-hook-env/</guid><description>&lt;h3 id="gravity-object"&gt;&lt;code&gt;gravity&lt;/code&gt; Object&lt;/h3&gt;
&lt;h4 id="logmsg-any"&gt;&lt;code&gt;log(msg: any)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Logs a message to the stdout of the Gravity node this hook is run on.&lt;/p&gt;
&lt;h4 id="node-string"&gt;&lt;code&gt;node: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The identifier of the node this hook is run on.&lt;/p&gt;
&lt;h4 id="version-string"&gt;&lt;code&gt;version: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The version of Gravity on the node this hook is run on.&lt;/p&gt;
&lt;h4 id="role"&gt;&lt;code&gt;role&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;A reference to the &lt;a href="https://pkg.go.dev/beryju.io/gravity/pkg/instance#RoleInstance"&gt;Role instance&lt;/a&gt; this hook was triggered by.&lt;/p&gt;
&lt;h3 id="net-object"&gt;&lt;code&gt;net&lt;/code&gt; Object&lt;/h3&gt;
&lt;h4 id="parseipip-string-family-string"&gt;&lt;code&gt;parseIP(ip: string, family: string)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Parse an IP address from the string &lt;code&gt;ip&lt;/code&gt; and return it as an array of bytes. &lt;code&gt;family&lt;/code&gt; determines if the IP should be parsed as IPv4 or IPv6.&lt;/p&gt;</description></item><item><title>Migration as a proxy</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/proxy/</guid><description>&lt;p&gt;A universal method of migrating DNS records to Gravity is to setup a Zone to forward requests to an existing DNS Server and save the results into Gravity.&lt;/p&gt;
&lt;p&gt;This can be done by using the following handler configuration on a zone:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;memory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;etcd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;forward_ip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;to&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;&amp;lt;IP Address of the existing DNS Server(s)&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cache_ttl&lt;/span&gt;: -&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this configuration, Gravity can be configured as the default DNS Server for a domain, and it will forward requests to the configured upstream DNS servers and permanently write the results into its database.&lt;/p&gt;</description></item><item><title>Clustering</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/install/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/install/cluster/</guid><description>&lt;p&gt;Any number of Gravity instances can be clustered together. This has the following advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;High availability of DNS&lt;/li&gt;
&lt;li&gt;Failover&lt;/li&gt;
&lt;li&gt;Multi-site with a central source of truth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Gravity is based on etcd, it is recommended to use an odd number of nodes (see &lt;a href="https://etcd.io/docs/v3.5/faq/#why-an-odd-number-of-cluster-members"&gt;etcd&lt;/a&gt;).
With 2 nodes in a cluster, you&amp;rsquo;ll have the same quorum as with one node. Hence with 2 nodes, if any node goes down, the other node cannot access etcd either.
Gravity works around this issue with caching objects in memory, and as such even when etcd is not accessible, DNS resolution still works (as long as either &lt;a href="../../dns/handlers"&gt;&lt;code&gt;forward_*&lt;/code&gt; or &lt;code&gt;memory&lt;/code&gt; handlers&lt;/a&gt; are enabled).&lt;/p&gt;</description></item><item><title>Migrating from Bind</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/bind/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/bind/</guid><description>&lt;p&gt;(requires Gravity v0.24+)&lt;/p&gt;
&lt;p&gt;Gravity can import DNS records from Bind zonefiles.&lt;/p&gt;
&lt;h3 id="retrieving-the-zone-file"&gt;Retrieving the zone file&lt;/h3&gt;
&lt;p&gt;Retrieving the zone file will depend on the setup of your Bind server. In most cases, this file will be in &lt;code&gt;/etc/bind/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Some other DNS servers also provide the option of exporting records as DNS, these files are also compatible with Gravity.&lt;/p&gt;
&lt;h3 id="import-data-into-gravity"&gt;Import data into Gravity&lt;/h3&gt;
&lt;h5 id="web"&gt;Web&lt;/h5&gt;
&lt;p&gt;Click on the &lt;strong&gt;Create&lt;/strong&gt; button on the &lt;em&gt;DNS Zones&lt;/em&gt; page and enter the domain for the new zone. On the next page select &lt;strong&gt;Import&lt;/strong&gt; and continue. Select the zone file from above. Gravity will import all records into the new scope.&lt;/p&gt;</description></item><item><title>Migrating from Microsoft DHCP</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/migration/ms_dhcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/migration/ms_dhcp/</guid><description>&lt;p&gt;Gravity can import DHCP leases from Microsoft&amp;rsquo;s DHCP server.&lt;/p&gt;
&lt;h3 id="export-leases-and-reservations"&gt;Export leases and reservations&lt;/h3&gt;
&lt;p&gt;Run the following command on the server running Microsoft DHCP, or another server with management tools installed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Export-DhcpServer -Leases &lt;span style="color:#f92672"&gt;-File&lt;/span&gt; C:\dhcp_export.xml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This file contains information about all scopes, their leases and reservations, and any extra options.&lt;/p&gt;
&lt;h3 id="import-data-into-gravity"&gt;Import data into Gravity&lt;/h3&gt;
&lt;h5 id="web-requires-gravity-v024"&gt;Web (requires Gravity v0.24+)&lt;/h5&gt;
&lt;p&gt;Click on the &lt;strong&gt;Create&lt;/strong&gt; button on the &lt;em&gt;DHCP Scopes&lt;/em&gt; page and enter the name for a new scope. On the next page select &lt;strong&gt;Import&lt;/strong&gt; and continue. Select the XML file exported above. Gravity will import all leases and reservations into the new scope.&lt;/p&gt;</description></item><item><title>Migrating from Opensense</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/opnsense/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/migration/opnsense/</guid><description>&lt;p&gt;(requires Gravity v0.24+)&lt;/p&gt;
&lt;p&gt;Gravity can import DNS records from Opnsense backups.&lt;/p&gt;
&lt;h3 id="exporting-records"&gt;Exporting records&lt;/h3&gt;
&lt;p&gt;In the Opnsense web interface, export a backup under &lt;strong&gt;System -&amp;gt; Configuration -&amp;gt; Backups&lt;/strong&gt;. Make sure to not include RRD data (default) and not encrypt the configuration file.&lt;/p&gt;
&lt;h3 id="import-data-into-gravity"&gt;Import data into Gravity&lt;/h3&gt;
&lt;h5 id="web"&gt;Web&lt;/h5&gt;
&lt;p&gt;Click on the &lt;strong&gt;Create&lt;/strong&gt; button on the &lt;em&gt;DNS Zones&lt;/em&gt; page and enter the domain for the new zone. On the next page select &lt;strong&gt;Import&lt;/strong&gt; and continue. Select the zone file from above. Gravity will import all records into the new scope.&lt;/p&gt;</description></item><item><title>Hooks</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/hooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/hooks/</guid><description>&lt;h2 id="hook-methods"&gt;Hook Methods&lt;/h2&gt;
&lt;h3 id="ondhcprequestbeforerequest"&gt;&lt;code&gt;onDHCPRequestBefore(request)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Called before the DHCP response is generated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;request&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/beryju.io/gravity/pkg/roles/dhcp#Request4"&gt;https://pkg.go.dev/beryju.io/gravity/pkg/roles/dhcp#Request4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ondhcprequestafterrequest-response"&gt;&lt;code&gt;onDHCPRequestAfter(request, response)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Called after the DHCP response is generated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;request&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/beryju.io/gravity/pkg/roles/dhcp#Request4"&gt;https://pkg.go.dev/beryju.io/gravity/pkg/roles/dhcp#Request4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/github.com/insomniacslk/dhcp/dhcpv4#DHCPv4"&gt;https://pkg.go.dev/github.com/insomniacslk/dhcp/dhcpv4#DHCPv4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="environment"&gt;Environment&lt;/h2&gt;


 




	






 






 &lt;h3 id="gravity-object"&gt;&lt;code&gt;gravity&lt;/code&gt; Object&lt;/h3&gt;
&lt;h4 id="logmsg-any"&gt;&lt;code&gt;log(msg: any)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Logs a message to the stdout of the Gravity node this hook is run on.&lt;/p&gt;
&lt;h4 id="node-string"&gt;&lt;code&gt;node: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The identifier of the node this hook is run on.&lt;/p&gt;
&lt;h4 id="version-string"&gt;&lt;code&gt;version: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The version of Gravity on the node this hook is run on.&lt;/p&gt;</description></item><item><title>Hooks</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/hooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/hooks/</guid><description>&lt;h2 id="hook-methods"&gt;Hook Methods&lt;/h2&gt;
&lt;h3 id="ondnsrequestbeforerequest"&gt;&lt;code&gt;onDNSRequestBefore(request)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Called before the DNS response is generated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;request&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/beryju.io/gravity/pkg/roles/dns/utils#DNSRequest"&gt;https://pkg.go.dev/beryju.io/gravity/pkg/roles/dns/utils#DNSRequest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ondnsrequestafterrequest-response"&gt;&lt;code&gt;onDNSRequestAfter(request, response)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Called after the DNS response is generated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;request&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/beryju.io/gravity/pkg/roles/dns/utils#DNSRequest"&gt;https://pkg.go.dev/beryju.io/gravity/pkg/roles/dns/utils#DNSRequest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response&lt;/code&gt;: See &lt;a href="https://pkg.go.dev/github.com/miekg/dns#Msg"&gt;https://pkg.go.dev/github.com/miekg/dns#Msg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="environment"&gt;Environment&lt;/h2&gt;


 




	






 






 &lt;h3 id="gravity-object"&gt;&lt;code&gt;gravity&lt;/code&gt; Object&lt;/h3&gt;
&lt;h4 id="logmsg-any"&gt;&lt;code&gt;log(msg: any)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Logs a message to the stdout of the Gravity node this hook is run on.&lt;/p&gt;
&lt;h4 id="node-string"&gt;&lt;code&gt;node: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The identifier of the node this hook is run on.&lt;/p&gt;
&lt;h4 id="version-string"&gt;&lt;code&gt;version: string&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The version of Gravity on the node this hook is run on.&lt;/p&gt;</description></item><item><title>Kubernetes</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/install/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/install/kubernetes/</guid><description>&lt;p&gt;Gravity can be run in Kubernetes, either as a single node or as a cluster.&lt;/p&gt;
&lt;h2 id="single-node"&gt;Single node&lt;/h2&gt;
&lt;p&gt;For a single node instance, the Gravity container can be deployed as-is.&lt;/p&gt;
&lt;p&gt;Note that to use DHCP when running in Kubernetes, it is recommended to deploy a DHCP on the router and have it forward requests to Gravity&amp;rsquo;s LoadBalancer IP.&lt;/p&gt;
&lt;p&gt;See the example deployment below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;namespace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app.kubernetes.io/name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app.kubernetes.io/name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;targetPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;TCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;targetPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dnstcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;67&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;targetPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;67&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dhcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;69&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;targetPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;69&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;tftp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;8008&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;targetPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;8008&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;TCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;type&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;LoadBalancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;apps/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;StatefulSet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;namespace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;matchLabels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;app.kubernetes.io/name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;containers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gravity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ghcr.io/beryju/gravity:stable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;env&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;BOOTSTRAP_ROLES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;value&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dns;dhcp;api;discovery;backup;monitoring;tsdb;tftp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;INSTANCE_IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;value&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;&amp;lt;insert loadbalancer IP of gravity&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;INSTANCE_LISTEN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;value&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0.0.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;livenessProbe&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;httpGet&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;path&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;/healthz/live&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http-metrics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;readinessProbe&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;httpGet&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;path&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;/healthz/ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http-metrics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dns-tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dns-udp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;67&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dhcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;68&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;dhcp-alt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;69&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;UDP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;tftp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;8008&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;containerPort&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;8009&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;http-metrics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumeMounts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;mountPath&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumeClaimTemplates&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;accessModes&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;ReadWriteOnce&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;resources&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;requests&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1Gi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="multi-node-cluster"&gt;Multi-node cluster&lt;/h2&gt;
&lt;p&gt;When running a multi-node Gravity cluster in Kubernetes, it is recommended to not use the built-in etcd server in Gravity. This is because the built-in cluster management is optimized for static nodes and simplicity and as such doesn&amp;rsquo;t offer enough dynamic options that Kubernetes requires.&lt;/p&gt;</description></item><item><title>Permissions</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/permissions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/permissions/</guid><description>&lt;p&gt;Starting with Gravity 0.16, users can have permissions assigned to them. Permissions are assigned based on HTTP URL paths and methods. For example, to give a user permissions to read all resources, permissions can be set to this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/*&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;methods&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;head&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To give users permissions to view DNS zones and records, you can set the permissions to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/api/v1/dns/zones&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;methods&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/api/v1/dns/zones/records&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;methods&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;get&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To give a user admin permissions, set the permissions to&lt;/p&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/api/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;port&lt;/code&gt;: The port the API server listens on (defaults to 8008).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;oidc&lt;/code&gt;: Optional OpenID Connect config.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;clientID&lt;/code&gt;: OpenID Client Identifier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;clientSecret&lt;/code&gt;: OpenID Client Secret.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;issuer&lt;/code&gt;: OpenID Issuer, sometimes also called &amp;ldquo;Configuration URL&amp;rdquo;. Ensure &lt;code&gt;.well-known/openid-configuration&lt;/code&gt; suffix is removed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;redirectURL&lt;/code&gt;: Redirect URL Gravity is reachable under. Should end in &lt;code&gt;/auth/oidc/callback&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The placeholder &lt;code&gt;$INSTANCE_IDENTIFIER&lt;/code&gt; will be replaced by the instance&amp;rsquo;s name and &lt;code&gt;$INSTANCE_IP&lt;/code&gt; will be replaced by the instances IP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scopes&lt;/code&gt;: Array of scopes that are requested. Should contain &lt;code&gt;openid&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/backup/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/backup/role_config/</guid><description>&lt;h2 id="local-and-s3-related-settings"&gt;Local and S3 related settings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cron Schedule (&lt;code&gt;cronExpr&lt;/code&gt;): Cron expression for backup frequency (defaults to &lt;code&gt;0 */24 * * *&lt;/code&gt;, once every 24 hours).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="s3-related-settings"&gt;S3 related settings&lt;/h2&gt;
&lt;p&gt;Gravity only uploads files to the S3 bucket and as such only needs the &lt;code&gt;PutObject&lt;/code&gt; permission.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Bucket (&lt;code&gt;bucket&lt;/code&gt;): S3 bucket.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Path (&lt;code&gt;path&lt;/code&gt;): S3 path prefix.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Endpoint (&lt;code&gt;endpoint&lt;/code&gt;): S3 endpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Access key (&lt;code&gt;accessKey&lt;/code&gt;): S3 access key for backups.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secret key (&lt;code&gt;secretKey&lt;/code&gt;): S3 secret key for backups.&lt;/p&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dhcp/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt;: The port the DHCP server listens on (defaults to 67).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;leaseNegotiateTimeout&lt;/code&gt;: The timeout a lease is reserved after a DHCP Discover request (defaults to 30 seconds).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/discovery/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/discovery/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;enabled&lt;/code&gt;: Enable discovery (defaults to true).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/dns/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt;: The port the DNS server listens on (defaults to port 53).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/monitoring/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/monitoring/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt;: The port the monitoring server listens on (defaults to 8009).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Role configuration</title><link>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/tftp/role_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2170--beryju-gravity.netlify.app/docs/tftp/role_config/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt;: The port the TFTP server listens on (defaults to 69).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;enableLocal&lt;/code&gt;: Enable reading of Node-local files stored in &lt;code&gt;data/tftp&lt;/code&gt; via TFTP&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>