dtk-node-agent 0.7.7 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +5 -13
  2. data/README.md +21 -4
  3. data/bin/dtk-node-agent +17 -0
  4. data/lib/config/install.config +2 -2
  5. data/lib/dtk-node-agent/installer.rb +30 -25
  6. data/lib/dtk-node-agent/version.rb +18 -1
  7. metadata +23 -110
  8. data/mcollective_additions/debian.mcollective.init +0 -92
  9. data/mcollective_additions/plugins/README.md +0 -1
  10. data/mcollective_additions/plugins/v1.2/agent/discovery.rb +0 -39
  11. data/mcollective_additions/plugins/v1.2/agent/get_log_fragment.ddl +0 -15
  12. data/mcollective_additions/plugins/v1.2/agent/get_log_fragment.rb +0 -79
  13. data/mcollective_additions/plugins/v1.2/agent/git_access.ddl +0 -9
  14. data/mcollective_additions/plugins/v1.2/agent/git_access.rb +0 -79
  15. data/mcollective_additions/plugins/v1.2/agent/netstat.ddl +0 -9
  16. data/mcollective_additions/plugins/v1.2/agent/netstat.rb +0 -34
  17. data/mcollective_additions/plugins/v1.2/agent/puppet_apply.ddl +0 -9
  18. data/mcollective_additions/plugins/v1.2/agent/puppet_apply.rb +0 -630
  19. data/mcollective_additions/plugins/v1.2/agent/rpcutil.ddl +0 -204
  20. data/mcollective_additions/plugins/v1.2/agent/rpcutil.rb +0 -101
  21. data/mcollective_additions/plugins/v1.2/facts/pbuilder_facts.rb +0 -35
  22. data/mcollective_additions/plugins/v2.2/agent/action_agent.ddl +0 -9
  23. data/mcollective_additions/plugins/v2.2/agent/action_agent.rb +0 -47
  24. data/mcollective_additions/plugins/v2.2/agent/dev_manager.ddl +0 -9
  25. data/mcollective_additions/plugins/v2.2/agent/dev_manager.rb +0 -111
  26. data/mcollective_additions/plugins/v2.2/agent/discovery.rb +0 -39
  27. data/mcollective_additions/plugins/v2.2/agent/dtk_node_agent_git_client.rb +0 -94
  28. data/mcollective_additions/plugins/v2.2/agent/execute_tests.ddl +0 -9
  29. data/mcollective_additions/plugins/v2.2/agent/execute_tests.rb +0 -111
  30. data/mcollective_additions/plugins/v2.2/agent/execute_tests_v2.ddl +0 -9
  31. data/mcollective_additions/plugins/v2.2/agent/execute_tests_v2.rb +0 -131
  32. data/mcollective_additions/plugins/v2.2/agent/get_log_fragment.ddl +0 -15
  33. data/mcollective_additions/plugins/v2.2/agent/get_log_fragment.rb +0 -79
  34. data/mcollective_additions/plugins/v2.2/agent/git_access.ddl +0 -9
  35. data/mcollective_additions/plugins/v2.2/agent/git_access.rb +0 -61
  36. data/mcollective_additions/plugins/v2.2/agent/netstat.ddl +0 -9
  37. data/mcollective_additions/plugins/v2.2/agent/netstat.rb +0 -34
  38. data/mcollective_additions/plugins/v2.2/agent/ps.ddl +0 -9
  39. data/mcollective_additions/plugins/v2.2/agent/ps.rb +0 -37
  40. data/mcollective_additions/plugins/v2.2/agent/puppet_apply.ddl +0 -9
  41. data/mcollective_additions/plugins/v2.2/agent/puppet_apply.rb +0 -818
  42. data/mcollective_additions/plugins/v2.2/agent/puppet_cancel.ddl +0 -10
  43. data/mcollective_additions/plugins/v2.2/agent/puppet_cancel.rb +0 -78
  44. data/mcollective_additions/plugins/v2.2/agent/rpcutil.ddl +0 -204
  45. data/mcollective_additions/plugins/v2.2/agent/rpcutil.rb +0 -101
  46. data/mcollective_additions/plugins/v2.2/agent/ssh_agent.ddl +0 -13
  47. data/mcollective_additions/plugins/v2.2/agent/ssh_agent.rb +0 -97
  48. data/mcollective_additions/plugins/v2.2/agent/sync_agent_code.ddl +0 -10
  49. data/mcollective_additions/plugins/v2.2/agent/sync_agent_code.rb +0 -85
  50. data/mcollective_additions/plugins/v2.2/agent/tail.ddl +0 -11
  51. data/mcollective_additions/plugins/v2.2/agent/tail.rb +0 -67
  52. data/mcollective_additions/plugins/v2.2/audit/logfile.rb +0 -26
  53. data/mcollective_additions/plugins/v2.2/connector/r8stomp.rb +0 -238
  54. data/mcollective_additions/plugins/v2.2/connector/stomp.rb +0 -349
  55. data/mcollective_additions/plugins/v2.2/connector/stomp_em.rb +0 -191
  56. data/mcollective_additions/plugins/v2.2/data/agent_data.ddl +0 -22
  57. data/mcollective_additions/plugins/v2.2/data/agent_data.rb +0 -17
  58. data/mcollective_additions/plugins/v2.2/data/collective_data.ddl +0 -20
  59. data/mcollective_additions/plugins/v2.2/data/collective_data.rb +0 -9
  60. data/mcollective_additions/plugins/v2.2/data/fact_data.ddl +0 -28
  61. data/mcollective_additions/plugins/v2.2/data/fact_data.rb +0 -55
  62. data/mcollective_additions/plugins/v2.2/data/fstat_data.ddl +0 -89
  63. data/mcollective_additions/plugins/v2.2/data/fstat_data.rb +0 -56
  64. data/mcollective_additions/plugins/v2.2/discovery/flatfile.ddl +0 -11
  65. data/mcollective_additions/plugins/v2.2/discovery/flatfile.rb +0 -48
  66. data/mcollective_additions/plugins/v2.2/discovery/mc.ddl +0 -11
  67. data/mcollective_additions/plugins/v2.2/discovery/mc.rb +0 -30
  68. data/mcollective_additions/plugins/v2.2/discovery/stdin.ddl +0 -11
  69. data/mcollective_additions/plugins/v2.2/discovery/stdin.rb +0 -66
  70. data/mcollective_additions/plugins/v2.2/facts/pbuilder_facts.rb +0 -37
  71. data/mcollective_additions/plugins/v2.2/facts/yaml_facts.rb +0 -61
  72. data/mcollective_additions/plugins/v2.2/registration/agentlist.rb +0 -10
  73. data/mcollective_additions/plugins/v2.2/security/sshkey.ddl +0 -9
  74. data/mcollective_additions/plugins/v2.2/security/sshkey.rb +0 -362
  75. data/mcollective_additions/plugins/v2.2/util/puppetrunner.rb +0 -36
  76. data/mcollective_additions/plugins/v2.2/validator/array_validator.ddl +0 -7
  77. data/mcollective_additions/plugins/v2.2/validator/array_validator.rb +0 -9
  78. data/mcollective_additions/plugins/v2.2/validator/ipv4address_validator.ddl +0 -7
  79. data/mcollective_additions/plugins/v2.2/validator/ipv4address_validator.rb +0 -16
  80. data/mcollective_additions/plugins/v2.2/validator/ipv6address_validator.ddl +0 -7
  81. data/mcollective_additions/plugins/v2.2/validator/ipv6address_validator.rb +0 -16
  82. data/mcollective_additions/plugins/v2.2/validator/length_validator.ddl +0 -7
  83. data/mcollective_additions/plugins/v2.2/validator/length_validator.rb +0 -11
  84. data/mcollective_additions/plugins/v2.2/validator/regex_validator.ddl +0 -7
  85. data/mcollective_additions/plugins/v2.2/validator/regex_validator.rb +0 -9
  86. data/mcollective_additions/plugins/v2.2/validator/shellsafe_validator.ddl +0 -7
  87. data/mcollective_additions/plugins/v2.2/validator/shellsafe_validator.rb +0 -13
  88. data/mcollective_additions/plugins/v2.2/validator/typecheck_validator.ddl +0 -7
  89. data/mcollective_additions/plugins/v2.2/validator/typecheck_validator.rb +0 -28
  90. data/mcollective_additions/redhat.mcollective.init +0 -139
  91. data/mcollective_additions/redhat.mcollective.service +0 -14
  92. data/mcollective_additions/server.cfg +0 -22
  93. data/src/etc/logrotate.d/mcollective +0 -10
  94. data/src/etc/mcollective.default +0 -6
