Coder Social home page Coder Social logo

linode / cli Goto Github PK

View Code? Open in Web Editor NEW
467.0 34.0 36.0 451 KB

This is the DEPRECATED Linode CLI. Use https://github.com/linode/linode-cli

Home Page: https://www.linode.com/docs/platform/linode-cli

License: Other

Perl 100.00%
linode-cli linode-api perl linode-platform linode

cli's Introduction

Linode CLI

Overview

Linode CLI is a simple command-line interface to the Linode platform. Note: There is a newer version of the Linode CLI (linode-cli) that uses the new Linode API V4.

Installation

Linode CLI is currently packaged for Debian, Ubuntu, CentOS, Fedora, NixOS and through Homebrew on Mac OS X. Final versions of linode-cli will be packaged up and very easy to install for major distributions.

Debian/Ubuntu

sudo bash -c 'echo "deb http://apt.linode.com/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/linode.list'
wget -O- https://apt.linode.com/linode.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install linode-cli

Fedora

Fedora's official repositories include Linode CLI (in F24 and newer). To install,

sudo dnf install linode-cli

CentOS

Installing Linode CLI on CentOS requires the EPEL repository to be installed and enabled, before installing Linode CLI.

sudo yum install epel-release
sudo yum install linode-cli

NixOS/Nix

Linode CLI is included in NixPkgs, so installation should be straightforward

# Using symbolic name. 
nix-env -i perl-linode-cli
# Using attribute name. (Channel name is derived using $() here)
nix-env -iA $(nix-channel --list | head -n1 | cut -d' ' -f1).linode-cli

Mac OS X

Installing the packaged version of Linode CLI on Mac OS X requires Homebrew: http://brew.sh

brew install linode/cli/linode-cli

Mac OS X segmentation faults

Linode-cli must be built using the system perl, so if you end up with segmentation faults when running linode on OSX, try

brew unlink perl
brew uninstall linode-cli
brew install linode-cli

Others

You'll need the following Perl modules. They can be installed from the CPAN using your preferred method.

  • JSON
  • LWP
  • Mozilla::CA
  • Try::Tiny
  • WebService::Linode

To install with root:

sudo cpan -i JSON LWP Mozilla::CP Try::Tiny WebService::Linode

To install with local::lib:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(JSON, LWP, Mozilla::CA, Try::Tiny, WebService::Linode)'

Then, download the Linode CLI tarball, extract it, and install:

curl -Lo linode-cli.tar.gz https://github.com/linode/cli/archive/master.tar.gz
tar xf linode-cli.tar.gz
cd cli-master && perl Makefile.PL && sudo make install

Initial configuration

You can configure defaults, including your API key and common deployment options, by running the configuration helper:

linode configure
This will walk you through setting default values for common options.

Linode Manager username
>>
...

By default, this will (over)write $HOME/.linodecli/config. If you specify a username (-u), it will (over)write $HOME/.linodecli/config_username.

Options are in the format of option value, for example:

api-key foobarbaz123456

The API key can also be set using an environment variable (LINODE_API_KEY). Alternatively, you can pass an --api-key option on the command line.

Examples

If you didn't place linode-cli somewhere in your PATH, you'll need to call it directly: /path/to/linode-cli/linode. Otherwise, you can simply use linode.

Listing Linodes

linode list
linode list My-Linode-Label
linode list My-Linode-Label1 My-Linode-Label2

Showing details about a single Linode

linode show My-Linode-Label

Starting, stopping, or restarting a Linode

linode start My-Linode-Label
linode stop My-Linode-Label
linode restart My-Linode-Label

Renaming a Linode

linode rename mylinodename mylinodenewname

Creating a new Linode

Warning: This will attempt to charge the credit card on file, or use any account credit available, and spin up a new Linode 2GB.

linode create New-Linode --location dallas --plan linode2G --payment-term 1 --distribution 'Debian 9' --group Frontends

Resizing a Linode

Warning: This will shut the Linode down, charge/credit the account, and issue a migration to another host server.

This example resizes a Linode 2GB to a Linode 4GB.

linode resize mylinode linode4GB

Deleting a Linode

Warning: This will permanently delete a Linode, its disk images and configuration profiles.

linode delete New-Linode

Working with multiple Linodes

Actions can be performed on multiple Linodes using their labels. Using multiple --label arguments will accomplish the same thing.

linode start My-Linode-Label1 My-Linode-Label2
linode show --label My-Linode-Label1 --label My-Linode-Label2

Working with Domains

Create a master domain (requires an SOA email address).

linode domain create example.com [email protected]

Create a slave domain (requires a master DNS server ip).

linode domain create example.com slave X.X.X.X

Displaying domains.

linode domain list
linode domain show example.com

Updating a domain.

linode domain update example.com --group main

Creating domain records.

linode domain record-create example.com A www2 X.X.X.X
linode domain record-create example.com MX subdomain mail.example.com

Updating a domain record.

linode domain record-update example.com MX mail.example.com --priority 20

Removing a domain record.

linode domain record-delete example.com A www2

Displaying domain records.

linode domain record-list example.com
linode domain record-list example.com MX
linode domain record-show example.com
linode domain record-show example.com example.com MX

Working with NodeBalancers

Create a NodeBalancer in your datacenter of choice.

linode nodebalancer create mynodebalancer dallas

Set the NodeBalancer up to handle traffic on a port (configuration).

linode nodebalancer config-create mynodebalancer 80

Create NodeBlanacer Nodes, balancing the incoming traffic between your Linodes.

linode nodebalancer node-create mynodebalancer 80 mylinode1 xx.xx.xx.1:80
linode nodebalancer node-create mynodebalancer 80 mylinode2 xx.xx.xx.2:80
linode nodebalancer node-create mynodebalancer 80 mylinode3 xx.xx.xx.3:80

Displaying NodeBalancers.

linode nodebalancer list

Displaying the Nodes, which will list the Linodes handing traffic on the port requested.

linode nodebalancer node-list mynodebalancer 80

Working with StackScripts

Actions can be performed on StackScripts.

linode stackscript list
linode stackscript create --label "StackScript Name" --codefile "/path/myscript.sh" --distribution "Debian 9"
linode stackscript show My-StackScript-Label
linode stackscript source mystackscript > myscript.sh

Working with Linode Images

Listing a Linode's disks (displays disk names and disk IDs)

linode disk-list mylinodelabel

Creating a Linode Image

linode image-create mylinodelabel --diskid diskid

Listing your Linode Images

linode image-list

Updating or removing your Linode Images

linode image-update --imageid imageid --name newname
linode image-delete --imageid imageid

Displaying account information

Account information, including the current account balance and network transfer pool usage, can be queried with the linode-account tool.

linode account show
          managed yes
          balance $ 0.00
    transfer pool 7527.00GB
transfer billable 0.00GB
     active since 2013-09-10 14:44:27.0
    transfer used 1.00GB

JSON output

JSON output is available for actions.

linode list --output json
linode list --json
{
   "linodefrontend1" : {
      "location" : "dallas",
      "group" : "",
      "status" : "powered off",
      "backupsenabled" : false,
      "totalram" : "2GB",
      "request_error" : "",
      "totalhd" : "24GB",
      "label" : "linodefrontend1",
      "linodeid" : 900001
   },
   "linodebackend1" : {
      "location" : "dallas",
      "group" : "backend",
      "status" : "running",
      "backupsenabled" : true,
      "totalram" : "4GB",
      "request_error" : "",
      "totalhd" : "48GB",
      "label" : "linodebackend1",
      "linodeid" : 900002
   }
}

Using with multiple accounts

Multiple accounts and configuration files can be accomplished with the username option.

linode list -u username1
linode list -u username2

linode configure -u username1
linode configure -u username2
...

Usage

Options

-a, --action: An action to perform on one Linode. One of: create, start, stop, restart, rename, group, resize, delete. Read-only operations are available as well: list, show.

Each action has a set of options that apply to it, which are outlined in the section ACTIONS.

--api-key: API key to use when communicating with the Linode API. Alternatively, you can specify the API key in $HOME/.linodecli/config, using the format api-key foobar.

-u, --username: Optional. Allows users to specify the username, if using with multiple accounts and configuration files.

-j, --json: Optional. JSON output.

-h, --help: Displays help documentation.


Linode Actions

Create

Create and start a new Linode.

-l, --label: Required. A Linode to operate on.

-L, --location, --datacenter: Required. The datacenter to use for deployment. Locations are Atlanta, Dallas, Frankfurt, Fremont, London, Newark, Singapore, Shinagawa.

-d, --distribution: Required when not using imageid. Distribution name or DistributionID to deploy.

-i, --imageid: Required when not using distribution. The ID of the gold-master image to use for deployment.

-p, --plan: Required. The Plan to deploy. Plans are:

Standard Instances:
linode2GB, linode4GB, linode8GB, linode16GB, linode32GB, linode64GB, linode96GB, linode128GB, linode192GB

High Memory Instances:
linode24GB, linode48GB, linode90GB, linode150GB, linode300GB

Nanode Instances:
nanode1GB

-P, --password: Required. The root user's password. Needs to be at least 6 characters and contain at least two of these four character classes: lower case letters, upper case letters, numbers, and punctuation.

-t, --payment-term: Optional. Payment term, one of 1, 12, or 24 (months). Default: 1. This is ignored when using metered.

-g, --group: Optional. Linode Manager display group to place this Linode under. Default: none.

-K, --pubkey-file: Optional. A public key file to install at /root/.ssh/authorized_keys when creating this Linode.

-S, --stackscript: Optional when creating with a distribution. Personal or public StackScript ID to use for deployment. Names of personal StackScripts are accepted.

-J, --stackscriptjson: The JSON encoded name/value pairs, answering the StackScript's User Defined Fields (UDF). A path to a JSON file is also accepted.

-w, --wait: Optional. Amount of time (in minutes) to wait for human output. Using the flag only, will use the default of 5.

Rebuild

Rebuild an existing Linode.

-l, --label: Required. A Linode to operate on.

-d, --distribution: Required when not using imageid. Distribution name or DistributionID to deploy.

-i, --imageid: Required when not using distribution. The ID of the gold-master image to use for deployment.

-P, --password: Required. The root user's password. Needs to be at least 6 characters and contain at least two of these four character classes: lower case letters, upper case letters, numbers, and punctuation.

-K, --pubkey-file: Optional. A public key file to install at /root/.ssh/authorized_keys when creating this Linode.

-S, --stackscript: Optional when rebuilding with a distribution. Personal or public StackScript ID to use for deployment. Names of personal StackScripts are accepted.

-J, --stackscriptjson: The JSON encoded name/value pairs, answering the StackScript's User Defined Fields (UDF). A path to a JSON file is also accepted.

-w, --wait: Optional. Amount of time (in minutes) to wait for human output. Using the flag only, will use the default of 5.

Start, stop, restart

Stop, start, or restart a Linode.

-l, --label: A Linode to operate on.

-w, --wait: Optional. Amount of time (in minutes) to wait for human output. Using the flag only, will use the default of 5.

Rename

Change a Linode's label.

-l, --label: A Linode to operate on.

-n, --new-label: New label to apply to this Linode.

Group

Set a Linode's display group.

-g, --group: Linode Manager display group to place this Linode under.

-l, --label: A Linode to operate on.

Resize

Resize a Linode to a new plan size, and issue a boot job.

-l, --label: A Linode to operate on.

-p, --plan: The Plan to resize to. Plans are:

Standard Instances:
linode2GB, linode4GB, linode8GB, linode16GB, linode32GB, linode64GB, linode96GB, linode128GB, linode192GB

High Memory Instances:
linode24GB, linode48GB, linode90GB, linode150GB, linode300GB

Nanode Instances:
nanode1GB

-w, --wait: Optional. Amount of time (in minutes) to wait for human output. Using the flag only, will use the default of 20.

IP-Add

Add an IP address to a Linode.

-l, --label: A Linode to operate on.

--private: Add a private IP address instead of a public one.

Delete

Delete a Linode, its disk image(s), and configuration profile(s).

-l, --label: A Linode to operate on.

List

List information about one or more Linodes. Linodes are grouped by their display group.

-l, --label: Optional. A specific Linode to list.

Show

Display detailed information about one or more Linodes.

-l, --label: Required. A specific Linode to show.

Locations

List all available datacenters.

Distros

List all available distributions.

Plans

List all available Linode plans.

Disk-List

Lists disks associated with a specific Linode.

-l, --label: Required. The Linode to display.

Image-List

Lists available gold-master images.

Image-Create

Creates a gold-master image for future deployments.

-l, --label: Required. Specifies the source Linode to create the image from.

-d, --diskid: Required. Specifies the source Disk ID to create the image from.

-D, --description: Optional. An optional description of the created image.

-n, --name: Optional. Sets the name of the image. If not provided, the name defaults to the source image label.

-w, --wait: Optional. Amount of time (in minutes) to wait for human output. Using the flag only, will use the default of 5.

Image-Update

Updates a gold-master image.

-i, --imageid: Required. The ID of the gold-master image to update.

-D, --description: Optional. The new image description.

-n, --name: Optional. The new image name.

Image-Delete

Deletes a gold-master image.

-i, --imageid: Required. The ID of the gold-master image to delete.


Domain Actions

Create

Create a Domain.

-l, --label: The Domain (name). The zone's name.

-t, --type: Either master or slave. Default: master

-e, --email: SOA email address. Required for master domains.

-D, --description: Optional. Notes describing details about the Domain.

-R, --refresh: Optional. Default: 0

-Y, --retry: Optional. Default: 0

-E, --expire: Optional. Default: 0

-T, --ttl: Optional. Default: 0

-g, --group: Optional. Linode Manager display group to place this Domain under.

