/etc/mcollective/server.cfg
main_collective = mcollective
collectives = mcollective
libdir = /usr/libexec/mcollective
logfile = /var/log/mcollective.log
loglevel = info
daemonize = 1
# Plugins
securityprovider = psk
plugin.psk = unset
connector = activemq
plugin.activemq.pool.size = 1
plugin.activemq.pool.1.host = middleware
plugin.activemq.pool.1.port = 61613
plugin.activemq.pool.1.user = mcollective
plugin.activemq.pool.1.password = secret
#plugin.activemq.pool.1.user = server
#plugin.activemq.pool.1.password = secret
plugin.activemq.pool.1.ssl = true
plugin.activemq.pool.1.ssl.key = /var/lib/puppet/ssl/private_keys/pupmaster.us.oracle.com.pem
plugin.activemq.pool.1.ssl.cert = /var/lib/puppet/ssl/certs/pupmaster.idc.oracle.com.pem
# Facts
factsource = yaml
plugin.yaml = /etc/mcollective/facts.yaml
=========================================================
cat /etc/activemq/activemq.xml
<beans
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${activemq.base}/conf/credentials.properties</value>
</property>
</bean>
<!--
For more information about what MCollective requires in this file,
-->
<!--
WARNING: The elements that are direct children of <broker> MUST BE IN
ALPHABETICAL ORDER. This is fixed in ActiveMQ 5.6.0, but affects
previous versions back to 5.4.
-->
<!--
MCollective generally expects producer flow control to be turned off.
It will also generate a limitless number of single-use reply queues,
which should be garbage-collected after about five minutes to conserve
memory.
For more information, see:
-->
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="false"/>
<policyEntry queue="*.reply.>" gcInactiveDestinations="true" inactiveTimoutBeforeGC="300000" />
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<plugins>
<statisticsBrokerPlugin/>
<!--
This configures the users and groups used by this broker. Groups
are referenced below, in the write/read/admin attributes
of each authorizationEntry element.
-->
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="amq" password="secret" groups="admins,everyone"/>
<authenticationUser username="mcollective" password="marionette" groups="mcollective,everyone"/>
<authenticationUser username="admin" password="secret" groups="mcollective,admins,everyone"/>
</users>
</simpleAuthenticationPlugin>
<!--
Configure which users are allowed to read and write where. Permissions
are organized by group; groups are configured above, in the
authentication plugin.
With the rules below, both servers and admin users belong to group
mcollective, which can both issue and respond to commands. For an
example that splits permissions and doesn't allow servers to issue
commands, see:
-->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<authorizationEntry queue="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<!--
The advisory topics are part of ActiveMQ, and all users need access to them.
The "everyone" group is not special; you need to ensure every user is a member.
-->
<authorizationEntry topic="ActiveMQ.Advisory.>" read="everyone" write="everyone" admin="everyone"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<!--
The systemUsage controls the maximum amount of space the broker will
use for messages. For more information, see:
-->
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="20 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb" name="foo"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<!--
The transport connectors allow ActiveMQ to listen for connections over
a given protocol. MCollective uses Stomp, and other ActiveMQ brokers
use OpenWire. You'll need different URLs depending on whether you are
using TLS. For more information, see:
-->
<transportConnectors>
<transportConnector name="stomp+nio" uri="stomp+nio://
0.0.0.0:61613"/>
<!-- If using TLS, uncomment this and comment out the previous connector:
-->
</transportConnectors>
</broker>
<!--
Enable web consoles, REST and Ajax APIs and demos.
It also includes Camel (with its web console); see ${ACTIVEMQ_HOME}/conf/camel.xml for more info.
See ${ACTIVEMQ_HOME}/conf/jetty.xml for more details.
-->
<import resource="jetty.xml"/>
</beans>
===============================================
/var/log/activemq/activemq.log
: org.apache.activemq.transport.stomp.ProtocolException: Not connected.
2014-07-23 02:00:00,948 [NIO Worker 1410] WARN ProtocolConverter - Exception occurred processing:
SUBSCRIBE
content-type:text/plain; charset=UTF-8
destination:/topic/mcollective.mcollective.agent
content-length:0
: org.apache.activemq.transport.stomp.ProtocolException: Not connected.
2014-07-23 02:00:00,949 [NIO Worker 1410] WARN ProtocolConverter - Exception occurred processing:
SUBSCRIBE
content-type:text/plain; charset=UTF-8
destination:/queue/mcollective.nodes
content-length:0
: org.apache.activemq.transport.stomp.ProtocolException: Not connected.
2014-07-23 02:00:00,950 [NIO Worker 1410] WARN ProtocolConverter - Exception occurred processing:
SUBSCRIBE
content-type:text/plain; charset=UTF-8
destination:/topic/mcollective.rpcutil.agent
content-length:0
: org.apache.activemq.transport.stomp.ProtocolException: Not connected.
2014-07-23 02:00:02,943 [ware] Task-2062] INFO TransportConnection - Stopping null because Failed with SecurityException: User name [mcollective] or password is invalid.