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,10 +0,0 @@
1
- metadata :name => "run puppet cancel",
2
- :description => "Agent to cancel Puppet apply runs",
3
- :author => "Reactor8",
4
- :license => "",
5
- :version => "",
6
- :url => "",
7
- :timeout => 600
8
- action "run", :description => "puppet cancel" do
9
- end
10
-
@@ -1,78 +0,0 @@
1
- require 'rubygems'
2
- require 'puppet'
3
- require 'grit'
4
- require 'tempfile'
5
- require 'fileutils'
6
-
7
- #TODO: move to be shared by agents
8
- PuppetApplyLogDir = "/var/log/puppet"
9
- ModulePath = "/etc/puppet/modules"
10
-
11
- module MCollective
12
- module Agent
13
- class Puppet_cancel < RPC::Agent
14
- def initialize()
15
- super()
16
- @log = Log.instance
17
- @reply_data = nil
18
- end
19
-
20
- #
21
- # Amar:
22
- # puppet_cancel agent gets 'task_id' in request
23
- # And goes through list of live threads inside stomp/mcollective process.
24
- # If thread with matching 'task_id' is found that thread is killed
25
- # If thread with matching 'task_id' is not found, error is returned in response
26
- #
27
- def run_action
28
- task_id = request[:top_task_id]
29
- @log.info("Terminating puppet apply thread for task_id=#{task_id}")
30
-
31
- ret ||= Response.new()
32
-
33
- Thread.list.each do |t|
34
- if t[:task_id] == task_id
35
- t[:is_canceled] = true
36
- t.kill
37
- @log.info("Puppet apply thread for task_id=#{task_id} terminated.")
38
- ret.set_status_succeeded!()
39
- return ret
40
- end
41
- end
42
-
43
- @log.info("Puppet apply thread for task_id=#{task_id} is not running on this node.")
44
- ret.set_status_failed!()
45
- error_info = { :error => { :message => "Puppet apply thread for task_id=#{task_id} is not running on the node." } }
46
- ret.merge!(error_info)
47
- end
48
-
49
- end
50
- #TODO: this should be common accross Agents
51
- class Response < Hash
52
- def initialize(hash={})
53
- super()
54
- self.merge!(hash)
55
- self[:status] = :unknown unless hash.has_key?(:status)
56
- end
57
-
58
- def to_hash()
59
- Hash.new.merge(self)
60
- end
61
-
62
- def failed?()
63
- self[:status] == :failed
64
- end
65
-
66
- def set_status_failed!()
67
- self[:status] = :failed
68
- end
69
- def set_status_succeeded!()
70
- self[:status] = :succeeded
71
- end
72
- def set_dynamic_attributes!(dynamic_attributes)
73
- self[:dynamic_attributes] = dynamic_attributes
74
- end
75
- end
76
- end
77
- end
78
-
@@ -1,204 +0,0 @@
1
- metadata :name => "rpcutil",
2
- :description => "General helpful actions that expose stats and internals to SimpleRPC clients",
3
- :author => "R.I.Pienaar <rip@devco.net>",
4
- :license => "Apache License, Version 2.0",
5
- :version => "1.0",
6
- :url => "http://marionette-collective.org/",
7
- :timeout => 10
8
-
9
- action "collective_info", :description => "Info about the main and sub collectives" do
10
- display :always
11
-
12
- output :main_collective,
13
- :description => "The main Collective",
14
- :display_as => "Main Collective"
15
-
16
- output :collectives,
17
- :description => "All Collectives",
18
- :display_as => "All Collectives"
19
-
20
- summarize do
21
- aggregate summary(:collectives)
22
- end
23
- end
24
-
25
- action "inventory", :description => "System Inventory" do
26
- display :always
27
-
28
- output :agents,
29
- :description => "List of agent names",
30
- :display_as => "Agents"
31
-
32
- output :facts,
33
- :description => "List of facts and values",
34
- :display_as => "Facts"
35
-
36
- output :classes,
37
- :description => "List of classes on the system",
38
- :display_as => "Classes"
39
-
40
- output :version,
41
- :description => "MCollective Version",
42
- :display_as => "Version"
43
-
44
- output :main_collective,
45
- :description => "The main Collective",
46
- :display_as => "Main Collective"
47
-
48
- output :collectives,
49
- :description => "All Collectives",
50
- :display_as => "All Collectives"
51
-
52
- output :data_plugins,
53
- :description => "List of data plugin names",
54
- :display_as => "Data Plugins"
55
- end
56
-
57
- action "get_fact", :description => "Retrieve a single fact from the fact store" do
58
- display :always
59
-
60
- input :fact,
61
- :prompt => "The name of the fact",
62
- :description => "The fact to retrieve",
63
- :type => :string,
64
- :validation => '^[\w\-\.]+$',
65
- :optional => false,
66
- :maxlength => 40
67
-
68
- output :fact,
69
- :description => "The name of the fact being returned",
70
- :display_as => "Fact"
71
-
72
- output :value,
73
- :description => "The value of the fact",
74
- :display_as => "Value"
75
-
76
- summarize do
77
- aggregate summary(:value)
78
- end
79
- end
80
-
81
- action "daemon_stats", :description => "Get statistics from the running daemon" do
82
- display :always
83
-
84
- output :threads,
85
- :description => "List of threads active in the daemon",
86
- :display_as => "Threads"
87
-
88
- output :agents,
89
- :description => "List of agents loaded",
90
- :display_as => "Agents"
91
-
92
- output :pid,
93
- :description => "Process ID of the daemon",
94
- :display_as => "PID"
95
-
96
- output :times,
97
- :description => "Processor time consumed by the daemon",
98
- :display_as => "Times"
99
-
100
- output :validated,
101
- :description => "Messages that passed security validation",
102
- :display_as => "Security Validated"
103
-
104
- output :unvalidated,
105
- :description => "Messages that failed security validation",
106
- :display_as => "Failed Security"
107
-
108
- output :passed,
109
- :description => "Passed filter checks",
110
- :display_as => "Passed Filter"
111
-
112
- output :filtered,
113
- :description => "Didn't pass filter checks",
114
- :display_as => "Failed Filter"
115
-
116
- output :starttime,
117
- :description => "Time the server started",
118
- :display_as => "Start Time"
119
-
120
- output :total,
121
- :description => "Total messages received",
122
- :display_as => "Total Messages"
123
-
124
- output :replies,
125
- :description => "Replies sent back to clients",
126
- :display_as => "Replies"
127
-
128
- output :configfile,
129
- :description => "Config file used to start the daemon",
130
- :display_as => "Config File"
131
-
132
- output :version,
133
- :description => "MCollective Version",
134
- :display_as => "Version"
135
-
136
- output :ttlexpired,
137
- :description => "Messages that did pass TTL checks",
138
- :display_as => "TTL Expired"
139
-
140
- summarize do
141
- aggregate summary(:version)
142
- aggregate summary(:agents)
143
- end
144
- end
145
-
146
- action "agent_inventory", :description => "Inventory of all agents on the server" do
147
- display :always
148
-
149
- output :agents,
150
- :description => "List of agents on the server",
151
- :display_as => "Agents"
152
- end
153
-
154
- action "get_config_item", :description => "Get the active value of a specific config property" do
155
- display :always
156
-
157
- input :item,
158
- :prompt => "Configuration Item",
159
- :description => "The item to retrieve from the server",
160
- :type => :string,
161
- :validation => '^.+$',
162
- :optional => false,
163
- :maxlength => 50
164
-
165
- output :item,
166
- :description => "The config property being retrieved",
167
- :display_as => "Property"
168
-
169
- output :value,
170
- :description => "The value that is in use",
171
- :display_as => "Value"
172
-
173
- summarize do
174
- aggregate summary(:value)
175
- end
176
- end
177
-
178
- action "get_data", :description => "Get data from a data plugin" do
179
- display :always
180
-
181
- input :source,
182
- :prompt => "Data Source",
183
- :description => "The data plugin to retrieve information from",
184
- :type => :string,
185
- :validation => '^\w+$',
186
- :optional => false,
187
- :maxlength => 50
188
-
189
- input :query,
190
- :prompt => "Query",
191
- :description => "The query argument to supply to the data plugin",
192
- :type => :string,
193
- :validation => '^.+$',
194
- :optional => true,
195
- :maxlength => 50
196
- end
197
-
198
- action "ping", :description => "Responds to requests for PING with PONG" do
199
- display :always
200
-
201
- output :pong,
202
- :description => "The local timestamp",
203
- :display_as => "Timestamp"
204
- end
@@ -1,101 +0,0 @@
1
- module MCollective
2
- module Agent
3
- class Rpcutil<RPC::Agent
4
- # Basic system inventory, same as the basic discovery agent
5
- action "inventory" do
6
- reply[:agents] = Agents.agentlist
7
- reply[:facts] = PluginManager["facts_plugin"].get_facts
8
- reply[:version] = MCollective.version
9
- reply[:classes] = []
10
- reply[:main_collective] = config.main_collective
11
- reply[:collectives] = config.collectives
12
- reply[:data_plugins] = PluginManager.grep(/_data$/)
13
-
14
- cfile = Config.instance.classesfile
15
- if File.exist?(cfile)
16
- reply[:classes] = File.readlines(cfile).map {|i| i.chomp}
17
- end
18
- end
19
-
20
- # Retrieve a single fact from the node
21
- action "get_fact" do
22
- validate :fact, String
23
-
24
- reply[:fact] = request[:fact]
25
- reply[:value] = Facts[request[:fact]]
26
- end
27
-
28
- # Get the global stats for this mcollectied
29
- action "daemon_stats" do
30
- stats = PluginManager["global_stats"].to_hash
31
-
32
- reply[:threads] = stats[:threads]
33
- reply[:agents] = stats[:agents]
34
- reply[:pid] = stats[:pid]
35
- reply[:times] = stats[:times]
36
- reply[:configfile] = Config.instance.configfile
37
- reply[:version] = MCollective.version
38
-
39
- reply.data.merge!(stats[:stats])
40
- end
41
-
42
- # Builds an inventory of all agents on teh machine
43
- # including license, version and timeout information
44
- action "agent_inventory" do
45
- reply[:agents] = []
46
-
47
- Agents.agentlist.sort.each do |target_agent|
48
- agent = PluginManager["#{target_agent}_agent"]
49
- actions = agent.methods.grep(/_agent/)
50
-
51
- agent_data = {:agent => target_agent,
52
- :license => "unknown",
53
- :timeout => agent.timeout,
54
- :description => "unknown",
55
- :name => target_agent,
56
- :url => "unknown",
57
- :version => "unknown",
58
- :author => "unknown"}
59
-
60
- agent_data.merge!(agent.meta)
61
-
62
- reply[:agents] << agent_data
63
- end
64
- end
65
-
66
- # Retrieves a single config property that is in effect
67
- action "get_config_item" do
68
- validate :item, String
69
-
70
- reply.fail! "Unknown config property #{request[:item]}" unless config.respond_to?(request[:item])
71
-
72
- reply[:item] = request[:item]
73
- reply[:value] = config.send(request[:item])
74
- end
75
-
76
- # Responds to PING requests with the local timestamp
77
- action "ping" do
78
- reply[:pong] = Time.now.to_i
79
- end
80
-
81
- # Returns all configured collectives
82
- action "collective_info" do
83
- config = Config.instance
84
- reply[:main_collective] = config.main_collective
85
- reply[:collectives] = config.collectives
86
- end
87
-
88
- action "get_data" do
89
- validate :source, String
90
-
91
- query = Data.ddl_transform_input(Data.ddl(request[:source]), request[:query].to_s)
92
-
93
- data = Data[ request[:source] ].lookup(query)
94
-
95
- data.keys.each do |key|
96
- reply[key] = data[key]
97
- end
98
- end
99
- end
100
- end
101
- end
@@ -1,13 +0,0 @@
1
- metadata :name => "ssh agent",
2
- :description => "SSH Agent allows adding of public keys, removing them and listing",
3
- :author => "Reactor8",
4
- :license => "",
5
- :version => "",
6
- :url => "",
7
- :timeout => 2
8
- action "grant_access", :description => "Add SSH access to host instance" do
9
- end
10
- action "revoke_access", :description => "Remove SSH access from host instance" do
11
- end
12
- action "list_access", :description => "List current SSH access for host instance" do
13
- end
@@ -1,97 +0,0 @@
1
- require 'base64'
2
-
3
- module MCollective
4
- module Agent
5
- class Ssh_agent < RPC::Agent
6
-
7
- AGENT_MCOLLECTIVE_LOCATION = "#{::MCollective::Config.instance.libdir.join}/mcollective/agent/"
8
- SSH_AUTH_KEYS_FILE_NAME = "authorized_keys"
9
-
10
- action "grant_access" do
11
- validate :rsa_pub_key, String
12
- validate :rsa_pub_name, String
13
- validate :system_user, String
14
-
15
- if does_user_exist?(request[:system_user])
16
- begin
17
- puppet_params = {
18
- :name => request[:rsa_pub_name],
19
- :ensure => 'present',
20
- :key =>normalize_rsa_pub_key(request[:rsa_pub_key]),
21
- :type => 'ssh-rsa',
22
- :user => request[:system_user]
23
- }
24
-
25
- ::MCollective::Util.loadclass("MCollective::Util::PuppetRunner")
26
- ::MCollective::Util::PuppetRunner.apply(:ssh_authorized_key, puppet_params)
27
-
28
- # There is a bug where we are expiriencing issues with above changes not taking effect for no apperent reason
29
- # if detected we repeat puppet apply
30
-
31
- unless key_added?(puppet_params[:user], puppet_params[:key])
32
- Log.info("Fallback, repeating SSH access grant")
33
- ::MCollective::Util::PuppetRunner.apply(:ssh_authorized_key, puppet_params)
34
- end
35
-
36
- raise "We were not able to add SSH access for given node (PuppetError)" unless key_added?(puppet_params[:user], puppet_params[:key])
37
-
38
- reply[:data] = { :message => "Access to system user '#{request[:system_user]}' has been granted for '#{request[:rsa_pub_name]}'"}
39
- rescue Exception => e
40
- reply[:data] = { :error => "Puppet error not able to process request, reason: '#{e.message}'" }
41
- end
42
- else
43
- reply[:data] = { :error => "System user '#{request[:system_user]}' not found on given node" }
44
- end
45
- reply[:pbuilderid] = Facts["pbuilderid"]
46
- reply[:status] = :ok
47
- end
48
-
49
- action "revoke_access" do
50
- validate :rsa_pub_name, String
51
- validate :system_user, String
52
-
53
- if does_user_exist?(request[:system_user])
54
- begin
55
- ::MCollective::Util.loadclass("MCollective::Util::PuppetRunner")
56
- ::MCollective::Util::PuppetRunner.apply(
57
- :ssh_authorized_key,
58
- {
59
- :name => request[:rsa_pub_name],
60
- :ensure => 'absent',
61
- :type => 'ssh-rsa',
62
- :user => request[:system_user]
63
- }
64
- )
65
- reply[:data] = { :message => "Access for system user '#{request[:system_user]}' has been revoked" }
66
- rescue Exception => e
67
- reply[:data] = { :error => "Puppet error not able to process request, reason: '#{e.message}'" }
68
- end
69
- else
70
- reply[:data] = { :error => "System user '#{request[:system_user]}' not found on given node" }
71
- end
72
-
73
- reply[:pbuilderid] = Facts["pbuilderid"]
74
- reply[:status] = :ok
75
- end
76
-
77
- def does_user_exist?(system_user)
78
- !File.open('/etc/passwd').grep(/^#{system_user}:/).empty?
79
- end
80
-
81
- def key_added?(system_user, pub_key)
82
- if system_user == "root"
83
- results = `more /#{system_user}/.ssh/#{SSH_AUTH_KEYS_FILE_NAME} | grep #{pub_key}`
84
- else
85
- results = `more /home/#{system_user}/.ssh/#{SSH_AUTH_KEYS_FILE_NAME} | grep #{pub_key}`
86
- end
87
- !results.empty?
88
- end
89
-
90
- def normalize_rsa_pub_key(rsa_pub_key)
91
- rsa_pub_key.strip!()
92
- rsa_pub_key.gsub!(/.* (.*) .*/,'\1')
93
- rsa_pub_key
94
- end
95
- end
96
- end
97
- end