summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/project.rb
blob: fc3972fec8cc603afafa73ebba0fbe4301bfa5a3 (plain)
1
2
3
4
5
6
7
8
9
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
38
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
require 'fileutils'

module LeapCli; module Commands

  desc 'Initializes a new LEAP provider in the specified directory.'
  arg_name 'directory-path'
  skips_pre
  command :init do |c|
    c.flag 'name', :desc => "The name of the provider", :default_value => 'Example'
    c.flag 'domain', :desc => "The primary domain of the provider", :default_value => 'example.org'
    c.flag 'platform', :desc => "File path of the leap_platform directory", :default_value => '../leap_platform'
    c.action do |global, options, args|
      directory = args.first
      unless directory && directory.any?
        help! "Directory name is required."
      end
      directory = File.expand_path(directory)
      unless File.exists?(directory)
        bail! { log :missing, "directory #{directory}" }
      end
      create_initial_provider_files(directory, global, options)
    end
  end

  private

  DEFAULT_REPO = 'git://leap.se/leap_platform' # TODO: use https

  #
  # creates new provider directory
  #
  def create_initial_provider_files(directory, global, options)
    Path.set_provider_path(directory)
    Dir.chdir(directory) do
      assert_files_missing! 'provider.json', 'common.json', 'Leapfile', :base => directory

      platform_dir = File.expand_path(options[:platform])

      unless File.symlink?(platform_dir) || File.directory?(platform_dir)
        if global[:yes] || agree("The platform directory \"#{options[:platform]}\" does not exist.\nDo you want me to create it by cloning from the\ngit repository #{DEFAULT_REPO}? ")
          assert_bin! 'git'
          ensure_dir platform_dir
          Dir.chdir(platform_dir) do
            log :cloning, "leap_platform into #{platform_dir}"
            pty_run "git clone --branch develop #{DEFAULT_REPO} ."
            pty_run 'git submodule update --init'
          end
        else
          bail!
        end
      end
      write_file! '.gitignore', GITIGNORE_CONTENT
      write_file! 'provider.json', provider_content(options)
      write_file! 'common.json', COMMON_CONTENT
      write_file! 'Leapfile', leapfile_content(options)
      ["nodes", "services", "tags"].each do |dir|
        ensure_dir dir
      end
      log :completed, 'initialization'
    end
  end

  def leapfile_content(options)
    %[## Required:
@platform_directory_path = "#{options[:platform]}"
@leap_version = "#{LeapCli::VERSION}"

## Optional:
# @custom_vagrant_vm_line = "config.vm.boot_mode = :gui"
]
  end

  GITIGNORE_CONTENT = <<EOS
test/Vagrantfile
test/.vagrant
test/openvpn
test/cert
EOS

  def provider_content(options)
  %[#
# General service provider configuration.
#
{
  "domain": "#{options[:domain]}",
  "name": {
    "en": "#{options[:name]}"
  },
  "description": {
    "en": "You really should change this text"
  },
  "languages": ["en"],
  "default_language": "en",
  "enrollment_policy": "open"
}
]
  end

  COMMON_CONTENT = <<EOS
#
# Options put here are inherited by all nodes.
#
{
}
EOS

end; end