dtk-node-agent 0.7.7 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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
-