diff options
| author | Jason DeTiberus <jdetiber@redhat.com> | 2016-01-12 16:24:44 -0500 | 
|---|---|---|
| committer | Jason DeTiberus <jdetiber@redhat.com> | 2016-01-14 16:36:41 -0500 | 
| commit | 57b7434b1e34c8bcdfbc2db7f1261d63bcf39128 (patch) | |
| tree | 1f582d3bf833156b35b6ac7de13b1da384b7d798 | |
| parent | bb68821ae9a65beee135cb6a3ddfbfbdd39d8b4a (diff) | |
| download | openshift-57b7434b1e34c8bcdfbc2db7f1261d63bcf39128.tar.gz openshift-57b7434b1e34c8bcdfbc2db7f1261d63bcf39128.tar.bz2 openshift-57b7434b1e34c8bcdfbc2db7f1261d63bcf39128.tar.xz openshift-57b7434b1e34c8bcdfbc2db7f1261d63bcf39128.zip  | |
Use local address for loopback kubeconfig
| -rwxr-xr-x | roles/openshift_facts/library/openshift_facts.py | 101 | ||||
| -rw-r--r-- | roles/openshift_master/tasks/main.yml | 34 | ||||
| -rw-r--r-- | roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 | 2 | ||||
| -rw-r--r-- | roles/openshift_master/vars/main.yml | 2 | 
4 files changed, 92 insertions, 47 deletions
diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index a148c1362..9096f7ebf 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -461,53 +461,68 @@ def set_url_facts_if_unset(facts):                    were not already present      """      if 'master' in facts: -        api_use_ssl = facts['master']['api_use_ssl'] -        api_port = facts['master']['api_port'] -        controllers_port = facts['master']['controllers_port'] -        console_use_ssl = facts['master']['console_use_ssl'] -        console_port = facts['master']['console_port'] -        console_path = facts['master']['console_path'] -        etcd_use_ssl = facts['master']['etcd_use_ssl'] -        etcd_hosts = facts['master']['etcd_hosts'] -        etcd_port = facts['master']['etcd_port']          hostname = facts['common']['hostname'] -        public_hostname = facts['common']['public_hostname']          cluster_hostname = facts['master'].get('cluster_hostname')          cluster_public_hostname = facts['master'].get('cluster_public_hostname') +        public_hostname = facts['common']['public_hostname'] +        api_hostname = cluster_hostname if cluster_hostname else hostname +        api_public_hostname = cluster_public_hostname if cluster_public_hostname else public_hostname +        console_path = facts['master']['console_path'] +        etcd_hosts = facts['master']['etcd_hosts'] + +        use_ssl = dict( +            api=facts['master']['api_use_ssl'], +            public_api=facts['master']['api_use_ssl'], +            loopback_api=facts['master']['api_use_ssl'], +            console=facts['master']['console_use_ssl'], +            public_console=facts['master']['console_use_ssl'], +            etcd=facts['master']['etcd_use_ssl'] +        ) + +        ports = dict( +            api=facts['master']['api_port'], +            public_api=facts['master']['api_port'], +            loopback_api=facts['master']['api_port'], +            console=facts['master']['console_port'], +            public_console=facts['master']['console_port'], +            etcd=facts['master']['etcd_port'], +        ) + +        etcd_urls = [] +        if etcd_hosts != '': +            facts['master']['etcd_port'] = ports['etcd'] +            facts['master']['embedded_etcd'] = False +            for host in etcd_hosts: +                etcd_urls.append(format_url(use_ssl['etcd'], host, +                                            ports['etcd'])) +        else: +            etcd_urls = [format_url(use_ssl['etcd'], hostname, +                                    ports['etcd'])] + +        facts['master'].setdefault('etcd_urls', etcd_urls) + +        prefix_hosts = [('api', api_hostname), +                        ('public_api', api_public_hostname), +                        ('loopback_api', hostname)] + +        for prefix, host in prefix_hosts: +            facts['master'].setdefault(prefix + '_url', format_url(use_ssl[prefix], +                                                                   host, +                                                                   ports[prefix])) + + +        r_lhn = "{0}:{1}".format(api_hostname, ports['api']).replace('.', '-') +        facts['master'].setdefault('loopback_cluster_name', r_lhn) +        facts['master'].setdefault('loopback_context_name', "default/{0}/system:openshift-master".format(r_lhn)) +        facts['master'].setdefault('loopback_user', "system:openshift-master/{0}".format(r_lhn)) + +        prefix_hosts = [('console', api_hostname), ('public_console', api_public_hostname)] +        for prefix, host in prefix_hosts: +            facts['master'].setdefault(prefix + '_url', format_url(use_ssl[prefix], +                                                                   host, +                                                                   ports[prefix], +                                                                   console_path)) -        if 'etcd_urls' not in facts['master']: -            etcd_urls = [] -            if etcd_hosts != '': -                facts['master']['etcd_port'] = etcd_port -                facts['master']['embedded_etcd'] = False -                for host in etcd_hosts: -                    etcd_urls.append(format_url(etcd_use_ssl, host, -                                                etcd_port)) -            else: -                etcd_urls = [format_url(etcd_use_ssl, hostname, -                                        etcd_port)] -            facts['master']['etcd_urls'] = etcd_urls -        if 'api_url' not in facts['master']: -            api_hostname = cluster_hostname if cluster_hostname else hostname -            facts['master']['api_url'] = format_url(api_use_ssl, api_hostname, -                                                    api_port) -        if 'public_api_url' not in facts['master']: -            api_public_hostname = cluster_public_hostname if cluster_public_hostname else public_hostname -            facts['master']['public_api_url'] = format_url(api_use_ssl, -                                                           api_public_hostname, -                                                           api_port) -        if 'console_url' not in facts['master']: -            console_hostname = cluster_hostname if cluster_hostname else hostname -            facts['master']['console_url'] = format_url(console_use_ssl, -                                                        console_hostname, -                                                        console_port, -                                                        console_path) -        if 'public_console_url' not in facts['master']: -            console_public_hostname = cluster_public_hostname if cluster_public_hostname else public_hostname -            facts['master']['public_console_url'] = format_url(console_use_ssl, -                                                               console_public_hostname, -                                                               console_port, -                                                               console_path)      return facts  def set_aggregate_facts(facts): diff --git a/roles/openshift_master/tasks/main.yml b/roles/openshift_master/tasks/main.yml index 80a605c43..462a7ab58 100644 --- a/roles/openshift_master/tasks/main.yml +++ b/roles/openshift_master/tasks/main.yml @@ -192,7 +192,6 @@    template:      src: "{{ ha_svc_template_path }}/atomic-openshift-master-api.j2"      dest: /etc/sysconfig/{{ openshift.common.service_type }}-master-api -    force: no    when: openshift_master_ha | bool and openshift_master_cluster_method == "native"    notify:    - restart master api @@ -201,7 +200,6 @@    template:      src: "{{ ha_svc_template_path }}/atomic-openshift-master-controllers.j2"      dest: /etc/sysconfig/{{ openshift.common.service_type }}-master-controllers -    force: no    when: openshift_master_ha | bool and openshift_master_cluster_method == "native"    notify:    - restart master controllers @@ -210,7 +208,6 @@    template:      src: "atomic-openshift-master.j2"      dest: /etc/sysconfig/{{ openshift.common.service_type }}-master -    force: no    notify:    - restart master @@ -237,6 +234,37 @@    - restart master api    - restart master controllers +- name: Test local loopback context +  command: > +    {{ openshift.common.client_binary }} config view +    --config={{ openshift_master_loopback_config }} +  changed_when: false +  register: loopback_config + +- command: > +    {{ openshift.common.client_binary }} config set-cluster +    --certificate-authority={{ openshift_master_config_dir }}/ca.crt +    --embed-certs=true --server={{ openshift.master.loopback_api_url }} +    {{ openshift.master.loopback_cluster_name }} +    --config={{ openshift_master_loopback_config }} +  when: loopback_context_string not in loopback_config.stdout +  register: set_loopback_cluster + +- command: > +    {{ openshift.common.client_binary }} config set-context +    --cluster={{ openshift.master.loopback_cluster_name }} +    --namespace=default --user={{ openshift.master.loopback_user }} +    {{ openshift.master.loopback_context_name }} +    --config={{ openshift_master_loopback_config }} +  when: set_loopback_cluster | changed +  register: set_loopback_context + +- command: > +    {{ openshift.common.client_binary }} config use-context {{ openshift.master.loopback_context_name }} +    --config={{ openshift_master_loopback_config }} +  when: set_loopback_context | changed +  register: set_current_context +  - name: Start and enable master    service: name={{ openshift.common.service_type }}-master enabled=yes state=started    when: not openshift_master_ha | bool diff --git a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 index 6e5783f9d..c9aa15b41 100644 --- a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 +++ b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 @@ -1,4 +1,4 @@ -OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.api_port }} --master=https://{{ openshift.common.ip }}:{{ openshift.master.api_port }} +OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.api_port }} --master={{ openshift.master.loopback_api_url }}:{{ openshift.master.api_port }}  CONFIG_FILE={{ openshift_master_config_file }}  # Proxy configuration diff --git a/roles/openshift_master/vars/main.yml b/roles/openshift_master/vars/main.yml index 48b5940f9..fe88c3c16 100644 --- a/roles/openshift_master/vars/main.yml +++ b/roles/openshift_master/vars/main.yml @@ -1,6 +1,8 @@  ---  openshift_master_config_dir: "{{ openshift.common.config_base }}/master"  openshift_master_config_file: "{{ openshift_master_config_dir }}/master-config.yaml" +openshift_master_loopback_config: "{{ openshift_master_config_dir }}/openshift-master.kubeconfig" +loopback_context_string: "current-context: {{ openshift.master.loopback_context_name }}"  openshift_master_scheduler_conf: "{{ openshift_master_config_dir }}/scheduler.json"  openshift_master_session_secrets_file: "{{ openshift_master_config_dir }}/session-secrets.yaml"  openshift_master_policy: "{{ openshift_master_config_dir }}/policy.json"  | 
