+ it_behaves_like 'authenticated with environment variables' do
+ describe 'v3 domains with no domain in resource', :nohooks => true do
+ let(:user_attrs) do
+ {
+ :name => 'foo',
+ :ensure => 'present',
+ :enabled => 'True',
+ :password => 'foo',
+ :tenant => 'foo',
+ :email => 'foo@example.com',
+ }
+ end
+
+ it 'adds default domain to commands' do
+ provider_class.class_exec {
+ @default_domain_id = nil
+ }
+ mock = {
+ 'identity' => {'default_domain_id' => 'foo_domain_id'}
+ }
+ Puppet::Util::IniConfig::File.expects(:new).returns(mock)
+ File.expects(:exists?).with('/etc/keystone/keystone.conf').returns(true)
+ mock.expects(:read).with('/etc/keystone/keystone.conf')
+ provider.class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', ['--user', '1cb05cfed7c24279be884ba4f6520262', '--long'])
+ .returns('"ID","Name"
+')
+ project_class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', '--long')
+ .returns('"ID","Name","Domain ID","Description","Enabled"
+"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
+"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
+')
+ provider.class.expects(:openstack)
+ .with('role', 'show', '--format', 'shell', '_member_')
+ .returns('
+name="_member_"
+')
+ provider.class.expects(:openstack)
+ .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '1cb05cfed7c24279be884ba4f6520262'])
+ provider.class.expects(:openstack)
+ .with('user', 'create', '--format', 'shell', ['foo', '--enable', '--password', 'foo', '--email', 'foo@example.com', '--domain', 'foo_domain'])
+ .returns('email="foo@example.com"
+enabled="True"
+id="1cb05cfed7c24279be884ba4f6520262"
+name="foo"
+username="foo"
+')
+ provider.create
+ expect(provider.exists?).to be_truthy
+ expect(provider.id).to eq("1cb05cfed7c24279be884ba4f6520262")
+ end
+ end
+
+ describe 'v3 domains with domain in resource' do
+ let(:user_attrs) do
+ {
+ :name => 'foo',
+ :ensure => 'present',
+ :enabled => 'True',
+ :password => 'foo',
+ :tenant => 'foo',
+ :email => 'foo@example.com',
+ :domain => 'bar_domain',
+ }
+ end
+
+ it 'uses given domain in commands' do
+ project_class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', '--long')
+ .returns('"ID","Name","Domain ID","Description","Enabled"
+"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
+"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
+')
+ provider.class.expects(:openstack)
+ .with('role', 'show', '--format', 'shell', '_member_')
+ .returns('
+name="_member_"
+')
+ provider.class.expects(:openstack)
+ .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
+ provider.class.expects(:openstack)
+ .with('user', 'create', '--format', 'shell', ['foo', '--enable', '--password', 'foo', '--email', 'foo@example.com', '--domain', 'bar_domain'])
+ .returns('email="foo@example.com"
+enabled="True"
+id="2cb05cfed7c24279be884ba4f6520262"
+name="foo"
+username="foo"
+')
+ provider.create
+ expect(provider.exists?).to be_truthy
+ expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
+ end
+ end
+
+ describe 'v3 domains with domain in name/title' do
+ let(:user_attrs) do
+ {
+ :name => 'foo::bar_domain',
+ :ensure => 'present',
+ :enabled => 'True',
+ :password => 'foo',
+ :tenant => 'foo',
+ :email => 'foo@example.com',
+ }
+ end
+
+ it 'uses given domain in commands' do
+ project_class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', '--long')
+ .returns('"ID","Name","Domain ID","Description","Enabled"
+"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
+"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
+')
+ provider.class.expects(:openstack)
+ .with('role', 'show', '--format', 'shell', '_member_')
+ .returns('
+name="_member_"
+')
+ provider.class.expects(:openstack)
+ .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
+ provider.class.expects(:openstack)
+ .with('user', 'create', '--format', 'shell', ['foo', '--enable', '--password', 'foo', '--email', 'foo@example.com', '--domain', 'bar_domain'])
+ .returns('email="foo@example.com"
+enabled="True"
+id="2cb05cfed7c24279be884ba4f6520262"
+name="foo"
+username="foo"
+')
+ provider.create
+ expect(provider.exists?).to be_truthy
+ expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
+ end
+ end
+
+ describe 'v3 domains with domain in name/title and in resource' do
+ let(:user_attrs) do
+ {
+ :name => 'foo::bar_domain',
+ :ensure => 'present',
+ :enabled => 'True',
+ :password => 'foo',
+ :tenant => 'foo',
+ :email => 'foo@example.com',
+ :domain => 'foo_domain',
+ }
+ end
+
+ it 'uses the resource domain in commands' do
+ project_class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', '--long')
+ .returns('"ID","Name","Domain ID","Description","Enabled"
+"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
+"2cb05cfed7c24279be884ba4f6520262","bar","bar_domain_id","bar",True
+')
+ provider.class.expects(:openstack)
+ .with('role', 'show', '--format', 'shell', '_member_')
+ .returns('
+name="_member_"
+')
+ provider.class.expects(:openstack)
+ .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
+ provider.class.expects(:openstack)
+ .with('user', 'create', '--format', 'shell', ['foo', '--enable', '--password', 'foo', '--email', 'foo@example.com', '--domain', 'foo_domain'])
+ .returns('email="foo@example.com"
+enabled="True"
+id="2cb05cfed7c24279be884ba4f6520262"
+name="foo"
+username="foo"
+')
+ provider.create
+ expect(provider.exists?).to be_truthy
+ expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
+ end
+ end
+
+ describe 'v3 domains with domain in name/title and in resource and in tenant' do
+ let(:user_attrs) do
+ {
+ :name => 'foo::bar_domain',
+ :ensure => 'present',
+ :enabled => 'True',
+ :password => 'foo',
+ :tenant => 'foo::foo_domain',
+ :email => 'foo@example.com',
+ :domain => 'foo_domain',
+ }
+ end
+
+ it 'uses the resource domain in commands' do
+ project_class.expects(:openstack)
+ .with('project', 'list', '--quiet', '--format', 'csv', '--long')
+ .returns('"ID","Name","Domain ID","Description","Enabled"
+"1cb05cfed7c24279be884ba4f6520262","foo","foo_domain_id","foo",True
+"2cb05cfed7c24279be884ba4f6520262","foo","bar_domain_id","foo",True
+')
+ provider.class.expects(:openstack)
+ .with('role', 'show', '--format', 'shell', '_member_')
+ .returns('
+name="_member_"
+')
+ provider.class.expects(:openstack)
+ .with('role', 'add', ['_member_', '--project', '1cb05cfed7c24279be884ba4f6520262', '--user', '2cb05cfed7c24279be884ba4f6520262'])
+ provider.class.expects(:openstack)
+ .with('user', 'create', '--format', 'shell', ['foo', '--enable', '--password', 'foo', '--email', 'foo@example.com', '--domain', 'foo_domain'])
+ .returns('email="foo@example.com"
+enabled="True"
+id="2cb05cfed7c24279be884ba4f6520262"
+name="foo"
+username="foo"
+')
+ provider.create
+ expect(provider.exists?).to be_truthy
+ expect(provider.id).to eq("2cb05cfed7c24279be884ba4f6520262")
+ end
+ end