)]}'
{"lib/puppet/provider/openstack.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"bc179e1c93cdf9928cd9d801139096c49cec8e19","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      # noop; auth is set"},{"line_number":20,"context_line":"    elsif File.exists?(@@rcfile)"},{"line_number":21,"context_line":"      openrc \u003d get_env_from(@@rcfile)"},{"line_number":22,"context_line":"      openrc.each { |key,value| ENV[key] \u003d value }"},{"line_number":23,"context_line":"    else  # All authentication efforts failed"},{"line_number":24,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027No credentials provided.\u0027)"},{"line_number":25,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":5,"id":"1aca2d91_93ba6f09","line":22,"updated":"2015-05-07 14:41:57.000000000","message":"1) This means settings from the file will override settings from the ENV.  Consider that the user might set _some_ of the required env. vars., but not _all_ of them.  Also consider that they might set _all_ of the parameters in the file to be used as default values if there is no env. var. set.  I think it would be better if this code did not override settings already present in the ENV.\n\n2) Any settings put in the ENV should be removed after the call.  It looks like the puppet Puppet::Provider::Command and Puppet::Util::Execution have a way to pass in the ENV with the options, but it looks like it only applies at init time?  So I\u0027m not sure if we can use that.\n\nThe icehouse code had its own method for cleaning up ENV.:\nhttps://github.com/stackforge/puppet-keystone/blob/stable/icehouse/lib/puppet/provider/keystone.rb#L76\n\nIt uses the method withenv() to make sure any env. vars. set for the executable call are removed.\n\nI don\u0027t know what the best method is to do it the \"Puppet Way\" or the \"Ruby Way\" but I do know that we must clean up ENV.","commit_id":"3c04b268ba48c9dacb5b208c208c99bded2bd8d5"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"fcead03096bed25a842c15f0cc188d321f7c9bca","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      # noop; auth is set"},{"line_number":20,"context_line":"    elsif File.exists?(@@rcfile)"},{"line_number":21,"context_line":"      openrc \u003d get_env_from(@@rcfile)"},{"line_number":22,"context_line":"      openrc.each { |key,value| ENV[key] \u003d value }"},{"line_number":23,"context_line":"    else  # All authentication efforts failed"},{"line_number":24,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027No credentials provided.\u0027)"},{"line_number":25,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":5,"id":"1aca2d91_394b63cb","line":22,"in_reply_to":"1aca2d91_93ba6f09","updated":"2015-05-08 02:58:09.000000000","message":"Absolutely, I didn\u0027t bother in the first patch set but the following will have that.","commit_id":"3c04b268ba48c9dacb5b208c208c99bded2bd8d5"},{"author":{"_account_id":7462,"name":"Ivan Chavero","email":"ichavero@redhat.com","username":"ichavero"},"change_message_id":"e437fd3380a918537afce68222badfa8106c7619","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  initvars # so commands will work"},{"line_number":13,"context_line":"  commands :openstack \u003d\u003e \u0027openstack\u0027"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  RCFILE \u003d \u0027~/openrc\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.save_os_env"},{"line_number":18,"context_line":"    @env \u003d {}"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1aca2d91_c8193a8a","line":15,"updated":"2015-05-08 06:15:25.000000000","message":"shouldn\u0027t the user be able to choose the RC file name?","commit_id":"52e1cc2a14b847129c9b41ec3e2d00ea5995bf80"},{"author":{"_account_id":7462,"name":"Ivan Chavero","email":"ichavero@redhat.com","username":"ichavero"},"change_message_id":"e437fd3380a918537afce68222badfa8106c7619","unresolved":false,"context_lines":[{"line_number":39,"context_line":"      get_env_from(RCFILE).each { |key, value| ENV[key] \u003d value }"},{"line_number":40,"context_line":"    else  # All authentication efforts failed"},{"line_number":41,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027No credentials provided.\u0027)"},{"line_number":42,"context_line":"    end"},{"line_number":43,"context_line":"    args \u003d [object, properties].flatten.compact"},{"line_number":44,"context_line":"    res \u003d authenticate_request(service, action, args)"},{"line_number":45,"context_line":"    ENV.clear \u0026\u0026 ENV.update(env)"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1aca2d91_e87d16b2","line":42,"updated":"2015-05-08 06:15:25.000000000","message":"shouldn\u0027t this error message be a little more explicit so the user knows he didn\u0027t provide the proper authentication method?","commit_id":"52e1cc2a14b847129c9b41ec3e2d00ea5995bf80"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c60b973e8962c1c4ae832103b6186bad825c5fa1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  initvars # so commands will work"},{"line_number":13,"context_line":"  commands :openstack \u003d\u003e \u0027openstack\u0027"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  RCFILE \u003d \u0027~/openrc\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.request(service, action, object, *properties)"},{"line_number":18,"context_line":"    env_hash \u003d authentication_env"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_d57dace8","line":15,"updated":"2015-05-10 05:17:05.000000000","message":"This path doesn\u0027t work for me:\n\n irb(main):001:0\u003e File.exists?(\u0027~/openrc\u0027)\n \u003d\u003e false\n\nCould try this instead:\n\n irb(main):004:0\u003e File.exists?(\"/#{ENV[\u0027USER\u0027]}/openrc\")\n \u003d\u003e true","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ef12a6fde843cb717a272f9ca538f45d85761587","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  initvars # so commands will work"},{"line_number":13,"context_line":"  commands :openstack \u003d\u003e \u0027openstack\u0027"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  RCFILE \u003d \u0027~/openrc\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.request(service, action, object, *properties)"},{"line_number":18,"context_line":"    env_hash \u003d authentication_env"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_58768c3f","line":15,"in_reply_to":"9af37de9_d57dace8","updated":"2015-05-10 21:21:48.000000000","message":"Done.  I used ENV[\u0027HOME\u0027]","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c60b973e8962c1c4ae832103b6186bad825c5fa1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    end"},{"line_number":103,"context_line":"    File.open(file).readlines.delete_if{|l| l\u003d~ /^#/}.each do |line|"},{"line_number":104,"context_line":"      key, value \u003d line.split(\u0027\u003d\u0027)"},{"line_number":105,"context_line":"      key \u003d key.split(\u0027 \u0027).last.sub(/^os_/, \u0027\u0027)"},{"line_number":106,"context_line":"      value \u003d value.chomp.gsub(/\u0027/, \u0027\u0027)"},{"line_number":107,"context_line":"      openrc[key] \u003d value"},{"line_number":108,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_f59af0c4","line":105,"updated":"2015-05-10 05:17:05.000000000","message":"I think downcase is necessary here, as the variables will be defined like: http://git.openstack.org/cgit/stackforge/puppet-openstack_extras/tree/templates/openrc.erb#n3","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ef12a6fde843cb717a272f9ca538f45d85761587","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    end"},{"line_number":103,"context_line":"    File.open(file).readlines.delete_if{|l| l\u003d~ /^#/}.each do |line|"},{"line_number":104,"context_line":"      key, value \u003d line.split(\u0027\u003d\u0027)"},{"line_number":105,"context_line":"      key \u003d key.split(\u0027 \u0027).last.sub(/^os_/, \u0027\u0027)"},{"line_number":106,"context_line":"      value \u003d value.chomp.gsub(/\u0027/, \u0027\u0027)"},{"line_number":107,"context_line":"      openrc[key] \u003d value"},{"line_number":108,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_3873c84f","line":105,"in_reply_to":"9af37de9_f59af0c4","updated":"2015-05-10 21:21:48.000000000","message":"Actually, I\u0027m not sure why it was downcasing or stripping the leading os_.  So I removed them.","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c60b973e8962c1c4ae832103b6186bad825c5fa1","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"  # The path to withenv changes between versions of puppet, so redefining this function here."},{"line_number":120,"context_line":"  # Run some code with a specific environment.  Resets the environment at the end of the code."},{"line_number":121,"context_line":"  def self.withenv(hash, \u0026block)"},{"line_number":122,"context_line":"    saved \u003d ENV.to_hash"},{"line_number":123,"context_line":"    ENV.clear"},{"line_number":124,"context_line":"    ENV.replace(hash)"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_b57b487b","line":121,"updated":"2015-05-10 05:17:05.000000000","message":"Since puppet 3.0.0 and continued in puppet 4 the withenv function has lived in Puppet::Util. We redefined it when we were trying to support both 2.7 and 3, but we no longer need to do that.\n\nhttps://github.com/puppetlabs/puppet/blob/3.0.0/lib/puppet/util.rb#L39-L51","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ef12a6fde843cb717a272f9ca538f45d85761587","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"  # The path to withenv changes between versions of puppet, so redefining this function here."},{"line_number":120,"context_line":"  # Run some code with a specific environment.  Resets the environment at the end of the code."},{"line_number":121,"context_line":"  def self.withenv(hash, \u0026block)"},{"line_number":122,"context_line":"    saved \u003d ENV.to_hash"},{"line_number":123,"context_line":"    ENV.clear"},{"line_number":124,"context_line":"    ENV.replace(hash)"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_188fe424","line":121,"in_reply_to":"9af37de9_b57b487b","updated":"2015-05-10 21:21:48.000000000","message":"Done","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c60b973e8962c1c4ae832103b6186bad825c5fa1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"  def self.authentication_env(override_env \u003d {})"},{"line_number":133,"context_line":"    env_hash \u003d get_env_from(RCFILE)"},{"line_number":134,"context_line":"    env_hash.merge(get_env_from_auth_config)"},{"line_number":135,"context_line":"    # NOTE: ENV does not support merge???"},{"line_number":136,"context_line":"    ENV.each{|key, val| env_hash[key] \u003d val}"},{"line_number":137,"context_line":"    override_env.each do |key, val|"},{"line_number":138,"context_line":"      if val.nil?"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_35907895","line":135,"updated":"2015-05-10 05:17:05.000000000","message":"Is this a question that needs an answer? or is this copied from somewhere else?\n\nLooks like ENV is an object, not a hash, so merge isn\u0027t implemented.","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ef12a6fde843cb717a272f9ca538f45d85761587","unresolved":false,"context_lines":[{"line_number":132,"context_line":"  def self.authentication_env(override_env \u003d {})"},{"line_number":133,"context_line":"    env_hash \u003d get_env_from(RCFILE)"},{"line_number":134,"context_line":"    env_hash.merge(get_env_from_auth_config)"},{"line_number":135,"context_line":"    # NOTE: ENV does not support merge???"},{"line_number":136,"context_line":"    ENV.each{|key, val| env_hash[key] \u003d val}"},{"line_number":137,"context_line":"    override_env.each do |key, val|"},{"line_number":138,"context_line":"      if val.nil?"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_f893004e","line":135,"in_reply_to":"9af37de9_35907895","updated":"2015-05-10 21:21:48.000000000","message":"It was driving me nuts because ENV behaved in all other respects exactly like a hash.  I had to look up the docs for ENV to find out that indeed it was an object which implemented Hash almost, but not quite.","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"c60b973e8962c1c4ae832103b6186bad825c5fa1","unresolved":false,"context_lines":[{"line_number":145,"context_line":"  end"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"  def self.auth_config_file"},{"line_number":148,"context_line":"    nil # subclass must override"},{"line_number":149,"context_line":"  end"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"  def self.auth_config_file_section"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_158d747b","line":148,"updated":"2015-05-10 05:17:05.000000000","message":"Should this raise an error instead of just returning nil?","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ef12a6fde843cb717a272f9ca538f45d85761587","unresolved":false,"context_lines":[{"line_number":145,"context_line":"  end"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"  def self.auth_config_file"},{"line_number":148,"context_line":"    nil # subclass must override"},{"line_number":149,"context_line":"  end"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"  def self.auth_config_file_section"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"9af37de9_d8983c6d","line":148,"in_reply_to":"9af37de9_158d747b","updated":"2015-05-10 21:21:48.000000000","message":"No, it should return nil, in case for some reason the subclass really doesn\u0027t have a config file, or doesn\u0027t need to do config file based auth.","commit_id":"99fcf9d09cf37e0a4ff537cc53a34040e3a74b62"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"79cb49ae3712ba1a0492a0f4b673aa7c830b228b","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  RCFILE \u003d \"#{ENV[\u0027HOME\u0027]}/openrc\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.request(service, action, object, *properties)"},{"line_number":18,"context_line":"    # ENV are inherited but overridden by RC file"},{"line_number":19,"context_line":"    get_env_from(RCFILE)"},{"line_number":20,"context_line":"    # If not enough credentials we use configfile?"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"5ad58531_8d1041aa","line":17,"updated":"2015-05-11 19:31:14.000000000","message":"The precedence here is\n1) ENV\n2) openrc file\n3) app config file\n\nI think this is wrong.\n* ENV should override both openrc and the app config file\n* Where is the override?","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"79cb49ae3712ba1a0492a0f4b673aa7c830b228b","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.request(service, action, object, *properties)"},{"line_number":18,"context_line":"    # ENV are inherited but overridden by RC file"},{"line_number":19,"context_line":"    get_env_from(RCFILE)"},{"line_number":20,"context_line":"    # If not enough credentials we use configfile?"},{"line_number":21,"context_line":"    unless credentials_provided?"},{"line_number":22,"context_line":"      get_env_from_ini"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"5ad58531_2d76ed3e","line":19,"updated":"2015-05-11 19:31:14.000000000","message":"This does nothing - the return value is not used","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"ca647911621655a786ff95eb02b6f2a174df21e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  def self.request(service, action, object, *properties)"},{"line_number":18,"context_line":"    # ENV are inherited but overridden by RC file"},{"line_number":19,"context_line":"    get_env_from(RCFILE)"},{"line_number":20,"context_line":"    # If not enough credentials we use configfile?"},{"line_number":21,"context_line":"    unless credentials_provided?"},{"line_number":22,"context_line":"      get_env_from_ini"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"9a0c5dc1_e186aa64","line":19,"in_reply_to":"5ad58531_2d76ed3e","updated":"2015-05-12 06:05:14.000000000","message":"There was no need to return anything because the ENV was updated on the fly.","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"79cb49ae3712ba1a0492a0f4b673aa7c830b228b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    get_env_from(RCFILE)"},{"line_number":20,"context_line":"    # If not enough credentials we use configfile?"},{"line_number":21,"context_line":"    unless credentials_provided?"},{"line_number":22,"context_line":"      get_env_from_ini"},{"line_number":23,"context_line":"    end"},{"line_number":24,"context_line":"    unless credentials_provided?"},{"line_number":25,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027No credentials provided.\u0027)"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"5ad58531_4d237906","line":22,"updated":"2015-05-11 19:31:14.000000000","message":"The config file and optional section are not passed in here?  Where is get_env_from_ini supposed to get them?  You also removed the class methods that allow the subclass providers to supply the config file name and section?","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"ca647911621655a786ff95eb02b6f2a174df21e6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    get_env_from(RCFILE)"},{"line_number":20,"context_line":"    # If not enough credentials we use configfile?"},{"line_number":21,"context_line":"    unless credentials_provided?"},{"line_number":22,"context_line":"      get_env_from_ini"},{"line_number":23,"context_line":"    end"},{"line_number":24,"context_line":"    unless credentials_provided?"},{"line_number":25,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027No credentials provided.\u0027)"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"9a0c5dc1_8196ce92","line":22,"in_reply_to":"5ad58531_4d237906","updated":"2015-05-12 06:05:14.000000000","message":"Sorry that was WIP.\n\nTaking now a different approach using an interface to help solve the whole auth issue","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"79cb49ae3712ba1a0492a0f4b673aa7c830b228b","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  private"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  def self.credentials_provided?"},{"line_number":93,"context_line":"    if ENV[\u0027OS_USERNAME\u0027] \u0026\u0026 ENV[\u0027OS_PASSWORD\u0027] \u0026\u0026 ENV[\u0027OS_PROJECT_NAME\u0027] \u0026\u0026 ENV[\u0027OS_AUTH_URL\u0027]"},{"line_number":94,"context_line":"      return true"},{"line_number":95,"context_line":"    elsif ENV[\u0027OS_TOKEN\u0027] \u0026\u0026 ENV[\u0027OS_URL\u0027]"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"5ad58531_ed034575","line":92,"updated":"2015-05-11 19:31:14.000000000","message":"The actual final ENV that the command will use will only be set by withenv.  Therefore, you have to test these within authenticate_request.  I don\u0027t see why we can\u0027t raise Puppet::Error::OpenstackAuthInputError from within authenticate_request.","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"ca647911621655a786ff95eb02b6f2a174df21e6","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  private"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  def self.credentials_provided?"},{"line_number":93,"context_line":"    if ENV[\u0027OS_USERNAME\u0027] \u0026\u0026 ENV[\u0027OS_PASSWORD\u0027] \u0026\u0026 ENV[\u0027OS_PROJECT_NAME\u0027] \u0026\u0026 ENV[\u0027OS_AUTH_URL\u0027]"},{"line_number":94,"context_line":"      return true"},{"line_number":95,"context_line":"    elsif ENV[\u0027OS_TOKEN\u0027] \u0026\u0026 ENV[\u0027OS_URL\u0027]"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"9a0c5dc1_81afeee2","line":92,"in_reply_to":"5ad58531_ed034575","updated":"2015-05-12 06:05:14.000000000","message":"Taking now a different approach using an interface to help solve the whole auth issue","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a3907d8fcc90402c9f8bc58b0ac100078f26ca92","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        section \u003d section || AUTH_SECTION"},{"line_number":63,"context_line":"        ini_file \u003d Puppet::Util::IniConfig::File.new"},{"line_number":64,"context_line":"        ini_file.read(filename)"},{"line_number":65,"context_line":"        AUTH_KEYWORD.each do |param|"},{"line_number":66,"context_line":"          if ini_file \u0026\u0026 ini_file[section] \u0026\u0026 ini_file[section][param]"},{"line_number":67,"context_line":"            env.merge!(\"OS_#{param.upcase}\" \u003d\u003e ini_file[section][param].to_s)"},{"line_number":68,"context_line":"          end"}],"source_content_type":"text/x-ruby","patch_set":20,"id":"7a016987_3d4b8389","line":65,"updated":"2015-05-15 14:18:26.000000000","message":"the \u0027insecure\u0027 keyword cannot be passed as OS_INSECURE.  It must be passed on the command line.  If \u0027insecure\u0027 is true, pass \u0027--insecure\u0027 with no argument.  If \u0027insecure\u0027 is false, then do not pass \u0027--insecure\u0027 at all, just omit it.","commit_id":"fb354cd179e788cb3acfe2caef90e37e0dda3f46"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"1e2e94f230e6ae8ccf108a61f7d1744e0726422d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        section \u003d section || AUTH_SECTION"},{"line_number":63,"context_line":"        ini_file \u003d Puppet::Util::IniConfig::File.new"},{"line_number":64,"context_line":"        ini_file.read(filename)"},{"line_number":65,"context_line":"        AUTH_KEYWORD.each do |param|"},{"line_number":66,"context_line":"          if ini_file \u0026\u0026 ini_file[section] \u0026\u0026 ini_file[section][param]"},{"line_number":67,"context_line":"            env.merge!(\"OS_#{param.upcase}\" \u003d\u003e ini_file[section][param].to_s)"},{"line_number":68,"context_line":"          end"}],"source_content_type":"text/x-ruby","patch_set":20,"id":"7a016987_799fba50","line":65,"in_reply_to":"7a016987_3d4b8389","updated":"2015-05-16 07:14:46.000000000","message":"The idea is to keep the feature for ini file you added in patch set 7.\nObviously I didn\u0027t look too deep into it :(\n\nThis is really inconsistent with the way OSC is working so far, to deal with it we have to either:\n\n- Remove using it in request, the caller to make the call to get_auth_from_initfile\n- Check if OS_INSECURE is used and pass that to openstack call in request.\n- Get OSC fixed\n\nI opt for the later.","commit_id":"fb354cd179e788cb3acfe2caef90e37e0dda3f46"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a3907d8fcc90402c9f8bc58b0ac100078f26ca92","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def request(service, action, *properties)"},{"line_number":79,"context_line":"      # RC file overrides inherited ENV values"},{"line_number":80,"context_line":"      set_env(get_auth_from_file(rc_filename))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"      # Configuration file used if needed"},{"line_number":83,"context_line":"      unless user_env? || service_env?"}],"source_content_type":"text/x-ruby","patch_set":20,"id":"7a016987_9dfef736","line":80,"updated":"2015-05-15 14:18:26.000000000","message":"Why not use withenv?","commit_id":"fb354cd179e788cb3acfe2caef90e37e0dda3f46"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"1e2e94f230e6ae8ccf108a61f7d1744e0726422d","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def request(service, action, *properties)"},{"line_number":79,"context_line":"      # RC file overrides inherited ENV values"},{"line_number":80,"context_line":"      set_env(get_auth_from_file(rc_filename))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"      # Configuration file used if needed"},{"line_number":83,"context_line":"      unless user_env? || service_env?"}],"source_content_type":"text/x-ruby","patch_set":20,"id":"7a016987_591bde1b","line":80,"in_reply_to":"7a016987_9dfef736","updated":"2015-05-16 07:14:46.000000000","message":"Yes, absolutely, know that we have a clearer path.","commit_id":"fb354cd179e788cb3acfe2caef90e37e0dda3f46"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2d549b162677b7f21bff291c9885f7f436f485a2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"require \u0027csv\u0027"},{"line_number":2,"context_line":"require \u0027puppet\u0027"},{"line_number":3,"context_line":"require \u0027puppet/util/inifile\u0027"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"class Puppet::Error::OpenstackAuthInputError \u003c Puppet::Error"},{"line_number":6,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_25e23a30","line":3,"updated":"2015-05-27 16:33:31.000000000","message":"I don\u0027t think this is necessary.","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"67f5b1bf63c4fb7df2b42623c5a1df5935f1499a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"require \u0027csv\u0027"},{"line_number":2,"context_line":"require \u0027puppet\u0027"},{"line_number":3,"context_line":"require \u0027puppet/util/inifile\u0027"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"class Puppet::Error::OpenstackAuthInputError \u003c Puppet::Error"},{"line_number":6,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_5814f142","line":3,"in_reply_to":"7a016987_25e23a30","updated":"2015-05-27 23:45:37.000000000","message":"RIght. That was a left over!","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"}],"lib/puppet/provider/openstack/api.rb":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"  def url"},{"line_number":11,"context_line":"    \"v#{@version}\""},{"line_number":12,"context_line":"  end"},{"line_number":13,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_5164b147","line":13,"updated":"2015-05-18 22:36:34.000000000","message":"I don\u0027t see this being used anywhere in https://review.openstack.org/#/c/181299 , how do you intend this to be used?","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"  def url"},{"line_number":11,"context_line":"    \"v#{@version}\""},{"line_number":12,"context_line":"  end"},{"line_number":13,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_f94dc33e","line":13,"in_reply_to":"7a016987_5164b147","updated":"2015-05-19 02:27:00.000000000","message":"This is used in auth.rb interface (ruby module) but a better place would be part of keystone provider namespace, moving it there.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"}],"lib/puppet/provider/openstack/auth.rb":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"  RCFILENAME \u003d \"#{ENV[\u0027HOME\u0027]}/openrc\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  def get_os_from_env"},{"line_number":13,"context_line":"    env \u003d {}"},{"line_number":14,"context_line":"    ENV.each { |k,v| env.merge!(k \u003d\u003e v) if k \u003d~ /^OS_/ }"},{"line_number":15,"context_line":"    return env"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_b16d259a","line":12,"updated":"2015-05-18 22:36:34.000000000","message":"get_os doesn\u0027t describe what it\u0027s getting very well, maybe get_credentials_from_env or get_creds_from_env?","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"  RCFILENAME \u003d \"#{ENV[\u0027HOME\u0027]}/openrc\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"  def get_os_from_env"},{"line_number":13,"context_line":"    env \u003d {}"},{"line_number":14,"context_line":"    ENV.each { |k,v| env.merge!(k \u003d\u003e v) if k \u003d~ /^OS_/ }"},{"line_number":15,"context_line":"    return env"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_1912df09","line":12,"in_reply_to":"7a016987_b16d259a","updated":"2015-05-19 02:27:00.000000000","message":"I\u0027m happy to change that meanwhile the method does parse OS_ variables and not specifically credentials like OS_PASSWORD.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    return env"},{"line_number":16,"context_line":"  end"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  def get_os_from_file(filename)"},{"line_number":19,"context_line":"    env \u003d {}"},{"line_number":20,"context_line":"    if File.exists?(filename)"},{"line_number":21,"context_line":"      File.open(filename).readlines.delete_if{|l| l\u003d~ /^#|^$/ }.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_510951dc","line":18,"updated":"2015-05-18 22:36:34.000000000","message":"I still think this should be from_rcfile","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    return env"},{"line_number":16,"context_line":"  end"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  def get_os_from_file(filename)"},{"line_number":19,"context_line":"    env \u003d {}"},{"line_number":20,"context_line":"    if File.exists?(filename)"},{"line_number":21,"context_line":"      File.open(filename).readlines.delete_if{|l| l\u003d~ /^#|^$/ }.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_99fecfac","line":18,"in_reply_to":"7a016987_510951dc","updated":"2015-05-19 02:27:00.000000000","message":"Agreed, so it\u0027s consistent with the other one","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  def request(service, action, *properties)"},{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_f1fa7dbc","line":55,"updated":"2015-05-18 22:36:34.000000000","message":"Typo - environament/environment","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  def request(service, action, *properties)"},{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_d94a0726","line":55,"in_reply_to":"7a016987_f1fa7dbc","updated":"2015-05-19 02:27:00.000000000","message":"Thanks","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":59,"context_line":"      env.merge!(get_os_from_inifile(ini_filename))"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_f1b15d90","line":56,"updated":"2015-05-18 22:36:34.000000000","message":"I don\u0027t think the environment and openrc credentials should be merged together. It will make debugging really difficult if credentials are partially set in different ways.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"99e36b216918899a4e4a224ff78051fc45bb78bb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":59,"context_line":"      env.merge!(get_os_from_inifile(ini_filename))"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_132f16a2","line":56,"in_reply_to":"7a016987_81d054ca","updated":"2015-05-21 20:41:02.000000000","message":"Puppet runs within some ENV context,\nwe extract the OS variables from the env\nthen there is a RC file to use, we add that too.\nwhat do you folks propose otherwise, and how much that is different from before and even different from running openstack (outside of Puppet)?","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"cada904dabfbd8622bcb3b4c4a95292be4b032e4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":59,"context_line":"      env.merge!(get_os_from_inifile(ini_filename))"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_81d054ca","line":56,"in_reply_to":"7a016987_f1b15d90","updated":"2015-05-21 15:59:02.000000000","message":"I don\u0027t fully understand what you mean here.  Can you provide more explanation?","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    # Capture Openstack environment defaults"},{"line_number":54,"context_line":"    env \u003d get_os_from_env"},{"line_number":55,"context_line":"    # Add Openstack environament from RC"},{"line_number":56,"context_line":"    env.merge!(get_os_from_file(rc_filename))"},{"line_number":57,"context_line":"    # Use configuration file if needed"},{"line_number":58,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":59,"context_line":"      env.merge!(get_os_from_inifile(ini_filename))"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_f974a368","line":56,"in_reply_to":"7a016987_f1b15d90","updated":"2015-05-19 02:27:00.000000000","message":"The withenv approach doesn\u0027t leave us many choices.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"404905d7a3a7eb7380f7c8bdcf603f95cc28d783","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  AUTH_KEYWORD \u003d [ \u0027auth_url\u0027, \u0027username\u0027, \u0027password\u0027, \u0027user_id\u0027,"},{"line_number":4,"context_line":"    \u0027user_domain_name\u0027, \u0027user_domain_id\u0027, \u0027project_name\u0027, \u0027project_id\u0027,"},{"line_number":5,"context_line":"    \u0027project_domain_name\u0027, \u0027project_domain_id\u0027, \u0027domain_name\u0027, \u0027domain_id\u0027,"},{"line_number":6,"context_line":"    \u0027trust_id\u0027, \u0027cacert\u0027, \u0027cert\u0027, \u0027key\u0027, \u0027insecure\u0027 ]"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  AUTH_SECTION \u003d \u0027keystone_authtoken\u0027"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"7a016987_88ec09f4","line":6,"updated":"2015-05-20 20:42:45.000000000","message":"These are the new keystone_authtoken parameters that will only be available once Keystone v3 support is added in conjunction with using a recent version (\u003e\u003d 1.3) of python-keystonemiddleware.\n\nhttp://www.jamielennox.net/blog/2015/02/23/v3-authentication-with-auth-token-middleware/\n\nDo we want to support inifile authentication with v2?  If so, it usually looks like this, with the new openstack provider code:\n\nhttps://review.openstack.org/#/c/172580/12/lib/puppet/provider/glance.rb\n\ninstead of auth_url, the old keystonemiddleware uses identity_url\n\ninstead of project_name, admin_tenant_name\n\netc. etc.\n\nWe may have to scrap inifile authentication until v3 is available, unless you can figure out a way to support v2 with the old keywords and v3 with the new keywords.","commit_id":"87d951685bb71bbffabdaaf2658c4bb5cf103c94"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"468d2ccc85683115e619a0b4965c236cb2b3f4ed","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  AUTH_KEYWORD \u003d [ \u0027auth_url\u0027, \u0027username\u0027, \u0027password\u0027, \u0027user_id\u0027,"},{"line_number":4,"context_line":"    \u0027user_domain_name\u0027, \u0027user_domain_id\u0027, \u0027project_name\u0027, \u0027project_id\u0027,"},{"line_number":5,"context_line":"    \u0027project_domain_name\u0027, \u0027project_domain_id\u0027, \u0027domain_name\u0027, \u0027domain_id\u0027,"},{"line_number":6,"context_line":"    \u0027trust_id\u0027, \u0027cacert\u0027, \u0027cert\u0027, \u0027key\u0027, \u0027insecure\u0027 ]"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  AUTH_SECTION \u003d \u0027keystone_authtoken\u0027"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"7a016987_8e72d10f","line":6,"in_reply_to":"7a016987_0e38213c","updated":"2015-05-20 22:53:36.000000000","message":"However, the mapping from keyword name to env. var. name then becomes more complex.  There would have to be a method or perhaps just a hash table to map the keyword name to the env. var. name, instead of just the upcase.","commit_id":"87d951685bb71bbffabdaaf2658c4bb5cf103c94"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d3cb889424be6286d902d4af67bf9c0471f3aa7b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  AUTH_KEYWORD \u003d [ \u0027auth_url\u0027, \u0027username\u0027, \u0027password\u0027, \u0027user_id\u0027,"},{"line_number":4,"context_line":"    \u0027user_domain_name\u0027, \u0027user_domain_id\u0027, \u0027project_name\u0027, \u0027project_id\u0027,"},{"line_number":5,"context_line":"    \u0027project_domain_name\u0027, \u0027project_domain_id\u0027, \u0027domain_name\u0027, \u0027domain_id\u0027,"},{"line_number":6,"context_line":"    \u0027trust_id\u0027, \u0027cacert\u0027, \u0027cert\u0027, \u0027key\u0027, \u0027insecure\u0027 ]"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  AUTH_SECTION \u003d \u0027keystone_authtoken\u0027"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"7a016987_0e0f0189","line":6,"in_reply_to":"7a016987_0e38213c","updated":"2015-05-20 22:51:33.000000000","message":"Keystone is completely different.  Keystone has to do admin_token auth, for bootstrapping purposes.  Keystone uses different keywords such as admin_token, admin_endpoint, admin_host, admin_port, etc.  Keystone uses the DEFAULT section.  I suppose those keywords could also be added to the end of the list.  admin_token would set OS_TOKEN, and OS_URL would be either admin_endpoint or constructed from host, port, etc.","commit_id":"87d951685bb71bbffabdaaf2658c4bb5cf103c94"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d03a43f75a9a73c88756ecc61f91b5cde3dae6d0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  AUTH_KEYWORD \u003d [ \u0027auth_url\u0027, \u0027username\u0027, \u0027password\u0027, \u0027user_id\u0027,"},{"line_number":4,"context_line":"    \u0027user_domain_name\u0027, \u0027user_domain_id\u0027, \u0027project_name\u0027, \u0027project_id\u0027,"},{"line_number":5,"context_line":"    \u0027project_domain_name\u0027, \u0027project_domain_id\u0027, \u0027domain_name\u0027, \u0027domain_id\u0027,"},{"line_number":6,"context_line":"    \u0027trust_id\u0027, \u0027cacert\u0027, \u0027cert\u0027, \u0027key\u0027, \u0027insecure\u0027 ]"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  AUTH_SECTION \u003d \u0027keystone_authtoken\u0027"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"7a016987_0e38213c","line":6,"in_reply_to":"7a016987_88ec09f4","updated":"2015-05-20 22:48:04.000000000","message":"Thinking about this some more - what if you just add the v2 auth keywords to the AUTH_KEYWORDS list, at the end?  If v3 is not enabled in the service, it will fallback to the v2 keywords.  The good thing is that the old and new code both use section keystone_authtoken.  For v2, it looks as though identity_uri is not always used, so you would have to have code to support constructing the uri from auth_protocol, auth_host, auth_port, etc.","commit_id":"87d951685bb71bbffabdaaf2658c4bb5cf103c94"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"00740b6975d8b3d3048063ac5cba0065d59931da","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  AUTH_KEYWORD \u003d [ \u0027auth_url\u0027, \u0027username\u0027, \u0027password\u0027, \u0027user_id\u0027,"},{"line_number":4,"context_line":"    \u0027user_domain_name\u0027, \u0027user_domain_id\u0027, \u0027project_name\u0027, \u0027project_id\u0027,"},{"line_number":5,"context_line":"    \u0027project_domain_name\u0027, \u0027project_domain_id\u0027, \u0027domain_name\u0027, \u0027domain_id\u0027,"},{"line_number":6,"context_line":"    \u0027trust_id\u0027, \u0027cacert\u0027, \u0027cert\u0027, \u0027key\u0027, \u0027insecure\u0027 ]"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  AUTH_SECTION \u003d \u0027keystone_authtoken\u0027"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"7a016987_fc857fce","line":6,"in_reply_to":"7a016987_8e72d10f","updated":"2015-05-21 01:57:42.000000000","message":"Yeah I tried to use your initial work but this is effectively going to need more thinking and work to support v2 then v3.\n\n\nOk, Keystone is an exception, if not the only one, but it\u0027s okay, it doesn\u0027t use those inifile methods because it taps directly in the file for the token.\n\nkeyworkd-env mapping: If not every keyword to translate to an env variable then it probably shouldn\u0027t be in the list. Insecure for instance, as you said, has to be a command line option.","commit_id":"87d951685bb71bbffabdaaf2658c4bb5cf103c94"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"25a5e6396a8b83d082f968fb28a9d6f998471b77","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    env.merge!(get_os_from_rcfile(rc_filename))"},{"line_number":29,"context_line":"    # Use configuration file if needed"},{"line_number":30,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":31,"context_line":"      env.merge!(get_os_from_inifile(ini_filename))"},{"line_number":32,"context_line":"    end"},{"line_number":33,"context_line":"    unless user_auth?(env) || service_auth?(env)"},{"line_number":34,"context_line":"      raise(Puppet::Error::OpenstackAuthInputError, \u0027Unsufficient credentials to authenticate\u0027)"}],"source_content_type":"text/x-ruby","patch_set":28,"id":"7a016987_9e88b8c6","line":31,"updated":"2015-05-21 15:57:19.000000000","message":"You removed get_os_from_inifile","commit_id":"773bcd0afd60c320d51ceeac1feb1f97c63152e7"}],"lib/puppet/provider/openstack/credentials.rb":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2d549b162677b7f21bff291c9885f7f436f485a2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"class Puppet::Provider::Openstack::CredentialsV2_0 \u003c Puppet::Provider::Openstack::Credentials"},{"line_number":56,"context_line":"end"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# Not used yet!"},{"line_number":59,"context_line":"class Puppet::Provider::Openstack::CredentialsV3 \u003c Puppet::Provider::Openstack::Credentials"},{"line_number":60,"context_line":"  KEYS \u003d ["},{"line_number":61,"context_line":"    :default_domain,"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_0505fec0","line":58,"updated":"2015-05-27 16:33:31.000000000","message":"If it\u0027s not used let then let\u0027s save it for another patch? This one is big enough as it is.","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"67f5b1bf63c4fb7df2b42623c5a1df5935f1499a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"class Puppet::Provider::Openstack::CredentialsV2_0 \u003c Puppet::Provider::Openstack::Credentials"},{"line_number":56,"context_line":"end"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# Not used yet!"},{"line_number":59,"context_line":"class Puppet::Provider::Openstack::CredentialsV3 \u003c Puppet::Provider::Openstack::Credentials"},{"line_number":60,"context_line":"  KEYS \u003d ["},{"line_number":61,"context_line":"    :default_domain,"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_98570902","line":58,"in_reply_to":"7a016987_0505fec0","updated":"2015-05-27 23:45:37.000000000","message":"Yeah I thought about that too, just wanted to provide the example.\nI remove it then...","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"}],"lib/puppetx/openstack/auth.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a2c63daba2e0cd071d74a2cff1da30295eeeef33","unresolved":false,"context_lines":[{"line_number":1,"context_line":"require \u0027puppet\u0027"},{"line_number":2,"context_line":"require \u0027/usr/share/ruby/vendor_ruby/puppet/util/inifile.rb\u0027"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"module Auth"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_05877710","line":2,"updated":"2015-05-12 14:04:23.000000000","message":"probably should not have the full path in here like this","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"eb26b7c9cb9aa2d6617a8cf33ea4542ae46986e3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"require \u0027puppet\u0027"},{"line_number":2,"context_line":"require \u0027/usr/share/ruby/vendor_ruby/puppet/util/inifile.rb\u0027"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"module Auth"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_3ee5cf08","line":2,"in_reply_to":"9a0c5dc1_05877710","updated":"2015-05-12 23:26:08.000000000","message":"You\u0027re right","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a2c63daba2e0cd071d74a2cff1da30295eeeef33","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    end"},{"line_number":23,"context_line":"  end"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  def get_auth_from_file(file)"},{"line_number":26,"context_line":"    openrc \u003d {}"},{"line_number":27,"context_line":"    if File.exists?(file)"},{"line_number":28,"context_line":"      File.open(file).readlines.delete_if{|l| l\u003d~ /^#/}.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_85eec7ea","line":25,"updated":"2015-05-12 14:04:23.000000000","message":"This method is unused?","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"eb26b7c9cb9aa2d6617a8cf33ea4542ae46986e3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    end"},{"line_number":23,"context_line":"  end"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"  def get_auth_from_file(file)"},{"line_number":26,"context_line":"    openrc \u003d {}"},{"line_number":27,"context_line":"    if File.exists?(file)"},{"line_number":28,"context_line":"      File.open(file).readlines.delete_if{|l| l\u003d~ /^#/}.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_1ec9eb78","line":25,"in_reply_to":"9a0c5dc1_85eec7ea","updated":"2015-05-12 23:26:08.000000000","message":"Need to realign the names\nSame for below comments","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a2c63daba2e0cd071d74a2cff1da30295eeeef33","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  # Returns a Hash of following form:"},{"line_number":39,"context_line":"  # {\u0027OS_USERNAME\u0027 \u003d\u003e \u0027user\u0027, ..., \u0027OS_PASSWORD\u0027 \u003d\u003e \u0027password\u0027 }"},{"line_number":40,"context_line":"  def get_auth_from_ini(config_file, section\u003dnil)"},{"line_number":41,"context_line":"    section \u003d section || AUTH_SECTION"},{"line_number":42,"context_line":"    ini_file \u003d Puppet::Util::IniConfig::File.new"},{"line_number":43,"context_line":"    ini_file.read(config_file)"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_85c5a75c","line":40,"updated":"2015-05-12 14:04:23.000000000","message":"This method is unused?","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a2c63daba2e0cd071d74a2cff1da30295eeeef33","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  # it\u0027s caller\u0027s responsability to wrapp to save/restore ENV"},{"line_number":55,"context_line":"  def request(service, action, *args)"},{"line_number":56,"context_line":"    # RC file overrides inherited ENV values"},{"line_number":57,"context_line":"    get_env_from(RCFILE)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # If not enough credentials we use configfile"},{"line_number":60,"context_line":"    unless credentials_provided?"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_e5cea382","line":57,"updated":"2015-05-12 14:04:23.000000000","message":"This method is undefined?","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"a2c63daba2e0cd071d74a2cff1da30295eeeef33","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # If not enough credentials we use configfile"},{"line_number":60,"context_line":"    unless credentials_provided?"},{"line_number":61,"context_line":"      if get_env_from_ini.empty? \u0026\u0026 !credentials_provided?"},{"line_number":62,"context_line":"        raise(Puppet::Error::OpenstackAuthInputError, \u0027Unsufficient credentials level to authenticate\u0027)"},{"line_number":63,"context_line":"      end"},{"line_number":64,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a0c5dc1_25ab9b8b","line":61,"updated":"2015-05-12 14:04:23.000000000","message":"get_env_from_ini is undefined?","commit_id":"61e0339b6961dff2f46fc0ebdf8a7b2fcdcdbf9e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"require \u0027puppet\u0027"},{"line_number":2,"context_line":"require \u0027/usr/share/ruby/vendor_ruby/puppet/util/inifile.rb\u0027"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"module Auth"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_44b0b643","line":2,"updated":"2015-05-13 00:44:58.000000000","message":"TODO","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    if File.exists?(file)"},{"line_number":28,"context_line":"      File.open(file).readlines.delete_if{|l| l\u003d~ /^#/}.each do |line|"},{"line_number":29,"context_line":"        key, value \u003d line.split(\u0027\u003d\u0027)"},{"line_number":30,"context_line":"        key \u003d key.split(\u0027 \u0027).last.sub(/^os_/, \u0027\u0027)"},{"line_number":31,"context_line":"        value \u003d value.chomp.gsub(/\u0027/, \u0027\u0027)"},{"line_number":32,"context_line":"        openrc[key] \u003d value"},{"line_number":33,"context_line":"      end"}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_2494a289","line":30,"updated":"2015-05-13 00:44:58.000000000","message":"These are all caps in the openrc, right?  OS_USERNAME\u003d\u0027glance\u0027 etc.","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        openrc[key] \u003d value"},{"line_number":33,"context_line":"      end"},{"line_number":34,"context_line":"    end"},{"line_number":35,"context_line":"    return openrc"},{"line_number":36,"context_line":"  end"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  # Returns a Hash of following form:"}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_24db827e","line":35,"updated":"2015-05-13 00:44:58.000000000","message":"This doesn\u0027t set ENV and neither does request","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        auth.merge!(\"OS_#{param.upcase}\" \u003d\u003e ini_file[section][param].to_s)"},{"line_number":48,"context_line":"      end"},{"line_number":49,"context_line":"    end"},{"line_number":50,"context_line":"    auth"},{"line_number":51,"context_line":"  end"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  # If a request is needed with temporary auth (ENV),"}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_e4e44a3c","line":50,"updated":"2015-05-13 00:44:58.000000000","message":"This doesn\u0027t set ENV and neither does request","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  # it\u0027s caller\u0027s responsability to wrapp to save/restore ENV"},{"line_number":55,"context_line":"  def request(service, action, *args)"},{"line_number":56,"context_line":"    # RC file overrides inherited ENV values"},{"line_number":57,"context_line":"    get_auth_from_file(RCFILE)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # Configuration file used if needed"},{"line_number":60,"context_line":"    unless credentials_provided?"}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_a4d53244","line":57,"updated":"2015-05-13 00:44:58.000000000","message":"ENV is not set here","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"2ccccb9745c03a1b120b53033b9460779e3d6c8d","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    # Configuration file used if needed"},{"line_number":60,"context_line":"    unless credentials_provided?"},{"line_number":61,"context_line":"      if get_auth_from_ini.empty? \u0026\u0026 !credentials_provided?"},{"line_number":62,"context_line":"        raise(Puppet::Error::OpenstackAuthInputError, \u0027Unsufficient credentials level to authenticate\u0027)"},{"line_number":63,"context_line":"      end"},{"line_number":64,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":12,"id":"9a0c5dc1_64cf3ab1","line":61,"updated":"2015-05-13 00:44:58.000000000","message":"ENV is not set by get_auth_from_ini","commit_id":"27aac75228ba96e9b2bce57fbf35104451d59e0a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7eb2125ccee50c8bf88c2c980793b81e6ea92c70","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    end"},{"line_number":22,"context_line":"  end"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  def get_auth_from_file(filename)"},{"line_number":25,"context_line":"    env \u003d {}"},{"line_number":26,"context_line":"    if File.exists?(filename)"},{"line_number":27,"context_line":"      File.open(filename).readlines.delete_if{|l| l\u003d~ /^#|^$/ }.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":13,"id":"9a0c5dc1_793b3839","line":24,"updated":"2015-05-13 20:18:21.000000000","message":"This could be called `get_auth_from_rcfile` to distinguish it better from `get_auth_from_inifile`","commit_id":"1da35d70a16dde7c89808ca4e013df2cc83638c8"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"d651225d08b5c8c0f8a4182b3368b6d1013e778e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    end"},{"line_number":22,"context_line":"  end"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  def get_auth_from_file(filename)"},{"line_number":25,"context_line":"    env \u003d {}"},{"line_number":26,"context_line":"    if File.exists?(filename)"},{"line_number":27,"context_line":"      File.open(filename).readlines.delete_if{|l| l\u003d~ /^#|^$/ }.each do |line|"}],"source_content_type":"text/x-ruby","patch_set":13,"id":"7a016987_46511262","line":24,"in_reply_to":"9a0c5dc1_793b3839","updated":"2015-05-13 23:48:13.000000000","message":"Yes and no.\n\nI went back and forth few times with this one.\nrcfile is just a file, there nothing special that makes it a RC file besides it contains variables, although it\u0027s a subset of a bash script.","commit_id":"1da35d70a16dde7c89808ca4e013df2cc83638c8"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7eb2125ccee50c8bf88c2c980793b81e6ea92c70","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Configuration file used if needed"},{"line_number":63,"context_line":"    unless credentials_provided?"},{"line_number":64,"context_line":"      set_env(get_auth_from_inifile(ini_filename))"},{"line_number":65,"context_line":"      unless credentials_provided?"},{"line_number":66,"context_line":"        raise(Puppet::Error::OpenstackAuthInputError, \u0027Unsufficient credentials to authenticate\u0027)"},{"line_number":67,"context_line":"      end"}],"source_content_type":"text/x-ruby","patch_set":13,"id":"9a0c5dc1_99038c42","line":64,"updated":"2015-05-13 20:18:21.000000000","message":"I think this is missing a step, where should run get_auth_from_file to check the rc file?","commit_id":"1da35d70a16dde7c89808ca4e013df2cc83638c8"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"d651225d08b5c8c0f8a4182b3368b6d1013e778e","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Configuration file used if needed"},{"line_number":63,"context_line":"    unless credentials_provided?"},{"line_number":64,"context_line":"      set_env(get_auth_from_inifile(ini_filename))"},{"line_number":65,"context_line":"      unless credentials_provided?"},{"line_number":66,"context_line":"        raise(Puppet::Error::OpenstackAuthInputError, \u0027Unsufficient credentials to authenticate\u0027)"},{"line_number":67,"context_line":"      end"}],"source_content_type":"text/x-ruby","patch_set":13,"id":"7a016987_e65fde73","line":64,"in_reply_to":"9a0c5dc1_99038c42","updated":"2015-05-13 23:48:13.000000000","message":"Thiis is done, above, in line 60.","commit_id":"1da35d70a16dde7c89808ca4e013df2cc83638c8"}],"lib/puppetx/openstack/configfile.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"79cb49ae3712ba1a0492a0f4b673aa7c830b228b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  end"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  def get_env_from_ini(config_file, section\u003dnil)"},{"line_number":29,"context_line":"    config_file \u003d config_file"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    return {} if config_file.nil?"},{"line_number":32,"context_line":"    return @config_creds[config_file] if @config_creds and @config_creds.include?(config_file)"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"5ad58531_cd864965","line":29,"updated":"2015-05-11 19:31:14.000000000","message":"What does this do?  Seems unnecessary","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"ca647911621655a786ff95eb02b6f2a174df21e6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  end"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  def get_env_from_ini(config_file, section\u003dnil)"},{"line_number":29,"context_line":"    config_file \u003d config_file"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    return {} if config_file.nil?"},{"line_number":32,"context_line":"    return @config_creds[config_file] if @config_creds and @config_creds.include?(config_file)"}],"source_content_type":"text/x-ruby","patch_set":10,"id":"9a0c5dc1_0a8d5b7b","line":29,"in_reply_to":"5ad58531_cd864965","updated":"2015-05-12 06:05:14.000000000","message":"It\u0027s not, I removed some code but not enough","commit_id":"55cee087ed1071e340af5785dba69c01c0c64080"}],"spec/unit/provider/openstack/credentials_spec.rb":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2d549b162677b7f21bff291c9885f7f436f485a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"require \u0027puppet/provider/openstack/credentials\u0027"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"describe Puppet::Provider::Openstack::CredentialsV2_0 do"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"  let(:creds) do"},{"line_number":10,"context_line":"    creds \u003d Puppet::Provider::Openstack::CredentialsV2_0.new"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_05d3be39","line":7,"updated":"2015-05-27 16:33:31.000000000","message":"Isn\u0027t it just Credentials, not CredentialsV2_0 (for now at least)?","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"67f5b1bf63c4fb7df2b42623c5a1df5935f1499a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"require \u0027puppet/provider/openstack/credentials\u0027"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"describe Puppet::Provider::Openstack::CredentialsV2_0 do"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"  let(:creds) do"},{"line_number":10,"context_line":"    creds \u003d Puppet::Provider::Openstack::CredentialsV2_0.new"}],"source_content_type":"text/x-ruby","patch_set":38,"id":"7a016987_386495e3","line":7,"in_reply_to":"7a016987_05d3be39","updated":"2015-05-27 23:45:37.000000000","message":"Sure.","commit_id":"1ae58c370c4770696880da25801a5367bc3ac723"}],"spec/unit/provider/openstack_spec.rb":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"      expect(api.url).to eq(\"v2.0\")"},{"line_number":22,"context_line":"    end"},{"line_number":23,"context_line":"  end"},{"line_number":24,"context_line":"end"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"describe Puppet::Provider::Openstack::Auth do"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_f1739d7e","line":24,"updated":"2015-05-18 22:36:34.000000000","message":"I would prefer to split these out into separate files, e.g. spec/unit/provider/openstack/api_spec.rb, etc.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"      expect(api.url).to eq(\"v2.0\")"},{"line_number":22,"context_line":"    end"},{"line_number":23,"context_line":"  end"},{"line_number":24,"context_line":"end"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"describe Puppet::Provider::Openstack::Auth do"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_1929bf37","line":24,"in_reply_to":"7a016987_f1739d7e","updated":"2015-05-19 02:27:00.000000000","message":"Agreed.\n\nAPI is going to move to keystone module, but with its own spec file.","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b97f289a268841937acdf80da8601fe9bdcdc1dd","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    context \u0027without a valid environment set\u0027 do"},{"line_number":54,"context_line":"      it \u0027is false\u0027 do"},{"line_number":55,"context_line":"        expect(Puppet::Provider::Openstack.user_auth?({})).to be_falsy"},{"line_number":56,"context_line":"      end"},{"line_number":57,"context_line":"    end"},{"line_number":58,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_b15645d0","line":55,"updated":"2015-05-18 22:36:34.000000000","message":"Is be_falsy a typo? https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/be-matchers#be-falsey-matcher","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9e2622ced630c12e7d1232aa3fc6f27cb97efaf2","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    context \u0027without a valid environment set\u0027 do"},{"line_number":54,"context_line":"      it \u0027is false\u0027 do"},{"line_number":55,"context_line":"        expect(Puppet::Provider::Openstack.user_auth?({})).to be_falsy"},{"line_number":56,"context_line":"      end"},{"line_number":57,"context_line":"    end"},{"line_number":58,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":26,"id":"7a016987_99ec8ff4","line":55,"in_reply_to":"7a016987_b15645d0","updated":"2015-05-19 02:27:00.000000000","message":"Right! Thanks","commit_id":"f72e0e696ba6d1f35a9026b2e5d48c19c6565655"}]}
