summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--playbooks/common/openshift-cluster/redeploy-certificates.yml12
-rw-r--r--playbooks/common/openshift-cluster/upgrades/create_service_signer_cert.yml69
-rw-r--r--playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml2
-rw-r--r--playbooks/common/openshift-cluster/upgrades/upgrade.yml24
-rw-r--r--playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml10
l---------roles/etcd_client_certificates/library1
-rwxr-xr-xroles/etcd_common/library/delegated_serial_command.py (renamed from library/delegated_serial_command.py)0
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
-rw-r--r--roles/openshift_node/handlers/main.yml3
-rw-r--r--roles/openshift_node/tasks/systemd_units.yml17
-rw-r--r--utils/src/ooinstall/cli_installer.py2
18 files changed, 156 insertions, 1288 deletions
diff --git a/playbooks/common/openshift-cluster/redeploy-certificates.yml b/playbooks/common/openshift-cluster/redeploy-certificates.yml
index b97906072..5b72c3450 100644
--- a/playbooks/common/openshift-cluster/redeploy-certificates.yml
+++ b/playbooks/common/openshift-cluster/redeploy-certificates.yml
@@ -52,6 +52,14 @@
openshift_ca_host: "{{ groups.oo_first_master.0 }}"
openshift_master_count: "{{ openshift.master.master_count | default(groups.oo_masters | length) }}"
pre_tasks:
+ # set_fact task copied from playbooks/common/openshift-master/config.yml
+ # so that openshift_master_default_subdomain has a default value of ""
+ # (emptry string). openshift_master_default_subdomain must have a default
+ # value for openshift_master_facts to set metrics_public_url.
+ # TODO: clean this up.
+ - set_fact:
+ openshift_master_default_subdomain: "{{ lookup('oo_option', 'openshift_master_default_subdomain') | default(None, true) }}"
+ when: openshift_master_default_subdomain is not defined
- stat:
path: "{{ openshift_generated_configs_dir }}"
register: openshift_generated_configs_dir_stat
@@ -133,7 +141,9 @@
hosts: oo_etcd_to_config
tasks:
- name: restart etcd
- service: name=etcd state=restarted
+ service:
+ name: "{{ 'etcd' if not openshift.common.is_containerized | bool else 'etcd_container' }}"
+ state: restarted
- name: Stop master services
hosts: oo_masters_to_config
diff --git a/playbooks/common/openshift-cluster/upgrades/create_service_signer_cert.yml b/playbooks/common/openshift-cluster/upgrades/create_service_signer_cert.yml
new file mode 100644
index 000000000..e8a20aa2b
--- /dev/null
+++ b/playbooks/common/openshift-cluster/upgrades/create_service_signer_cert.yml
@@ -0,0 +1,69 @@
+---
+- name: Create local temp directory for syncing certs
+ hosts: localhost
+ connection: local
+ become: no
+ gather_facts: no
+ tasks:
+ - name: Create local temp directory for syncing certs
+ local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX
+ register: local_cert_sync_tmpdir
+ changed_when: false
+
+- name: Create service signer certificate
+ hosts: oo_first_master
+ tasks:
+ - name: Create remote temp directory for creating certs
+ command: mktemp -d /tmp/openshift-ansible-XXXXXXX
+ register: remote_cert_create_tmpdir
+ changed_when: false
+
+ - name: Create service signer certificate
+ command: >
+ {{ openshift.common.admin_binary }} ca create-signer-cert
+ --cert=service-signer.crt
+ --key=service-signer.key
+ --name=openshift-service-serving-signer
+ --serial=service-signer.serial.txt
+ args:
+ chdir: "{{ remote_cert_create_tmpdir.stdout }}/"
+
+ - name: Retrieve service signer certificate
+ fetch:
+ src: "{{ remote_cert_create_tmpdir.stdout }}/{{ item }}"
+ dest: "{{ hostvars.localhost.local_cert_sync_tmpdir.stdout }}/"
+ flat: yes
+ fail_on_missing: yes
+ validate_checksum: yes
+ with_items:
+ - "service-signer.crt"
+ - "service-signer.key"
+
+ - name: Delete remote temp directory
+ file:
+ name: "{{ remote_cert_create_tmpdir.stdout }}"
+ state: absent
+ changed_when: false
+
+- name: Deploy service signer certificate
+ hosts: oo_masters_to_config
+ tasks:
+ - name: Deploy service signer certificate
+ copy:
+ src: "{{ hostvars.localhost.local_cert_sync_tmpdir.stdout }}/{{ item }}"
+ dest: "{{ openshift.common.config_base }}/master/"
+ with_items:
+ - "service-signer.crt"
+ - "service-signer.key"
+
+- name: Delete local temp directory
+ hosts: localhost
+ connection: local
+ become: no
+ gather_facts: no
+ tasks:
+ - name: Delete local temp directory
+ file:
+ name: "{{ local_cert_sync_tmpdir.stdout }}"
+ state: absent
+ changed_when: false
diff --git a/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml b/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
index 06b3e244f..8002af4fc 100644
--- a/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
+++ b/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
@@ -28,7 +28,7 @@
- fail:
msg: This playbook requires access to Docker 1.10 or later
# Disable the 1.10 requirement if the user set a specific Docker version
- when: avail_docker_version.stdout | version_compare('1.10','<') and docker_version is not defined
+ when: docker_version is not defined and (docker_upgrade is not defined or docker_upgrade | bool == True) and (avail_docker_version.stdout == "" or avail_docker_version.stdout | version_compare('1.10','<'))
# Default l_docker_upgrade to False, we'll set to True if an upgrade is required:
- set_fact:
diff --git a/playbooks/common/openshift-cluster/upgrades/upgrade.yml b/playbooks/common/openshift-cluster/upgrades/upgrade.yml
index e8bf133e6..ba4fc63be 100644
--- a/playbooks/common/openshift-cluster/upgrades/upgrade.yml
+++ b/playbooks/common/openshift-cluster/upgrades/upgrade.yml
@@ -34,7 +34,7 @@
###############################################################################
# Upgrade Masters
###############################################################################
-- name: Upgrade master
+- name: Upgrade master packages
hosts: oo_masters_to_config
handlers:
- include: ../../../../roles/openshift_master/handlers/main.yml
@@ -45,6 +45,28 @@
- include: rpm_upgrade.yml component=master
when: not openshift.common.is_containerized | bool
+- name: Determine if service signer cert must be created
+ hosts: oo_first_master
+ tasks:
+ - name: Determine if service signer certificate must be created
+ stat:
+ path: "{{ openshift.common.config_base }}/master/service-signer.crt"
+ register: service_signer_cert_stat
+ changed_when: false
+
+# Create service signer cert when missing. Service signer certificate
+# is added to master config in the master config hook for v3_3.
+- include: create_service_signer_cert.yml
+ when: not (hostvars[groups.oo_first_master.0].service_signer_cert_stat.stat.exists | bool)
+
+- name: Upgrade master config and systemd units
+ hosts: oo_masters_to_config
+ handlers:
+ - include: ../../../../roles/openshift_master/handlers/main.yml
+ static: yes
+ roles:
+ - openshift_facts
+ tasks:
- include: "{{ master_config_hook }}"
when: master_config_hook is defined
diff --git a/playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml b/playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml
index 641e7cafc..684eea343 100644
--- a/playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml
+++ b/playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml
@@ -38,3 +38,13 @@
dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
yaml_key: 'masterClients.openshiftLoopbackClientConnectionOverrides.qps'
yaml_value: 300
+
+- modify_yaml:
+ dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+ yaml_key: 'controllerConfig.servicesServingCert.signer.certFile'
+ yaml_value: service-signer.crt
+
+- modify_yaml:
+ dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+ yaml_key: 'controllerConfig.servicesServingCert.signer.keyFile'
+ yaml_value: service-signer.key
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/library/delegated_serial_command.py b/roles/etcd_common/library/delegated_serial_command.py
index 3969edfdd..3969edfdd 100755
--- a/library/delegated_serial_command.py
+++ b/roles/etcd_common/library/delegated_serial_command.py
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 = [
diff --git a/roles/openshift_node/handlers/main.yml b/roles/openshift_node/handlers/main.yml
index b24f61569..34071964a 100644
--- a/roles/openshift_node/handlers/main.yml
+++ b/roles/openshift_node/handlers/main.yml
@@ -1,7 +1,7 @@
---
- name: restart openvswitch
service: name=openvswitch state=restarted
- when: not (ovs_service_status_changed | default(false) | bool)
+ when: not (ovs_service_status_changed | default(false) | bool) and openshift.common.use_openshift_sdn | bool
notify:
- restart openvswitch pause
@@ -12,4 +12,3 @@
- name: restart node
service: name={{ openshift.common.service_type }}-node state=restarted
when: not (node_service_status_changed | default(false) | bool)
-
diff --git a/roles/openshift_node/tasks/systemd_units.yml b/roles/openshift_node/tasks/systemd_units.yml
index 025cb567e..38dc98c07 100644
--- a/roles/openshift_node/tasks/systemd_units.yml
+++ b/roles/openshift_node/tasks/systemd_units.yml
@@ -48,6 +48,23 @@
notify:
- restart node
+- name: Configure Proxy Settings
+ lineinfile:
+ dest: /etc/sysconfig/{{ openshift.common.service_type }}-node
+ regexp: "{{ item.regex }}"
+ line: "{{ item.line }}"
+ create: true
+ with_items:
+ - regex: '^HTTP_PROXY='
+ line: "HTTP_PROXY={{ openshift.common.http_proxy }}"
+ - regex: '^HTTPS_PROXY='
+ line: "HTTPS_PROXY={{ openshift.common.https_proxy }}"
+ - regex: '^NO_PROXY='
+ line: "NO_PROXY={{ openshift.common.no_proxy | join(',') }}"
+ when: "{{ openshift.common.http_proxy is defined and openshift.common.http_proxy != '' }}"
+ notify:
+ - restart node
+
- name: Reload systemd units
command: systemctl daemon-reload
when: openshift.common.is_containerized | bool and (install_node_result | changed or install_ovs_sysconfig | changed or install_node_dep_result | changed)
diff --git a/utils/src/ooinstall/cli_installer.py b/utils/src/ooinstall/cli_installer.py
index dd17fbf89..2ec2b4137 100644
--- a/utils/src/ooinstall/cli_installer.py
+++ b/utils/src/ooinstall/cli_installer.py
@@ -791,7 +791,7 @@ def set_infra_nodes(hosts):
if all(host.is_master() for host in hosts):
infra_list = hosts
else:
- nodes_list = [host for host in hosts if host.is_node()]
+ nodes_list = [host for host in hosts if host.is_schedulable_node(hosts)]
infra_list = nodes_list[:2]
for host in infra_list: