Class: Kakine::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/kakine/builder.rb

Class Method Summary collapse

Class Method Details

.already_setup_security_group(new_sg, current_sgs) ⇒ Object



38
39
40
# File 'lib/kakine/builder.rb', line 38

def already_setup_security_group(new_sg, current_sgs)
  current_sgs.find { |current_sg| current_sg.name == new_sg.name }
end

.clean_up_security_group(new_sgs, current_sgs) ⇒ Object



22
23
24
25
26
# File 'lib/kakine/builder.rb', line 22

def clean_up_security_group(new_sgs, current_sgs)
  current_sgs.map do |current_sg|
    delete_security_group(current_sg) if new_sgs.none? { |new_sg| current_sg.name == new_sg.name }
  end
end

.clean_up_security_rule(new_sg, current_sg) ⇒ Object



70
71
72
73
74
# File 'lib/kakine/builder.rb', line 70

def clean_up_security_rule(new_sg, current_sg)
  current_sg.rules.map do |rule|
    delete_security_rule(new_sg.tenant_name, new_sg.name, rule) unless new_sg.find_by_rule(rule)
  end
end

.convergence_security_group(new_sg, current_sg) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/kakine/builder.rb', line 28

def convergence_security_group(new_sg, current_sg)
  if new_sg.name != 'default' && new_sg.description != current_sg.description
    delete_security_group(current_sg)
    first_create_security_group(new_sg)
  else
    clean_up_security_rule(new_sg, current_sg)
    first_create_rule(new_sg, current_sg)
  end
end

.create_security_group(sg) ⇒ Object



4
5
6
7
8
9
# File 'lib/kakine/builder.rb', line 4

def create_security_group(sg)
  attributes = { name: sg.name, description: sg.description, tenant_id: sg.tenant_id }
  security_group_id = Kakine::Adapter.instance.create_security_group(attributes)
  delete_default_security_rule(sg.tenant_name, sg.name)
  security_group_id
end

.create_security_rule(tenant_name, sg_name, rule) ⇒ Object



42
43
44
45
46
# File 'lib/kakine/builder.rb', line 42

def create_security_rule(tenant_name, sg_name, rule)
  sg = Kakine::Resource.get(:openstack).security_group(tenant_name, sg_name)
  security_group_id =  Kakine::Option.dryrun? && sg.nil? ? Kakine::Adapter.instance.id(sg_name) : sg.id
  Kakine::Adapter.instance.create_rule(security_group_id, rule.direction, rule)
end

.delete_default_security_rule(tenant_name, sg_name) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/kakine/builder.rb', line 52

def delete_default_security_rule(tenant_name, sg_name)
  target_sg = Kakine::Resource.get(:openstack).load_security_group.find do |sg|
    sg.name == sg_name
  end

  target_sg.rules.map do |rule|
    delete_security_rule(tenant_name, sg_name, rule)
  end if target_sg
end

.delete_id_column(sgs) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/kakine/builder.rb', line 81

def delete_id_column(sgs)
  case sgs
  when Array
    sgs.map { |sg| delete_id_column(sg) }
  when Hash
    sgs.inject({}) do |hash, (k, v)|
      hash[k] = delete_id_column(v) if k != "id"
      hash
    end
  else
    sgs
  end
end

.delete_security_group(sg) ⇒ Object



11
12
13
# File 'lib/kakine/builder.rb', line 11

def delete_security_group(sg)
  Kakine::Adapter.instance.delete_security_group(sg.id)
end

.delete_security_rule(tenant_name, sg_name, rule) ⇒ Object



48
49
50
# File 'lib/kakine/builder.rb', line 48

def delete_security_rule(tenant_name, sg_name, rule)
  Kakine::Adapter.instance.delete_rule(rule.id)
end

.first_create_rule(new_sg, current_sg) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/kakine/builder.rb', line 62

def first_create_rule(new_sg, current_sg)
  new_sg.rules.map do |rule|
    unless current_sg.find_by_rule(rule)
      create_security_rule(new_sg.tenant_name, new_sg.name, rule)
    end
  end
end

.first_create_security_group(new_sg) ⇒ Object



15
16
17
18
19
20
# File 'lib/kakine/builder.rb', line 15

def first_create_security_group(new_sg)
  create_security_group(new_sg)
  new_sg.rules.map do |rule|
    create_security_rule(new_sg.tenant_name, new_sg.name, rule)
  end if new_sg.has_rules?
end

.security_groupsObject



76
77
78
79
# File 'lib/kakine/builder.rb', line 76

def security_groups
  sgs = Kakine::Resource.get(:openstack).security_groups_hash
  delete_id_column(sgs).to_yaml
end