class Itamae::Plugin::Resource::Pip

Public Instance Methods

action_install(action_options) click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 32
def action_install(action_options)
  if current.installed
    if attributes.version && current.version != attributes.version
      install!
      updated!
    end
  else
    install!
    updated!
  end
end
action_uninstall(action_options) click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 50
def action_uninstall(action_options)
  install!
  updated!
end
action_upgrade(action_options) click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 44
def action_upgrade(action_options)
  return if current.installed && attributes.version && attributes.version == current.version
  install!
  updated!
end
pre_action() click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 13
def pre_action
  case @current_action
  when :install
    attributes.installed = true
  when :uninstall
    attributes.installed = false
  end
end
set_current_attributes() click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 22
def set_current_attributes
  installed = installed_pips.find {|pip| pip[:name] == attributes.package_name }
  current.installed = !!installed

  if current.installed
    version = installed[:version]
    current.version = version if version != attributes.version
  end
end

Private Instance Methods

build_pip_install_command() click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 68
def build_pip_install_command
  cmd = [*Array(attributes.pip_binary), 'install']
  cmd << attributes.options if attributes.options

  if attributes.version
    cmd << "#{attributes.package_name}==#{attributes.version}"
  else
    cmd << attributes.package_name
  end

  case @current_action
  when :upgrade
    cmd << '--upgrade'
  when :uninstall
    cmd.find {|w| w =~ /\Ainstall\z/ }.sub!(/\A/, 'un')
    cmd << '-y'
  end

  cmd
end
install!() click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 89
def install!
  run_command(build_pip_install_command)
end
installed_pips() click to toggle source
# File lib/itamae/plugin/resource/pip.rb, line 57
def installed_pips
  pips = []
  run_command([*Array(attributes.pip_binary), 'freeze']).stdout.each_line do |line|
    name, version = line.split(/==/)
    pips << {name: name, version: version.chomp}
  end
  pips
rescue Backend::CommandExecutionError
  []
end