summaryrefslogtreecommitdiffstats
path: root/roles
diff options
context:
space:
mode:
Diffstat (limited to 'roles')
l---------roles/etcd_client_certificates/library1
-rwxr-xr-xroles/etcd_common/library/delegated_serial_command.py275
l---------roles/etcd_server_certificates/library1
-rwxr-xr-xroles/openshift_examples/examples-sync.sh16
-rw-r--r--roles/openshift_examples/files/examples/v1.3/quickstart-templates/cakephp.json343
-rw-r--r--roles/openshift_examples/files/examples/v1.3/quickstart-templates/dancer.json276
-rw-r--r--roles/openshift_examples/files/examples/v1.3/quickstart-templates/django.json323
-rw-r--r--roles/openshift_examples/files/examples/v1.3/quickstart-templates/nodejs.json323
-rw-r--r--roles/openshift_examples/tasks/main.yml21
-rwxr-xr-xroles/openshift_facts/library/openshift_facts.py1
10 files changed, 298 insertions, 1282 deletions
diff --git a/roles/etcd_client_certificates/library b/roles/etcd_client_certificates/library
deleted file mode 120000
index 494d3c39e..000000000
--- a/roles/etcd_client_certificates/library
+++ /dev/null
@@ -1 +0,0 @@
-../../library \ No newline at end of file
diff --git a/roles/etcd_common/library/delegated_serial_command.py b/roles/etcd_common/library/delegated_serial_command.py
new file mode 100755
index 000000000..3969edfdd
--- /dev/null
+++ b/roles/etcd_common/library/delegated_serial_command.py
@@ -0,0 +1,275 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>, and others
+# (c) 2016, Andrew Butcher <abutcher@redhat.com>
+#
+# This module is derrived from the Ansible command module.
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
+
+
+# pylint: disable=unused-wildcard-import,wildcard-import,unused-import,redefined-builtin
+
+''' delegated_serial_command '''
+
+import copy
+import sys
+import datetime
+import glob
+import traceback
+import re
+import shlex
+import os
+import fcntl
+import time
+
+DOCUMENTATION = '''
+---
+module: delegated_serial_command
+short_description: Executes a command on a remote node
+version_added: historical
+description:
+ - The M(command) module takes the command name followed by a list
+ of space-delimited arguments.
+ - The given command will be executed on all selected nodes. It
+ will not be processed through the shell, so variables like
+ C($HOME) and operations like C("<"), C(">"), C("|"), and C("&")
+ will not work (use the M(shell) module if you need these
+ features).
+ - Creates and maintains a lockfile such that this module will
+ wait for other invocations to proceed.
+options:
+ command:
+ description:
+ - the command to run
+ required: true
+ default: null
+ creates:
+ description:
+ - a filename or (since 2.0) glob pattern, when it already
+ exists, this step will B(not) be run.
+ required: no
+ default: null
+ removes:
+ description:
+ - a filename or (since 2.0) glob pattern, when it does not
+ exist, this step will B(not) be run.
+ version_added: "0.8"
+ required: no
+ default: null
+ chdir:
+ description:
+ - cd into this directory before running the command
+ version_added: "0.6"
+ required: false
+ default: null
+ executable:
+ description:
+ - change the shell used to execute the command. Should be an
+ absolute path to the executable.
+ required: false
+ default: null
+ version_added: "0.9"
+ warn:
+ version_added: "1.8"
+ default: yes
+ description:
+ - if command warnings are on in ansible.cfg, do not warn about
+ this particular line if set to no/false.
+ required: false
+ lockfile:
+ default: yes
+ description:
+ - the lockfile that will be created
+ timeout:
+ default: yes
+ description:
+ - time in milliseconds to wait to obtain the lock
+notes:
+ - If you want to run a command through the shell (say you are using C(<),
+ C(>), C(|), etc), you actually want the M(shell) module instead. The
+ M(command) module is much more secure as it's not affected by the user's
+ environment.
+ - " C(creates), C(removes), and C(chdir) can be specified after
+ the command. For instance, if you only want to run a command if
+ a certain file does not exist, use this."
+author:
+ - Ansible Core Team
+ - Michael DeHaan
+ - Andrew Butcher
+'''
+
+EXAMPLES = '''
+# Example from Ansible Playbooks.
+- delegated_serial_command:
+ command: /sbin/shutdown -t now
+
+# Run the command if the specified file does not exist.
+- delegated_serial_command:
+ command: /usr/bin/make_database.sh arg1 arg2
+ creates: /path/to/database
+'''
+
+# Dict of options and their defaults
+OPTIONS = {'chdir': None,
+ 'creates': None,
+ 'command': None,
+ 'executable': None,
+ 'NO_LOG': None,
+ 'removes': None,
+ 'warn': True,
+ 'lockfile': None,
+ 'timeout': None}
+
+def check_command(commandline):
+ ''' Check provided command '''
+ arguments = {'chown': 'owner', 'chmod': 'mode', 'chgrp': 'group',
+ 'ln': 'state=link', 'mkdir': 'state=directory',
+ 'rmdir': 'state=absent', 'rm': 'state=absent', 'touch': 'state=touch'}
+ commands = {'git': 'git', 'hg': 'hg', 'curl': 'get_url or uri', 'wget': 'get_url or uri',
+ 'svn': 'subversion', 'service': 'service',
+ 'mount': 'mount', 'rpm': 'yum, dnf or zypper', 'yum': 'yum', 'apt-get': 'apt',
+ 'tar': 'unarchive', 'unzip': 'unarchive', 'sed': 'template or lineinfile',
+ 'rsync': 'synchronize', 'dnf': 'dnf', 'zypper': 'zypper'}
+ become = ['sudo', 'su', 'pbrun', 'pfexec', 'runas']
+ warnings = list()
+ command = os.path.basename(commandline.split()[0])
+ # pylint: disable=line-too-long
+ if command in arguments:
+ warnings.append("Consider using file module with {0} rather than running {1}".format(arguments[command], command))
+ if command in commands:
+ warnings.append("Consider using {0} module rather than running {1}".format(commands[command], command))
+ if command in become:
+ warnings.append(
+ "Consider using 'become', 'become_method', and 'become_user' rather than running {0}".format(command,))
+ return warnings
+
+
+# pylint: disable=too-many-statements,too-many-branches,too-many-locals
+def main():
+ ''' Main module function '''
+ module = AnsibleModule(
+ argument_spec=dict(
+ _uses_shell=dict(type='bool', default=False),
+ command=dict(required=True),
+ chdir=dict(),
+ executable=dict(),
+ creates=dict(),
+ removes=dict(),
+ warn=dict(type='bool', default=True),
+ lockfile=dict(default='/tmp/delegated_serial_command.lock'),
+ timeout=dict(type='int', default=30)
+ )
+ )
+
+ shell = module.params['_uses_shell']
+ chdir = module.params['chdir']
+ executable = module.params['executable']
+ command = module.params['command']
+ creates = module.params['creates']
+ removes = module.params['removes']
+ warn = module.params['warn']
+ lockfile = module.params['lockfile']
+ timeout = module.params['timeout']
+
+ if command.strip() == '':
+ module.fail_json(rc=256, msg="no command given")
+
+ iterated = 0
+ lockfd = open(lockfile, 'w+')
+ while iterated < timeout:
+ try:
+ fcntl.flock(lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
+ break
+ # pylint: disable=invalid-name
+ except IOError as e:
+ if e.errno != errno.EAGAIN:
+ module.fail_json(msg="I/O Error {0}: {1}".format(e.errno, e.strerror))
+ else:
+ iterated += 1
+ time.sleep(0.1)
+
+ if chdir:
+ chdir = os.path.abspath(os.path.expanduser(chdir))
+ os.chdir(chdir)
+
+ if creates:
+ # do not run the command if the line contains creates=filename
+ # and the filename already exists. This allows idempotence
+ # of command executions.
+ path = os.path.expanduser(creates)
+ if glob.glob(path):
+ module.exit_json(
+ cmd=command,
+ stdout="skipped, since %s exists" % path,
+ changed=False,
+ stderr=False,
+ rc=0
+ )
+
+ if removes:
+ # do not run the command if the line contains removes=filename
+ # and the filename does not exist. This allows idempotence
+ # of command executions.
+ path = os.path.expanduser(removes)
+ if not glob.glob(path):
+ module.exit_json(
+ cmd=command,
+ stdout="skipped, since %s does not exist" % path,
+ changed=False,
+ stderr=False,
+ rc=0
+ )
+
+ warnings = list()
+ if warn:
+ warnings = check_command(command)
+
+ if not shell:
+ command = shlex.split(command)
+ startd = datetime.datetime.now()
+
+ # pylint: disable=invalid-name
+ rc, out, err = module.run_command(command, executable=executable, use_unsafe_shell=shell)
+
+ fcntl.flock(lockfd, fcntl.LOCK_UN)
+ lockfd.close()
+
+ endd = datetime.datetime.now()
+ delta = endd - startd
+
+ if out is None:
+ out = ''
+ if err is None:
+ err = ''
+
+ module.exit_json(
+ cmd=command,
+ stdout=out.rstrip("\r\n"),
+ stderr=err.rstrip("\r\n"),
+ rc=rc,
+ start=str(startd),
+ end=str(endd),
+ delta=str(delta),
+ changed=True,
+ warnings=warnings,
+ iterated=iterated
+ )
+
+# import module snippets
+from ansible.module_utils.basic import *
+from ansible.module_utils.splitter import *
+
+main()
diff --git a/roles/etcd_server_certificates/library b/roles/etcd_server_certificates/library
deleted file mode 120000
index 494d3c39e..000000000
--- a/roles/etcd_server_certificates/library
+++ /dev/null
@@ -1 +0,0 @@
-../../library \ No newline at end of file
diff --git a/roles/openshift_examples/examples-sync.sh b/roles/openshift_examples/examples-sync.sh
index 1ad0d93a2..48da98017 100755
--- a/roles/openshift_examples/examples-sync.sh
+++ b/roles/openshift_examples/examples-sync.sh
@@ -14,27 +14,13 @@ TEMP=`mktemp -d`
pushd $TEMP
wget https://github.com/openshift/origin/archive/master.zip -O origin-master.zip
-wget https://github.com/openshift/django-ex/archive/master.zip -O django-ex-master.zip
-wget https://github.com/openshift/rails-ex/archive/master.zip -O rails-ex-master.zip
-wget https://github.com/openshift/nodejs-ex/archive/master.zip -O nodejs-ex-master.zip
-wget https://github.com/openshift/dancer-ex/archive/master.zip -O dancer-ex-master.zip
-wget https://github.com/openshift/cakephp-ex/archive/master.zip -O cakephp-ex-master.zip
wget https://github.com/jboss-openshift/application-templates/archive/${XPAAS_VERSION}.zip -O application-templates-master.zip
unzip origin-master.zip
-unzip django-ex-master.zip
-unzip rails-ex-master.zip
-unzip nodejs-ex-master.zip
-unzip dancer-ex-master.zip
-unzip cakephp-ex-master.zip
unzip application-templates-master.zip
cp origin-master/examples/db-templates/* ${EXAMPLES_BASE}/db-templates/
+cp origin-master/examples/quickstarts/* ${EXAMPLES_BASE}/quickstart-templates/
cp origin-master/examples/jenkins/jenkins-*template.json ${EXAMPLES_BASE}/quickstart-templates/
cp origin-master/examples/image-streams/* ${EXAMPLES_BASE}/image-streams/
-cp django-ex-master/openshift/templates/* ${EXAMPLES_BASE}/quickstart-templates/
-cp rails-ex-master/openshift/templates/* ${EXAMPLES_BASE}/quickstart-templates/
-cp nodejs-ex-master/openshift/templates/* ${EXAMPLES_BASE}/quickstart-templates/
-cp dancer-ex-master/openshift/templates/* ${EXAMPLES_BASE}/quickstart-templates/
-cp cakephp-ex-master/openshift/templates/* ${EXAMPLES_BASE}/quickstart-templates/
mv application-templates-${XPAAS_VERSION}/jboss-image-streams.json ${EXAMPLES_BASE}/xpaas-streams/
find application-templates-${XPAAS_VERSION}/ -name '*.json' ! -wholename '*secret*' ! -wholename '*demo*' -exec mv {} ${EXAMPLES_BASE}/xpaas-templates/ \;
wget https://raw.githubusercontent.com/jboss-fuse/application-templates/master/fis-image-streams.json -O ${EXAMPLES_BASE}/xpaas-streams/fis-image-streams.json
diff --git a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/cakephp.json b/roles/openshift_examples/files/examples/v1.3/quickstart-templates/cakephp.json
deleted file mode 100644
index dc6ecb5c7..000000000
--- a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/cakephp.json
+++ /dev/null
@@ -1,343 +0,0 @@
-{
- "kind": "Template",
- "apiVersion": "v1",
- "metadata": {
- "name": "cakephp-example",
- "annotations": {
- "description": "An example CakePHP application with no database",
- "tags": "quickstart,php,cakephp",
- "iconClass": "icon-php"
- }
- },
- "labels": {
- "template": "cakephp-example"
- },
- "objects": [
- {
- "kind": "Service",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Exposes and load balances the application pods"
- }
- },
- "spec": {
- "ports": [
- {
- "name": "web",
- "port": 8080,
- "targetPort": 8080
- }
- ],
- "selector": {
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "Route",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}"
- },
- "spec": {
- "host": "${APPLICATION_DOMAIN}",
- "to": {
- "kind": "Service",
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "ImageStream",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Keeps track of changes in the application image"
- }
- }
- },
- {
- "kind": "BuildConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to build the application"
- }
- },
- "spec": {
- "source": {
- "type": "Git",
- "git": {
- "uri": "${SOURCE_REPOSITORY_URL}",
- "ref": "${SOURCE_REPOSITORY_REF}"
- },
- "contextDir": "${CONTEXT_DIR}"
- },
- "strategy": {
- "type": "Source",
- "sourceStrategy": {
- "from": {
- "kind": "ImageStreamTag",
- "namespace": "${NAMESPACE}",
- "name": "php:5.6"
- },
- "env": [
- {
- "name": "COMPOSER_MIRROR",
- "value": "${COMPOSER_MIRROR}"
- }
- ]
- }
- },
- "output": {
- "to": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- },
- "triggers": [
- {
- "type": "ImageChange"
- },
- {
- "type": "ConfigChange"
- },
- {
- "type": "GitHub",
- "github": {
- "secret": "${GITHUB_WEBHOOK_SECRET}"
- }
- }
- ]
- }
- },
- {
- "kind": "DeploymentConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to deploy the application server"
- }
- },
- "spec": {
- "strategy": {
- "type": "Rolling"
- },
- "triggers": [
- {
- "type": "ImageChange",
- "imageChangeParams": {
- "automatic": true,
- "containerNames": [
- "cakephp-example"
- ],
- "from": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- }
- },
- {
- "type": "ConfigChange"
- }
- ],
- "replicas": 1,
- "selector": {
- "name": "${NAME}"
- },
- "template": {
- "metadata": {
- "name": "${NAME}",
- "labels": {
- "name": "${NAME}"
- }
- },
- "spec": {
- "containers": [
- {
- "name": "cakephp-example",
- "image": " ",
- "ports": [
- {
- "containerPort": 8080
- }
- ],
- "readinessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 3,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "livenessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 30,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "env": [
- {
- "name": "DATABASE_SERVICE_NAME",
- "value": "${DATABASE_SERVICE_NAME}"
- },
- {
- "name": "DATABASE_ENGINE",
- "value": "${DATABASE_ENGINE}"
- },
- {
- "name": "DATABASE_NAME",
- "value": "${DATABASE_NAME}"
- },
- {
- "name": "DATABASE_USER",
- "value": "${DATABASE_USER}"
- },
- {
- "name": "DATABASE_PASSWORD",
- "value": "${DATABASE_PASSWORD}"
- },
- {
- "name": "CAKEPHP_SECRET_TOKEN",
- "value": "${CAKEPHP_SECRET_TOKEN}"
- },
- {
- "name": "CAKEPHP_SECURITY_SALT",
- "value": "${CAKEPHP_SECURITY_SALT}"
- },
- {
- "name": "CAKEPHP_SECURITY_CIPHER_SEED",
- "value": "${CAKEPHP_SECURITY_CIPHER_SEED}"
- },
- {
- "name": "OPCACHE_REVALIDATE_FREQ",
- "value": "${OPCACHE_REVALIDATE_FREQ}"
- }
- ],
- "resources": {
- "limits": {
- "memory": "${MEMORY_LIMIT}"
- }
- }
- }
- ]
- }
- }
- }
- }
- ],
- "parameters": [
- {
- "name": "NAME",
- "displayName": "Name",
- "description": "The name assigned to all of the frontend objects defined in this template.",
- "required": true,
- "value": "cakephp-example"
- },
- {
- "name": "NAMESPACE",
- "displayName": "Namespace",
- "description": "The OpenShift Namespace where the ImageStream resides.",
- "required": true,
- "value": "openshift"
- },
- {
- "name": "MEMORY_LIMIT",
- "displayName": "Memory Limit",
- "description": "Maximum amount of memory the container can use.",
- "required": true,
- "value": "512Mi"
- },
- {
- "name": "SOURCE_REPOSITORY_URL",
- "displayName": "Git Repository URL",
- "description": "The URL of the repository with your application source code.",
- "required": true,
- "value": "https://github.com/openshift/cakephp-ex.git"
- },
- {
- "name": "SOURCE_REPOSITORY_REF",
- "displayName": "Git Reference",
- "description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
- },
- {
- "name": "CONTEXT_DIR",
- "displayName": "Context Directory",
- "description": "Set this to the relative path to your project if it is not in the root of your repository."
- },
- {
- "name": "APPLICATION_DOMAIN",
- "displayName": "Application Hostname",
- "description": "The exposed hostname that will route to the CakePHP service, if left blank a value will be defaulted.",
- "value": ""
- },
- {
- "name": "GITHUB_WEBHOOK_SECRET",
- "displayName": "GitHub Webhook Secret",
- "description": "A secret string used to configure the GitHub webhook.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "DATABASE_SERVICE_NAME",
- "displayName": "Database Service Name"
- },
- {
- "name": "DATABASE_ENGINE",
- "displayName": "Database Engine",
- "description": "Database engine: postgresql, mysql or sqlite (default)."
- },
- {
- "name": "DATABASE_NAME",
- "displayName": "Database Name"
- },
- {
- "name": "DATABASE_USER",
- "displayName": "Database User"
- },
- {
- "name": "DATABASE_PASSWORD",
- "displayName": "Database Password"
- },
- {
- "name": "CAKEPHP_SECRET_TOKEN",
- "displayName": "CakePHP Secret Token",
- "description": "Set this to a long random string.",
- "generate": "expression",
- "from": "[\\w]{50}"
- },
- {
- "name": "CAKEPHP_SECURITY_SALT",
- "displayName": "CakePHP Security Salt",
- "description": "Security salt for session hash.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "CAKEPHP_SECURITY_CIPHER_SEED",
- "displayName": "CakePHP Security Cipher Seed",
- "description": "Security cipher seed for session hash.",
- "generate": "expression",
- "from": "[0-9]{30}"
- },
- {
- "name": "OPCACHE_REVALIDATE_FREQ",
- "displayName": "OPcache Revalidation Frequency",
- "description": "How often to check script timestamps for updates, in seconds. 0 will result in OPcache checking for updates on every request.",
- "value": "2"
- },
- {
- "name": "COMPOSER_MIRROR",
- "displayName": "Custom Composer Mirror URL",
- "description": "The custom Composer mirror URL",
- "value": ""
- }
- ]
-}
diff --git a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/dancer.json b/roles/openshift_examples/files/examples/v1.3/quickstart-templates/dancer.json
deleted file mode 100644
index 46b8984e3..000000000
--- a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/dancer.json
+++ /dev/null
@@ -1,276 +0,0 @@
-{
- "kind": "Template",
- "apiVersion": "v1",
- "metadata": {
- "name": "dancer-example",
- "annotations": {
- "description": "An example Dancer application with no database",
- "tags": "quickstart,perl,dancer",
- "iconClass": "icon-perl"
- }
- },
- "labels": {
- "template": "dancer-example"
- },
- "objects": [
- {
- "kind": "Service",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Exposes and load balances the application pods"
- }
- },
- "spec": {
- "ports": [
- {
- "name": "web",
- "port": 8080,
- "targetPort": 8080
- }
- ],
- "selector": {
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "Route",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}"
- },
- "spec": {
- "host": "${APPLICATION_DOMAIN}",
- "to": {
- "kind": "Service",
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "ImageStream",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Keeps track of changes in the application image"
- }
- }
- },
- {
- "kind": "BuildConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to build the application"
- }
- },
- "spec": {
- "source": {
- "type": "Git",
- "git": {
- "uri": "${SOURCE_REPOSITORY_URL}",
- "ref": "${SOURCE_REPOSITORY_REF}"
- },
- "contextDir": "${CONTEXT_DIR}"
- },
- "strategy": {
- "type": "Source",
- "sourceStrategy": {
- "from": {
- "kind": "ImageStreamTag",
- "namespace": "${NAMESPACE}",
- "name": "perl:5.20"
- },
- "env": [
- {
- "name": "CPAN_MIRROR",
- "value": "${CPAN_MIRROR}"
- }
- ]
- }
- },
- "output": {
- "to": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- },
- "triggers": [
- {
- "type": "ImageChange"
- },
- {
- "type": "ConfigChange"
- },
- {
- "type": "GitHub",
- "github": {
- "secret": "${GITHUB_WEBHOOK_SECRET}"
- }
- }
- ]
- }
- },
- {
- "kind": "DeploymentConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to deploy the application server"
- }
- },
- "spec": {
- "strategy": {
- "type": "Rolling"
- },
- "triggers": [
- {
- "type": "ImageChange",
- "imageChangeParams": {
- "automatic": true,
- "containerNames": [
- "dancer-example"
- ],
- "from": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- }
- },
- {
- "type": "ConfigChange"
- }
- ],
- "replicas": 1,
- "selector": {
- "name": "${NAME}"
- },
- "template": {
- "metadata": {
- "name": "${NAME}",
- "labels": {
- "name": "${NAME}"
- }
- },
- "spec": {
- "containers": [
- {
- "name": "dancer-example",
- "image": " ",
- "ports": [
- {
- "containerPort": 8080
- }
- ],
- "readinessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 3,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "livenessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 30,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "env": [
- {
- "name": "PERL_APACHE2_RELOAD",
- "value": "${PERL_APACHE2_RELOAD}"
- }
- ],
- "resources": {
- "limits": {
- "memory": "${MEMORY_LIMIT}"
- }
- }
- }
- ]
- }
- }
- }
- }
- ],
- "parameters": [
- {
- "name": "NAME",
- "displayName": "Name",
- "description": "The name assigned to all of the frontend objects defined in this template.",
- "required": true,
- "value": "dancer-example"
- },
- {
- "name": "NAMESPACE",
- "displayName": "Namespace",
- "description": "The OpenShift Namespace where the ImageStream resides.",
- "required": true,
- "value": "openshift"
- },
- {
- "name": "MEMORY_LIMIT",
- "displayName": "Memory Limit",
- "description": "Maximum amount of memory the container can use.",
- "required": true,
- "value": "512Mi"
- },
- {
- "name": "SOURCE_REPOSITORY_URL",
- "displayName": "Git Repository URL",
- "description": "The URL of the repository with your application source code.",
- "required": true,
- "value": "https://github.com/openshift/dancer-ex.git"
- },
- {
- "name": "SOURCE_REPOSITORY_REF",
- "displayName": "Git Reference",
- "description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
- },
- {
- "name": "CONTEXT_DIR",
- "displayName": "Context Directory",
- "description": "Set this to the relative path to your project if it is not in the root of your repository."
- },
- {
- "name": "APPLICATION_DOMAIN",
- "displayName": "Application Hostname",
- "description": "The exposed hostname that will route to the Dancer service, if left blank a value will be defaulted.",
- "value": ""
- },
- {
- "name": "GITHUB_WEBHOOK_SECRET",
- "displayName": "GitHub Webhook Secret",
- "description": "A secret string used to configure the GitHub webhook.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "SECRET_KEY_BASE",
- "displayName": "Secret Key",
- "description": "Your secret key for verifying the integrity of signed cookies.",
- "generate": "expression",
- "from": "[a-z0-9]{127}"
- },
- {
- "name": "PERL_APACHE2_RELOAD",
- "displayName": "Perl Module Reload",
- "description": "Set this to \"true\" to enable automatic reloading of modified Perl modules.",
- "value": ""
- },
- {
- "name": "CPAN_MIRROR",
- "displayName": "Custom CPAN Mirror URL",
- "description": "The custom CPAN mirror URL",
- "value": ""
- }
- ]
-}
diff --git a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/django.json b/roles/openshift_examples/files/examples/v1.3/quickstart-templates/django.json
deleted file mode 100644
index 1c2e40d70..000000000
--- a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/django.json
+++ /dev/null
@@ -1,323 +0,0 @@
-{
- "kind": "Template",
- "apiVersion": "v1",
- "metadata": {
- "name": "django-example",
- "annotations": {
- "description": "An example Django application with no database",
- "tags": "quickstart,python,django",
- "iconClass": "icon-python"
- }
- },
- "labels": {
- "template": "django-example"
- },
- "objects": [
- {
- "kind": "Service",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Exposes and load balances the application pods"
- }
- },
- "spec": {
- "ports": [
- {
- "name": "web",
- "port": 8080,
- "targetPort": 8080
- }
- ],
- "selector": {
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "Route",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}"
- },
- "spec": {
- "host": "${APPLICATION_DOMAIN}",
- "to": {
- "kind": "Service",
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "ImageStream",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Keeps track of changes in the application image"
- }
- }
- },
- {
- "kind": "BuildConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to build the application"
- }
- },
- "spec": {
- "source": {
- "type": "Git",
- "git": {
- "uri": "${SOURCE_REPOSITORY_URL}",
- "ref": "${SOURCE_REPOSITORY_REF}"
- },
- "contextDir": "${CONTEXT_DIR}"
- },
- "strategy": {
- "type": "Source",
- "sourceStrategy": {
- "from": {
- "kind": "ImageStreamTag",
- "namespace": "${NAMESPACE}",
- "name": "python:3.5"
- },
- "env": [
- {
- "name": "PIP_INDEX_URL",
- "value": "${PIP_INDEX_URL}"
- }
- ]
- }
- },
- "output": {
- "to": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- },
- "triggers": [
- {
- "type": "ImageChange"
- },
- {
- "type": "ConfigChange"
- },
- {
- "type": "GitHub",
- "github": {
- "secret": "${GITHUB_WEBHOOK_SECRET}"
- }
- }
- ],
- "postCommit": {
- "script": "./manage.py test"
- }
- }
- },
- {
- "kind": "DeploymentConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to deploy the application server"
- }
- },
- "spec": {
- "strategy": {
- "type": "Rolling"
- },
- "triggers": [
- {
- "type": "ImageChange",
- "imageChangeParams": {
- "automatic": true,
- "containerNames": [
- "django-example"
- ],
- "from": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- }
- },
- {
- "type": "ConfigChange"
- }
- ],
- "replicas": 1,
- "selector": {
- "name": "${NAME}"
- },
- "template": {
- "metadata": {
- "name": "${NAME}",
- "labels": {
- "name": "${NAME}"
- }
- },
- "spec": {
- "containers": [
- {
- "name": "django-example",
- "image": " ",
- "ports": [
- {
- "containerPort": 8080
- }
- ],
- "readinessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 3,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "livenessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 30,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "env": [
- {
- "name": "DATABASE_SERVICE_NAME",
- "value": "${DATABASE_SERVICE_NAME}"
- },
- {
- "name": "DATABASE_ENGINE",
- "value": "${DATABASE_ENGINE}"
- },
- {
- "name": "DATABASE_NAME",
- "value": "${DATABASE_NAME}"
- },
- {
- "name": "DATABASE_USER",
- "value": "${DATABASE_USER}"
- },
- {
- "name": "DATABASE_PASSWORD",
- "value": "${DATABASE_PASSWORD}"
- },
- {
- "name": "APP_CONFIG",
- "value": "${APP_CONFIG}"
- },
- {
- "name": "DJANGO_SECRET_KEY",
- "value": "${DJANGO_SECRET_KEY}"
- }
- ],
- "resources": {
- "limits": {
- "memory": "${MEMORY_LIMIT}"
- }
- }
- }
- ]
- }
- }
- }
- }
- ],
- "parameters": [
- {
- "name": "NAME",
- "displayName": "Name",
- "description": "The name assigned to all of the frontend objects defined in this template.",
- "required": true,
- "value": "django-example"
- },
- {
- "name": "NAMESPACE",
- "displayName": "Namespace",
- "required": true,
- "description": "The OpenShift Namespace where the ImageStream resides.",
- "value": "openshift"
- },
- {
- "name": "MEMORY_LIMIT",
- "displayName": "Memory Limit",
- "required": true,
- "description": "Maximum amount of memory the container can use.",
- "value": "512Mi"
- },
- {
- "name": "SOURCE_REPOSITORY_URL",
- "displayName": "Git Repository URL",
- "required": true,
- "description": "The URL of the repository with your application source code.",
- "value": "https://github.com/openshift/django-ex.git"
- },
- {
- "name": "SOURCE_REPOSITORY_REF",
- "displayName": "Git Reference",
- "description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
- },
- {
- "name": "CONTEXT_DIR",
- "displayName": "Context Directory",
- "description": "Set this to the relative path to your project if it is not in the root of your repository."
- },
- {
- "name": "APPLICATION_DOMAIN",
- "displayName": "Application Hostname",
- "description": "The exposed hostname that will route to the Django service, if left blank a value will be defaulted.",
- "value": ""
- },
- {
- "name": "GITHUB_WEBHOOK_SECRET",
- "displayName": "GitHub Webhook Secret",
- "description": "A secret string used to configure the GitHub webhook.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "DATABASE_SERVICE_NAME",
- "displayName": "Database Service Name"
- },
- {
- "name": "DATABASE_ENGINE",
- "displayName": "Database Engine",
- "description": "Database engine: postgresql, mysql or sqlite (default)."
- },
- {
- "name": "DATABASE_NAME",
- "displayName": "Database Name"
- },
- {
- "name": "DATABASE_USER",
- "displayName": "Database Username"
- },
- {
- "name": "DATABASE_PASSWORD",
- "displayName": "Database User Password"
- },
- {
- "name": "APP_CONFIG",
- "displayName": "Application Configuration File Path",
- "description": "Relative path to Gunicorn configuration file (optional)."
- },
- {
- "name": "DJANGO_SECRET_KEY",
- "displayName": "Django Secret Key",
- "description": "Set this to a long random string.",
- "generate": "expression",
- "from": "[\\w]{50}"
- },
- {
- "name": "PIP_INDEX_URL",
- "displayName": "Custom PyPi Index URL",
- "description": "The custom PyPi index URL",
- "value": ""
- }
- ]
-}
diff --git a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/nodejs.json b/roles/openshift_examples/files/examples/v1.3/quickstart-templates/nodejs.json
deleted file mode 100644
index ec262e4e8..000000000
--- a/roles/openshift_examples/files/examples/v1.3/quickstart-templates/nodejs.json
+++ /dev/null
@@ -1,323 +0,0 @@
-{
- "kind": "Template",
- "apiVersion": "v1",
- "metadata": {
- "name": "nodejs-example",
- "annotations": {
- "description": "An example Node.js application with no database",
- "tags": "quickstart,nodejs",
- "iconClass": "icon-nodejs"
- }
- },
- "labels": {
- "template": "nodejs-example"
- },
- "objects": [
- {
- "kind": "Service",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Exposes and load balances the application pods"
- }
- },
- "spec": {
- "ports": [
- {
- "name": "web",
- "port": 8080,
- "targetPort": 8080
- }
- ],
- "selector": {
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "Route",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}"
- },
- "spec": {
- "host": "${APPLICATION_DOMAIN}",
- "to": {
- "kind": "Service",
- "name": "${NAME}"
- }
- }
- },
- {
- "kind": "ImageStream",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Keeps track of changes in the application image"
- }
- }
- },
- {
- "kind": "BuildConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to build the application"
- }
- },
- "spec": {
- "source": {
- "type": "Git",
- "git": {
- "uri": "${SOURCE_REPOSITORY_URL}",
- "ref": "${SOURCE_REPOSITORY_REF}"
- },
- "contextDir": "${CONTEXT_DIR}"
- },
- "strategy": {
- "type": "Source",
- "sourceStrategy": {
- "from": {
- "kind": "ImageStreamTag",
- "namespace": "${NAMESPACE}",
- "name": "nodejs:4"
- },
- "env": [
- {
- "name": "NPM_MIRROR",
- "value": "${NPM_MIRROR}"
- }
- ]
- }
- },
- "output": {
- "to": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- },
- "triggers": [
- {
- "type": "ImageChange"
- },
- {
- "type": "ConfigChange"
- },
- {
- "type": "GitHub",
- "github": {
- "secret": "${GITHUB_WEBHOOK_SECRET}"
- }
- },
- {
- "type": "Generic",
- "generic": {
- "secret": "${GENERIC_WEBHOOK_SECRET}"
- }
- }
- ],
- "postCommit": {
- "script": "npm test"
- }
- }
- },
- {
- "kind": "DeploymentConfig",
- "apiVersion": "v1",
- "metadata": {
- "name": "${NAME}",
- "annotations": {
- "description": "Defines how to deploy the application server"
- }
- },
- "spec": {
- "strategy": {
- "type": "Rolling"
- },
- "triggers": [
- {
- "type": "ImageChange",
- "imageChangeParams": {
- "automatic": true,
- "containerNames": [
- "nodejs-example"
- ],
- "from": {
- "kind": "ImageStreamTag",
- "name": "${NAME}:latest"
- }
- }
- },
- {
- "type": "ConfigChange"
- }
- ],
- "replicas": 1,
- "selector": {
- "name": "${NAME}"
- },
- "template": {
- "metadata": {
- "name": "${NAME}",
- "labels": {
- "name": "${NAME}"
- }
- },
- "spec": {
- "containers": [
- {
- "name": "nodejs-example",
- "image": " ",
- "ports": [
- {
- "containerPort": 8080
- }
- ],
- "readinessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 3,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "livenessProbe": {
- "timeoutSeconds": 3,
- "initialDelaySeconds": 30,
- "httpGet": {
- "path": "/",
- "port": 8080
- }
- },
- "resources": {
- "limits": {
- "memory": "${MEMORY_LIMIT}"
- }
- },
- "env": [
- {
- "name": "DATABASE_SERVICE_NAME",
- "value": "${DATABASE_SERVICE_NAME}"
- },
- {
- "name": "MONGODB_USER",
- "value": "${MONGODB_USER}"
- },
- {
- "name": "MONGODB_PASSWORD",
- "value": "${MONGODB_PASSWORD}"
- },
- {
- "name": "MONGODB_DATABASE",
- "value": "${MONGODB_DATABASE}"
- },
- {
- "name": "MONGODB_ADMIN_PASSWORD",
- "value": "${MONGODB_ADMIN_PASSWORD}"
- }
- ],
- "resources": {
- "limits": {
- "memory": "${MEMORY_LIMIT}"
- }
- }
- }
- ]
- }
- }
- }
- }
- ],
- "parameters": [
- {
- "name": "NAME",
- "displayName": "Name",
- "description": "The name assigned to all of the frontend objects defined in this template.",
- "required": true,
- "value": "nodejs-example"
- },
- {
- "name": "NAMESPACE",
- "displayName": "Namespace",
- "description": "The OpenShift Namespace where the ImageStream resides.",
- "required": true,
- "value": "openshift"
- },
- {
- "name": "MEMORY_LIMIT",
- "displayName": "Memory Limit",
- "description": "Maximum amount of memory the container can use.",
- "required": true,
- "value": "512Mi"
- },
- {
- "name": "SOURCE_REPOSITORY_URL",
- "displayName": "Git Repository URL",
- "description": "The URL of the repository with your application source code.",
- "required": true,
- "value": "https://github.com/openshift/nodejs-ex.git"
- },
- {
- "name": "SOURCE_REPOSITORY_REF",
- "displayName": "Git Reference",
- "description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
- },
- {
- "name": "CONTEXT_DIR",
- "displayName": "Context Directory",
- "description": "Set this to the relative path to your project if it is not in the root of your repository."
- },
- {
- "name": "APPLICATION_DOMAIN",
- "displayName": "Application Hostname",
- "description": "The exposed hostname that will route to the Node.js service, if left blank a value will be defaulted.",
- "value": ""
- },
- {
- "name": "GITHUB_WEBHOOK_SECRET",
- "displayName": "GitHub Webhook Secret",
- "description": "A secret string used to configure the GitHub webhook.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "GENERIC_WEBHOOK_SECRET",
- "displayName": "Generic Webhook Secret",
- "description": "A secret string used to configure the Generic webhook.",
- "generate": "expression",
- "from": "[a-zA-Z0-9]{40}"
- },
- {
- "name": "DATABASE_SERVICE_NAME",
- "displayName": "Database Service Name"
- },
- {
- "name": "MONGODB_USER",
- "displayName": "MongoDB Username",
- "description": "Username for MongoDB user that will be used for accessing the database."
- },
- {
- "name": "MONGODB_PASSWORD",
- "displayName": "MongoDB Password",
- "description": "Password for the MongoDB user."
- },
- {
- "name": "MONGODB_DATABASE",
- "displayName": "Database Name"
- },
- {
- "name": "MONGODB_ADMIN_PASSWORD",
- "displayName": "Database Administrator Password",
- "description": "Password for the database admin user."
- },
- {
- "name": "NPM_MIRROR",
- "displayName": "Custom NPM Mirror URL",
- "description": "The custom NPM mirror URL",
- "value": ""
- }
- ]
-}
diff --git a/roles/openshift_examples/tasks/main.yml b/roles/openshift_examples/tasks/main.yml
index 4150fabec..058ad8888 100644
--- a/roles/openshift_examples/tasks/main.yml
+++ b/roles/openshift_examples/tasks/main.yml
@@ -73,6 +73,27 @@
failed_when: "'already exists' not in oex_import_db_templates.stderr and oex_import_db_templates.rc != 0"
changed_when: false
+- name: Remove defunct quickstart template files
+ file:
+ path: "{{ item }}"
+ state: absent
+ with_items:
+ - "{{ quickstarts_base }}/nodejs.json"
+ - "{{ quickstarts_base }}/cakephp.json"
+ - "{{ quickstarts_base }}/dancer.json"
+ - "{{ quickstarts_base }}/django.json"
+
+- name: Remove defunct quickstart templates from openshift namespace
+ command: "{{ openshift.common.client_binary }} -n openshift delete templates/{{ item }}"
+ with_items:
+ - nodejs-example
+ - cakephp-example
+ - dancer-example
+ - django-example
+ register: oex_delete_defunct_quickstart_templates
+ failed_when: "'not found' not in oex_delete_defunct_quickstart_templates.stderr and oex_delete_defunct_quickstart_templates.rc != 0"
+ changed_when: false
+
- name: Import quickstart-templates
command: >
{{ openshift.common.client_binary }} {{ openshift_examples_import_command }} -n openshift -f {{ quickstarts_base }}
diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py
index ebd799466..e5cb0db15 100755
--- a/roles/openshift_facts/library/openshift_facts.py
+++ b/roles/openshift_facts/library/openshift_facts.py
@@ -1730,6 +1730,7 @@ class OpenShiftFacts(object):
{"name": "PodFitsPorts"},
{"name": "NoDiskConflict"},
{"name": "NoVolumeZoneConflict"},
+ {"name": "MaxEBSVolumeCount"},
{"name": "Region", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}
]
scheduler_priorities = [