Class: Puppet_X::Coi::Jboss::Provider::AbstractJbossCli

Inherits:
Puppet::Provider
  • Object
show all
Defined in:
lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb

Overview

Base class for all JBoss providers

Constant Summary collapse

@@bin =
"bin/jboss-cli.sh"
@@contents =
nil

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.compilecmd(runasdomain, profile, cmd) ⇒ Object



212
213
214
215
216
217
218
219
220
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 212

def self.compilecmd runasdomain, profile, cmd
  out = cmd.to_s
  convr = Puppet_X::Coi::Jboss::BuildinsUtils::ToBooleanConverter.new(runasdomain)
  asdomain = convr.to_bool
  if asdomain && out[0..9] == '/subsystem'
    out = "/profile=#{profile}#{out}"
  end
  return out
end

.config_controllerObject



30
31
32
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 30

def config_controller
  Puppet_X::Coi::Jboss::Configuration::config_value :controller
end

.config_profileObject



34
35
36
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 34

def config_profile
  Puppet_X::Coi::Jboss::Configuration::config_value :profile
end

.config_runasdomainObject



26
27
28
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 26

def config_runasdomain
  Puppet_X::Coi::Jboss::Configuration::config_value :runasdomain
end

.controllerConfig(resource) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 72

def self.controllerConfig resource
    conf = {
      :controller  => resource[:controller],
      :ctrluser    => resource[:ctrluser],
      :ctrlpasswd  => resource[:ctrlpasswd],
    }
    return conf
end

.escape(value) ⇒ Object



183
184
185
186
187
188
189
190
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 183

