Coder Social home page Coder Social logo

hhthacker / mixlib-install Goto Github PK

View Code? Open in Web Editor NEW

This project forked from chef/mixlib-install

0.0 0.0 0.0 13.4 MB

A library for interacting with Chef Software Inc's software distribution systems.

License: Apache License 2.0

Shell 10.15% Ruby 70.38% PowerShell 2.56% HTML 7.08% HCL 9.83%

mixlib-install's Introduction

Mixlib::Install

Gem Version

Umbrella Project: Chef Foundation

Project State: Active

Issues Response Time Maximum: 14 days

Pull Request Response Time Maximum: 14 days

Supports

  • Ruby 1.9.3+
  • Chef 11.6.2+ chef-client upgrades

Command Line Usage

$ gem install mixlib-install
# Download latest stable chef for current platform
$ mixlib-install download chef

Run $ mixlib-install help for additional commands and options.

API Usage

Load mixlib-install

require 'mixlib/install'

Get URL for specific platform and package version

options = {
  channel: :current,
  product_name: 'chef',
  product_version: :latest,
  platform: 'mac_os_x',
  platform_version: '10.15',
  architecture: 'x86_64'
}

artifact = Mixlib::Install.new(options).artifact_info
# => #<Mixlib::Install::ArtifactInfo>

artifact.url
# => "https://packages.chef.io/files/stable/chef/16.13.16/mac_os_x/10.15/chef-16.13.16-1.x86_64.dmg"

Get list of artifacts for all platforms given a package version

options = {
  channel: :current,
  product_name: 'chef'
}
# product_version: :latest is the default

artifacts = Mixlib::Install.new(options).artifact_info
# => [#<Mixlib::Install::ArtifactInfo>, ...]

artifacts.first.url
# => => "https://packages.chef.io/files/stable/chef/16.13.16/mac_os_x/10.15/chef-16.13.16-1.x86_64.dmg"

Get latest artifacts for a partial version

options = {
  channel: :current,
  product_name: 'chef',
  product_version: '12.14'
}

artifacts = Mixlib::Install.new(options).artifact_info
# => [#<Mixlib::Install::ArtifactInfo>]

artifacts.first.version
# => "12.14.89"

Get latest artifact for a partial version

options = {
  channel: :current,
  product_name: 'chef',
  product_version: '16',
  platform: 'mac_os_x',
  platform_version: '10.15',
  architecture: 'x86_64'
}

artifact = Mixlib::Install.new(options).artifact_info
# => #<Mixlib::Install::ArtifactInfo>

artifact.version
# => "12.19.36"

Detect platform information

options = {
  channel: :current,
  product_name: 'chef',
  product_version: :latest
}

artifact = Mixlib::Install.new(options).detect_platform

artifact.platform # => "mac_os_x"
artifact.platform_version # => "10.10"

Use an artifact released for an earlier version of the platform

options = {
  channel: :current,
  product_name: 'chef',
  product_version: :latest,
  platform: 'ubuntu',
  platform_version: '15.04',
  architecture: 'x86_64',
  platform_version_compatibility_mode: true
}

artifact = Mixlib::Install.new(options).artifact_info

artifact.platform # => "ubuntu"
artifact.platform_version # => "14.04"

platform_version_compatibility_mode will automatically be enabled if platform options are not specified.

If running on Ubuntu 15.04...

options = {
  channel: :current,
  product_name: 'chef',
}

artifact = Mixlib::Install.new(options).artifact_info

artifact.platform # => "ubuntu"
artifact.platform_version # => "14.04"

List the available versions for a product and channel

Instance method

options = {
  channel: :stable,
  product_name: 'chef',
}

Mixlib::Install.new(options).available_versions

# => ["12.13.3", "12.13.7"]

Class method

Mixlib::Install.available_versions("chef", "stable")

# => ["12.13.3", "12.13.7"]

Download an artifact

Download a specific artifact to a configurable location. All platform options (platform, platform_version, architecture) are required in order to filter a single artifact.

# detect platform and download to the operating system’s temporary file path
Mixlib::Install.new(product_name: "chefdk", channel: :stable).detect_platform.download_artifact(Dir.tmpdir)
# => "/tmp/chefdk-2.3.4-1.deb"