-s, --status: Optional. Statuses are active, edit, or disabled. Default: active

-m, --masterip: Optional. Accepts multiple entries. When the domain is a slave, this is the zone's master DNS servers list.

-x, --axfrip: Optional. Accepts multiple entries. IP addresses allowed to AXFR the entire zone.

Update

Update a Domain.

-l, --label: The Domain (name) to update.

-n, --new-label: Optional. Renames the Domain.

-t, --type: Optional. Either master or slave. Default: master

-e, --email: Optional. SOA email address. Required for master domains.

-D, --description: Optional. Notes describing details about the Domain.

-R, --refresh: Optional. Default: 0

-Y, --retry: Optional. Default: 0

-E, --expire: Optional. Default: 0

-T, --ttl: Optional. Default: 0

-g, --group: Optional. Linode Manager display group to place this Domain under.

-s, --status: Optional. Statuses are active, edit, or disabled. Default: active

-m, --masterip: Optional. Accepts multiple entries. When the domain is a slave, this is the zone's master DNS servers list.

-x, --axfrip: Optional. Accepts multiple entries. IP addresses allowed to AXFR the entire zone.

Delete

Delete a Domain.

-l, --label: The Domain to delete.

List

List information about one or more Domains.

-l, --label: Optional. A specific Domain to list.

Show

Display detailed information about one or more Domains.

-l, --label: Required. A specific Domain to show.

Domain Record Create (record-create)

Create a Domain record.

-l, --label: The Domain (name). The zone's name.

-t, --type: Required. One of: NS, MX, A, AAAA, CNAME, TXT, or SRV

-n, --name: Optional. The hostname or FQDN. When Type=MX the subdomain to delegate to the Target MX server. Default: blank.

-p, --port: Optional. Default: 80

-R, --target: Optional. When Type=MX the hostname. When Type=CNAME the target of the alias. When Type=TXT the value of the record. When Type=A or AAAA the token of '[remote_addr]' will be substituted with the IP address of the request.

-P, --priority: Optional. Priority for MX and SRV records, 0-255 Default: 10

-W, --weight: Optional. Default: 5

-L, --protocol: Optional. The protocol to append to an SRV record. Ignored on other record types. Default: blank.

-T, --ttl: Optional. Default: 0

Domain Record Update (record-update)

Update a Domain record.

-l, --label: The Domain containing the record to update.

-t, --type: Required. The type of the record to delete. One of: NS, MX, A, AAAA, CNAME, TXT, or SRV

-m, --match: Required. The match for the record to delete. Match to a name or target.

-n, --name: Optional. The hostname or FQDN. When Type=MX the subdomain to delegate to the Target MX server. Default: blank.

-p, --port: Optional. Default: 80

-R, --target: Optional. When Type=MX the hostname. When Type=CNAME the target of the alias. When Type=TXT the value of the record. When Type=A or AAAA the token of '[remote_addr]' will be substituted with the IP address of the request.

-P, --priority: Optional. Priority for MX and SRV records, 0-255 Default: 10

-W, --weight: Optional. Default: 5

-L, --protocol: Optional. The protocol to append to an SRV record. Ignored on other record types. Default: blank.

-T, --ttl: Optional. Default: 0

Domain Record Delete (record-delete)

Delete a Domain record.

-l, --label: The Domain containing the record to delete.

-t, --type: Required. The type of the record to delete. One of: NS, MX, A, AAAA, CNAME, TXT, or SRV

-m, --match: Required. The match for the record to delete. Match to a name or target.

Domain Record List (record-list)

List Domain Record information for one or more Domains.

-l, --label: Optional. A specific Domain to list.

-t, --type: Optional. Allows domain record filtering by type. One of: NS, MX, A, AAAA, CNAME, TXT, or SRV

Domain Record Show (record-show)

Display detailed Domain Record information for one or more Domains.

-l, --label: Required. A specific Domain to show.

-t, --type: Optional. Allows domain record filtering by type. One of: NS, MX, A, AAAA, CNAME, TXT, or SRV


NodeBalancer Actions

Create

Create a NodeBalancer.

-l, --label: Required. The name of the NodeBalancer.

-L, --location: Required. The datacenter to use for deployment. Locations are Dallas, Fremont, Atlanta, Newark, London, and Tokyo.

-t, --payment-term: Optional. Payment term, one of 1, 12, or 24 (months). Default: 1. This is ignored when using metered.

Rename

Rename a NodeBalancer.

-l, --label: Required. The name of the NodeBalancer.

-n, --new-label: Required. The new name for the NodeBalancer.

Throttle

Adjust the connections per second allowed per client IP for a NodeBalancer, to help mitigate abuse.

-l, --label: Required. The name of the NodeBalancer.

-c, --connections: Required. To help mitigate abuse, throttle connections per second, per client IP. 0 to disable. Max of 20.

Delete

Delete a NodeBalancer.

-l, --label: Required. The NodeBalancer to delete.

List

List information about one or more NodeBalancers.

-l, --label: Optional. A specific NodeBalancer to list.

Show

Display detailed information about one or more NodeBalancers.

-l, --label: Required. A specific NodeBalancer to show.

NodeBalancer Config Actions

Create NodeBalancer Config/Port (config-create)

Create a NodeBalancer config (port).

-l, --label: Required. The NodeBalancer name to add the config/port.

-p, --port: Optional. The NodeBalancer config port to bind on (1-65534). Default is 80.

-L, --protocol: Optional. Options are 'tcp', 'http', and 'https'. Default is 'http'.

-A, --algorithm: Optional. Balancing algorithm. Options are 'roundrobin', 'leastconn', and 'source'. Default is 'roundrobin'.

-S, --stickiness: Optional. Session persistence. Options are 'none', 'table', and 'http_cookie'. Default is 'table'.

-H, --check-health: Optional. Perform active health checks on the backend nodes. One of 'connection', 'http', 'http_body'. Default is 'connection'.

-I, --check-interval: Optional. Seconds between health check probes (2-3600). Default is 5.

-T, --check-timeout: Optional. Seconds to wait before considering the probe a failure (1-30). Must be less than check_interval. Default is 3.

-X, --check-attempts: Optional. Number of failed probes before taking a node out of rotation (1-30). Default is 2.

-P, --check-path: Optional. When check-health='http', the path to request. Default is '/'.

-B, --check-body: Optional. When check-health='http_body', a regex against the expected result body.

-C, --ssl-cert: Optional. SSL certificate served by the NodeBalancer when the protocol is 'https'. A path to the file is also accepted.

-K, --ssl-key: Optional. Unpassphrased private key for the SSL certificate when protocol is 'https'. A path to the file is also accepted.

Update NodeBalancer Config/Port (config-update)

Update a NodeBalancer config (port).

-l, --label: Required. The NodeBalancer name.

-p, --port: Required. The NodeBalancer config port.

-N, --new-port: Optional. Changes the config port to bind on (1-65534).

-L, --protocol: Optional. Protocol. Options are 'tcp', 'http', and 'https'.