def self.escape value
  if value.respond_to? :to_str
    str = value.gsub(/([^\\])\"/, '\1\\"')
  else
    str = value
  end
  return str.inspect
end

.execshell(cmd) ⇒ Object



85
86
87
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 85

def self.execshell(cmd)
  `#{cmd}`
end

.execute(jbosscmd, runasdomain, ctrlcfg, retry_count, retry_timeout) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 97

def self.execute jbosscmd, runasdomain, ctrlcfg, retry_count, retry_timeout
  file = Tempfile.new 'jbosscli'
  path = file.path
  file.close
  file.unlink

  File.open(path, 'w') {|f| f.write(jbosscmd + "\n") }

  ENV['JBOSS_HOME'] = self.jbosshome
  cmd = "#{self.jbossclibin} #{timeout_cli} --connect --file=#{path} --controller=#{ctrlcfg[:controller]}"
  unless ctrlcfg[:ctrluser].nil?
    cmd += " --user=#{ctrlcfg[:ctrluser]}"
  end
  unless ctrlcfg[:ctrlpasswd].nil?
    ENV['__PASSWD'] = ctrlcfg[:ctrlpasswd]
    cmd += " --password=$__PASSWD"
  end

  retries = 0
  result = ''
  lines = ''
  begin
    if retries > 0
      Puppet.warning "JBoss CLI command failed, try #{retries}/#{retry_count}, last status: #{result.exitstatus.to_s}, message: #{lines}"
      sleep retry_timeout.to_i
    end
    Puppet.debug "Command send to JBoss CLI: " + jbosscmd
    lines = self.execshell(cmd)
    result = self.last_execute_status
    retries += 1
  end while (result.exitstatus != 0 && retries <= retry_count)
  Puppet.debug "Output from JBoss CLI [%s]: %s" % [result.inspect, lines]
  # deletes the temp file
  File.unlink path
  return {
    :cmd    => jbosscmd,
    :result => result.exitstatus == 0,
    :lines  => lines
  }
end

.executeAndGet(cmd, runasdomain, ctrlcfg, retry_count, retry_timeout) ⇒ Object



222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 222

def self.executeAndGet cmd, runasdomain, ctrlcfg, retry_count, retry_timeout
  ret = self.execute cmd, runasdomain, ctrlcfg, retry_count, retry_timeout
  if not ret[:result]
      return {
        :result => false,
        :data => ret[:lines]
      }
  end
  # Giving JBoss `undefine` value in Ruby
  undefined = nil
  # JBoss expression and Long value handling
  ret[:lines].gsub!(/expression \"(.+)\",/, '\'\1\',')
  ret[:lines].gsub!(/=> (\d+)L/, '=> \1')
  begin
    evalines = eval ret[:lines]
    Puppet.debug evalines.inspect
    return {
      :result  => evalines["outcome"] == "success",
      :data    => (evalines["outcome"] == "success" ? evalines["result"] : evalines["failure-description"])
    }
  rescue Exception => e
    Puppet.err e
    return {
      :result  => false,
      :data    => ret[:lines]
    }
  end
end

.jbossas?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 89

def self.jbossas?
  Facter.value(:jboss_product) == 'jboss-as'
end

.jbossclibinObject



12
13
14
15
16
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 12

def jbossclibin
  home = self.jbosshome
  path = "#{home}/#{@@bin}"
  return path
end

.jbosshomeObject



18
19
20
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 18

def jbosshome
  Puppet_X::Coi::Jboss::Configuration::config_value :home
end

.jbosslogObject



22
23
24
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 22

def jbosslog
  Puppet_X::Coi::Jboss::Configuration::config_value :console_log
end

.last_execute_statusObject



81
82
83
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 81

def self.last_execute_status
  $?
end

.timeout_cliObject



93
94
95
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 93

def self.timeout_cli
  '--timeout=50000' unless jbossas?
end

Instance Method Details

#bringDown(typename, args) ⇒ Object



165
166
167
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 165

def bringDown(typename, args)
  return executeWithFail(typename, args, 'to remove')
end

#bringUp(typename, args) ⇒ Object



161
162
163
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 161

def bringUp(typename, args)
  return executeWithFail(typename, args, 'to create')
end

#compilecmd(cmd) ⇒ Object



208
209
210
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 208

def compilecmd cmd
  Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.compilecmd @resource[:runasdomain], @resource[:profile], cmd
end

#escape(value) ⇒ Object



192
193
194
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 192

def escape value
  Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.escape(value)
end

#execute(jbosscmd) ⇒ Object



55
56
57
58
59
60
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 55

def execute jbosscmd
  retry_count = @resource[:retry]
  retry_timeout = @resource[:retry_timeout]
  ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource
  return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.execute jbosscmd, runasdomain?, ctrlcfg, retry_count, retry_timeout
end

#executeAndGet(jbosscmd) ⇒ Object



67
68
69
70
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 67

def executeAndGet jbosscmd
  ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource
  return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.executeAndGet jbosscmd, runasdomain?, ctrlcfg, 0, 0
end

#executeWithFail(typename, passed_args, way) ⇒ Object



196
197
198
199
200
201
202
203
204
205
206
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 196

def executeWithFail(typename, passed_args, way)
  executed = execute(passed_args)
  if not executed[:result]
    ex = "\n#{typename} failed #{way}:\n[CLI command]: #{executed[:cmd]}\n[Error message]: #{executed[:lines]}"
    if not $add_log.nil? and $add_log > 0
      ex = "#{ex}\n#{printlog $add_log}"
    end
    raise ex
  end
  return executed
end

#executeWithoutRetry(jbosscmd) ⇒ Object



62
63
64
65
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 62

def executeWithoutRetry jbosscmd
  ctrlcfg = Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.controllerConfig @resource
  return Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.execute jbosscmd, runasdomain?, ctrlcfg, 0, 0
end

#getlog(lines) ⇒ Object



47
48
49
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 47

def getlog(lines)
  last_lines = `tail -n #{lines} #{jbosslog}`
end

#isprintinglog=(setting) ⇒ Object



171
172
173
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 171

def isprintinglog=(setting)
  $add_log = setting
end

#printlog(lines) ⇒ Object



51
52
53
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 51

def printlog(lines)
  return " ---\n JBoss AS log (last #{lines} lines): \n#{getlog lines}"
end

#runasdomain?Boolean

TODO: Uncomment for defered provider confinment after droping support for Puppet < 3.0 commands :jbosscli => Puppet_X::Coi::Jboss::Provider::AbstractJbossCli.jbossclibin

Returns:

  • (Boolean)


43
44
45
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 43

def runasdomain?
  @resource[:runasdomain]
end

#setattribute(path, name, value) ⇒ Object



138
139
140
141
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 138

def setattribute(path, name, value)
  escaped = value.nil? ? nil : escape(value)
  setattribute_raw(path, name, escaped)
end

#setattribute_raw(path, name, value) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 143

def setattribute_raw(path, name, value)
  Puppet.debug "#{name.inspect} setting to #{value.inspect} for path: #{path}"
  if value.nil?
    cmd = "#{path}:undefine-attribute(name=\"#{name.to_s}\")"
  else
    cmd = "#{path}:write-attribute(name=\"#{name.to_s}\", value=#{value})"
  end
  if runasdomain?
    cmd = "/profile=#{@resource[:profile]}#{cmd}"
  end
  res = executeAndGet(cmd)
  Puppet.debug("Setting attribute response: #{res.inspect}")
  if not res[:result]
    raise "Cannot set #{name} for #{path}: #{res[:data]}"
  end
  @property_hash[name] = value
end

#trace(method) ⇒ Object



175
176
177
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 175

def trace method
  Puppet.debug '%s[%s] > IN > %s' % [self.class, @resource[:name], method]
end

#traceout(method, retval) ⇒ Object



179
180
181
# File 'lib/puppet_x/coi/jboss/provider/abstract_jboss_cli.rb', line 179

def traceout method, retval
  Puppet.debug '%s[%s] > OUT > %s: %s' % [self.class, @resource[:name], method, retval.inspect]
end