Skip to content

Commit

Permalink
(#1092) add an external discovery method
Browse files Browse the repository at this point in the history
Signed-off-by: R.I.Pienaar <rip@devco.net>
  • Loading branch information
ripienaar committed Jan 17, 2021
1 parent 9ad6aea commit 1801514
Show file tree
Hide file tree
Showing 37 changed files with 744 additions and 233 deletions.
131 changes: 70 additions & 61 deletions CONFIGURATION.md
Expand Up @@ -24,65 +24,66 @@ A few special types are defined, the rest map to standard Go types
|[connection_timeout](#connection_timeout)|[connector](#connector)|
|[daemonize](#daemonize)|[default_discovery_method](#default_discovery_method)|
|[default_discovery_options](#default_discovery_options)|[direct_addressing](#direct_addressing)|
|[direct_addressing_threshold](#direct_addressing_threshold)|[discovery_timeout](#discovery_timeout)|
|[fact_cache_time](#fact_cache_time)|[factsource](#factsource)|
|[identity](#identity)|[keeplogs](#keeplogs)|
|[libdir](#libdir)|[logfacility](#logfacility)|
|[logfile](#logfile)|[logger_type](#logger_type)|
|[loglevel](#loglevel)|[main_collective](#main_collective)|
|[max_log_size](#max_log_size)|[plugin.choria.adapters](#pluginchoriaadapters)|
|[plugin.choria.agent_provider.mcorpc.agent_shim](#pluginchoriaagent_providermcorpcagent_shim)|[plugin.choria.agent_provider.mcorpc.config](#pluginchoriaagent_providermcorpcconfig)|
|[plugin.choria.agent_provider.mcorpc.libdir](#pluginchoriaagent_providermcorpclibdir)|[plugin.choria.broker_discovery](#pluginchoriabroker_discovery)|
|[plugin.choria.broker_federation](#pluginchoriabroker_federation)|[plugin.choria.broker_network](#pluginchoriabroker_network)|
|[plugin.choria.discovery_host](#pluginchoriadiscovery_host)|[plugin.choria.discovery_port](#pluginchoriadiscovery_port)|
|[plugin.choria.discovery_proxy](#pluginchoriadiscovery_proxy)|[plugin.choria.federation.cluster](#pluginchoriafederationcluster)|
|[plugin.choria.federation.collectives](#pluginchoriafederationcollectives)|[plugin.choria.federation_middleware_hosts](#pluginchoriafederation_middleware_hosts)|
|[plugin.choria.legacy_lifecycle_format](#pluginchorialegacy_lifecycle_format)|[plugin.choria.machine.store](#pluginchoriamachinestore)|
|[plugin.choria.middleware_hosts](#pluginchoriamiddleware_hosts)|[plugin.choria.network.client_anon_tls](#pluginchorianetworkclient_anon_tls)|
|[plugin.choria.network.client_hosts](#pluginchorianetworkclient_hosts)|[plugin.choria.network.client_port](#pluginchorianetworkclient_port)|
|[plugin.choria.network.client_tls_force_required](#pluginchorianetworkclient_tls_force_required)|[plugin.choria.network.deny_server_connections](#pluginchorianetworkdeny_server_connections)|
|[plugin.choria.network.gateway_name](#pluginchorianetworkgateway_name)|[plugin.choria.network.gateway_port](#pluginchorianetworkgateway_port)|
|[plugin.choria.network.gateway_remotes](#pluginchorianetworkgateway_remotes)|[plugin.choria.network.leafnode_port](#pluginchorianetworkleafnode_port)|
|[plugin.choria.network.leafnode_remotes](#pluginchorianetworkleafnode_remotes)|[plugin.choria.network.listen_address](#pluginchorianetworklisten_address)|
|[plugin.choria.network.operator_account](#pluginchorianetworkoperator_account)|[plugin.choria.network.peer_password](#pluginchorianetworkpeer_password)|
|[plugin.choria.network.peer_port](#pluginchorianetworkpeer_port)|[plugin.choria.network.peer_user](#pluginchorianetworkpeer_user)|
|[plugin.choria.network.peers](#pluginchorianetworkpeers)|[plugin.choria.network.public_url](#pluginchorianetworkpublic_url)|
|[plugin.choria.network.stream.advisory_retention](#pluginchorianetworkstreamadvisory_retention)|[plugin.choria.network.stream.event_retention](#pluginchorianetworkstreamevent_retention)|
|[plugin.choria.network.stream.machine_retention](#pluginchorianetworkstreammachine_retention)|[plugin.choria.network.stream.store](#pluginchorianetworkstreamstore)|
|[plugin.choria.network.system_account](#pluginchorianetworksystem_account)|[plugin.choria.network.tls_timeout](#pluginchorianetworktls_timeout)|
|[plugin.choria.network.write_deadline](#pluginchorianetworkwrite_deadline)|[plugin.choria.prometheus_textfile_directory](#pluginchoriaprometheus_textfile_directory)|
|[plugin.choria.puppetca_host](#pluginchoriapuppetca_host)|[plugin.choria.puppetca_port](#pluginchoriapuppetca_port)|
|[plugin.choria.puppetdb_host](#pluginchoriapuppetdb_host)|[plugin.choria.puppetdb_port](#pluginchoriapuppetdb_port)|
|[plugin.choria.puppetserver_host](#pluginchoriapuppetserver_host)|[plugin.choria.puppetserver_port](#pluginchoriapuppetserver_port)|
|[plugin.choria.randomize_middleware_hosts](#pluginchoriarandomize_middleware_hosts)|[plugin.choria.registration.file_content.compression](#pluginchoriaregistrationfile_contentcompression)|
|[plugin.choria.registration.file_content.data](#pluginchoriaregistrationfile_contentdata)|[plugin.choria.registration.file_content.target](#pluginchoriaregistrationfile_contenttarget)|
|[plugin.choria.require_client_filter](#pluginchoriarequire_client_filter)|[plugin.choria.security.certname_whitelist](#pluginchoriasecuritycertname_whitelist)|
|[plugin.choria.security.privileged_users](#pluginchoriasecurityprivileged_users)|[plugin.choria.security.request_signer.token_environment](#pluginchoriasecurityrequest_signertoken_environment)|
|[plugin.choria.security.request_signer.token_file](#pluginchoriasecurityrequest_signertoken_file)|[plugin.choria.security.request_signer.url](#pluginchoriasecurityrequest_signerurl)|
|[plugin.choria.security.request_signing_certificate](#pluginchoriasecurityrequest_signing_certificate)|[plugin.choria.security.serializer](#pluginchoriasecurityserializer)|
|[plugin.choria.server.provision](#pluginchoriaserverprovision)|[plugin.choria.srv_domain](#pluginchoriasrv_domain)|
|[plugin.choria.ssldir](#pluginchoriassldir)|[plugin.choria.stats_address](#pluginchoriastats_address)|
|[plugin.choria.stats_port](#pluginchoriastats_port)|[plugin.choria.status_file_path](#pluginchoriastatus_file_path)|
|[plugin.choria.status_update_interval](#pluginchoriastatus_update_interval)|[plugin.choria.use_srv](#pluginchoriause_srv)|
|[plugin.nats.credentials](#pluginnatscredentials)|[plugin.nats.ngs](#pluginnatsngs)|
|[plugin.nats.pass](#pluginnatspass)|[plugin.nats.user](#pluginnatsuser)|
|[plugin.scout.agent_disabled](#pluginscoutagent_disabled)|[plugin.scout.overrides](#pluginscoutoverrides)|
|[plugin.scout.tags](#pluginscouttags)|[plugin.security.always_overwrite_cache](#pluginsecurityalways_overwrite_cache)|
|[plugin.security.certmanager.alt_names](#pluginsecuritycertmanageralt_names)|[plugin.security.certmanager.issuer](#pluginsecuritycertmanagerissuer)|
|[plugin.security.certmanager.namespace](#pluginsecuritycertmanagernamespace)|[plugin.security.certmanager.replace](#pluginsecuritycertmanagerreplace)|
|[plugin.security.cipher_suites](#pluginsecuritycipher_suites)|[plugin.security.client_anon_tls](#pluginsecurityclient_anon_tls)|
|[plugin.security.ecc_curves](#pluginsecurityecc_curves)|[plugin.security.file.ca](#pluginsecurityfileca)|
|[plugin.security.file.cache](#pluginsecurityfilecache)|[plugin.security.file.certificate](#pluginsecurityfilecertificate)|
|[plugin.security.file.key](#pluginsecurityfilekey)|[plugin.security.pkcs11.driver_file](#pluginsecuritypkcs11driver_file)|
|[plugin.security.pkcs11.slot](#pluginsecuritypkcs11slot)|[plugin.security.provider](#pluginsecurityprovider)|
|[plugin.yaml](#pluginyaml)|[publish_timeout](#publish_timeout)|
|[registerinterval](#registerinterval)|[registration](#registration)|
|[registration_collective](#registration_collective)|[registration_splay](#registration_splay)|
|[rpcaudit](#rpcaudit)|[rpcauditprovider](#rpcauditprovider)|
|[rpcauthorization](#rpcauthorization)|[rpcauthprovider](#rpcauthprovider)|
|[rpclimitmethod](#rpclimitmethod)|[securityprovider](#securityprovider)|
|[soft_shutdown](#soft_shutdown)|[soft_shutdown_timeout](#soft_shutdown_timeout)|
|[threaded](#threaded)|[ttl](#ttl)|
|[direct_addressing_threshold](#direct_addressing_threshold)|[discovery.external.command](#discoveryexternalcommand)|
|[discovery_timeout](#discovery_timeout)|[fact_cache_time](#fact_cache_time)|
|[factsource](#factsource)|[identity](#identity)|
|[keeplogs](#keeplogs)|[libdir](#libdir)|
|[logfacility](#logfacility)|[logfile](#logfile)|
|[logger_type](#logger_type)|[loglevel](#loglevel)|
|[main_collective](#main_collective)|[max_log_size](#max_log_size)|
|[plugin.choria.adapters](#pluginchoriaadapters)|[plugin.choria.agent_provider.mcorpc.agent_shim](#pluginchoriaagent_providermcorpcagent_shim)|
|[plugin.choria.agent_provider.mcorpc.config](#pluginchoriaagent_providermcorpcconfig)|[plugin.choria.agent_provider.mcorpc.libdir](#pluginchoriaagent_providermcorpclibdir)|
|[plugin.choria.broker_discovery](#pluginchoriabroker_discovery)|[plugin.choria.broker_federation](#pluginchoriabroker_federation)|
|[plugin.choria.broker_network](#pluginchoriabroker_network)|[plugin.choria.discovery_host](#pluginchoriadiscovery_host)|
|[plugin.choria.discovery_port](#pluginchoriadiscovery_port)|[plugin.choria.discovery_proxy](#pluginchoriadiscovery_proxy)|
|[plugin.choria.federation.cluster](#pluginchoriafederationcluster)|[plugin.choria.federation.collectives](#pluginchoriafederationcollectives)|
|[plugin.choria.federation_middleware_hosts](#pluginchoriafederation_middleware_hosts)|[plugin.choria.legacy_lifecycle_format](#pluginchorialegacy_lifecycle_format)|
|[plugin.choria.machine.store](#pluginchoriamachinestore)|[plugin.choria.middleware_hosts](#pluginchoriamiddleware_hosts)|
|[plugin.choria.network.client_anon_tls](#pluginchorianetworkclient_anon_tls)|[plugin.choria.network.client_hosts](#pluginchorianetworkclient_hosts)|
|[plugin.choria.network.client_port](#pluginchorianetworkclient_port)|[plugin.choria.network.client_tls_force_required](#pluginchorianetworkclient_tls_force_required)|
|[plugin.choria.network.deny_server_connections](#pluginchorianetworkdeny_server_connections)|[plugin.choria.network.gateway_name](#pluginchorianetworkgateway_name)|
|[plugin.choria.network.gateway_port](#pluginchorianetworkgateway_port)|[plugin.choria.network.gateway_remotes](#pluginchorianetworkgateway_remotes)|
|[plugin.choria.network.leafnode_port](#pluginchorianetworkleafnode_port)|[plugin.choria.network.leafnode_remotes](#pluginchorianetworkleafnode_remotes)|
|[plugin.choria.network.listen_address](#pluginchorianetworklisten_address)|[plugin.choria.network.operator_account](#pluginchorianetworkoperator_account)|
|[plugin.choria.network.peer_password](#pluginchorianetworkpeer_password)|[plugin.choria.network.peer_port](#pluginchorianetworkpeer_port)|
|[plugin.choria.network.peer_user](#pluginchorianetworkpeer_user)|[plugin.choria.network.peers](#pluginchorianetworkpeers)|
|[plugin.choria.network.public_url](#pluginchorianetworkpublic_url)|[plugin.choria.network.stream.advisory_retention](#pluginchorianetworkstreamadvisory_retention)|
|[plugin.choria.network.stream.event_retention](#pluginchorianetworkstreamevent_retention)|[plugin.choria.network.stream.machine_retention](#pluginchorianetworkstreammachine_retention)|
|[plugin.choria.network.stream.store](#pluginchorianetworkstreamstore)|[plugin.choria.network.system_account](#pluginchorianetworksystem_account)|
|[plugin.choria.network.tls_timeout](#pluginchorianetworktls_timeout)|[plugin.choria.network.write_deadline](#pluginchorianetworkwrite_deadline)|
|[plugin.choria.prometheus_textfile_directory](#pluginchoriaprometheus_textfile_directory)|[plugin.choria.puppetca_host](#pluginchoriapuppetca_host)|
|[plugin.choria.puppetca_port](#pluginchoriapuppetca_port)|[plugin.choria.puppetdb_host](#pluginchoriapuppetdb_host)|
|[plugin.choria.puppetdb_port](#pluginchoriapuppetdb_port)|[plugin.choria.puppetserver_host](#pluginchoriapuppetserver_host)|
|[plugin.choria.puppetserver_port](#pluginchoriapuppetserver_port)|[plugin.choria.randomize_middleware_hosts](#pluginchoriarandomize_middleware_hosts)|
|[plugin.choria.registration.file_content.compression](#pluginchoriaregistrationfile_contentcompression)|[plugin.choria.registration.file_content.data](#pluginchoriaregistrationfile_contentdata)|
|[plugin.choria.registration.file_content.target](#pluginchoriaregistrationfile_contenttarget)|[plugin.choria.require_client_filter](#pluginchoriarequire_client_filter)|
|[plugin.choria.security.certname_whitelist](#pluginchoriasecuritycertname_whitelist)|[plugin.choria.security.privileged_users](#pluginchoriasecurityprivileged_users)|
|[plugin.choria.security.request_signer.token_environment](#pluginchoriasecurityrequest_signertoken_environment)|[plugin.choria.security.request_signer.token_file](#pluginchoriasecurityrequest_signertoken_file)|
|[plugin.choria.security.request_signer.url](#pluginchoriasecurityrequest_signerurl)|[plugin.choria.security.request_signing_certificate](#pluginchoriasecurityrequest_signing_certificate)|
|[plugin.choria.security.serializer](#pluginchoriasecurityserializer)|[plugin.choria.server.provision](#pluginchoriaserverprovision)|
|[plugin.choria.srv_domain](#pluginchoriasrv_domain)|[plugin.choria.ssldir](#pluginchoriassldir)|
|[plugin.choria.stats_address](#pluginchoriastats_address)|[plugin.choria.stats_port](#pluginchoriastats_port)|
|[plugin.choria.status_file_path](#pluginchoriastatus_file_path)|[plugin.choria.status_update_interval](#pluginchoriastatus_update_interval)|
|[plugin.choria.use_srv](#pluginchoriause_srv)|[plugin.nats.credentials](#pluginnatscredentials)|
|[plugin.nats.ngs](#pluginnatsngs)|[plugin.nats.pass](#pluginnatspass)|
|[plugin.nats.user](#pluginnatsuser)|[plugin.scout.agent_disabled](#pluginscoutagent_disabled)|
|[plugin.scout.overrides](#pluginscoutoverrides)|[plugin.scout.tags](#pluginscouttags)|
|[plugin.security.always_overwrite_cache](#pluginsecurityalways_overwrite_cache)|[plugin.security.certmanager.alt_names](#pluginsecuritycertmanageralt_names)|
|[plugin.security.certmanager.issuer](#pluginsecuritycertmanagerissuer)|[plugin.security.certmanager.namespace](#pluginsecuritycertmanagernamespace)|
|[plugin.security.certmanager.replace](#pluginsecuritycertmanagerreplace)|[plugin.security.cipher_suites](#pluginsecuritycipher_suites)|
|[plugin.security.client_anon_tls](#pluginsecurityclient_anon_tls)|[plugin.security.ecc_curves](#pluginsecurityecc_curves)|
|[plugin.security.file.ca](#pluginsecurityfileca)|[plugin.security.file.cache](#pluginsecurityfilecache)|
|[plugin.security.file.certificate](#pluginsecurityfilecertificate)|[plugin.security.file.key](#pluginsecurityfilekey)|
|[plugin.security.pkcs11.driver_file](#pluginsecuritypkcs11driver_file)|[plugin.security.pkcs11.slot](#pluginsecuritypkcs11slot)|
|[plugin.security.provider](#pluginsecurityprovider)|[plugin.yaml](#pluginyaml)|
|[publish_timeout](#publish_timeout)|[registerinterval](#registerinterval)|
|[registration](#registration)|[registration_collective](#registration_collective)|
|[registration_splay](#registration_splay)|[rpcaudit](#rpcaudit)|
|[rpcauditprovider](#rpcauditprovider)|[rpcauthorization](#rpcauthorization)|
|[rpcauthprovider](#rpcauthprovider)|[rpclimitmethod](#rpclimitmethod)|
|[securityprovider](#securityprovider)|[soft_shutdown](#soft_shutdown)|
|[soft_shutdown_timeout](#soft_shutdown_timeout)|[threaded](#threaded)|
|[ttl](#ttl)|[](#)|


## activate_agents
Expand Down Expand Up @@ -138,13 +139,15 @@ Configures the network connector to use, only sensible value is "nats", unused i
* **Type:** string
* **Default Value:** mc

The default discovery plugin to use. The default "mc" uses a network broadcast and "choria" uses PuppetDB
The default discovery plugin to use. The default "mc" uses a network broadcast, "choria" uses PuppetDB, external calls external commands

## default_discovery_options

* **Type:** strings

Configurable options to always pass to the discovery subsystem
Deprecated settings

**This setting is deprecated or already unused**

## direct_addressing

Expand All @@ -160,6 +163,12 @@ Enables the direct-to-node communications pattern, unused in the Go clients

**This setting is deprecated or already unused**

## discovery.external.command

* **Type:** string

ExternalDiscoveryCommand the command to use for external discovery

## discovery_timeout

* **Type:** integer
Expand Down
12 changes: 11 additions & 1 deletion aagent/watchers/execwatcher/exec.go
Expand Up @@ -221,7 +221,17 @@ func (w *Watcher) watch(ctx context.Context) (state State, err error) {
return Error, err
}

cmd := exec.CommandContext(timeoutCtx, splitcmd[0], splitcmd[1:]...)
if len(splitcmd) == 0 {
w.Errorf("Invalid command %q", w.properties.Command)
return Error, err
}

var args []string
if len(splitcmd) > 1 {
args = splitcmd[1:]
}

cmd := exec.CommandContext(timeoutCtx, splitcmd[0], args...)
cmd.Env = append(cmd.Env, fmt.Sprintf("MACHINE_WATCHER_NAME=%s", w.name))
cmd.Env = append(cmd.Env, fmt.Sprintf("MACHINE_NAME=%s", w.machine.Name()))
cmd.Env = append(cmd.Env, fmt.Sprintf("PATH=%s%s%s", os.Getenv("PATH"), string(os.PathListSeparator), w.machine.Directory()))
Expand Down
4 changes: 2 additions & 2 deletions client/choria_utilclient/action_info.go
@@ -1,6 +1,6 @@
// generated code; DO NOT EDIT; 2021-01-12 18:43:24.312755 +0100 CET m=+0.056825610"
// generated code; DO NOT EDIT; 2021-01-16 15:57:21.956284 +0100 CET m=+0.057225677"
//
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.18.0
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.19.0

package choria_utilclient

Expand Down
4 changes: 2 additions & 2 deletions client/choria_utilclient/action_machine_states.go
@@ -1,6 +1,6 @@
// generated code; DO NOT EDIT; 2021-01-12 18:43:24.317825 +0100 CET m=+0.061895566"
// generated code; DO NOT EDIT; 2021-01-16 15:57:21.96273 +0100 CET m=+0.063672074"
//
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.18.0
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.19.0

package choria_utilclient

Expand Down
4 changes: 2 additions & 2 deletions client/choria_utilclient/action_machine_transition.go
@@ -1,6 +1,6 @@
// generated code; DO NOT EDIT; 2021-01-12 18:43:24.320557 +0100 CET m=+0.064627823"
// generated code; DO NOT EDIT; 2021-01-16 15:57:21.966278 +0100 CET m=+0.067220157"
//
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.18.0
// Client for Choria RPC Agent 'choria_util'' Version 0.19.0 generated using Choria version 0.19.0

package choria_utilclient

Expand Down

0 comments on commit 1801514

Please sign in to comment.