# specify platform options and download to current directory
Mixlib::Install.new(product_name: "chefdk", channel: :stable, platform: "ubuntu", platform_version: "14.04", architecture: "x86_64").download_artifact
# => "~/chefdk-2.3.4-1.deb"

User-Agent Request Headers

By default, all requests made by mixlib-install will include a User-Agent request header as mixlib-install/<version>. Additional User-Agent request headers can be added by setting the user_agent_headers option. When you want to identify a product using mixlib-install as a dependency we recommend the format product/version.

options = {
  channel: :stable,
  product_name: 'chef',
  user_agent_headers: ["my_product/1.2.3", "somethingelse"],
}

Collecting Software Dependencies and License Content

Collecting software dependencies and license content for ArtifactInfo instances requires additional requests to the repository server. By default, collection is disabled. To return data for instance methods software_dependencies and license_content, the include_metadata option must be enabled.

options = {
  channel: :current,
  product_name: 'chef',
  product_version: :latest,
  platform: 'mac_os_x',
  platform_version: '10.15',
  architecture: 'x86_64',
  include_metadata: true,
}

artifact = Mixlib::Install.new(options).artifact_info

artifact.license_content.class
# => String
artifact.software_dependencies.class
# => Hash

# By default, the instance methods return nil

Install Scripts

mixlib-install generates the bootstrap installation scripts known as install.sh and install.ps1. The associated install script will be returned when calling #install_command on the Mixlib::Install instance.

Mixlib::Install instantiation option install_command_options can accept variables (bourne) or parameters (powershell) to modify the behavior of the install scripts.

Some of the more common options include:

download_url_override: Use the provided URL instead of fetching the metadata URL from Chef Software Inc's software distribution systems. checksum: SHA256 value associated to the directed file for the download_url_override option. This setting is optional. Not setting this will download the file even if a cached file is detected. install_strategy: Set to "once" to have the script exit if the product being installed is detected.

options = {
  product_name: 'chef',
  install_command_options: {
    download_url_override: "https://file/path",
    checksum: "OPTIONAL",
    install_strategy: "once",
  }
}

Mixlib::Install.new(options).install_command

Proxies

The API uses Ruby's OpenURI module to load proxy environment variables (http_proxy, https_proxy, ftp_proxy, no_proxy).

When install.sh and install.ps1 are executed as standalone scripts the will rely on environment variables to configure proxy settings. The install scripts will not configure proxy settings by default.

In order to customize the proxy environment variables for generated install scripts they must be set by the install_command_options option. Setting these options will override session environment variables.

Bourne install script (install.sh) supports http_proxy, https_proxy, ftp_proxy, and no_proxy passed as keys to install_command_options.

Powershell install script (install.ps1) supports http_proxy passed as a key to install_command_options.

Extending for other products

Create a ruby file in your application and use the product DSL like this (see product.rb for available properties):

product "cinc" do
  product_name "Cinc Infra Client"
  package_name "cinc-client"
  api_url "https://packages.cinc.sh"
end

Then set an environment variable to load them like this on linux:

export EXTRA_PRODUCTS_FILE=/path/to/your/file.rb

Calls to mixlib-install now allow to target your new product, assuming the api_url match pacakges api for /<channel>/<product>/versions and /<channel>/<product>/<version>/artifacts endpoints.

Development

VCR is a tool that helps cache and replay http responses. When these responses change or when you add more tests you might need to update cached responses. Check out spec_helper.rb for instructions on how to do this.

Contributing

  1. Fork it ( https://github.com/[my-github-username]/mixlib-install/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

mixlib-install's People

Contributors

akitada avatar chef-ci avatar decoyjoe avatar gscho avatar gshively11 avatar jayashrig158 avatar jaym avatar jerearista avatar jeremiahsnapp avatar jeremy-clerc avatar lamont-granquist avatar marcparadise avatar markgibbons avatar mwrock avatar piyushawasthi avatar poorndm avatar ramereth avatar rhass avatar rishichawda avatar rlaveycal avatar schisamo avatar scotthain avatar scottopherson avatar sersut avatar smurawski avatar tas50 avatar tduffield avatar thommay avatar tpowell-progress avatar vkarve-chef avatar

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.