Module: Kdeploy::DSL
- Included in:
- CLI
- Defined in:
- lib/kdeploy/dsl.rb
Overview
Domain-specific language for defining hosts, roles, and tasks
Class Method Summary collapse
Instance Method Summary collapse
- #add_explicit_hosts(task, hosts) ⇒ Object
- #add_role_hosts(task, hosts) ⇒ Object
- #create_task_block(block) ⇒ Object
- #get_task_hosts(task_name) ⇒ Object
- #host(name, **options) ⇒ Object
- #inventory(&block) ⇒ Object
- #kdeploy_hosts ⇒ Object
- #kdeploy_roles ⇒ Object
- #kdeploy_tasks ⇒ Object
- #normalize_hosts_option(on) ⇒ Object
- #normalize_roles_option(roles) ⇒ Object
- #role(name, hosts) ⇒ Object
- #run(command, sudo: nil) ⇒ Object
- #task(name, on: nil, roles: nil, &block) ⇒ Object
- #task_empty?(task) ⇒ Boolean
- #upload(source, destination) ⇒ Object
- #upload_template(source, destination, variables = {}) ⇒ Object
Class Method Details
.extended(base) ⇒ Object
8 9 10 11 12 |
# File 'lib/kdeploy/dsl.rb', line 8 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
#add_explicit_hosts(task, hosts) ⇒ Object
104 105 106 107 108 |
# File 'lib/kdeploy/dsl.rb', line 104 def add_explicit_hosts(task, hosts) task[:hosts]&.each do |host| hosts.add(host) if kdeploy_hosts.key?(host) end end |
#add_role_hosts(task, hosts) ⇒ Object
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/kdeploy/dsl.rb', line 110 def add_role_hosts(task, hosts) task[:roles]&.each do |role| role_hosts = kdeploy_roles[role] next unless role_hosts role_hosts.each do |host| hosts.add(host) if kdeploy_hosts.key?(host) end end end |
#create_task_block(block) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/kdeploy/dsl.rb', line 58 def create_task_block(block) lambda { @kdeploy_commands = [] instance_eval(&block) @kdeploy_commands } end |
#get_task_hosts(task_name) ⇒ Object
90 91 92 93 94 95 96 97 98 |
# File 'lib/kdeploy/dsl.rb', line 90 def get_task_hosts(task_name) task = kdeploy_tasks[task_name] return kdeploy_hosts.keys if task_empty?(task) hosts = Set.new add_explicit_hosts(task, hosts) add_role_hosts(task, hosts) hosts.to_a end |
#host(name, **options) ⇒ Object
26 27 28 |
# File 'lib/kdeploy/dsl.rb', line 26 def host(name, **) kdeploy_hosts[name] = .merge(name: name) end |
#inventory(&block) ⇒ Object
86 87 88 |
# File 'lib/kdeploy/dsl.rb', line 86 def inventory(&block) instance_eval(&block) if block_given? end |
#kdeploy_hosts ⇒ Object
14 15 16 |
# File 'lib/kdeploy/dsl.rb', line 14 def kdeploy_hosts @kdeploy_hosts ||= {} end |
#kdeploy_roles ⇒ Object
22 23 24 |
# File 'lib/kdeploy/dsl.rb', line 22 def kdeploy_roles @kdeploy_roles ||= {} end |
#kdeploy_tasks ⇒ Object
18 19 20 |
# File 'lib/kdeploy/dsl.rb', line 18 def kdeploy_tasks @kdeploy_tasks ||= {} end |
#normalize_hosts_option(on) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/kdeploy/dsl.rb', line 42 def normalize_hosts_option(on) return on if on.is_a?(Array) return [on] if on nil end |
#normalize_roles_option(roles) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/kdeploy/dsl.rb', line 50 def normalize_roles_option(roles) return roles if roles.is_a?(Array) return [roles] if roles nil end |
#role(name, hosts) ⇒ Object
30 31 32 |
# File 'lib/kdeploy/dsl.rb', line 30 def role(name, hosts) kdeploy_roles[name] = hosts end |
#run(command, sudo: nil) ⇒ Object
66 67 68 69 |
# File 'lib/kdeploy/dsl.rb', line 66 def run(command, sudo: nil) @kdeploy_commands ||= [] @kdeploy_commands << { type: :run, command: command, sudo: sudo } end |
#task(name, on: nil, roles: nil, &block) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/kdeploy/dsl.rb', line 34 def task(name, on: nil, roles: nil, &block) kdeploy_tasks[name] = { hosts: normalize_hosts_option(on), roles: normalize_roles_option(roles), block: create_task_block(block) } end |
#task_empty?(task) ⇒ Boolean
100 101 102 |
# File 'lib/kdeploy/dsl.rb', line 100 def task_empty?(task) !task || (!task[:hosts] && !task[:roles]) end |
#upload(source, destination) ⇒ Object
71 72 73 74 |
# File 'lib/kdeploy/dsl.rb', line 71 def upload(source, destination) @kdeploy_commands ||= [] @kdeploy_commands << { type: :upload, source: source, destination: destination } end |
#upload_template(source, destination, variables = {}) ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/kdeploy/dsl.rb', line 76 def upload_template(source, destination, variables = {}) @kdeploy_commands ||= [] @kdeploy_commands << { type: :upload_template, source: source, destination: destination, variables: variables } end |