-A, --algorithm: Optional. Balancing algorithm. Options are 'roundrobin', 'leastconn', and 'source'.

-S, --stickiness: Optional. Session persistence. Options are 'none', 'table', and 'http_cookie'.

-H, --check-health: Optional. Perform active health checks on the backend nodes. One of 'connection', 'http', 'http_body'.

-I, --check-interval: Optional. Seconds between health check probes (2-3600).

-T, --check-timeout: Optional. Seconds to wait before considering the probe a failure (1-30). Must be less than check_interval.

-X, --check-attempts: Optional. Number of failed probes before taking a node out of rotation (1-30).

-P, --check-path: Optional. When check-health='http', the path to request.

-B, --check-body: Optional. When check-health='http_body', a regex against the expected result body.

-C, --ssl-cert: Optional. SSL certificate served by the NodeBalancer when the protocol is 'https'. A path to the file is also accepted.

-K, --ssl-key: Optional. Unpassphrased private key for the SSL certificate when protocol is 'https'. A path to the file is also accepted.

Delete NodeBalancer Config/Port (config-delete)

Delete a NodeBalancer config (port).

-l, --label: The NodeBalancer name.

-p, --port: The NodeBalancer config port to delete.

List NodeBalancer Config/Port (config-list)

List all configs (ports) for a specific NodeBalancer.

-l, --label: Required. A specific NodeBalancer to list.

Show NodeBalancer Config/Port (config-show)

Display detailed information about a specific NodeBalancer config/port.

-l, --label: Required. A specific NodeBalancer to show.

-p, --port: Required. The NodeBalancer config port to show.

NodeBalancer Node Actions

Create NodeBalancer Node (node-create)

Create a NodeBalancer Node.

-l, --label: Required. The label (name) of the NodeBalancer.

-p, --port: Required. The NodeBalancer port or config port.

-n, --name: Required. The Node name to update.

-A, --address: Required. The address:port combination used to communicate with this Node.

-W, --weight: Optional. Load balancing weight, 1-255. Higher means more connections. Default is 100.

-M, --mode: Optional. The connections mode to use. Options are 'accept', 'reject', and 'drain'. Default is 'accept'.

Update NodeBalancer Node (node-update)

Update a NodeBalancer Node.

-l, --label: Required. The label (name) of the NodeBalancer.

-p, --port: Required. The NodeBalancer port or config port.

-n, --name: Required. The Node name to update.

-N, --new-name: Optional. New name for the Node (rename).

-A, --address: Optional. The address:port combination used to communicate with this Node.

-W, --weight: Optional. Load balancing weight, 1-255. Higher means more connections.

-M, --mode: Optional. The connections mode to use. Options are 'accept', 'reject', and 'drain'.

Delete NodeBalancer Node (node-delete)

Delete a NodeBalancer Node.

-l, --label: The NodeBalancer name.

-p, --port: The NodeBalancer port or config port.

-n, --name: The specific Node name to delete.

List NodeBalancer Node (node-list)

List all Nodes for a specific NodeBalancer port.

-l, --label: Required. A specific NodeBalancer.

-p, --port: Required. The NodeBalancer port or config port.

Show NodeBalancer Node (node-show)

Show detailed information about a specific Node for a specific NodeBalancer port.

-l, --label: Required. A specific NodeBalancer.

-p, --port: Required. The NodeBalancer port or config port.

-n, --name: Required. The name of the Node to show.


StackScript Actions

Create

Create a StackScript.

-l, --label: The label (name) for the StackScript.

-d, --distribution: Distribution name or DistributionID to deploy.

-c, --codefile: The script file name (including the path) containing the source code.

-p, --ispublic: Optional. Whether this StackScript is published in the Library, for everyone to use. Options are yes, no, true, and false. Default is false.

-D, --description: Optional. Notes describing details about the StackScript.

-r, --revnote: Optional. Note for describing the version.

Update

Update a StackScript.

-l, --label: The label (name) of the StackScript to update.

-n, --new-label: Optional. Renames the StackScript.

-d, --distribution: Optional. Distribution name or DistributionID to deploy.

-c, --codefile: Optional. The script file name (including the path) containing the source code.

-p, --ispublic: Optional. Whether this StackScript is published in the Library, for everyone to use. Options are yes, no, true, and false. Default is false.

-D, --description: Optional. Notes describing details about the StackScript.

-r, --revnote: Optional. Note for describing the version.

Delete

Delete a StackScript.

-l, --label: The StackScript to delete.

List

List information about one or more StackScripts.

-l, --label: Optional. A specific StackScript to list.

Show

Display detailed information about one or more StackScripts.

-l, --label: Required. A specific StackScript to show.

Source

Display the source code for a StackScript.

-l, --label: Required. A specific StackScript to show.

cli's People

Contributors

alanivey avatar displague avatar dorthu avatar eateroa avatar fafadiatech avatar hvhvhcgv avatar jamesottinger avatar nixy avatar paulostazeski avatar phallstrom avatar ravenx99 avatar rjleaf avatar stvhwrd avatar tornatae avatar zachsnow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cli's Issues

linode nodebalancer config-create fails complaining about bad ssl-cert

Attempting to create an SSL-terminating configuration fails:

$ linode nodebalancer config-create --protocol="https" \
  --label="staging" --port="443" --ssl-cert="..." --ssl-key="..." \
  --check-health="http" --check-interval="60" \
  --check-timeout="30" --check-attempts="4" --check-path="/version/"
Unable to create NodeBalancer config for staging. API Error 8: SSL private key appears to be incorrectly formatted