@@ -1,191 +0,0 @@
1
- require 'eventmachine'
2
- module MCollective
3
- module Connector
4
- # Handles sending and receiving messages over the Stomp protocol
5
- #
6
- # This plugin supports version 1.1 or 1.1.6 and newer of the Stomp rubygem
7
- # the versions between those had multi threading issues.
8
- #
9
- # For all versions you can configure it as follows:
10
- #
11
- # connector = stomp
12
- # plugin.stomp.host = stomp.your.net
13
- # plugin.stomp.port = 6163
14
- # plugin.stomp.user = you
15
- # plugin.stomp.password = secret
16
- #
17
- # For versions of ActiveMQ that supports message priorities
18
- # you can set a priority, this will cause a "priority" header
19
- # to be emitted if present:
20
- #
21
- # plugin.stomp.priority = 4
22
- #
23
- class Stomp_em<Base
24
- #this is effectively a singleton, but not mixin in Singleton beacuse mcollective isstantiates with new
25
- #TODO: may look at making singleton and patching with making :new public, recognizing that will only be called once
26
-
27
- module StompClient
28
- include EM::Protocols::Stomp
29
- def initialize(*args)
30
- super(*args)
31
- #TODO: if cannot fidn user and log this shoudl be error
32
- conn_opts = (args.last.kind_of?(Hash))? args.last : {}
33
- @login = conn_opts[:login]
34
- @passcode = conn_opts[:passcode]
35
- @connected = false
36
- end
37
-
38
- def connection_completed
39
- connect :login => @login, :passcode => @passcode
40
- end
41
-
42
- def receive_msg msg
43
- if msg.command == "CONNECTED"
44
- pp [:is_connected]
45
- @connected = true
46
- else
47
- Stomp_em.process(msg)
48
- end
49
- end
50
-
51
- def is_connected?()
52
- @connected
53
- end
54
- end
55
-
56
- def initialize
57
- @config = Config.instance
58
- @subscriptions = []
59
- @connected = nil
60
- @connection = nil
61
- end
62
-
63
- def set_context(context)
64
- @@decode_context = context[:decode_context]
65
- @@multiplexer = context[:multiplexer]
66
- end
67
-
68
- def disconnect
69
- #TODO: need to write
70
- end
71
-
72
- # Connects to the Stomp middleware
73
- def connect
74
- if @connection
75
- Log.debug("Already connection, not re-initializing connection")
76
- return
77
- end
78
- begin
79
- host = nil
80
- port = nil
81
- user = nil
82
- password = nil
83
- @@base64 = false
84
-
85
- @@base64 = get_bool_option("stomp.base64", false)
86
- @@msgpriority = get_option("stomp.priority", 0).to_i
87
-
88
- # Maintain backward compat for older stomps
89
- host = get_env_or_option("STOMP_SERVER", "stomp.host")
90
- port = get_env_or_option("STOMP_PORT", "stomp.port", 6163).to_i
91
- user = get_env_or_option("STOMP_USER", "stomp.user")
92
- password = get_env_or_option("STOMP_PASSWORD", "stomp.password")
93
-
94
- #TODO: assume reactor is running already
95
- @connection = EM.connect host, port, StompClient, :login => user, :passcode => password
96
- Log.debug("Connecting to #{host}:#{port}")
97
- rescue Exception => e
98
- pp e.backtrace[0..5]
99
- raise("Could not connect to Stomp Server: #{e}")
100
- end
101
- end
102
-
103
- def wait_until_connected?
104
- return if @connected
105
- loop do
106
- return if @connected = @connection.is_connected?
107
- sleep 1
108
- end
109
- end
110
-
111
-
112
- def self.process(msg)
113
- # STOMP puts the payload in the body variable, pass that
114
- # into the payload of MCollective::Request and discard all the
115
- # other headers etc that stomp provides
116
- raw_msg =
117
- if @@base64
118
- Request.new(SSL.base64_decode(msg.body))
119
- else
120
- Request.new(msg.body)
121
- end
122
- msg = @@decode_context.r8_decode_receive(raw_msg)
123
- @@multiplexer.process_response(msg,msg[:requestid])
124
- end
125
-
126
- #TODO: make automic subscribe_and_send because need subscribe to happen before send does
127
- # Subscribe to a topic or queue
128
- def subscribe(source)
129
- unless @subscriptions.include?(source)
130
- EM::defer do
131
- Log.debug("Subscribing to #{source}")
132
- wait_until_connected?
133
- @connection.subscribe(source)
134
- @subscriptions << source
135
- end
136
- end
137
- end
138
- def subscribe_and_send(source,destination,body,params={})
139
- EM::defer do
140
- wait_until_connected?
141
- unless @subscriptions.include?(source)
142
- Log.debug("Subscribing to #{source}")
143
- @connection.subscribe(source)
144
- @subscriptions << source
145
- end
146
- @connection.send(destination,body,params)
147
- end
148
- end
149
-
150
- # Subscribe to a topic or queue
151
- def unsubscribe(source)
152
- #TODO
153
- end
154
- private
155
- def get_env_or_option(env, opt, default=nil)
156
- return ENV[env] if ENV.include?(env)
157
- return @config.pluginconf[opt] if @config.pluginconf.include?(opt)
158
- return default if default
159
-
160
- raise("No #{env} environment or plugin.#{opt} configuration option given")
161
- end
162
-
163
- # looks for a config option, accepts an optional default
164
- #
165
- # raises an exception when it cant find a value anywhere
166
- def get_option(opt, default=nil)
167
- return @config.pluginconf[opt] if @config.pluginconf.include?(opt)
168
- return default if default
169
-
170
- raise("No plugin.#{opt} configuration option given")
171
- end
172
-
173
- # gets a boolean option from the config, supports y/n/true/false/1/0
174
- def get_bool_option(opt, default)
175
- return default unless @config.pluginconf.include?(opt)
176
-
177
- val = @config.pluginconf[opt]
178
-
179
- if val =~ /^1|yes|true/
180
- return true
181
- elsif val =~ /^0|no|false/
182
- return false
183
- else
184
- return default
185
- end
186
- end
187
- end
188
- end
189
- end
190
-
191
- # vi:tabstop=4:expandtab:ai
@@ -1,22 +0,0 @@
1
- metadata :name => "Agent",
2
- :description => "Meta data about installed MColletive Agents",
3
- :author => "R.I.Pienaar <rip@devco.net>",
4
- :license => "ASL 2.0",
5
- :version => "1.0",
6
- :url => "http://marionette-collective.org/",
7
- :timeout => 1
8
-
9
- dataquery :description => "Agent Meta Data" do
10
- input :query,
11
- :prompt => "Agent Name",
12
- :description => "Valid agent name",
13
- :type => :string,
14
- :validation => /^[\w\_]+$/,
15
- :maxlength => 20
16
-
17
- [:license, :timeout, :description, :url, :version, :author].each do |item|
18
- output item,
19
- :description => "Agent #{item}",
20
- :display_as => item.to_s.capitalize
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- module MCollective
2
- module Data
3
- class Agent_data<Base
4
- query do |plugin|
5
- raise "No agent called #{plugin} found" unless PluginManager.include?("#{plugin}_agent")
6
-
7
- agent = PluginManager["#{plugin}_agent"]
8
-
9
- result[:agent] = plugin
10
-
11
- [:license, :timeout, :description, :url, :version, :author].each do |item|
12
- result[item] = agent.meta[item]
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,20 +0,0 @@
1
- metadata :name => "Collective",
2
- :description => "Collective membership",
3
- :author => "Puppet Labs",
4
- :license => "ASL 2.0",
5
- :version => "1.0",
6
- :url => "http://marionette-collective.org/",
7
- :timeout => 1
8
-
9
- dataquery :description => "Collective" do
10
- input :query,
11
- :prompt => 'Collective',
12
- :description => 'Collective name to ask about, eg mcollective',
13
- :type => :string,
14
- :validation => /./,
15
- :maxlength => 256
16
-
17
- output :member,
18
- :description => 'Node is a member of the named collective',
19
- :display_as => 'member'
20
- end
@@ -1,9 +0,0 @@
1
- module MCollective
2
- module Data
3
- class Collective_data<Base
4
- query do |collective|
5
- result[:member] = Config.instance.collectives.include?(collective)
6
- end
7
- end
8
- end
9
- end
@@ -1,28 +0,0 @@
1
- metadata :name => "Fact",
2
- :description => "Structured fact query",
3
- :author => "Puppet Labs",
4
- :license => "ASL 2.0",
5
- :version => "1.0",
6
- :url => "http://marionette-collective.org/",
7
- :timeout => 1
8
-
9
- dataquery :description => "Fact" do
10
- input :query,
11
- :prompt => 'Fact Path',
12
- :description => 'Path to a fact, eg network.eth0.address',
13
- :type => :string,
14
- :validation => /./,
15
- :maxlength => 256
16
-
17
- output :exists,
18
- :description => 'Fact is present',
19
- :display_as => 'exists'
20
-
21
- output :value,
22
- :description => 'Fact value',
23
- :display_as => 'value'
24
-
25
- output :value_encoding,
26
- :description => 'Encoding of the fact value (text/plain or application/json)',
27
- :display_as => 'value_encoding'
28
- end
@@ -1,55 +0,0 @@
1
- module MCollective
2
- module Data
3
- class Fact_data<Base
4
- query do |path|
5
- parts = path.split /\./
6
- walk_path(parts)
7
- end
8
-
9
- private
10
-
11
- def walk_path(path)
12
- # Set up results as though we didn't find the value
13
- result[:exists] = false
14
- result[:value] = false
15
- result[:value_encoding] = false
16
-
17
- facts = PluginManager['facts_plugin'].get_facts
18
-
19
- path.each do |level|
20
- case facts
21
- when Array
22
- level = Integer(level)
23
- if level >= facts.size
24
- # array index out would be out of bounds, so we don't have the value
25
- return
26
- end
27
- when Hash
28
- if !facts.include?(level)
29
- # we don't have the key for the next level, so give up
30
- return
31
- end
32
- else
33
- # this isn't a container data type, so we can't walk into it
34
- return
35
- end
36
-
37
- facts = facts[level]
38
- end
39
-
40
- result[:exists] = true
41
- case facts
42
- when Array, Hash
43
- # Currently data plugins cannot return structured data, so until
44
- # this is fixed flatten the data with json and flag that we have
45
- # munged the data
46
- result[:value] = facts.to_json
47
- result[:value_encoding] = 'application/json'
48
- else
49
- result[:value] = facts
50
- result[:value_encoding] = 'text/plain'
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,89 +0,0 @@
1
- metadata :name => "File Stat",
2
- :description => "Retrieve file stat data for a given file",
3
- :author => "R.I.Pienaar <rip@devco.net>",
4
- :license => "ASL 2.0",
5
- :version => "1.0",
6
- :url => "http://marionette-collective.org/",
7
- :timeout => 1
8
-
9
- dataquery :description => "File stat information" do
10
- input :query,
11
- :prompt => "File Name",
12
- :description => "Valid File Name",
13
- :type => :string,
14
- :validation => /.+/,
15
- :maxlength => 120
16
-
17
- output :name,
18
- :description => "File name",
19
- :display_as => "Name"
20
-
21
- output :output,
22
- :description => "Human readable information about the file",
23
- :display_as => "Status"
24
-
25
- output :present,
26
- :description => "Indicates if the file exist using 0 or 1",
27
- :display_as => "Present"
28
-
29
- output :size,
30
- :description => "File size",
31
- :display_as => "Size"
32
-
33
- output :mode,
34
- :description => "File mode",
35
- :display_as => "Mode"
36
-
37
- output :md5,
38
- :description => "File MD5 digest",
39
- :display_as => "MD5"
40
-
41
- output :mtime,
42
- :description => "File modification time",
43
- :display_as => "Modification time"
44
-
45
- output :ctime,
46
- :description => "File change time",
47
- :display_as => "Change time"
48
-
49
- output :atime,
50
- :description => "File access time",
51
- :display_as => "Access time"
52
-
53
- output :mtime_seconds,
54
- :description => "File modification time in seconds",
55
- :display_as => "Modification time"
56
-
57
- output :ctime_seconds,
58
- :description => "File change time in seconds",
59
- :display_as => "Change time"
60
-
61
- output :atime_seconds,
62
- :description => "File access time in seconds",
63
- :display_as => "Access time"
64
-
65
- output :mtime_age,
66
- :description => "File modification age in seconds",
67
- :display_as => "Modification age"
68
-
69
- output :ctime_age,
70
- :description => "File change age in seconds",
71
- :display_as => "Change age"
72
-
73
- output :atime_age,
74
- :description => "File access age in seconds",
75
- :display_as => "Access age"
76
-
77
- output :uid,
78
- :description => "File owner",
79
- :display_as => "Owner"
80
-
81
- output :gid,
82
- :description => "File group",
83
- :display_as => "Group"
84
-
85
- output :type,
86
- :description => "File type",
87
- :display_as => "Type"
88
- end
89
-
@@ -1,56 +0,0 @@
1
- module MCollective
2
- module Data
3
- class Fstat_data<Base
4
- query do |file|
5
- result[:name] = file
6
- result[:output] = "not present"
7
- result[:type] = "unknown"
8
- result[:mode] = "0000"
9
- result[:present] = 0
10
- result[:size] = 0
11
- result[:mtime] = 0
12
- result[:ctime] = 0
13
- result[:atime] = 0
14
- result[:mtime_seconds] = 0
15
- result[:ctime_seconds] = 0
16
- result[:atime_seconds] = 0
17
- result[:md5] = 0
18
- result[:uid] = 0
19
- result[:gid] = 0
20
-
21
-
22
- if File.exists?(file)
23
- result[:output] = "present"
24
- result[:present] = 1
25
-
26
- if File.symlink?(file)
27
- stat = File.lstat(file)
28
- else
29
- stat = File.stat(file)
30
- end
31
-
32
- [:size, :uid, :gid].each do |item|
33
- result[item] = stat.send(item)
34
- end
35
-
36
- [:mtime, :ctime, :atime].each do |item|
37
- result[item] = stat.send(item).strftime("%F %T")
38
- result["#{item}_seconds".to_sym] = stat.send(item).to_i
39
- result["#{item}_age".to_sym] = Time.now.to_i - stat.send(item).to_i
40
- end
41
-
42
- result[:mode] = "%o" % [stat.mode]
43
- result[:md5] = Digest::MD5.hexdigest(File.read(file)) if stat.file?
44
-
45
- result[:type] = "directory" if stat.directory?
46
- result[:type] = "file" if stat.file?
47
- result[:type] = "symlink" if stat.symlink?
48
- result[:type] = "socket" if stat.socket?
49
- result[:type] = "chardev" if stat.chardev?
50
- result[:type] = "blockdev" if stat.blockdev?
51
- end
52
- end
53
- end
54
- end
55
- end
56
-