class Terraspace::CLI::New::Project

Public Class Methods

project_options() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 3
def self.project_options
  [
    [:bundle, type: :boolean, default: true, desc: "Runs bundle install on the project"],
    [:config, type: :boolean, default: true, desc: "Whether or not to generate config files."],
    [:force, aliases: %w[y], type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
    [:quiet, type: :boolean, desc: "Quiet output."],
    [:test_structure, type: :boolean, desc: "Create project bootstrap test structure."],
  ]
end

Public Instance Methods

bundle_install() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 68
def bundle_install
  return if @options[:bundle] == false
  log "=> Installing dependencies with: bundle install"
  Bundler.with_unbundled_env do
    bundle = "BUNDLE_IGNORE_CONFIG=1 bundle install"
    bundle << " > /dev/null 2>&1" if @options[:quiet]
    system(bundle, chdir: name)
  end
end
create_base() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 26
def create_base
  plugin_template_source("base", "project")
  directory ".", "#{name}"
end
create_project() click to toggle source

Will generate config folder from

1. terraspace code lang templates or
2. example lang templates from provider gems
# File lib/terraspace/cli/new/project.rb, line 36
def create_project
  plugin_template_source(@options[:lang], "project") # IE: plugin_template_source("hcl", "project")

  options = @options[:config] == false ? {exclude_pattern: "config" } : {}
  directory ".", "#{name}", options

  if @options[:config] == false
    empty_directory("#{name}/config")
  end
end
create_starter_module() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 53
def create_starter_module
  return unless @options[:examples]
  Module.start(component_args("example", name))
end
create_starter_stack() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 58
def create_starter_stack
  return unless @options[:examples]
  Stack.start(component_args("demo", name))
end
create_test() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 63
def create_test
  return unless @options[:test_structure]
  Test::Bootstrap.start(["--dir", name])
end
creating_messaging() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 22
def creating_messaging
  log "=> Creating new project called #{name}."
end
empty_dirs() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 47
def empty_dirs
  return if @options[:examples]
  empty_directory("#{name}/app/modules")
  empty_directory("#{name}/app/stacks")
end
welcome_message_examples() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 78
    def welcome_message_examples
      return unless options[:examples]
      log <<~EOL
        #{"="*64}
        Congrats! You have successfully created a terraspace project.
        Check out the created files. Adjust to the examples and then deploy with:

            cd #{name}
            terraspace up demo -y   # to deploy
            terraspace down demo -y # to destroy

        More info: https://terraspace.cloud/
      EOL
    end
welcome_message_no_examples() click to toggle source
# File lib/terraspace/cli/new/project.rb, line 93
    def welcome_message_no_examples
      return if options[:examples]
      log <<~EOL
        #{"="*64}
        Congrats! You have successfully created a terraspace project.
        Check out the created files.

            cd #{name}

        You can create starter modules and stacks with their generators:

            terraspace new module example
            terraspace new stack demo

        Add your code to them, and deploy when you are ready:

            terraspace up demo -y   # to deploy

        Destroy with:

            terraspace down demo -y # to destroy

        More info: https://terraspace.cloud/
      EOL
    end

Private Instance Methods

log(msg) click to toggle source
# File lib/terraspace/cli/new/project.rb, line 17
def log(msg)
  logger.info(msg) unless @options[:quiet]
end