lib/mix/tasks/imagelets.create.ex

defmodule Mix.Tasks.Doex.Imagelets.Create do
  use Mix.Task
  use FnExpr

  @shortdoc "Create a DitigalOcean snapshot based on available templates."

  @default_erlang "19.3-1"
  @default_elixir "1.5.1"
  @default_phoenix "1.3.0"
  @default_postgres "9.6"

  @moduledoc """
  Create a DitigalOcean snapshot based on a select (opinionated) templates:

      mix doex.imagelets.create <template> <options>

  The following Digital Ocean options (with examples) are available:

      --region              nyc3
      --size                s-1vcpu-1gb
      --image               ubuntu-18-04-x64
      --ssh_keys            1234,5467
      --backups             # add option to enable
      --ipv6                # add option to enable
      --private_networking  # add option to enable
      --tags                web,uat,temp

  Please refer to `doex droplets.create` for more details on the creation
  options.

  These are highly opinionated views of server setup.  If they
  do not align with your opinions then you have two courses of actions;
  a) ignore these tasks, or b) suggest updates.

  We support the following templates.

      elixir                Creates a (relatively) barebones elixir server
      phoenix               Creates an elixir/phoenix ready application server

  The templates above support additional flags including:

      --erlang              #{@default_erlang}
      --elixir              #{@default_elixir}
      --phoenix             #{@default_phoenix}
      --postgres            #{@default_postgres}

  Additional `doex` options that can be used:

      --quiet               If set, keep output to a minimum

  Release information (and available version numbers) is available at:

      Erlang    https://packages.erlang-solutions.com/erlang/
      Elixir    https://github.com/elixir-lang/elixir/releases
      Phoenix   https://github.com/phoenixframework/phoenix/releases
      Postgres  http://apt.postgresql.org/pub/repos/apt/dists/xenial-pgdg/

  For example:

      doex imagelets.create phoenix \\
        --region tor1 \\
        --tags myt \\
        --image ubuntu-18-04-x64 \\
        --size s-1vcpu-1gb \\
        --erlang #{@default_erlang} \\
        --elixir #{@default_elixir} \\
        --phoenix #{@default_phoenix} \\
        --postgres #{@default_postgres}

  """

  def run(args), do: Doex.Cli.Main.run({:imagelets_create, args})
end