Puppet module to provide a translation checksite
Install DevStack and refresh the installation daily Sync translation files from Zanata Branches are to configure, see README.md and init.pp for details Requires puppetlabs-vcsrepo Requires zanata-cli and API-Key Working basis: https://etherpad.openstack.org/p/i18n-mitaka-virtualsprint Change-Id: I6b9a7fb2dfcdc2d7178cd149352e585ca7d3c7cc Co-Authored-By: Ying Chun Guo <guoyingc@cn.ibm.com> Co-Authored-By: KATO Tomoyuki <kato.tomoyuki@jp.fujitsu.com> Co-Authored-By: Ian Y. Choi <ianyrchoi@gmail.com> Co-Authored-By: Akihiro Motoki <amotoki@gmail.com>
This commit is contained in:
parent
d9ad42b4b3
commit
a42f130aac
30
Gemfile
Normal file
30
Gemfile
Normal file
@ -0,0 +1,30 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
group :development, :test do
|
||||
gem 'puppetlabs_spec_helper', :require => false
|
||||
|
||||
gem 'metadata-json-lint'
|
||||
# This is nice and all, but let's not worry about it until we've actually
|
||||
# got puppet 4.x sorted
|
||||
# gem 'puppet-lint-param-docs'
|
||||
gem 'puppet-lint-absolute_classname-check'
|
||||
gem 'puppet-lint-absolute_template_path'
|
||||
gem 'puppet-lint-trailing_newline-check'
|
||||
|
||||
# Puppet 4.x related lint checks
|
||||
gem 'puppet-lint-unquoted_string-check'
|
||||
gem 'puppet-lint-empty_string-check'
|
||||
gem 'puppet-lint-leading_zero-check'
|
||||
gem 'puppet-lint-variable_contains_upcase'
|
||||
gem 'puppet-lint-spaceship_operator_without_tag-check'
|
||||
gem 'puppet-lint-undef_in_function-check'
|
||||
|
||||
if puppetversion = ENV['PUPPET_GEM_VERSION']
|
||||
gem 'puppet', puppetversion, :require => false
|
||||
else
|
||||
gem 'puppet', '~> 3.0', :require => false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# vim:ft=ruby
|
201
LICENSE
Normal file
201
LICENSE
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
81
README.md
Normal file
81
README.md
Normal file
@ -0,0 +1,81 @@
|
||||
Translation_checksite for testing translations against DevStack
|
||||
===============================================================
|
||||
|
||||
This puppet module provides environment for check translation in OpenStack
|
||||
|
||||
Features
|
||||
--------
|
||||
- Install and Configure DevStack
|
||||
- Install Cron for Zanata Sync
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
For usage devstack git repo:
|
||||
|
||||
https://git.openstack.org/cgit/openstack-infra/puppet-vcsrepo/
|
||||
|
||||
For installing Zanata Client:
|
||||
|
||||
https://github.com/puppetlabs/puppetlabs-java_ks.git
|
||||
|
||||
https://git.openstack.org/openstack-infra/puppet-zanata/
|
||||
|
||||
|
||||
Prerequisites for installing Zanata CLI
|
||||
---------------------------------------
|
||||
|
||||
class {'zanata::client':
|
||||
version => '1.2.3',
|
||||
user => 'stack',
|
||||
group => 'stack',
|
||||
server => 'openstack',
|
||||
server_url => 'https://zanata.example.org:443',
|
||||
server_user => 'user',
|
||||
server_api_key => '12345',
|
||||
homedir => '/home/stack/',
|
||||
}
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Install DevStack without any plugins:
|
||||
|
||||
class {'translation_checksite':
|
||||
minimal => 1, # no extra plugins loaded
|
||||
server_url => 'https://zanata.example.org:443', # from where to fetch translation files
|
||||
revision => 'master', # used branch in DevStack Repo
|
||||
project_version => 'master', # used version in Zanata Project
|
||||
}
|
||||
|
||||
Install DevStack with parameter:
|
||||
|
||||
class {'translation_checksite':
|
||||
zanata_cli => '/opt/zanata/zanata-cli-3.8.1/bin/zanata-cli',
|
||||
server_url => 'https://zanata.example.org:443',
|
||||
devstack_dir => '/home/stack/devstack',
|
||||
stack_user => 'stack',
|
||||
revision => 'master',
|
||||
project_version => 'master',
|
||||
admin_password => '12345678',
|
||||
database_password => '12121212',
|
||||
rabbit_password => '34343434',
|
||||
service_password => '56565656',
|
||||
service_token => '78787878787878',
|
||||
swift_hash => '78787878787878',
|
||||
sync_hour => 18,
|
||||
sync_minute => 30,
|
||||
restack => 1, # refresh DevStack installation
|
||||
restack_hour => 18,
|
||||
restack_minute => 00,
|
||||
}
|
||||
|
||||
Deinstall DevStack:
|
||||
|
||||
class {'translation_checksite':
|
||||
devstack_dir => '/home/stack/devstack',
|
||||
stack_user => 'stack',
|
||||
shutdown => 1, # this stops DevStack and deletes the installation
|
||||
}
|
||||
|
||||
Note: Developed for Ubuntu 14.04 LTS
|
8
Rakefile
Normal file
8
Rakefile
Normal file
@ -0,0 +1,8 @@
|
||||
require 'rubygems'
|
||||
require 'puppetlabs_spec_helper/rake_tasks'
|
||||
require 'puppet-lint/tasks/puppet-lint'
|
||||
PuppetLint.configuration.fail_on_warnings = true
|
||||
PuppetLint.configuration.send('disable_80chars')
|
||||
PuppetLint.configuration.send('disable_autoloader_layout')
|
||||
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
|
||||
PuppetLint.configuration.send('disable_class_parameter_defaults')
|
45
files/update-lang-list.py
Normal file
45
files/update-lang-list.py
Normal file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import pprint
|
||||
import os
|
||||
|
||||
from django.conf.locale import LANG_INFO
|
||||
from django.utils import translation
|
||||
|
||||
|
||||
def get_django_lang_name(code, all_codes):
|
||||
code = code.lower().replace('_', '-')
|
||||
code_orig = code
|
||||
lang_info = LANG_INFO.get(code)
|
||||
if not lang_info:
|
||||
code = code.split('-', 1)[0]
|
||||
if code not in all_codes:
|
||||
lang_info = LANG_INFO.get(code)
|
||||
if lang_info:
|
||||
return code, lang_info['name']
|
||||
else:
|
||||
return code_orig, code_orig
|
||||
|
||||
|
||||
HORIZON_DIR = '/opt/stack/horizon'
|
||||
|
||||
langs_horizon = os.listdir(os.path.join(HORIZON_DIR, 'horizon', 'locale'))
|
||||
langs_dashboard = os.listdir(os.path.join(HORIZON_DIR, 'openstack_dashboard', 'locale'))
|
||||
# Pick up languages with both horizon and openstack_dashboard translations
|
||||
langs = set(langs_horizon) & set(langs_dashboard)
|
||||
|
||||
lang_list = [get_django_lang_name(l, langs) for l in sorted(langs)]
|
||||
print 'LANGUAGES = ',
|
||||
pprint.pprint(tuple(lang_list))
|
240
manifests/init.pp
Normal file
240
manifests/init.pp
Normal file
@ -0,0 +1,240 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# == Class: translation_checksite
|
||||
#
|
||||
# Maintaining environment for translation checksite
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# === Variables
|
||||
#
|
||||
# [*devstack_dir*]
|
||||
# Destination of DevStack installation
|
||||
#
|
||||
# [*is_minimal*]
|
||||
# Bolean for minimal DevStack installation with default configuration
|
||||
#
|
||||
# [*zanata_cli*]
|
||||
# Location of Zanata Client
|
||||
#
|
||||
# [*stack_user*]
|
||||
# Unix user of DevStack installation
|
||||
# needs sudo rights without password
|
||||
#
|
||||
# [*revision*]
|
||||
# used branch (check https://git.opentsack.org/openstack-dev/devstack.git
|
||||
# for available branches )
|
||||
#
|
||||
# [*project_version*]
|
||||
# used project version in Zanata (check Zanata for available versions )
|
||||
#
|
||||
# [*admin_password*]
|
||||
# Password of admin (taking care)
|
||||
#
|
||||
# [*database_password*]
|
||||
# Password of databse
|
||||
#
|
||||
# [*rabbit_password*]
|
||||
# Password of RabbitMQ
|
||||
#
|
||||
# [*service_password*]
|
||||
# Password of services
|
||||
#
|
||||
# [*service_token*]
|
||||
# Password of service token
|
||||
#
|
||||
# [*swift_hash*]
|
||||
# Password of swift hash
|
||||
#
|
||||
# [*sync_hour*]
|
||||
# [*sync_minute*]
|
||||
# configure cron to sync translation files from Zanata
|
||||
#
|
||||
# [*is_shutdown*]
|
||||
# Bolean for shutdown and delete DevStack
|
||||
#
|
||||
# [*restack*]
|
||||
# daily cron to unstack and stack
|
||||
#
|
||||
# [*restack_hour*]
|
||||
# [*restack_minute*]
|
||||
# configure cron to restack the environment
|
||||
#
|
||||
|
||||
class translation_checksite (
|
||||
$devstack_dir = '/home/stack/devstack',
|
||||
$is_minimal = undef,
|
||||
$zanata_cli = '/opt/zanata/zanata-cli-3.8.1/bin/zanata-cli',
|
||||
$zanata_url = undef,
|
||||
$stack_user = 'stack',
|
||||
$revision = 'master',
|
||||
$project_version = 'master',
|
||||
$admin_password = undef,
|
||||
$database_password = undef,
|
||||
$rabbit_password = undef,
|
||||
$service_password = undef,
|
||||
$service_token = undef,
|
||||
$swift_hash = undef,
|
||||
$sync_hour = 1,
|
||||
$sync_minute = 0,
|
||||
$is_shutdown = undef,
|
||||
$restack = undef,
|
||||
$restack_hour = 0,
|
||||
$restack_minute = 0,
|
||||
$devstack_ssh_pubkey = undef,
|
||||
) {
|
||||
|
||||
user { $stack_user:
|
||||
ensure => present,
|
||||
groups => $stack_user,
|
||||
comment => 'Stack User',
|
||||
managehome => true,
|
||||
shell => '/bin/bash',
|
||||
password => '*',
|
||||
require => Group[$stack_user]
|
||||
}
|
||||
|
||||
group { $stack_user:
|
||||
ensure => present,
|
||||
}
|
||||
|
||||
file {"/home/${stack_user}/.config":
|
||||
ensure => directory,
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
require => User[$stack_user]
|
||||
}
|
||||
|
||||
ssh_authorized_key {'i18n project team':
|
||||
ensure => present,
|
||||
type => 'ssh-rsa',
|
||||
key => $devstack_ssh_pubkey,
|
||||
user => $stack_user,
|
||||
require => User[$stack_user],
|
||||
}
|
||||
|
||||
package {'sudo':
|
||||
ensure => 'present',
|
||||
}
|
||||
|
||||
file {'/etc/sudoers.d/10-stack-devstack':
|
||||
ensure => file,
|
||||
mode => '0600',
|
||||
content => "${stack_user} ALL=(root) NOPASSWD:ALL\n",
|
||||
require => Package['sudo'],
|
||||
}
|
||||
|
||||
vcsrepo { $devstack_dir:
|
||||
ensure => present,
|
||||
provider => git,
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
source => 'https://git.openstack.org/openstack-dev/devstack.git',
|
||||
revision => $revision,
|
||||
}
|
||||
|
||||
if $is_minimal {
|
||||
$local_conf = 'translation_checksite/local.conf.minimal.erb'
|
||||
} else {
|
||||
$local_conf = 'translation_checksite/local.conf.erb'
|
||||
}
|
||||
|
||||
file {"${devstack_dir}/local.conf":
|
||||
ensure => file,
|
||||
mode => '0600',
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
content => template($local_conf),
|
||||
force => true,
|
||||
require => [ Vcsrepo[$devstack_dir] ],
|
||||
}
|
||||
|
||||
exec { 'run_devstack':
|
||||
cwd => $devstack_dir,
|
||||
command => "/bin/su ${stack_user} -c ${devstack_dir}/stack.sh",
|
||||
unless => ['/bin/ps aux | /usr/bin/pgrep stack 2>/dev/null',
|
||||
'/usr/bin/test -d /opt/stack/'],
|
||||
timeout => 3600,
|
||||
require => File["${devstack_dir}/local.conf"],
|
||||
logoutput => true
|
||||
}
|
||||
|
||||
file {"/home/${stack_user}/zanata.xml":
|
||||
ensure => file,
|
||||
mode => '0644',
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
content => template('translation_checksite/zanata.xml.erb'),
|
||||
force => true,
|
||||
}
|
||||
|
||||
file {"/home/${stack_user}/zanata-sync.sh":
|
||||
ensure => file,
|
||||
mode => '0755',
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
content => template('translation_checksite/zanata-sync.sh.erb'),
|
||||
force => true,
|
||||
}
|
||||
|
||||
file {"/home/${stack_user}/update-lang-list.py":
|
||||
ensure => file,
|
||||
mode => '0755',
|
||||
owner => $stack_user,
|
||||
group => $stack_user,
|
||||
source => 'puppet:///modules/translation_checksite/update-lang-list.py',
|
||||
force => true,
|
||||
}
|
||||
|
||||
cron { 'zanata-sync':
|
||||
ensure => present,
|
||||
environment => 'PATH=/bin:/usr/bin:/usr/local/bin',
|
||||
command => "/home/${stack_user}/zanata-sync.sh",
|
||||
user => $stack_user,
|
||||
hour => $sync_hour,
|
||||
minute => $sync_minute,
|
||||
}
|
||||
|
||||
if $is_shutdown {
|
||||
exec { 'unstack_devstack':
|
||||
cwd => $devstack_dir,
|
||||
path => '/bin:/usr/bin:/usr/local/bin',
|
||||
command => "/bin/su ${stack_user} -c ${devstack_dir}/unstack.sh",
|
||||
creates => "${devstack_dir}/shutdown.puppet",
|
||||
timeout => 600,
|
||||
logoutput => true
|
||||
}
|
||||
|
||||
exec { 'clean_devstack':
|
||||
cwd => $devstack_dir,
|
||||
path => '/bin:/usr/bin:/usr/local/bin',
|
||||
command => "/bin/su ${stack_user} -c ${devstack_dir}/clean.sh",
|
||||
unless => '/bin/ps aux | /usr/bin/pgrep stack',
|
||||
timeout => 300,
|
||||
logoutput => true,
|
||||
require => Exec['unstack_devstack']
|
||||
}
|
||||
}
|
||||
|
||||
if $restack {
|
||||
cron { 'devstack-restack':
|
||||
ensure => present,
|
||||
environment => 'PATH=/bin:/usr/bin:/usr/local/bin',
|
||||
command => "${devstack_dir}/unstack.sh && ${devstack_dir}/stack.sh",
|
||||
user => $stack_user,
|
||||
hour => $restack_hour,
|
||||
minute => $restack_minute,
|
||||
require => [ User[$stack_user], Vcsrepo[$devstack_dir] ]
|
||||
}
|
||||
}
|
||||
}
|
21
metadata.json
Normal file
21
metadata.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "openstackinfra-translation_checksite",
|
||||
"version": "0.0.1",
|
||||
"author": "Openstack CI",
|
||||
"summary": "Puppet module for translation checksite",
|
||||
"license": "Apache 2.0",
|
||||
"source": "git://git.openstack.org/openstack-infra/puppet-translation_checksite.git",
|
||||
"project_page": "http://docs.openstack.org/infra/system-config/",
|
||||
"issues_url": "https://storyboard.openstack.org/#!/project/839",
|
||||
"operatingsystem_support": [
|
||||
{ "operatingsystem": "Ubuntu", "operatingsystemrelease": ["14.04"] }
|
||||
],
|
||||
"requirements": [
|
||||
{ "name": "pe", "version_requirement": ">= 3.2.0 < 3.4.0" },
|
||||
{ "name": "puppet", "version_requirement": "3.x" }
|
||||
],
|
||||
|
||||
"dependencies": [
|
||||
{ "name": "openstackinfra/vcsrepo", "version_requirement": "= 0.0.8" }
|
||||
]
|
||||
}
|
11
spec/acceptance/nodesets/default.yml
Normal file
11
spec/acceptance/nodesets/default.yml
Normal file
@ -0,0 +1,11 @@
|
||||
HOSTS:
|
||||
ubuntu-server-1404-x64:
|
||||
roles:
|
||||
- master
|
||||
platform: ubuntu-14.04-amd64
|
||||
box: puppetlabs/ubuntu-14.04-64-nocm
|
||||
box_url: https://vagrantcloud.com/puppetlabs/ubuntu-14.04-64-nocm
|
||||
hypervisor: vagrant
|
||||
CONFIG:
|
||||
log_level: debug
|
||||
type: git
|
10
spec/acceptance/nodesets/nodepool-centos7.yml
Normal file
10
spec/acceptance/nodesets/nodepool-centos7.yml
Normal file
@ -0,0 +1,10 @@
|
||||
HOSTS:
|
||||
centos-70-x64:
|
||||
roles:
|
||||
- master
|
||||
platform: el-7-x86_64
|
||||
hypervisor: none
|
||||
ip: 127.0.0.1
|
||||
CONFIG:
|
||||
type: foss
|
||||
set_env: false
|
10
spec/acceptance/nodesets/nodepool-trusty.yml
Normal file
10
spec/acceptance/nodesets/nodepool-trusty.yml
Normal file
@ -0,0 +1,10 @@
|
||||
HOSTS:
|
||||
ubuntu-14.04-amd64:
|
||||
roles:
|
||||
- master
|
||||
platform: ubuntu-14.04-amd64
|
||||
hypervisor: none
|
||||
ip: 127.0.0.1
|
||||
CONFIG:
|
||||
type: foss
|
||||
set_env: false
|
58
spec/spec_helper_acceptance.rb
Normal file
58
spec/spec_helper_acceptance.rb
Normal file
@ -0,0 +1,58 @@
|
||||
require 'beaker-rspec'
|
||||
|
||||
hosts.each do |host|
|
||||
|
||||
install_puppet
|
||||
|
||||
on host, "mkdir -p #{host['distmoduledir']}"
|
||||
end
|
||||
|
||||
RSpec.configure do |c|
|
||||
# Project root
|
||||
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
||||
modname = JSON.parse(open('metadata.json').read)['name'].split('-')[1]
|
||||
|
||||
# Readable test descriptions
|
||||
c.formatter = :documentation
|
||||
|
||||
# Configure all nodes in nodeset
|
||||
c.before :suite do
|
||||
# Install module and dependencies
|
||||
hosts.each do |host|
|
||||
|
||||
# Clean out any module cruft
|
||||
shell('rm -fr /etc/puppet/modules/*')
|
||||
|
||||
# install git
|
||||
install_package host, 'git'
|
||||
|
||||
zuul_ref = ENV['ZUUL_REF']
|
||||
zuul_branch = ENV['ZUUL_BRANCH']
|
||||
zuul_url = ENV['ZUUL_URL']
|
||||
|
||||
# Install dependent modules via git or zuul
|
||||
r = on host, "test -e /usr/zuul-env/bin/zuul-cloner", { :acceptable_exit_codes => [0,1] }
|
||||
repo = 'openstack-infra/system-config'
|
||||
if r.exit_code == 0
|
||||
zuul_clone_cmd = '/usr/zuul-env/bin/zuul-cloner '
|
||||
zuul_clone_cmd += '--cache-dir /opt/git '
|
||||
zuul_clone_cmd += "--zuul-ref #{zuul_ref} "
|
||||
zuul_clone_cmd += "--zuul-branch #{zuul_branch} "
|
||||
zuul_clone_cmd += "--zuul-url #{zuul_url} "
|
||||
zuul_clone_cmd += "git://git.openstack.org #{repo}"
|
||||
on host, zuul_clone_cmd
|
||||
else
|
||||
on host, "git clone https://git.openstack.org/#{repo} #{repo}"
|
||||
end
|
||||
|
||||
on host, "ZUUL_REF=#{zuul_ref} ZUUL_BRANCH=#{zuul_branch} ZUUL_URL=#{zuul_url} bash #{repo}/tools/install_modules_acceptance.sh"
|
||||
on host, "rm -fr /etc/puppet/modules/#{modname}"
|
||||
|
||||
# Install the module being tested
|
||||
puppet_module_install(:source => proj_root, :module_name => modname)
|
||||
on host, "rm -fr #{repo}"
|
||||
# List modules installed to help with debugging
|
||||
on hosts[0], puppet('module','list'), { :acceptable_exit_codes => 0 }
|
||||
end
|
||||
end
|
||||
end
|
78
templates/local.conf.erb
Normal file
78
templates/local.conf.erb
Normal file
@ -0,0 +1,78 @@
|
||||
[[local|localrc]]
|
||||
#-----------------------------
|
||||
# Common configurations
|
||||
#-----------------------------
|
||||
|
||||
HOST_IP=<%= @ipaddress %>
|
||||
|
||||
enable_service c-bak
|
||||
disable_service tempest
|
||||
enable_service heat h-api h-api-cfn h-api-cw h-eng
|
||||
enable_service ceilometer-acompute ceilometer-acentral ceilometer-collector ceilometer-api
|
||||
enable_service s-proxy s-object s-container s-account
|
||||
enable_service trove tr-api tr-tmgr tr-cond
|
||||
enable_service sahara
|
||||
|
||||
enable_plugin rally https://git.openstack.org/openstack/rally
|
||||
|
||||
enable_plugin murano https://git.openstack.org/openstack/murano
|
||||
enable_plugin murano-dashboard https://git.openstack.org/openstack/murano-dashboard
|
||||
|
||||
enable_plugin trove https://git.openstack.org/openstack/trove
|
||||
enable_plugin trove-dashboard https://git.openstack.org/openstack/trove-dashboard
|
||||
|
||||
enable_plugin sahara https://git.openstack.org/openstack/sahara
|
||||
enable_plugin sahara-dashboard https://git.openstack.org/openstack/sahara-dashboard
|
||||
|
||||
enable_plugin neutron https://git.openstack.org/openstack/neutron
|
||||
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas
|
||||
enable_plugin octavia https://git.openstack.org/openstack/octavia
|
||||
enable_plugin neutron-lbaas-dashboard https://git.openstack.org/openstack/neutron-lbaas-dashboard
|
||||
enable_plugin neutron-vpnaas https://git.openstack.org/openstack/neutron-vpnaas
|
||||
|
||||
ENABLED_SERVICES+=,q-lbaasv2
|
||||
ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
|
||||
|
||||
|
||||
LIBS_FROM_GIT=django_openstack_auth
|
||||
|
||||
VOLUME_BACKING_FILE_SIZE=50G
|
||||
|
||||
KEYSTONE_TOKEN_FORMAT=UUID
|
||||
PRIVATE_NETWORK_NAME=net1
|
||||
PUBLIC_NETWORK_NAME=ext_net
|
||||
|
||||
#-----------------------------
|
||||
# Neutron
|
||||
#-----------------------------
|
||||
disable_service n-net
|
||||
enable_service neutron q-svc q-agt
|
||||
enable_service q-dhcp
|
||||
enable_service q-l3
|
||||
enable_service q-meta
|
||||
enable_service q-fwaas
|
||||
enable_service q-metering
|
||||
|
||||
Q_PLUGIN=ml2
|
||||
|
||||
#-----------------------------
|
||||
# Devstack configurations
|
||||
#-----------------------------
|
||||
LOGDIR=$DEST/logs
|
||||
LOGDAYS=1
|
||||
SCREEN_LOGDIR=$LOGDIR
|
||||
SCREEN_HARDSTATUS="%{= rw} %H %{= wk} %L=%-w%{= bw}%30L> %n%f %t*%{= wk}%+Lw%-17< %-=%{= gk} %y/%m /%d %c"
|
||||
LOGFILE=$LOGDIR/devstack.log
|
||||
|
||||
|
||||
ADMIN_PASSWORD=<%= @admin_password %>
|
||||
MYSQL_PASSWORD=<%= @database_password %>
|
||||
RABBIT_PASSWORD=<%= @rabbit_password %>
|
||||
SERVICE_PASSWORD=<%= @service_password %>
|
||||
SERVICE_TOKEN=<%= @service_token %>
|
||||
SWIFT_HASH=<%= @swift_hash %>
|
||||
|
||||
[[post-config|/etc/cinder/cinder.conf]]
|
||||
[DEFAULT]
|
||||
SYSLOG=False
|
||||
quota_gigabytes=10000
|
6
templates/local.conf.minimal.erb
Normal file
6
templates/local.conf.minimal.erb
Normal file
@ -0,0 +1,6 @@
|
||||
[[local|localrc]]
|
||||
ADMIN_PASSWORD=<%= @admin_password %>
|
||||
DATABASE_PASSWORD=<%= @database_password %>
|
||||
RABBIT_PASSWORD=<%= @rabbit_password %>
|
||||
SERVICE_PASSWORD=<%= @service_password %>
|
||||
SERVICE_TOKEN=<%= @service_token %>
|
25
templates/zanata-sync.sh.erb
Normal file
25
templates/zanata-sync.sh.erb
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Script for sync language files from zanata, compile them and reload apache
|
||||
# requires zanata.xml for zanata-cli
|
||||
#
|
||||
LOCAL_SETTINGS=/opt/stack/horizon/openstack_dashboard/local/local_settings.py
|
||||
|
||||
# fetch new po files for spezific lang
|
||||
<%= @zanata_cli %> -B -q pull
|
||||
|
||||
# compile mo files
|
||||
for file in `find /opt/stack/horizon -name "*.po"` ; do
|
||||
msgfmt -o ${file%.po}.mo $file
|
||||
done
|
||||
|
||||
# Update the language list to have all available languages
|
||||
# see https://github.com/amotoki/horizon-i18n-tools
|
||||
TOP_DIR=$(cd $(dirname "$0") && pwd)
|
||||
|
||||
sed -i -e '/^LANGUAGES = /,$d' $LOCAL_SETTINGS
|
||||
python $TOP_DIR/update-lang-list.py >> $LOCAL_SETTINGS
|
||||
|
||||
# reload apache
|
||||
ACTL=$(sudo which apache2ctl)
|
||||
sudo $ACTL graceful
|
13
templates/zanata.xml.erb
Normal file
13
templates/zanata.xml.erb
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<config xmlns="http://zanata.org/namespace/config/">
|
||||
<url><%= @zanata_url %>/</url>
|
||||
<project>horizon</project>
|
||||
<project-version><%= @project_version %></project-version>
|
||||
<project-type>gettext</project-type>
|
||||
<src-dir>.</src-dir>
|
||||
<trans-dir>/opt/stack/horizon/</trans-dir>
|
||||
<excludes>.*/**</excludes>
|
||||
<rules>
|
||||
<rule pattern="**/*.pot">{path}/{locale_with_underscore}/LC_MESSAGES/{filename}.po</rule>
|
||||
</rules>
|
||||
</config>
|
Loading…
x
Reference in New Issue
Block a user