Closed lukebakken closed 4 years ago
I can only reproduce in one known case: when a plugin is implicitly enabled (as a dependency). Those plugins won't participate in plugin discovery as for some code paths they are not really enabled.
Some evidence:
rabbitmq-plugins list
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: [failed to contact rabbit@warp10 - status not shown]
|/
[ ] rabbitmq_amqp1_0 3.8.3
[ ] rabbitmq_auth_backend_cache 3.8.3
[ ] rabbitmq_auth_backend_http 3.8.3
[ ] rabbitmq_auth_backend_ldap 3.8.3
[ ] rabbitmq_auth_backend_oauth2 3.8.3
[ ] rabbitmq_auth_mechanism_ssl 3.8.3
[ ] rabbitmq_consistent_hash_exchange 3.8.3
[ ] rabbitmq_event_exchange 3.8.3
[e ] rabbitmq_federation 3.8.3
[E ] rabbitmq_federation_management 3.8.3
[ ] rabbitmq_jms_topic_exchange 3.8.3
[e ] rabbitmq_management 3.8.3
[e ] rabbitmq_management_agent 3.8.3
[ ] rabbitmq_mqtt 3.8.3
[ ] rabbitmq_peer_discovery_aws 3.8.3
[ ] rabbitmq_peer_discovery_common 3.8.3
[ ] rabbitmq_peer_discovery_consul 3.8.3
[ ] rabbitmq_peer_discovery_etcd 3.8.3
[ ] rabbitmq_peer_discovery_k8s 3.8.3
[ ] rabbitmq_prometheus 3.8.3
[ ] rabbitmq_random_exchange 3.8.3
[ ] rabbitmq_recent_history_exchange 3.8.3
[ ] rabbitmq_sharding 3.8.3
[E ] rabbitmq_shovel 3.8.3
[ ] rabbitmq_shovel_management 3.8.3
[ ] rabbitmq_stomp 3.8.3
[ ] rabbitmq_top 3.8.3
[ ] rabbitmq_tracing 3.8.3
[ ] rabbitmq_trust_store 3.8.3
[e ] rabbitmq_web_dispatch 3.8.3
[ ] rabbitmq_web_mqtt 3.8.3
[ ] rabbitmq_web_mqtt_examples 3.8.3
[ ] rabbitmq_web_stomp 3.8.3
[ ] rabbitmq_web_stomp_examples 3.8.3
and rabbitmqctl help
includes
Shovel plugin:
delete_shovel Deletes a Shovel
restart_shovel Restarts a dynamic Shovel
shovel_status Displays status of Shovel on a node
Use 'rabbitmqctl help <command>' to learn more about a specific command
One scenario in which I can reproduce this:
rabbitmq_shovel_management
or rabbitmq_federation_management
rabbitmq_shovel
which will be a no-oprabbitmq_shovel_management
rabbitmq_shovel
help
CLI tools entirely depend on rabbit_plugins
in discovering what plugins are enabled and should be placed on the code path.
I cannot reproduce any other way when the plugin that provides the command is enabled explicitly (not as a dependency of another plugin).
RabbitMQ.CLI.Core.CodePath
is where most of the relevant functions reside, e.g. https://github.com/rabbitmq/rabbitmq-cli/blob/master/lib/rabbitmq/cli/core/code_path.ex#L19.
OK, yes this is due to the plugin being enabled implicitly. It's pretty confusing behavior but I suspect most people enable both rabbitmq_shovel
and rabbitmq_shovel_management
at the same time. We can close this until someone else gets tripped up by it 😄
To reproduce:
3.8.2
generic-unix packagesbin/rabbitmq-plugins enable rabbitmq_shovel_management
sbin/rabbitmq-server
sbin/rabbitmq-plugins list
to verify pluginssbin/rabbitmqctl help
- you will not see the shovel plugin itemsshovel_status
,delete_shovel
, etcI see the same behavior using the zip package on Windows.
Running
run-broker
frommaster
, I do see the plugin commands in thehelp
output:Running them on a single node works. In a cluster, the full node name is required (including host name):
Otherwise:
(Note: this may not be the correct repo for this issue)