]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/spec/acceptance/basic_keystone_spec.rb
Update to Kilo
[dsa-puppet.git] / 3rdparty / modules / keystone / spec / acceptance / basic_keystone_spec.rb
1 require 'spec_helper_acceptance'
2
3 describe 'basic keystone server with resources' do
4
5   context 'default parameters' do
6
7     it 'should work with no errors' do
8       pp= <<-EOS
9       Exec { logoutput => 'on_failure' }
10
11       # Common resources
12       case $::osfamily {
13         'Debian': {
14           include ::apt
15           class { '::openstack_extras::repo::debian::ubuntu':
16             release => 'kilo',
17             package_require => true,
18           }
19         }
20         'RedHat': {
21           class { '::openstack_extras::repo::redhat::redhat':
22             release => 'kilo',
23           }
24           package { 'openstack-selinux': ensure => 'latest' }
25         }
26         default: {
27           fail("Unsupported osfamily (${::osfamily})")
28         }
29       }
30
31       class { '::mysql::server': }
32
33       # Keystone resources
34       class { '::keystone::client': }
35       class { '::keystone::cron::token_flush': }
36       class { '::keystone::db::mysql':
37         password => 'keystone',
38       }
39       class { '::keystone':
40         verbose             => true,
41         debug               => true,
42         database_connection => 'mysql://keystone:keystone@127.0.0.1/keystone',
43         admin_token         => 'admin_token',
44         enabled             => true,
45       }
46       # "v2" admin and service
47       class { '::keystone::roles::admin':
48         email                  => 'test@example.tld',
49         password               => 'a_big_secret',
50       }
51       class { '::keystone::endpoint':
52         public_url     => "http://127.0.0.1:5000/",
53         admin_url      => "http://127.0.0.1:35357/",
54         default_domain => 'admin',
55       }
56       ::keystone::resource::service_identity { 'beaker-ci':
57         service_type        => 'beaker',
58         service_description => 'beaker service',
59         service_name        => 'beaker',
60         password            => 'secret',
61         public_url          => 'http://127.0.0.1:1234',
62         admin_url           => 'http://127.0.0.1:1234',
63         internal_url        => 'http://127.0.0.1:1234',
64       }
65       # v3 admin
66       # we don't use ::keystone::roles::admin but still create resources manually:
67       keystone_domain { 'admin_domain':
68         ensure      => present,
69         enabled     => true,
70         description => 'Domain for admin v3 users',
71       }
72       keystone_domain { 'service_domain':
73         ensure      => present,
74         enabled     => true,
75         description => 'Domain for admin v3 users',
76       }
77       keystone_tenant { 'servicesv3':
78         ensure      => present,
79         enabled     => true,
80         description => 'Tenant for the openstack services',
81         domain      => 'service_domain',
82       }
83       keystone_tenant { 'openstackv3':
84         ensure      => present,
85         enabled     => true,
86         description => 'admin tenant',
87         domain      => 'admin_domain',
88       }
89       keystone_user { 'adminv3':
90         ensure      => present,
91         enabled     => true,
92         tenant      => 'openstackv3', # note: don't have to use 'openstackv3::admin_domain' here since the tenant name 'openstackv3' is unique among all domains
93         email       => 'test@example.tld',
94         password    => 'a_big_secret',
95         domain      => 'admin_domain',
96       }
97       keystone_user_role { 'adminv3@openstackv3':
98         ensure => present,
99         roles  => ['admin'],
100       }
101       # service user exists only in the service_domain - must
102       # use v3 api
103       ::keystone::resource::service_identity { 'beaker-civ3':
104         service_type        => 'beakerv3',
105         service_description => 'beakerv3 service',
106         service_name        => 'beakerv3',
107         password            => 'secret',
108         tenant              => 'servicesv3',
109         public_url          => 'http://127.0.0.1:1234/v3',
110         admin_url           => 'http://127.0.0.1:1234/v3',
111         internal_url        => 'http://127.0.0.1:1234/v3',
112         user_domain         => 'service_domain',
113         project_domain      => 'service_domain',
114       }
115       EOS
116
117
118       # Run it twice and test for idempotency
119       apply_manifest(pp, :catch_failures => true)
120       apply_manifest(pp, :catch_changes => true)
121     end
122
123     describe port(5000) do
124       it { is_expected.to be_listening.with('tcp') }
125     end
126
127     describe port(35357) do
128       it { is_expected.to be_listening.with('tcp') }
129     end
130
131     describe cron do
132       it { should have_entry('1 0 * * * keystone-manage token_flush >>/var/log/keystone/keystone-tokenflush.log 2>&1').with_user('keystone') }
133     end
134
135     shared_examples_for 'keystone user/tenant/service/role/endpoint resources using v2 API' do |auth_creds|
136       it 'should find users in the default domain' do
137         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v2.0 --os-identity-api-version 2 user list") do |r|
138           expect(r.stdout).to match(/admin/)
139           expect(r.stderr).to be_empty
140         end
141       end
142       it 'should find tenants in the default domain' do
143         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v2.0 --os-identity-api-version 2 project list") do |r|
144           expect(r.stdout).to match(/openstack/)
145           expect(r.stderr).to be_empty
146         end
147       end
148       it 'should find beaker service' do
149         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v2.0 --os-identity-api-version 2 service list") do |r|
150           expect(r.stdout).to match(/beaker/)
151           expect(r.stderr).to be_empty
152         end
153       end
154       it 'should find admin role' do
155         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v2.0 --os-identity-api-version 2 role list") do |r|
156           expect(r.stdout).to match(/admin/)
157           expect(r.stderr).to be_empty
158         end
159       end
160       it 'should find beaker endpoints' do
161         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v2.0 --os-identity-api-version 2 endpoint list --long") do |r|
162           expect(r.stdout).to match(/1234/)
163           expect(r.stderr).to be_empty
164         end
165       end
166     end
167     shared_examples_for 'keystone user/tenant/service/role/endpoint resources using v3 API' do |auth_creds|
168       it 'should find beaker user' do
169         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v3 --os-identity-api-version 3 user list") do |r|
170           expect(r.stdout).to match(/beaker/)
171           expect(r.stderr).to be_empty
172         end
173       end
174       it 'should find services tenant' do
175         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v3 --os-identity-api-version 3 project list") do |r|
176           expect(r.stdout).to match(/services/)
177           expect(r.stderr).to be_empty
178         end
179       end
180       it 'should find beaker service' do
181         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v3 --os-identity-api-version 3 service list") do |r|
182           expect(r.stdout).to match(/beaker/)
183           expect(r.stderr).to be_empty
184         end
185       end
186       it 'should find admin role' do
187         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v3 --os-identity-api-version 3 role list") do |r|
188           expect(r.stdout).to match(/admin/)
189           expect(r.stderr).to be_empty
190         end
191       end
192       it 'should find beaker endpoints' do
193         shell("openstack #{auth_creds} --os-auth-url http://127.0.0.1:5000/v3 --os-identity-api-version 3 endpoint list") do |r|
194           expect(r.stdout).to match(/1234/)
195           expect(r.stderr).to be_empty
196         end
197       end
198     end
199     describe 'with v2 admin with v2 credentials' do
200       include_examples 'keystone user/tenant/service/role/endpoint resources using v2 API',
201                        '--os-username admin --os-password a_big_secret --os-project-name openstack'
202     end
203     describe 'with v2 service with v2 credentials' do
204       include_examples 'keystone user/tenant/service/role/endpoint resources using v2 API',
205                        '--os-username beaker-ci --os-password secret --os-project-name services'
206     end
207     describe 'with v2 admin with v3 credentials' do
208       include_examples 'keystone user/tenant/service/role/endpoint resources using v3 API',
209                        '--os-username admin --os-password a_big_secret --os-project-name openstack --os-user-domain-name Default --os-project-domain-name Default'
210     end
211     describe "with v2 service with v3 credentials" do
212       include_examples 'keystone user/tenant/service/role/endpoint resources using v3 API',
213                        '--os-username beaker-ci --os-password secret --os-project-name services --os-user-domain-name Default --os-project-domain-name Default'
214     end
215     describe 'with v3 admin with v3 credentials' do
216       include_examples 'keystone user/tenant/service/role/endpoint resources using v3 API',
217                        '--os-username adminv3 --os-password a_big_secret --os-project-name openstackv3 --os-user-domain-name admin_domain --os-project-domain-name admin_domain'
218     end
219     describe "with v3 service with v3 credentials" do
220       include_examples 'keystone user/tenant/service/role/endpoint resources using v3 API',
221                        '--os-username beaker-civ3 --os-password secret --os-project-name servicesv3 --os-user-domain-name service_domain --os-project-domain-name service_domain'
222     end
223
224   end
225 end