Module: Kdeploy::DSL

Included in:
CLI
Defined in:
lib/kdeploy/dsl.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



7
8
9
10
11
# File 'lib/kdeploy/dsl.rb', line 7

def self.extended(base)
  base.instance_variable_set(:@kdeploy_hosts, {})
  base.instance_variable_set(:@kdeploy_tasks, {})
  base.instance_variable_set(:@kdeploy_roles, {})
end

Instance Method Details

#get_task_hosts(task_name) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/kdeploy/dsl.rb', line 77

def get_task_hosts(task_name)
  task = kdeploy_tasks[task_name]
  return kdeploy_hosts.keys if !task || (!task[:hosts] && !task[:roles])

  hosts = Set.new

  # 添加指定的主机
  task[:hosts]&.each do |host|
    hosts.add(host) if kdeploy_hosts.key?(host)
  end

  # 添加角色中的主机
  task[:roles]&.each do |role|
    next unless (role_hosts = kdeploy_roles[role])

    role_hosts.each do |host|
      hosts.add(host) if kdeploy_hosts.key?(host)
    end
  end

  hosts.to_a
end

#host(name, **options) ⇒ Object



25
26
27
# File 'lib/kdeploy/dsl.rb', line 25

def host(name, **options)
  kdeploy_hosts[name] = options.merge(name: name)
end

#inventory(&block) ⇒ Object



73
74
75
# File 'lib/kdeploy/dsl.rb', line 73

def inventory(&block)
  instance_eval(&block) if block_given?
end

#kdeploy_hostsObject



13
14
15
# File 'lib/kdeploy/dsl.rb', line 13

def kdeploy_hosts
  @kdeploy_hosts ||= {}
end

#kdeploy_rolesObject



21
22
23
# File 'lib/kdeploy/dsl.rb', line 21

def kdeploy_roles
  @kdeploy_roles ||= {}
end

#kdeploy_tasksObject



17
18
19
# File 'lib/kdeploy/dsl.rb', line 17

def kdeploy_tasks
  @kdeploy_tasks ||= {}
end

#role(name, hosts) ⇒ Object



29
30
31
# File 'lib/kdeploy/dsl.rb', line 29

def role(name, hosts)
  kdeploy_roles[name] = hosts
end

#run(command) ⇒ Object



53
54
55
56
# File 'lib/kdeploy/dsl.rb', line 53

def run(command)
  @kdeploy_commands ||= []
  @kdeploy_commands << { type: :run, command: command }
end

#task(name, on: nil, roles: nil, &block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/kdeploy/dsl.rb', line 33

def task(name, on: nil, roles: nil, &block)
  kdeploy_tasks[name] = {
    hosts: if on.is_a?(Array)
             on
           else
             (on ? [on] : nil)
           end,
    roles: if roles.is_a?(Array)
             roles
           else
             (roles ? [roles] : nil)
           end,
    block: lambda {
      @kdeploy_commands = []
      instance_eval(&block)
      @kdeploy_commands
    }
  }
end

#upload(source, destination) ⇒ Object



58
59
60
61
# File 'lib/kdeploy/dsl.rb', line 58

def upload(source, destination)
  @kdeploy_commands ||= []
  @kdeploy_commands << { type: :upload, source: source, destination: destination }
end

#upload_template(source, destination, variables = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/kdeploy/dsl.rb', line 63

def upload_template(source, destination, variables = {})
  @kdeploy_commands ||= []
  @kdeploy_commands << {
    type: :upload_template,
    source: source,
    destination: destination,
    variables: variables
  }
end