)]}'
{"lib/puppet/provider/keystone_group/openstack.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  end"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  def domain\u003d(value)"},{"line_number":56,"context_line":"    @property_flush[:domain] \u003d value"},{"line_number":57,"context_line":"  end"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  def id"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_fe10b8ad","line":56,"updated":"2015-07-16 17:01:28.000000000","message":"The domain cannot be changed, so should not have a domain\u003d method.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  end"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"  def domain\u003d(value)"},{"line_number":56,"context_line":"    @property_flush[:domain] \u003d value"},{"line_number":57,"context_line":"  end"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"  def id"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_2eba606f","line":56,"in_reply_to":"9a41bdd9_fe10b8ad","updated":"2015-07-17 01:15:25.000000000","message":"Ok, removing it.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  end"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  def self.instances"},{"line_number":64,"context_line":"    list \u003d request(\u0027group\u0027, \u0027list\u0027, [\u0027--long\u0027])"},{"line_number":65,"context_line":"    list.collect do |group|"},{"line_number":66,"context_line":"      new("},{"line_number":67,"context_line":"        :name        \u003d\u003e group[:name],"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_a13d35bd","line":64,"updated":"2015-07-16 17:01:28.000000000","message":"We need to keep track of unique group names, since you can have more than one group of the same name in different domains.  See https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_tenant/openstack.rb#L71-L107","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  end"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  def self.instances"},{"line_number":64,"context_line":"    list \u003d request(\u0027group\u0027, \u0027list\u0027, [\u0027--long\u0027])"},{"line_number":65,"context_line":"    list.collect do |group|"},{"line_number":66,"context_line":"      new("},{"line_number":67,"context_line":"        :name        \u003d\u003e group[:name],"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_ce2414c8","line":64,"in_reply_to":"9a41bdd9_a13d35bd","updated":"2015-07-17 01:15:25.000000000","message":"Ok","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"      new("},{"line_number":67,"context_line":"        :name        \u003d\u003e group[:name],"},{"line_number":68,"context_line":"        :description \u003d\u003e group[:description],"},{"line_number":69,"context_line":"        :domain      \u003d\u003e group[:domain_id],"},{"line_number":70,"context_line":"        :ensure      \u003d\u003e :present,"},{"line_number":71,"context_line":"        :id          \u003d\u003e group[:id]"},{"line_number":72,"context_line":"      )"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_3e2e20a6","line":69,"updated":"2015-07-16 17:01:28.000000000","message":"Does group list return the domain name or domain id?  If it returns the domain id, you will have to use the self.domain_name_from_id() method to convert the id to a name.  You can also store the domain id in the :domain_id field, for internal use only.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"      new("},{"line_number":67,"context_line":"        :name        \u003d\u003e group[:name],"},{"line_number":68,"context_line":"        :description \u003d\u003e group[:description],"},{"line_number":69,"context_line":"        :domain      \u003d\u003e group[:domain_id],"},{"line_number":70,"context_line":"        :ensure      \u003d\u003e :present,"},{"line_number":71,"context_line":"        :id          \u003d\u003e group[:id]"},{"line_number":72,"context_line":"      )"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_ae7d10b3","line":69,"in_reply_to":"9a41bdd9_3e2e20a6","updated":"2015-07-17 01:15:25.000000000","message":"Adding the domain name makes sense.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"  end"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  def self.prefetch(resources)"},{"line_number":77,"context_line":"    groups \u003d instances"},{"line_number":78,"context_line":"    resources.keys.each do |name|"},{"line_number":79,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":80,"context_line":"        resources[name].provider \u003d provider"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_019ae1c5","line":77,"updated":"2015-07-16 17:01:28.000000000","message":"See https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_tenant/openstack.rb#L109-L125","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"  end"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  def self.prefetch(resources)"},{"line_number":77,"context_line":"    groups \u003d instances"},{"line_number":78,"context_line":"    resources.keys.each do |name|"},{"line_number":79,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":80,"context_line":"        resources[name].provider \u003d provider"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_ae02f009","line":77,"in_reply_to":"9a41bdd9_019ae1c5","updated":"2015-07-17 01:15:25.000000000","message":"group::domain then!","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    options \u003d []"},{"line_number":88,"context_line":"    if @property_flush \u0026\u0026 !@property_flush.empty?"},{"line_number":89,"context_line":"      options \u003c\u003c \"--description\u003d#{resource[:description]}\" if @property_flush[:description]"},{"line_number":90,"context_line":"      options \u003c\u003c \"--description\u003d#{resource[:domain]}\" if @property_flush[:domain]"},{"line_number":91,"context_line":"      self.class.request(\u0027group\u0027, \u0027set\u0027, [id] + options) unless options.empty?"},{"line_number":92,"context_line":"      @property_flush.clear"},{"line_number":93,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_61b5ed2f","line":90,"updated":"2015-07-16 17:01:28.000000000","message":"domain cannot be changed - you can remove this line","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    options \u003d []"},{"line_number":88,"context_line":"    if @property_flush \u0026\u0026 !@property_flush.empty?"},{"line_number":89,"context_line":"      options \u003c\u003c \"--description\u003d#{resource[:description]}\" if @property_flush[:description]"},{"line_number":90,"context_line":"      options \u003c\u003c \"--description\u003d#{resource[:domain]}\" if @property_flush[:domain]"},{"line_number":91,"context_line":"      self.class.request(\u0027group\u0027, \u0027set\u0027, [id] + options) unless options.empty?"},{"line_number":92,"context_line":"      @property_flush.clear"},{"line_number":93,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_4e624418","line":90,"in_reply_to":"9a41bdd9_61b5ed2f","updated":"2015-07-17 01:15:25.000000000","message":"Ok","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  def create"},{"line_number":19,"context_line":"    name, domain \u003d resource[:name].split(/::/)"},{"line_number":20,"context_line":"    domain \u003d self.class.default_domain_id unless domain"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    properties \u003d [name]"},{"line_number":23,"context_line":"    properties \u003c\u003c \u0027--domain\u0027 \u003c\u003c domain"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_a01d0b68","line":20,"updated":"2015-07-20 15:07:54.000000000","message":"Instead of these two lines, use the superclass utility method `self.class.name_and_domain`:\n\nhttps://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone.rb#L42\n\nexample:\n\nhttps://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_tenant/openstack.rb#L19","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  def create"},{"line_number":19,"context_line":"    name, domain \u003d resource[:name].split(/::/)"},{"line_number":20,"context_line":"    domain \u003d self.class.default_domain_id unless domain"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    properties \u003d [name]"},{"line_number":23,"context_line":"    properties \u003c\u003c \u0027--domain\u0027 \u003c\u003c domain"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_68dcb312","line":20,"in_reply_to":"3a50d1a3_a01d0b68","updated":"2015-07-21 03:46:46.000000000","message":"Yes plus the line for require \u0027puppet/provider/keystone/util\u0027","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @property_hash[:domain]"},{"line_number":51,"context_line":"  end"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  def domain"},{"line_number":54,"context_line":"    @property_hash[:domain]"},{"line_number":55,"context_line":"  end"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_2057bb03","line":53,"updated":"2015-07-20 15:07:54.000000000","message":"dup - remove","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @property_hash[:domain]"},{"line_number":51,"context_line":"  end"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"  def domain"},{"line_number":54,"context_line":"    @property_hash[:domain]"},{"line_number":55,"context_line":"  end"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_a8039b41","line":53,"in_reply_to":"3a50d1a3_2057bb03","updated":"2015-07-21 03:46:46.000000000","message":"Done","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        domain \u003d domain_name_from_id(group[:domain_id])"},{"line_number":79,"context_line":"        name \u003c\u003c \"::#{domain}\""},{"line_number":80,"context_line":"      end"},{"line_number":81,"context_line":"      group.merge!(:name \u003d\u003e name, :domain \u003d\u003e domain)"},{"line_number":82,"context_line":"    end"},{"line_number":83,"context_line":"    groups.collect do |group|"},{"line_number":84,"context_line":"      new("}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_e0955340","line":81,"updated":"2015-07-20 15:07:54.000000000","message":"This is not the same logic/algorithm that is used for users and projects.  The logic here is this:\n\nIf group is in the default domain, use the short name, else, use the long name with the `::domain`.\n\nThe logic used with users and groups is:\n\nIf the name is unique among all domains, use the short name.  If the name is not unique, use the short name for the one in the default domain, otherwise, use the long name with `::domain`.\n\nhttps://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_tenant/openstack.rb#L71\n\nThis logic allows the use of short named resources if the user knows that the resource name is unique, regardless of which domain it is in.\n\nConsider the case where you want the users in one domain and the service accounts in a separate domain e.g. \"service_domain\".  There usually will not be users named \"neutron\", \"glance\", etc.  With the logic used in keystone_user/openstack.rb self.instances, you can use the user name \"neutron\" in keystone_user and keystone_user_role resources without having to specify the name as \"neutron::service_domain\".","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        domain \u003d domain_name_from_id(group[:domain_id])"},{"line_number":79,"context_line":"        name \u003c\u003c \"::#{domain}\""},{"line_number":80,"context_line":"      end"},{"line_number":81,"context_line":"      group.merge!(:name \u003d\u003e name, :domain \u003d\u003e domain)"},{"line_number":82,"context_line":"    end"},{"line_number":83,"context_line":"    groups.collect do |group|"},{"line_number":84,"context_line":"      new("}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_89ffc1a9","line":81,"in_reply_to":"3a50d1a3_e0955340","updated":"2015-07-21 03:46:46.000000000","message":"Effectively not the same!\nDone.","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    groups \u003d instances"},{"line_number":97,"context_line":"    resources.keys.each do |name|"},{"line_number":98,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":99,"context_line":"        resources[name].provider \u003d provider"},{"line_number":100,"context_line":"      end"},{"line_number":101,"context_line":"    end"},{"line_number":102,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_40ec47c7","line":99,"updated":"2015-07-20 15:07:54.000000000","message":"You still have to compare the domains.  See https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_tenant/openstack.rb#L109","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    groups \u003d instances"},{"line_number":97,"context_line":"    resources.keys.each do |name|"},{"line_number":98,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":99,"context_line":"        resources[name].provider \u003d provider"},{"line_number":100,"context_line":"      end"},{"line_number":101,"context_line":"    end"},{"line_number":102,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_5bbe5cd5","line":99,"in_reply_to":"3a50d1a3_40ec47c7","updated":"2015-07-21 03:46:46.000000000","message":"Done too.","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"60e3e6cdc5d0c597983d395095bbcccbe026c11f","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  def users\u003d(value)"},{"line_number":89,"context_line":"    properties \u003d [\u0027--group\u0027, @property_hash[:id]]"},{"line_number":90,"context_line":"    old_users \u003d self.class.request(\u0027user\u0027, \u0027list\u0027, properties)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    new_users \u003d []"},{"line_number":93,"context_line":"    value.each do |user|"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"3a50d1a3_40386e3d","line":90,"updated":"2015-07-21 23:45:46.000000000","message":"To construct the list of old_users, you will need to use the same logic that is in keystone_user.self.instances - that is, the name of the resource will need to be the short name if unique, or if in the default domain, or will need to be the long name + \u0027::domain\u0027.  The `user list --long`command will give you the domain_id of the user.\n\nI wonder if we can reuse keystone_user.self.instances here, and pass in a `--group $groupid` parameter to the user list command . . .","commit_id":"354060943699f29bb4824da470217b60559732fd"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"60e3e6cdc5d0c597983d395095bbcccbe026c11f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    value.each do |user|"},{"line_number":94,"context_line":"      properties \u003d [user]"},{"line_number":95,"context_line":"      u \u003d self.class.request(\u0027user\u0027, \u0027show\u0027, properties)"},{"line_number":96,"context_line":"      new_users \u003c\u003c {:id \u003d\u003e u[:id], :name \u003d\u003e u[:name]}"},{"line_number":97,"context_line":"    end"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    (old_users - new_users).each { |user| user_del(user[:id]) }"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"3a50d1a3_8067564c","line":96,"updated":"2015-07-21 23:45:46.000000000","message":"This won\u0027t work either, if the user is not in the default domain, or is specified as \u0027user::domain\u0027.  Instead, you should use the puppet reflection method to get the keystone_user resource, and get the :id from it: https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_user_role/openstack.rb#L120::\n\n    user_id \u003d Puppet::Resource.indirection.find(\"Keystone_user/#{user}\")[:id]","commit_id":"354060943699f29bb4824da470217b60559732fd"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"1c81f0ba9762da602f635fee8bd03c4f2a478133","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    end"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def list"},{"line_number":44,"context_line":"      lst \u003d []"},{"line_number":45,"context_line":"      unless @list.empty?"},{"line_number":46,"context_line":"        @list.each do |element|"},{"line_number":47,"context_line":"          lst \u003c\u003c element.list"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"fa1b9901_3433b0f8","line":44,"updated":"2015-08-21 18:41:23.000000000","message":"Seems this entire method is just::\n\n    @list.collect{|elem| elem.list}\n\n?","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"6e7596f93b5d82ca529534621247322eb647ecfe","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    end"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def list"},{"line_number":44,"context_line":"      lst \u003d []"},{"line_number":45,"context_line":"      unless @list.empty?"},{"line_number":46,"context_line":"        @list.each do |element|"},{"line_number":47,"context_line":"          lst \u003c\u003c element.list"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"da20952f_0c08fed8","line":44,"in_reply_to":"fa1b9901_3433b0f8","updated":"2015-09-01 08:05:26.000000000","message":"I think you\u0027re absolutely right!","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"1c81f0ba9762da602f635fee8bd03c4f2a478133","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  end"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  def set_users(value)"},{"line_number":105,"context_line":"    old_users \u003d self.class.fetch_users_by_group(id)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    new_users \u003d []"},{"line_number":108,"context_line":"    value.each do |user|"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"fa1b9901_41bd4101","line":105,"updated":"2015-08-21 18:41:23.000000000","message":"You don\u0027t need to call fetch_users_by_group if set_users is being called from create.\n\nAlso, if this is an existing group, wouldn\u0027t you already have the list of users in each group created in self.instances?","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"6e7596f93b5d82ca529534621247322eb647ecfe","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  end"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  def set_users(value)"},{"line_number":105,"context_line":"    old_users \u003d self.class.fetch_users_by_group(id)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    new_users \u003d []"},{"line_number":108,"context_line":"    value.each do |user|"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"da20952f_c0a16795","line":105,"in_reply_to":"fa1b9901_41bd4101","updated":"2015-09-01 08:05:26.000000000","message":"Yes create doesn\u0027t need it.\n\nAs of the existing list of users, will check because the list is effectively created but to build the object users.","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"1c81f0ba9762da602f635fee8bd03c4f2a478133","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    new_users \u003d []"},{"line_number":108,"context_line":"    value.each do |user|"},{"line_number":109,"context_line":"      username, domain \u003d Util.split_domain(user)"},{"line_number":110,"context_line":"      u \u003d self.class.request(\u0027user\u0027, \u0027show\u0027, [username, \u0027--domain\u0027, domain])"},{"line_number":111,"context_line":"      new_users \u003c\u003c {:id \u003d\u003e u[:id], :name \u003d\u003e u[:name], :domain \u003d\u003e u[:domain]}"},{"line_number":112,"context_line":"    end"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":25,"id":"fa1b9901_e15b35f5","line":110,"updated":"2015-08-21 18:41:23.000000000","message":"I suggest using puppet introspection to get the user data.  The keystone_user resource must exist.  For example: https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_user_role/openstack.rb#L121\n\nUsing introspection will save fork/exec/network round trips/etc.","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"6e7596f93b5d82ca529534621247322eb647ecfe","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    new_users \u003d []"},{"line_number":108,"context_line":"    value.each do |user|"},{"line_number":109,"context_line":"      username, domain \u003d Util.split_domain(user)"},{"line_number":110,"context_line":"      u \u003d self.class.request(\u0027user\u0027, \u0027show\u0027, [username, \u0027--domain\u0027, domain])"},{"line_number":111,"context_line":"      new_users \u003c\u003c {:id \u003d\u003e u[:id], :name \u003d\u003e u[:name], :domain \u003d\u003e u[:domain]}"},{"line_number":112,"context_line":"    end"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":25,"id":"da20952f_408eb72e","line":110,"in_reply_to":"fa1b9901_e15b35f5","updated":"2015-09-01 08:05:26.000000000","message":"Thanks, although not sure about which round trips factor. Because the keystone_user resource is going to run self.instances upfront which means a \u0027request user\u0027 at some point","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"1c81f0ba9762da602f635fee8bd03c4f2a478133","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    groups \u003d instances"},{"line_number":158,"context_line":"    resources.keys.each do |name|"},{"line_number":159,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":160,"context_line":"        resources[name].provider \u003d provider"},{"line_number":161,"context_line":"      end"},{"line_number":162,"context_line":"    end"},{"line_number":163,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"fa1b9901_a1ca1d6d","line":160,"updated":"2015-08-21 18:41:23.000000000","message":"This is not sufficient.  You must match both the group name and group domain.  See https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/provider/keystone_user/openstack.rb#L256","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"6e7596f93b5d82ca529534621247322eb647ecfe","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    groups \u003d instances"},{"line_number":158,"context_line":"    resources.keys.each do |name|"},{"line_number":159,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":160,"context_line":"        resources[name].provider \u003d provider"},{"line_number":161,"context_line":"      end"},{"line_number":162,"context_line":"    end"},{"line_number":163,"context_line":"  end"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"da20952f_0028bf31","line":160,"in_reply_to":"fa1b9901_a1ca1d6d","updated":"2015-09-01 08:05:26.000000000","message":"Yes, this is unfinished work.","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    end"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    def list"},{"line_number":19,"context_line":"      { :name        \u003d\u003e \"#{@name}::#{@domain}\","},{"line_number":20,"context_line":"        :description \u003d\u003e @desc,"},{"line_number":21,"context_line":"        :id          \u003d\u003e @id,"},{"line_number":22,"context_line":"        :users       \u003d\u003e @users.list,"}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_ca6401e7","line":19,"updated":"2015-09-01 18:50:07.000000000","message":"Need to take into account the new resource naming proposal with respect to domain.","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    end"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def list"},{"line_number":34,"context_line":"      \"#{@name}::#{@domain}\""},{"line_number":35,"context_line":"    end"},{"line_number":36,"context_line":"  end"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_2a9a5dc6","line":34,"updated":"2015-09-01 18:50:07.000000000","message":"Need to take into account the new resource naming proposal with respect to domain.","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  end"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  def set_users(value)"},{"line_number":99,"context_line":"    old_users \u003d self.class.fetch_users_by_group(id)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    new_users \u003d []"},{"line_number":102,"context_line":"    value.each do |user|"}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_22b8542a","line":99,"updated":"2015-09-01 18:50:07.000000000","message":"Do not call self.class.fetch_users_by_group if being called from create.","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    new_users \u003d []"},{"line_number":102,"context_line":"    value.each do |user|"},{"line_number":103,"context_line":"      username, domain \u003d Util.split_domain(user)"},{"line_number":104,"context_line":"      u \u003d self.class.request(\u0027user\u0027, \u0027show\u0027, [username, \u0027--domain\u0027, domain])"},{"line_number":105,"context_line":"      new_users \u003c\u003c {:id \u003d\u003e u[:id], :name \u003d\u003e u[:name], :domain \u003d\u003e u[:domain]}"},{"line_number":106,"context_line":"    end"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_e2357ca8","line":104,"updated":"2015-09-01 18:50:07.000000000","message":"I suggested using introspection.  You said\n\n\u003e Thanks, although not sure about which round trips factor. Because the keystone_user resource is going to run self.instances upfront which means a \u0027request user\u0027 at some point\n\nRight.  So let keystone_user do the work, so this code doesn\u0027t have to do a redundant search.","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":150,"context_line":"  def self.prefetch(resources)"},{"line_number":151,"context_line":"    groups \u003d instances"},{"line_number":152,"context_line":"    resources.keys.each do |name|"},{"line_number":153,"context_line":"       if provider \u003d groups.find{ |group| group.name \u003d\u003d name }"},{"line_number":154,"context_line":"        resources[name].provider \u003d provider"},{"line_number":155,"context_line":"      end"},{"line_number":156,"context_line":"    end"}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_4a9f91b4","line":153,"updated":"2015-09-01 18:50:07.000000000","message":"Match needs to be domain aware","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"}],"lib/puppet/type/keystone_group.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  newproperty(:domain) do"},{"line_number":23,"context_line":"    desc \u0027Domain for group.\u0027"},{"line_number":24,"context_line":"    newvalues(nil, /\\S+/)"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"  newproperty(:id) do"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_7ef7c88c","line":24,"updated":"2015-07-16 17:01:28.000000000","message":"The domain cannot be changed - see https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/type/keystone_tenant.rb#L38","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  newproperty(:domain) do"},{"line_number":23,"context_line":"    desc \u0027Domain for group.\u0027"},{"line_number":24,"context_line":"    newvalues(nil, /\\S+/)"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"  newproperty(:id) do"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_c912ce58","line":24,"in_reply_to":"9a41bdd9_7ef7c88c","updated":"2015-07-17 01:15:25.000000000","message":"You\u0027re right it can\u0027t, at least for now.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    defaultto(\u0027\u0027)"},{"line_number":21,"context_line":"  end"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  newproperty(:domain) do"},{"line_number":24,"context_line":"    desc \u0027Domain name of the group.\u0027"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_8009ef97","line":23,"updated":"2015-07-20 15:07:54.000000000","message":"see https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/type/keystone_tenant.rb#L38","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    defaultto(\u0027\u0027)"},{"line_number":21,"context_line":"  end"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  newproperty(:domain) do"},{"line_number":24,"context_line":"    desc \u0027Domain name of the group.\u0027"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_fbe8887e","line":23,"in_reply_to":"3a50d1a3_8009ef97","updated":"2015-07-21 03:46:46.000000000","message":"Done","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    desc \u0027Domain name of the group.\u0027"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"  newproperty(:domain_id) do"},{"line_number":28,"context_line":"    desc \u0027Domain ID of the group.\u0027"},{"line_number":29,"context_line":"  end"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_80300f58","line":27,"updated":"2015-07-20 15:07:54.000000000","message":"see https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/type/keystone_tenant.rb#L38\n\nor just make it read-only as the :id parameter","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    desc \u0027Domain name of the group.\u0027"},{"line_number":25,"context_line":"  end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"  newproperty(:domain_id) do"},{"line_number":28,"context_line":"    desc \u0027Domain ID of the group.\u0027"},{"line_number":29,"context_line":"  end"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_3befd088","line":27,"in_reply_to":"3a50d1a3_80300f58","updated":"2015-07-21 03:46:46.000000000","message":"Done","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    end"},{"line_number":36,"context_line":"  end"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  #autorequire(:keystone_domain) do"},{"line_number":39,"context_line":"  #  # use the domain parameter if given"},{"line_number":40,"context_line":"  #  self[:domain]"},{"line_number":41,"context_line":"  #end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_8017afa2","line":38,"updated":"2015-07-20 15:07:54.000000000","message":"use autorequire as in https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/type/keystone_tenant.rb#L47","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    end"},{"line_number":36,"context_line":"  end"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  #autorequire(:keystone_domain) do"},{"line_number":39,"context_line":"  #  # use the domain parameter if given"},{"line_number":40,"context_line":"  #  self[:domain]"},{"line_number":41,"context_line":"  #end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_9be1449d","line":38,"in_reply_to":"3a50d1a3_8017afa2","updated":"2015-07-21 03:46:46.000000000","message":"Done","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"ceeddcbe28256175c8b3bd6f1102c7c3e0255589","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  end"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"  autorequire(:keystone_domain) do"},{"line_number":49,"context_line":"    self[:domain]"},{"line_number":50,"context_line":"  end"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  # This ensures the service is started and therefore the keystone"}],"source_content_type":"text/x-ruby","patch_set":4,"id":"3a50d1a3_be274e11","line":49,"updated":"2015-07-21 03:13:49.000000000","message":"This doesn\u0027t work if the domain is specified in the name with \"::domain\".\n\nWhy not just copy https://github.com/openstack/puppet-keystone/blob/master/lib/puppet/type/keystone_tenant.rb#L47 ?","commit_id":"976a8b65deb47db30daa150bf048d122393814da"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"d86e4f5ec88f86a1a2df8a8c7d6d56d9efd077bf","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  end"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"  autorequire(:keystone_domain) do"},{"line_number":49,"context_line":"    self[:domain]"},{"line_number":50,"context_line":"  end"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  # This ensures the service is started and therefore the keystone"}],"source_content_type":"text/x-ruby","patch_set":4,"id":"3a50d1a3_11b433cf","line":49,"in_reply_to":"3a50d1a3_be274e11","updated":"2015-07-21 03:48:40.000000000","message":"Done","commit_id":"976a8b65deb47db30daa150bf048d122393814da"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"60e3e6cdc5d0c597983d395095bbcccbe026c11f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  autorequire(:keystone_domain) do"},{"line_number":61,"context_line":"    self[:domain] || Util.split_domain(self[:name])[1]"},{"line_number":62,"context_line":"  end"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  # This ensures the service is started and therefore the keystone"},{"line_number":65,"context_line":"  # config is configured IF we need them for authentication."},{"line_number":66,"context_line":"  # If there is no keystone config, authentication credentials"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"3a50d1a3_e0565a5b","line":63,"updated":"2015-07-21 23:45:46.000000000","message":"Need to have an autorequire(:keystone_user) for the self[:users]","commit_id":"354060943699f29bb4824da470217b60559732fd"},{"author":{"_account_id":3153,"name":"Emilien Macchi","email":"emilien@redhat.com","username":"emilienm"},"change_message_id":"833ec214d199d8f5ba5ef80670bfe198562d7607","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  # If there is no keystone config, authentication credentials"},{"line_number":67,"context_line":"  # need to come from another source."},{"line_number":68,"context_line":"  autorequire(:anchor) do"},{"line_number":69,"context_line":"    [\u0027keystone_started\u0027]"},{"line_number":70,"context_line":"  end"},{"line_number":71,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"3a50d1a3_7d2e3a8d","line":69,"updated":"2015-07-28 19:38:58.000000000","message":"we probably miss \u0027default_domain_created\u0027 anchor.","commit_id":"354060943699f29bb4824da470217b60559732fd"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"ed7dc9a6e464123b627f2de88cdcddec7d0d9ae3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  # If there is no keystone config, authentication credentials"},{"line_number":67,"context_line":"  # need to come from another source."},{"line_number":68,"context_line":"  autorequire(:anchor) do"},{"line_number":69,"context_line":"    [\u0027keystone_started\u0027]"},{"line_number":70,"context_line":"  end"},{"line_number":71,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"3a50d1a3_ba8f612d","line":69,"in_reply_to":"3a50d1a3_7d2e3a8d","updated":"2015-07-31 07:02:30.000000000","message":"Done","commit_id":"354060943699f29bb4824da470217b60559732fd"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    desc \u0027ID of the group. Read-only property\u0027"},{"line_number":36,"context_line":"    validate do |v|"},{"line_number":37,"context_line":"      raise(Puppet::Error, \u0027This is a read only property\u0027)"},{"line_number":38,"context_line":"    end"},{"line_number":39,"context_line":"  end"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  autorequire(:keystone_user) do"}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_8ae36933","line":38,"updated":"2015-09-01 18:50:07.000000000","message":"There is no domain property?  All of the domain scoped resources should have a domain property.","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"d76c43e9c8cf13453c6bcd5237f31783754b74a6","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # Ongoing deprecation warning ending after Mitaka"},{"line_number":50,"context_line":"    # http://specs.openstack.org/openstack/puppet-openstack-specs/specs/kilo/api-v3-support.html"},{"line_number":51,"context_line":"    unless self.class::ProviderOpenstack.domain_check?(domain_name)"},{"line_number":52,"context_line":"      warning(\"In Liberty, not providing a domain name (::domain) for a resource name (#{self[:name]}) is deprecated when the default_domain_id is not \u0027default\u0027 \")"},{"line_number":53,"context_line":"    end"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":27,"id":"da20952f_4aed5124","line":51,"updated":"2015-09-01 18:50:07.000000000","message":"Warning message should come from domain_check?.  Parameter should be self[:name].","commit_id":"6eed515c4bd69043e75b4b58e4b8c04a8ae81016"}],"spec/unit/provider/keystone_group/openstack_spec.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        :name        \u003d\u003e \u0027group_test\u0027,"},{"line_number":21,"context_line":"        :ensure      \u003d\u003e \u0027present\u0027,"},{"line_number":22,"context_line":"        :description \u003d\u003e \u0027Testing group\u0027,"},{"line_number":23,"context_line":"        :domain      \u003d\u003e \u0027domain_test\u0027,"},{"line_number":24,"context_line":"      }"},{"line_number":25,"context_line":"    end"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_411f89b7","line":23,"updated":"2015-07-16 17:01:28.000000000","message":"This should be a domain name","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        :name        \u003d\u003e \u0027group_test\u0027,"},{"line_number":21,"context_line":"        :ensure      \u003d\u003e \u0027present\u0027,"},{"line_number":22,"context_line":"        :description \u003d\u003e \u0027Testing group\u0027,"},{"line_number":23,"context_line":"        :domain      \u003d\u003e \u0027domain_test\u0027,"},{"line_number":24,"context_line":"      }"},{"line_number":25,"context_line":"    end"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_091f565c","line":23,"in_reply_to":"9a41bdd9_411f89b7","updated":"2015-07-17 01:15:25.000000000","message":"This is actually a domain id, but I\u0027m adding the domain name too.","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    it_behaves_like \u0027authenticated with environment variables\u0027 do"},{"line_number":36,"context_line":"      describe \u0027#create\u0027 do"},{"line_number":37,"context_line":"        it \u0027creates a group\u0027 do"},{"line_number":38,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":39,"context_line":"                        .with(\u0027group\u0027, \u0027list\u0027, \u0027--quiet\u0027, \u0027--format\u0027, \u0027csv\u0027, [\u0027--long\u0027])"},{"line_number":40,"context_line":"                        .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\""},{"line_number":41,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_61516dd8","line":38,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                        .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\""},{"line_number":41,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""},{"line_number":42,"context_line":"\u0027)"},{"line_number":43,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":44,"context_line":"                        .with(\u0027group\u0027, \u0027create\u0027, \u0027--format\u0027, \u0027shell\u0027, [\u0027group_test\u0027, \u0027--domain\u0027, \u0027domain_test\u0027, \u0027--description\u0027, \u0027Testing group\u0027])"},{"line_number":45,"context_line":"                        .returns(\u0027description\u003d\"Testing group\""},{"line_number":46,"context_line":"domain_id\u003d\"domain_test\""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_a16e9594","line":43,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"      describe \u0027#instances\u0027 do"},{"line_number":59,"context_line":"        it \u0027finds every group\u0027 do"},{"line_number":60,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":61,"context_line":"                        .with(\u0027group\u0027, \u0027list\u0027, \u0027--quiet\u0027, \u0027--format\u0027, \u0027csv\u0027, [\u0027--long\u0027])"},{"line_number":62,"context_line":"                        .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\""},{"line_number":63,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_010421c4","line":60,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"      describe \u0027#destroy\u0027 do"},{"line_number":71,"context_line":"        it \u0027destroys a group\u0027 do"},{"line_number":72,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":73,"context_line":"                        .with(\u0027group\u0027, \u0027list\u0027, \u0027--quiet\u0027, \u0027--format\u0027, \u0027csv\u0027, [\u0027--long\u0027])"},{"line_number":74,"context_line":"                        .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\""},{"line_number":75,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_81f831c6","line":72,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                        .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\""},{"line_number":75,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""},{"line_number":76,"context_line":"\u0027)"},{"line_number":77,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":78,"context_line":"                        .with(\u0027group\u0027, \u0027delete\u0027, [])"},{"line_number":79,"context_line":"          provider.destroy"},{"line_number":80,"context_line":"          expect(provider.exists?).to be_falsey"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_81f7d18b","line":77,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""},{"line_number":76,"context_line":"\u0027)"},{"line_number":77,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":78,"context_line":"                        .with(\u0027group\u0027, \u0027delete\u0027, [])"},{"line_number":79,"context_line":"          provider.destroy"},{"line_number":80,"context_line":"          expect(provider.exists?).to be_falsey"},{"line_number":81,"context_line":"        end"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_c1fcf974","line":78,"updated":"2015-07-16 17:01:28.000000000","message":"Use something like this: https://github.com/openstack/puppet-keystone/blob/master/spec/unit/provider/keystone_tenant/openstack_spec.rb#L91\n\nto set and delete an actual id","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"a5ec8d33058c8c7da65b5b302cde934043a353e6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"\"d9b4956792454d92ba20a7c5b0457344\",\"group_test\",\"domain_test\",\"Testing group\""},{"line_number":76,"context_line":"\u0027)"},{"line_number":77,"context_line":"          provider.class.stubs(:openstack)"},{"line_number":78,"context_line":"                        .with(\u0027group\u0027, \u0027delete\u0027, [])"},{"line_number":79,"context_line":"          provider.destroy"},{"line_number":80,"context_line":"          expect(provider.exists?).to be_falsey"},{"line_number":81,"context_line":"        end"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_699f02b5","line":78,"in_reply_to":"9a41bdd9_c1fcf974","updated":"2015-07-17 01:15:25.000000000","message":"Good idea!","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"29966dd4e7ae80032b4c439b249471a9b7ce43c0","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        context \u0027when group does not exist\u0027 do"},{"line_number":84,"context_line":"          subject(:response) do"},{"line_number":85,"context_line":"            provider.class.stubs(:openstack)"},{"line_number":86,"context_line":"                          .with(\u0027group\u0027, \u0027list\u0027, \u0027--quiet\u0027, \u0027--format\u0027, \u0027csv\u0027, [\u0027--long\u0027])"},{"line_number":87,"context_line":"                          .returns(\u0027\"ID\",\"Name\",\"Domain ID\",\"Description\"\u0027)"},{"line_number":88,"context_line":"            response \u003d provider.exists?"}],"source_content_type":"text/x-ruby","patch_set":2,"id":"9a41bdd9_410229b6","line":85,"updated":"2015-07-16 17:01:28.000000000","message":"use expects not stubs","commit_id":"46f96cfddb3636b7a0eaa23ad33971ec6174fa34"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"1c81f0ba9762da602f635fee8bd03c4f2a478133","unresolved":false,"context_lines":[{"line_number":87,"context_line":"\"hash_id_4\",\"group_2\",\"domain_2_id\",\"Testing group 3\""},{"line_number":88,"context_line":"\u0027)"},{"line_number":89,"context_line":"          instances \u003d provider.class.instances"},{"line_number":90,"context_line":"          expect(instances[0].name).to eq(\u0027group_1::Default\u0027)"},{"line_number":91,"context_line":"          expect(instances[1].name).to eq(\u0027group_2::domain_2\u0027)"},{"line_number":92,"context_line":"        end"},{"line_number":93,"context_line":"      end"}],"source_content_type":"text/x-ruby","patch_set":25,"id":"fa1b9901_e1b335e8","line":90,"updated":"2015-08-21 18:41:23.000000000","message":"If we decide to go the route of always having the ::domain in the name, then yes, this will work.","commit_id":"41fa52e00a862eb8e8d5b79607d36a0b680d4ea0"}],"spec/unit/type/keystone_group_spec.rb":[{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"9769332a96770d74985d333c06ac4de5c2853515","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      Puppet::Type.type(:keystone_endpoint).new(:name \u003d\u003e \u0027\u0027)"},{"line_number":10,"context_line":"    end.to raise_error(Puppet::Error, /Invalid value/)"},{"line_number":11,"context_line":"  end"},{"line_number":12,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_80c1efe6","line":12,"updated":"2015-07-20 15:07:54.000000000","message":"should have a test for domain https://github.com/openstack/puppet-keystone/blob/master/spec/unit/type/keystone_tenant_spec.rb and possibly domain_id as well depending on how you implement it","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"},{"author":{"_account_id":6525,"name":"Gilles Dubreuil","email":"gilles@redhat.com","username":"q-1illes-a"},"change_message_id":"9585e958f8d4edda1e3002a333a080a5a4188f57","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      Puppet::Type.type(:keystone_endpoint).new(:name \u003d\u003e \u0027\u0027)"},{"line_number":10,"context_line":"    end.to raise_error(Puppet::Error, /Invalid value/)"},{"line_number":11,"context_line":"  end"},{"line_number":12,"context_line":"end"}],"source_content_type":"text/x-ruby","patch_set":3,"id":"3a50d1a3_7b07981c","line":12,"in_reply_to":"3a50d1a3_80c1efe6","updated":"2015-07-21 03:46:46.000000000","message":"Done","commit_id":"2b38bc975f896671fec782be8e7c8e5622d087c9"}]}
