Module: Jenkins2::Client::NodeCommands

Included in:
Jenkins2::Client
Defined in:
lib/jenkins2/client/node_commands.rb

Instance Method Summary collapse

Instance Method Details

#connect_node(node: '(master)') ⇒ Object

Connects a node.

node

Node name, (master) for master.



8
9
10
# File 'lib/jenkins2/client/node_commands.rb', line 8

def connect_node( node: '(master)' )
  api_request( :post, "/computer/#{node}/launchSlaveAgent" )
end

#create_node(node: nil, xml_config: nil) ⇒ Object

Creates a new node, by providing node definition XML. Keyword parameters:

node

Node name.

xml_config

New configuration in xml format.



16
17
18
19
20
21
22
23
# File 'lib/jenkins2/client/node_commands.rb', line 16

def create_node( node: nil, xml_config: nil )
  xml_config = STDIN.read if xml_config.nil?
  api_request( :post, "/computer/doCreateItem", :raw ) do |req|
    req.form_data = { 'name' => node, type: "hudson.slaves.DumbSlave$DescriptorImpl",
      json: {}.to_json }
  end
  update_node( node: node, xml_config: xml_config )
end

#delete_node(node: nil) ⇒ Object

Deletes a node

node

Node name. Master cannot be deleted.

Raises:

  • (ArgumentError)


27
28
29
30
# File 'lib/jenkins2/client/node_commands.rb', line 27

def delete_node( node: nil )
  raise ArgumentError, 'node must be provided' if node.nil?
  api_request( :post, "/computer/#{node}/doDelete" )
end

#disconnect_node(node: '(master)', message: nil) ⇒ Object

Disconnects a node.

node

Node name, (master) for master.

message

Reason why the node is being disconnected.



35
36
37
38
39
# File 'lib/jenkins2/client/node_commands.rb', line 35

def disconnect_node( node: '(master)', message: nil )
  api_request( :post, "/computer/#{node}/doDisconnect" ) do |req|
    req.body = "offlineMessage=#{CGI::escape message}" unless message.nil?
  end
end

#get_node(node: '(master)') ⇒ Object

Returns the node state

node

Node name, (master) for master.



49
50
51
# File 'lib/jenkins2/client/node_commands.rb', line 49

def get_node( node: '(master)' )
  api_request( :get, "/computer/#{node}/api/json" )
end

#get_node_xml(node: '(master)') ⇒ Object

Returns the node definition XML.

node

Node name, (master) for master.



43
44
45
# File 'lib/jenkins2/client/node_commands.rb', line 43

def get_node_xml( node: '(master)' )
  api_request( :get, "/computer/#{node}/config.xml", :body )
end

#node_connected?(node: '(master)') ⇒ Boolean

Checks if node is connected, i.e. Master connected and launched client on it.

node

Node name. Use (master) for master.

Returns:

  • (Boolean)


100
101
102
# File 'lib/jenkins2/client/node_commands.rb', line 100

def node_connected?( node: '(master)' )
  !get_node( node: node )['offline']
end

#node_idle?(node: '(master)') ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/jenkins2/client/node_commands.rb', line 88

def node_idle?( node: '(master)' )
  get_node( node: node )['idle']
end

#node_online?(node: '(master)') ⇒ Boolean

Checks if node is online (= not temporarily offline )

node

Node name. Use (master) for master.

Returns:

  • (Boolean)


94
95
96
# File 'lib/jenkins2/client/node_commands.rb', line 94

def node_online?( node: '(master)' )
  !get_node( node: node )['temporarilyOffline']
end

#offline_node(node: '(master)', message: nil) ⇒ Object

Sets node temporarily offline. Does nothing, if node is already offline.

node

Node name, or (master) for master.

message

Record the note about this node is being disconnected.



56
57
58
59
60
61
62
# File 'lib/jenkins2/client/node_commands.rb', line 56

def offline_node( node: '(master)', message: nil )
  if node_online?( node: node )
    api_request( :post, "/computer/#{node}/toggleOffline" ) do |req|
      req.body = "offlineMessage=#{CGI::escape message}" unless message.nil?
    end
  end
end

#online_node(node: '(master)') ⇒ Object

Sets node back online, if node is temporarily offline.

node

Node name, (master) for master.



66
67
68
# File 'lib/jenkins2/client/node_commands.rb', line 66

def online_node( node: '(master)' )
  api_request( :post, "/computer/#{node}/toggleOffline" ) unless node_online?( node: node )
end

#update_node(node: '(master)', xml_config: nil) ⇒ Object

Updates the node definition XML Keyword parameters:

node

Node name, (master) for master.

xml_config

New configuration in xml format.



74
75
76
77
78
79
# File 'lib/jenkins2/client/node_commands.rb', line 74

def update_node( node: '(master)', xml_config: nil )
  xml_config = STDIN.read if xml_config.nil?
  api_request( :post, "/computer/#{node}/config.xml", :body ) do |req|
    req.body = xml_config
  end
end

#wait_node_idle(node: '(master)', max_wait_minutes: 60) ⇒ Object

Waits for node to become idle or until max_wait_minutes pass.

node

Node name, (master) for master.

max_wait_minutes

Maximum wait time in minutes. Default 60.



84
85
86
# File 'lib/jenkins2/client/node_commands.rb', line 84

def wait_node_idle( node: '(master)', max_wait_minutes: 60 )
  Jenkins2::Wait.wait( max_wait_minutes: max_wait_minutes ){ node_idle? node: node }
end