defmodule ExNifcloud.Computing do @moduledoc """ Computing(Nifcloud) のオペレーション群 """ alias ExNifcloud.Computing.Utils @type network_interface_spec :: [ network_interface_id: binary, private_ip_address: binary ] @type license_spec :: [ license_name: binary, license_num: binary ] # ---------- # # Operations # # ---------- # @doc """ インスタンスの情報を取得するための Operation を生成します(インスタンス名を指定して特定のインスタンス情報を取得することも可能) ## API Doc: - https://cloud.nifty.com/api/rest/DescribeInstances.htm ## Examples: iex> ExNifcloud.Computing.describe_instances %ExNifcloud.Operation.Query{ action: :describe_instances, params: %{}, parser: &ExNifcloud.Utils.identity/2, path: "/api/", service: :computing } """ @type describe_instances_opts :: [ instance_ids: [binary, ...] ] @spec describe_instances() :: ExNifcloud.Operation.Query.t() @spec describe_instances(opts :: describe_instances_opts) :: ExNifcloud.Operation.Query.t() def describe_instances(opts \\ []) do opts |> Utils.build_operation(:describe_instances) end @doc """ インスタンスを生成するための Operation を生成します ## API Doc: - https://cloud.nifty.com/api/rest/RunInstances.htm ## Examples: iex> ExNifcloud.Computing.run_instances("89", key_name: "key_name", security_groups: "security_group_name") %ExNifcloud.Operation.Query{ action: :run_instances, params: %{ ImageId: "89", KeyName: "key_name", SecurityGroup: "security_group_name" }, parser: &ExNifcloud.Utils.identity/2, path: "/api/", service: :computing } """ @type run_instances_opts :: [ key_name: binary, security_groups: [binary, ...], user_date: binary, user_date_encoding: binary, instance_type: binary, availability_zone: binary, disable_api_termination: binary, accounting_type: binary, instance_id: binary, admin: binary, password: binary, ip_type: binary, public_ip: binary, agreement: binary, description: binary, network_interfaces: [network_interface_spec, ...], licenses: [license_spec, ...] ] @spec run_instances(image_id :: binary) :: ExNifcloud.Operation.Query.t() @spec run_instances(image_id :: binary, opts :: run_instances_opts) :: ExNifcloud.Operation.Query.t() def run_instances(image_id, opts \\ []) do [ {:image_id, image_id} | opts ] |> Utils.build_operation(:run_instances) end end