Class: OsCtld::Commands::Group::Create

Inherits:
Logged
  • Object
show all
Includes:
OsCtl::Lib::Utils::Log, OsCtl::Lib::Utils::System
Defined in:
lib/osctld/commands/group/create.rb

Instance Attribute Summary

Attributes inherited from Base

#client, #client_handler, #id, #opts

Instance Method Summary collapse

Methods inherited from Logged

#base_execute

Methods inherited from Base

#base_execute, #call_cmd, #call_cmd!, #error, #error!, handle, #handled, #indirect?, #initialize, #manipulate, #manipulation_holder, #ok, #progress, #request_stop, run, run!

Constructor Details

This class inherits a constructor from OsCtld::Commands::Base

Instance Method Details

#execute(grp) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/osctld/commands/group/create.rb', line 39

def execute(grp)
  manipulate(grp) do
    # Create parent groups
    if opts[:parents]
      t = ''

      opts[:name].split('/')[0..-2].each do |n|
        t = File.join('/', t, n)
        g = DB::Groups.by_path(grp.pool, t)
        next if g

        pgrp = Group.new(grp.pool, t, load: false)
        pgrp.configure

        DB::Groups.add(pgrp)
      end
    end

    # Create last group
    grp.configure
    grp.cgparams.set(grp.cgparams.import(opts[:cgparams] || []))

    DB::Groups.add(grp)
  end

  ok
rescue CGroupSubsystemNotFound, CGroupParameterNotFound => e
  error(e.message)
end

#findObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/osctld/commands/group/create.rb', line 10

def find
  pool = DB::Pools.get_or_default(opts[:pool])
  error!('pool not found') unless pool
  error!('group name has to start with /') unless opts[:name].start_with?('/')

  groups = opts[:name].split('/').drop(1)

  rx = /^[a-z0-9_-]{1,100}$/i

  groups.each do |grp|
    next if rx =~ grp

    error!("invalid name, allowed format: #{rx.source}")
  end

  grp = Group.new(pool, opts[:name], load: false)
  error!('group already exists') if DB::Groups.contains?(grp.name, pool)

  unless opts[:parents]
    begin
      grp.parents
    rescue GroupNotFound => e
      error!(e)
    end
  end

  grp
end