(Obviously --ssl-cert and --ssl-key have real values, which I checked with openssl -check; they do contain newlines, not sure if that's an issue despite being quoted).

Creating the configuration by hand in the Lindode Manager by pasting the exact same certificate and key (used cat key | pbcopy) worked fine. I imagine I'm somehow not constructing my command correctly but the documentation doesn't say anything about the required format.

image-list failing with Generic error

linode image-list failing. linode-cli v1.4.6 yosemite. curl works.

$ LINODE_API_KEY=... linode image-list --json
Can't call image_list at /usr/local/Cellar/linode-cli/1.4.6/lib/perl5/site_perl/Linode/CLI/Object/Linode.pm line 1093.
{
   "Generic error" : {
      "request_action" : "",
      "request_error" : "Problem while trying to run 'linode image-list'"
   }
}

Failed to update tap: linode/cli

Hello,

On a beautiful afternoon, I ran this command brew update and got this:

Error: Failed to update tap: linode/cli

What had happened?

linode nodebalancer config-delete fails

Trying to delete a configuration fails:

$ linode nodebalancer config-delete --label=staging --port="80"
Missing required argument nodebalancerid for nodebalancer_config_delete at /usr/local/Cellar/linode-cli/1.3.2/lib/perl5/site_perl/Linode/CLI/Object/Nodebalancer.pm line 700.
Unable to delete NodeBalancer config staging 80

However, showing the same configuration works as expected:

$ linode nodebalancer config-show --label=staging --port="80"
          port: 80
      protocol: tcp
     algorithm: roundrobin
    stickiness: none
  check-health: connection
check-interval: 5
 check-timeout: 3
check-attempts: 2
    check-path: /
    check-body:

Version:

$ linode --version
linode-cli 1.3.2
Copyright (C) 2014 Linode, LLC

Cannot create an MX record with a priority other than 0

The following command:

# linode-domain -a record-create -l DOMAIN.COM -t MX -n test03.DOMAIN.COM -R aspmx.l.google.com -T 86400 -P 111

gives the error

Unable to create Domain Record DOMAIN.COM MX. API Error 500: Something wasn't handled well. Logged.

If I change the -P value to 0 the command works. Every other value I've tried fails.

My current workaround is to create the record and then immediately do a record-update with the correct value, which works.

I'm no PERL expert but will see if I can find something obvious in the code and report back here if I do.

Jason

Linode created with incorrect distribution

I'm trying to create a Linode like this:

linode create --distribution="Ubuntu 12.04 LTS" \
    --location="Fremont" --label="..." \
    --password="..." --plan="linode2048" \
    --group="..." --api-key="..."

Everything goes well, but when I ssh into the machine, it reports itself as being Ubuntu 10.04.2 LTS. Not sure what could be going wrong?

On a (possibly) related note, I couldn't get the configuration tool (linode configure) to accept Ubuntu 13.10 as a valid configuration, neither using the written-out name nor the number shown in the configuration tool.

OSX Mavericks "dyld: lazy symbol binding failed" error

I installed linode-cli through homebrew on OSX Mavericks. When I run linode command I give an error like that:

dyld: lazy symbol binding failed: Symbol not found: _Perl_xs_apiversion_bootcheck
  Referenced from: /usr/local/Cellar/linode-cli/1.0.0/libexec/lib/perl5/darwin-thread-multi-2level/auto/List/Util/Util.bundle
  Expected in: flat namespace

dyld: Symbol not found: _Perl_xs_apiversion_bootcheck
  Referenced from: /usr/local/Cellar/linode-cli/1.0.0/libexec/lib/perl5/darwin-thread-multi-2level/auto/List/Util/Util.bundle
  Expected in: flat namespace

Trace/BPT trap: 5

gpg some error.

I follow the instructions from the website: https://www.linode.com/docs/platform/linode-cli
for ubuntu/debian

i got this error:

~$ sudo apt-get update
Get:1 http://mirrors.linode.com/debian testing InRelease [175 kB]
Hit:2 http://security.debian.org/debian-security testing/updates InRelease
Get:3 http://apt.linode.com stable InRelease [3,223 B]
Ign:3 http://apt.linode.com stable InRelease
Get:4 http://apt.linode.com stable/main i386 Packages [759 B]
Fetched 179 kB in 2s (84.4 kB/s)
Reading package lists... Done
W: GPG error: http://apt.linode.com stable InRelease: The following signatures were invalid: D12F8D2C47B4A16917C9A040BED67E64325A043E
W: The repository 'http://apt.linode.com stable InRelease' is not signed.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Request: Uninvoiced balance

Hi there.

I'd like to automate deployments of new linodes using the API / CLI, but I want to keep an eye on the actual pending charges, as I'm not using the "credit" system/feature.

As far as I can see, it is impossible to use the API to get the value of Uninvoiced Balance. Please add this value field to the API.

Cheers.

REQUEST: clone a linode

Would need a Linode cli command to help cloning a complete server. It's currently possible to do it from the web interface, and we should be able to do the same from cli.

ex:
$linode clone <source_linode> <destination_linode> <linode_datacenter> <linode_plan>

Regards.

The value of balance is a minus one.

> linode account show
          managed: no
          balance: $ -29.91
    transfer pool: 3000.00GB
    transfer used: 7.00GB
transfer billable: 0.00GB
   billing method: metered

> linode --version
linode-cli 1.4.5
Copyright (C) 2015 Linode, LLC

In Linode Manager

Account Balance     $29.91 credit
Uninvoiced Balance  $3.75 and counting

Error: Failed to download resource "linode-cli--Test::Simple"

Ronaks-MacBook-Pro:Downloads ronak$ brew tap linode/cli
Ronaks-MacBook-Pro:Downloads ronak$ brew install linode-cli
==> Installing linode-cli from linode/cli
==> Downloading https://github.com/linode/cli/archive/v1.4.7.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli-1.4.7.tar.gz
==> Downloading http://www.cpan.org/authors/id/M/MA/MAKAMAKA/JSON-2.90.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--JSON-2.90.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/URI-1.60.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--URI-1.60.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--LWP::MediaTypes-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/Encode-Locale-1.03.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Encode::Locale-1.03.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/C/CJ/CJM/IO-HTML-1.00.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--IO::HTML-1.00.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTTP::Date-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Bzip2-2.064.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Compress::Raw::Bzi-2.064.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.065.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Compress::Raw::Zlib-2.065.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/IO-Compress-2.064.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--IO::Compress-2.064.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTTP::Message-6.06.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTTP::Negotiate-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--File::Listing-6.04.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTML::Tagset-3.20.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-3.71.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTML::Parser-3.71.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTTP::Daemon-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Net::HTTP-6.06.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--HTTP::Cookies-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--WWW::RobotRules-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--libwww::perl-6.05.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/A/AB/ABH/Mozilla-CA-20130114.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Mozilla::CA-20130114.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/D/DO/DOY/Try-Tiny-0.19.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Try::Tiny-0.19.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-1.969.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--IO::Socket::SSL-1.969.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/LWP-Protocol-https-6.04.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--LWP::Protocol::https-6.04.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/L/LE/LEONT/Test-Harness-3.30.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Test::Harness-3.30.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.47.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--Scalar::List::Utils-1.47.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/M/MA/MAKAMAKA/JSON-PP-2.27203.tar.gz
Already downloaded: /Users/ronak/Library/Caches/Homebrew/linode-cli--JSON::PP-2.27203.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/R/RJ/RJBS/Test-Simple-1.001002.tar.gz

curl: (22) The requested URL returned error: 404 Not Found
Error: Failed to download resource "linode-cli--Test::Simple"
Download failed: http://www.cpan.org/authors/id/R/RJ/RJBS/Test-Simple-1.001002.tar.gz

Brew install fails

Hello, all I'm getting the following when attempting to install via brew:

Already downloaded: /Users/dky/Library/Caches/Homebrew/linode-cli--JSON::PP-2.27203.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.4.7/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/E/EX/EXODIST/Test-Simple-1.302075.tar.gz

curl: (22) The requested URL returned error: 404 Not Found
Error: Failed to download resource "linode-cli--Test::Simple"
Download failed: http://www.cpan.org/authors/id/E/EX/EXODIST/Test-Simple-1.302075.tar.gz
dky@mba ~ $ brew tap linode/cli && brew install linode-cli^C

Looks like the version of Test-Simple has changed and the one being referenced no longer exist. How would we contribute a fix to this?

`nodebalancer create` raises error

I was seeing the following error:

Can't call method "nodebalancer_list" on an undefined value at /usr/local/.../Nodebalancer.pm line 56.

I fixed it by tweaking the definition of create in Nodebalancer.pm:

my ( $self, %args ) = @_;
my $api_obj = $args{api_obj};
my $options = $args{options};

I am not a Perl speaker, though; otherwise I'd create a pull request immediately. It seems to have worked in any event.

CentOS 7 is missing

I created a vm with CentOS 7 system, but a CentOS 6 was installed actually.

linode linode create -l xxx -L xxx -d 'CentOS 7' -p 'Linode 1024' -K ~/.ssh/id_rsa.pub -P xxx

Performance

jooadam@shulur:~$ time curl "https://api.linode.com?api_key=$key&api_action=avail.datacenters"

...

real    0m0.767s
user    0m0.016s
sys     0m0.008s

jooadam@shulur:~$ time linode locations

...

real    0m3.615s
user    0m0.996s
sys     0m0.088s

Although support tries to convince me, I refuse to believe that parsing half a kilobyte of JSON and printing a single line per array item is justified to take nearly three seconds, hence I treat this as a bug.

Please let me know if additional information is needed.

Pass API Key via environment var

Allow the API key to be passed in via an environment variable(LINODE_API_KEY) in addition to the existing methods. Allows you to keep it off the filesystem and out of ps aux output.

Can't build on OS X 10.7.5

Development machine with XCode 4.6.3 and command line utils installed.

brew install linode-cli

==> Installing linode-cli from linode/homebrew-cli
==> Downloading https://github.com/linode/cli/archive/v1.3.2.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli-1.3.2.tar.gz
==> Downloading http://www.cpan.org/authors/id/M/MA/MAKAMAKA/JSON-2.90.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--JSON-2.90.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install

make
install

make: *** No rule to make target /System/Library/Perl/5.12/darwin-thread-multi-2level/CORE/config.h', needed byMakefile'. Stop.

Error if invalid distribution specified.

I created a linode with "Debian 7.3". Today I rebuilt it using the below commands. I got an error about "unable to boot 32-bit on this host." Weird since I had picked 64bit distribution. I noticed that as of today it's "Debian 7.4".

Seems to me like the command should report an error and not do anything if one of the arguments to distribution (or location, plan, etc.) aren't valid.

$ linode \

--username xxxxxxx
--action 'rebuild'
--label 'ansible'
--password 'xxxxxxxxx'
--distribution 'Debian 7.3'
--pubkey-file ~/.ssh/id_dsa.pub \

Powering down linode 'ansible'.......
Removing existing disk 'ansible-disk'..
Removing existing disk 'ansible-swap'....
Unable to issue boot job for ansible.. API Error 8: Unable to boot 32-bit on this host. Please open a support ticket.

Complex pasword not accepted

It appears that the configure step fails when your password has special characters in it.
For example there are ! @ { } . - as well as mixed alphanumeric in my password and pasting it into the CLI at the prompt just results in "Invalid password for username".
Unless this has to do with two-factor auth, but I assumed it would prompt me for my two-factor key after entering the password?

Brew Install fails because it can't get v1.41 of Scalar-List-Utils

Seems like CPAN has stopped storing this version of Scalar-List-Utils; .42, .43 and .44 are the only ones listed in the cpan repo.

==> Downloading http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.41.tar.gz

curl: (22) The requested URL returned error: 404 Not Found
Error: Failed to download resource "linode-cli--Scalar::List::Utils"
Download failed: http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.41.tar.gz

[request] IPs array on json result should describe external and internal ip

I can't easily do linode -c linode -a list -j | jq '.[].ips[0]' because the ips array is not ordered, [0] could be either an internal or external IP. It would be great if you can expand this IP list the following way:

      "ips" : {
         "internal_ip": "192.168.205.104",
         "external_ip": "45.79.223.140"
      },

this way I can easily do linode -c linode -a list -j | jq '.[].ips.external_ip' to fetch only the external IP without hard-filtering out internal IPs

Unable to run configure with version 1.1.0

I just got linode-cli version 1.1.0 installed on OSX Mavericks, and when trying to run linode configure it errors out after trying to authenticate to the API. I have tried with and without giving it a API key, note I do have 2 factor auth enabled and not sure how this version handles this (I saw in the changelog that this version supports it just not sure what needs done).

Attempt without a key:

> linode configure                                                                                                                                              
This will walk you through setting default values for common options.

Linode Manager user name
>> vendion

Linode Manager password for vendion
>>

Unexpected error obtaining API key for user vendion

Attempt with a key:

linode --api-key (insert API key here) configure
API unavailable at /usr/local/Cellar/linode-cli/1.1.0/lib/perl5/site_perl/Linode/CLI.pm line 825.

Specify which Perl interpreter you want

After installing the deb package:

mike@charron:~
$ linode configure
Can't locate Linode/CLI/Util.pm in @INC (you may need to install the Linode::CLI::Util module) (@INC contains: /usr/bin/lib /home/mike/perl5/perlbrew/perls/perl-5.20.0/lib/site_perl/5.20.0/x86_64-linux /home/mike/perl5/perlbrew/perls/perl-5.20.0/lib/site_perl/5.20.0 /home/mike/perl5/perlbrew/perls/perl-5.20.0/lib/5.20.0/x86_64-linux /home/mike/perl5/perlbrew/perls/perl-5.20.0/lib/5.20.0 .) at /usr/bin/linode line 14.
BEGIN failed--compilation aborted at /usr/bin/linode line 14.

[2]
mike@charron:~
$ head -n1 `which linode`
#!/usr/bin/env perl

[0]
mike@charron:~
$ which perl
/home/mike/perl5/perlbrew/perls/perl-5.20.0/bin/perl

[0]

Your packaged application should be using the dependencies from the package manager, including the package manager's perl interpreter.

can we get the ipv6 information in the show action?

Thanks for adding the json output! It's great!

Could we get the IPv6 address(es) and netmasks in the 'show' action?

We would also like to learn the mac address of the interfaces with this tool, but that's probably not going to be very popular.

I think the IPv6 stuff would be useful for everyone.

[Suggestion] 'linode domain record-list' should show TTL

Current:

$ linode domain record-list --label example.com
Domain records for example.com
+ -------- + ------------------------ + -------------------------------- + -------- +
| type     | name                     | target                           | port     |
| -------- + ------------------------ + -------------------------------- + -------- |
| A        |                          | 1.2.3.4                          | 80       |
| A        | www                      | 1.2.3.4                          | 80       |
| CNAME    | bar                      | 1.3.5.7                          | 80       |
| CNAME    | baz                      | 2.4.6.8                          | 80       |
+ -------- + ------------------------ + -------------------------------- + -------- +

Suggestion:

$ linode domain record-list --label example.com
Domain records for example.com
+ -------- + ------------------------ + -------------------------------- + -------- + -------- +
| type     | name                     | target                           | port     | ttl      |
| -------- + ------------------------ + -------------------------------- + -------- + -------- +
| A        |                          | 1.2.3.4                          | 80       | 1800     |
| A        | www                      | 1.2.3.4                          | 80       | 1800     |
| CNAME    | bar                      | 1.3.5.7                          | 80       | 300      |
| CNAME    | baz                      | 2.4.6.8                          | 80       | 3600     |
+ -------- + ------------------------ + -------------------------------- + -------- + -------- +

Remove the bundled library

I hope this package doesn't bundle the perl interface in lib/:

Webservice::Linode

As I'm going to package it into Fedora/EPEL, we disallow bundled linraries and thus this will not get approved.

And is there any reason to bundle it but not using it from external?

rebuid issue using linode-cli (CentOS 7 missing)

I'm run script

linode rebuild rubyrain1 --distribution "CentOS 7" --password $L_DEFAULT_PW --stackscript $L_STACKSCRIPT_ID  --stackscriptjson '{ "privip": "$F_PRIV_IP_DATA", "sslip" : "$L_SSLSERVER_IP", "sslpw" : "$L_SSLSERVER_PW" }'  --api-key $L_API_KEY #build new node process with Stackscript

also, I tried single quote

--distribution 'CentOS 7'

But node Installed CentOS 6

[root@li1602-162 ~]# cat /etc/centos-release
CentOS release 6.8 (Final)
[root@li1602-162 ~]#

Working with multiple Linode accounts

I have a feature request for you: I want an easy way to work with multiple Linode accounts. I hate logging in and out of the web panel constantly (well, I prefer CLI to web in general, but this makes it worse) because I manage Linodes for multiple organizations. You'd have this lowly HedgeMage's deepest gratitude if there were an easy way to set up the Linode CLI client to easily manage Linodes across multiple accounts.

Yes, I realize that I could write a wrapper script to run Linode CLI commands with different api keys specified as needed, concatenate the output of, e.g. list from different accounts, but really, do we need another layer of stuff?

Do not try to create .linodecli dir if not necessary

We're using the linode domain cli tools in web-scripts. The scripts are run as a user with very limited permissions. The user is NOT allowed to create the .linodecli directory in the home directory.

Since the API key is specified via command line arguments, the directory is not necessary at all.
If we remove the mkdir() command from Util.pm::check_configs(), the scripts work without problems.

Would it be possible to add a check that skips the creation of this directory when not needed?

Thanks.

Can't set MX priority to zero

Hi -

I've tried the following:

linode domain record-create -l example.com -t MX -R example.mail.protection.outlook.com. -P 0

linode domain record-create -l example.com -t MX -R example.mail.protection.outlook.com. -P '0'

linode domain record-create -l example.com -t MX -R example.mail.protection.outlook.com. -P "0"

linode domain record-create -l example.com -t MX -R example.mail.protection.outlook.com. --priority 0

All result in the default priority level of 10 being set.

Not really a big deal as usually setting a priority level of 1 instead of 0 will suffice.

But it's possible to set it to zero in the GUI so I thought I would bring it up here.

update for Debian 9 (stretch) i386

Im a Debian testing user for arch 386 and theres no package:

sudo bash -c 'echo "deb http://apt.linode.com/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/linode.list'
[sudo] password for acald3ron:
acald3ron@stark:~$ wget -O- https://apt.linode.com/linode.gpg | sudo apt-key add -
--2015-06-20 13:31:02-- https://apt.linode.com/linode.gpg
Resolving apt.linode.com (apt.linode.com)... 97.107.139.216, 2600:3c03::f03c:91ff:fe70:738c
Connecting to apt.linode.com (apt.linode.com)|97.107.139.216|:443... connected.
GnuTLS: A TLS warning alert has been received.
GnuTLS: received alert [112]: The server name sent was not recognized
HTTP request sent, awaiting response... 200 OK
Length: 1133 (1.1K)
Saving to: ‘STDOUT’

  •                 100%[==========================>]   1.11K  --.-KB/s   in 0s  
    

2015-06-20 13:31:03 (4.77 MB/s) - written to stdout [1133/1133]

OK
acald3ron@stark:~$ sudo apt-get update
Ign http://dl.google.com stable InRelease
Ign http://apt.linode.com stretch InRelease
Hit http://dl.google.com stable Release.gpg
Hit http://security.debian.org testing/updates InRelease
Hit http://dl.google.com stable Release
Ign http://apt.linode.com stretch Release.gpg
Hit http://mirrors.linode.com testing InRelease
Ign http://apt.linode.com stretch Release
Hit http://security.debian.org testing/updates/main Sources
Hit http://dl.google.com stable/main i386 Packages
Hit http://security.debian.org testing/updates/main i386 Packages
Get:1 http://mirrors.linode.com testing/main Sources/DiffIndex [7,876 B]
Hit http://security.debian.org testing/updates/main Translation-en
Get:2 http://mirrors.linode.com testing/contrib Sources/DiffIndex [3,541 B]
Get:3 http://mirrors.linode.com testing/non-free Sources/DiffIndex [3,541 B]
Get:4 http://mirrors.linode.com testing/main i386 Packages/DiffIndex [7,876 B]
Get:5 http://mirrors.linode.com testing/contrib i386 Packages/DiffIndex [4,645 B]
Get:6 http://mirrors.linode.com testing/non-free i386 Packages/DiffIndex [3,541 B]
Get:7 http://mirrors.linode.com testing/contrib Translation-en/DiffIndex [2,161 B]
Get:8 http://mirrors.linode.com testing/main Translation-en/DiffIndex [7,876 B]
Get:9 http://mirrors.linode.com testing/non-free Translation-en/DiffIndex [2,023 B]
Ign http://dl.google.com stable/main Translation-en_US
Ign http://dl.google.com stable/main Translation-en
Err http://apt.linode.com stretch/main i386 Packages
404 Not Found [IP: 97.107.139.216 80]
Ign http://apt.linode.com stretch/main Translation-en_US
Ign http://apt.linode.com stretch/main Translation-en
Fetched 43.1 kB in 7s (5,446 B/s)
W: Failed to fetch http://apt.linode.com/dists/stretch/main/binary-i386/Packages 404 Not Found [IP: 97.107.139.216 80]

E: Some index files failed to download. They have been ignored, or old ones used instead.

Installing via homebrew fails, apparently due to a missing dependency on cpan.org

It seems like this might be an issue with one of linode-cli's dependencies, and not linode-cli itself, but it's preventing me from installing linode-cli.

tl;dr:

http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.38.tar.gz fails to download because it doesn't appear to exist; Scalar-List-Utils-1.39.tar.gz, Scalar-List-Utils-1.40.tar.gz, and Scalar-List-Utils-1.41.tar.gz appear to exist in the http://www.cpan.org/authors/id/P/PE/PEVANS/ directory, though.

Full output:

~ % brew install linode-cli
==> Downloading https://github.com/linode/cli/archive/v1.3.2.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli-1.3.2.tar.gz
==> Downloading http://www.cpan.org/authors/id/M/MA/MAKAMAKA/JSON-2.90.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--JSON-2.90.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/URI-1.60.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--URI-1.60.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--LWP::MediaTypes-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/Encode-Locale-1.03.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Encode::Locale-1.03.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/C/CJ/CJM/IO-HTML-1.00.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--IO::HTML-1.00.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTTP::Date-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Bzip2-2.064.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Compress::Raw::Bzi-2.064.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.065.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Compress::Raw::Zlib-2.065.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PM/PMQS/IO-Compress-2.064.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--IO::Compress-2.064.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTTP::Message-6.06.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTTP::Negotiate-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--File::Listing-6.04.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTML::Tagset-3.20.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-3.71.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTML::Parser-3.71.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTTP::Daemon-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Net::HTTP-6.06.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--HTTP::Cookies-6.01.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--WWW::RobotRules-6.02.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--libwww::perl-6.05.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/A/AB/ABH/Mozilla-CA-20130114.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Mozilla::CA-20130114.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/D/DO/DOY/Try-Tiny-0.19.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Try::Tiny-0.19.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/M/MI/MIKEM/Net-SSLeay-1.58.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Net::SSLeay-1.58.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-1.969.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--IO::Socket::SSL-1.969.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/G/GA/GAAS/LWP-Protocol-https-6.04.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--LWP::Protocol::https-6.04.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/N/NA/NANIS/Crypt-SSLeay-0.64.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Crypt::SSLeay-0.64.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec -n
==> make install
==> Downloading http://www.cpan.org/authors/id/L/LE/LEONT/Test-Harness-3.30.tar.gz
Already downloaded: /Library/Caches/Homebrew/linode-cli--Test::Harness-3.30.tar.gz
==> perl Makefile.PL INSTALL_BASE=/usr/local/Cellar/linode-cli/1.3.2/libexec
==> make install
==> Downloading http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.38.tar.gz

curl: (22) The requested URL returned error: 404 Not Found
Error: Failed to download resource "linode-cli--Scalar::List::Utils"
Download failed: http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.38.tar.gz

Domain record update doesn't seem to be working

Hi,

I've create script that updates an A record with a dynamic IP, however I've noticed that linode domain record-update doesn't seem update the record. I've resorted to delete the A entry and creating a new one. Which works, but it's obviously not the best way of going about things.

Here is my script as it currently is (Delete then Create):

#!/bin/bash -e

if [ -z "$1" ]; then
    echo "ARG1 Missing: Please provide a sub domain entry. E.g. dev-www";
    exit 1;
fi

SUB=$1
DOMAIN="domain-goes-here.com"
PUBLIC_IP=$(curl --silent icanhazip.com)

echo "Proceeding to remove "$SUB"."$DOMAIN

linode domain record-delete $DOMAIN A $SUB

echo "Proceeding to create "$SUB"."$DOMAIN" as "$PUBLIC_IP

linode domain record-create $DOMAIN A $SUB $PUBLIC_IP --ttl 5

exit;

Here is my script as I want it (Update):

#!/bin/bash -e

if [ -z "$1" ]; then
    echo "ARG1 Missing: Please provide a sub domain entry. E.g. dev-www";
    exit 1;
fi

SUB=$1
DOMAIN="domain-goes-here.com"
PUBLIC_IP=$(curl --silent icanhazip.com)

echo "Proceeding to update "$SUB"."$DOMAIN" to "$PUBLIC_IP

linode domain record-update $DOMAIN A $SUB $PUBLIC_IP --ttl 5

exit;

The second script returns that the A record as been updated, but when I check on DNS Manager on Linone's web UI, it's not updated.

Could someone check if they are getting the same results?

Thanks,
Matan

Name?

Hi,

I'm a Linode customer and willing to package this perl utility to Fedora and EPEL.

Is it proper to name it linode-cli? Since I don't want to package it as "cli" because this name is too short.

I'm looking forward to your reply.

Thanks.

The perl problem persist.

I have a i386 kernel and i have thist problem:

acald3ron@stark:~$ uname -a
Linux stark 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt2-1 (2014-12-08) i686 GNU/Linux

acald3ron@stark:~$ linode configure
Can't locate Linode/CLI/Util.pm in @inc (you may need to install the Linode::CLI::Util module) (@inc contains: /usr/bin/lib /etc/perl /usr/local/lib/i386-linux-gnu/perl/5.20.1 /usr/local/share/perl/5.20.1 /usr/lib/i386-linux-gnu/perl5/5.20 /usr/share/perl5 /usr/lib/i386-linux-gnu/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl .) at /usr/bin/linode line 14.
BEGIN failed--compilation aborted at /usr/bin/linode line 14.

more info:

dpkg -L linode-cli
/.
/usr
/usr/bin
/usr/bin/linode
/usr/bin/linode-account
/usr/bin/linode-domain
/usr/bin/linode-linode
/usr/bin/linode-nodebalancer
/usr/bin/linode-stackscript
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/perl5
/usr/lib/x86_64-linux-gnu/perl5/5.20
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object/Account.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object/Linode.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object/Stackscript.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object/Domain.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Object/Nodebalancer.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/Util.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/Linode/CLI/SystemInfo.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/WebService
/usr/lib/x86_64-linux-gnu/perl5/5.20/WebService/Linode.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/WebService/Linode
/usr/lib/x86_64-linux-gnu/perl5/5.20/WebService/Linode/Base.pm
/usr/lib/x86_64-linux-gnu/perl5/5.20/WebService/Linode/DNS.pm
/usr/share
/usr/share/doc
/usr/share/doc/linode-cli
/usr/share/doc/linode-cli/copyright
/usr/share/doc/linode-cli/changelog.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/linode-domain.1.gz
/usr/share/man/man1/linode-linode.1.gz
/usr/share/man/man1/linode-stackscript.1.gz
/usr/share/man/man1/linode.1.gz
/usr/share/man/man1/linode-account.1.gz
/usr/share/man/man1/linode-nodebalancer.1.gz

i dont want to used multi-arch !

Is it possible to update the main domain's IP using the CLI?

I could not figure out how to update the IP where the domain points. The command requires the -m param but the hostname is blank for that.

Eg it looks like that in the DNS manager:

screenshot from 2017-05-13 10-19-34

The same domain looks like that using the CLI:

screenshot from 2017-05-13 10-21-18

I try to update the IP with the following command:

linode-domain -a record-update -l my-domain.com -t A -R'[remote_addr]'

but that throws the "The 'record-update' command requires a --match parameter." error.
I do not know what should I put after the -m param in that case. I tried everything I could come up.
For subdomain "-m subdomain" works, but what if I do not want to update a subdomain?
I would like to have a domain pointed to my local machine for testing purposes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.