diff options
Diffstat (limited to 'roles/openshift_gcp/tasks')
| -rw-r--r-- | roles/openshift_gcp/tasks/add_custom_repositories.yml | 20 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/configure_gcp_base_image.yml | 10 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/configure_master_bootstrap.yml | 36 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/configure_master_healthcheck.yml | 19 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/dynamic_inventory.yml | 5 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/frequent_log_rotation.yml | 18 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/main.yml (renamed from roles/openshift_gcp/tasks/main.yaml) | 4 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/node_cloud_config.yml | 12 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/publish_image.yml | 32 | ||||
| -rw-r--r-- | roles/openshift_gcp/tasks/setup_scale_group_facts.yml | 44 | 
10 files changed, 198 insertions, 2 deletions
diff --git a/roles/openshift_gcp/tasks/add_custom_repositories.yml b/roles/openshift_gcp/tasks/add_custom_repositories.yml new file mode 100644 index 000000000..04718f78e --- /dev/null +++ b/roles/openshift_gcp/tasks/add_custom_repositories.yml @@ -0,0 +1,20 @@ +--- +- name: Copy custom repository secrets +  copy: +    src: "{{ files_dir }}/{{ item.1.sslclientcert }}" +    dest: /var/lib/yum/custom_secret_{{ item.0 }}_cert +  when: item.1.sslclientcert | default(false) +  with_indexed_items: "{{ provision_custom_repositories }}" +- name: Copy custom repository secrets +  copy: +    src: "{{ files_dir }}/{{ item.1.sslclientkey }}" +    dest: /var/lib/yum/custom_secret_{{ item.0 }}_key +  when: item.1.sslclientkey | default(false) +  with_indexed_items: "{{ provision_custom_repositories }}" + +- name: Create any custom repos that are defined +  template: +    src: yum_repo.j2 +    dest: /etc/yum.repos.d/provision_custom_repositories.repo +  when: provision_custom_repositories | length > 0 +  notify: refresh cache diff --git a/roles/openshift_gcp/tasks/configure_gcp_base_image.yml b/roles/openshift_gcp/tasks/configure_gcp_base_image.yml new file mode 100644 index 000000000..2c6e2790a --- /dev/null +++ b/roles/openshift_gcp/tasks/configure_gcp_base_image.yml @@ -0,0 +1,10 @@ +# GCE instances are starting with xfs AND barrier=1, which is only for extfs. +--- +- name: Remove barrier=1 from XFS fstab entries +  command: sed -i -e 's/xfs\(.*\)barrier=1/xfs\1/g; s/, / /g' /etc/fstab + +- name: Ensure the root filesystem has XFS group quota turned on +  command: sed -i -e 's/linux16 \(.*\)$/linux16 \1 rootflags=gquota/g' /boot/grub2/grub.cfg + +- name: Ensure the root partition grows on startup +  copy: src=partition.conf dest=/etc/systemd/system/google-instance-setup.service.d/ diff --git a/roles/openshift_gcp/tasks/configure_master_bootstrap.yml b/roles/openshift_gcp/tasks/configure_master_bootstrap.yml new file mode 100644 index 000000000..591cb593c --- /dev/null +++ b/roles/openshift_gcp/tasks/configure_master_bootstrap.yml @@ -0,0 +1,36 @@ +# +# These tasks configure the instance to periodically update the project metadata with the +# latest bootstrap kubeconfig from the project metadata. This keeps the project metadata +# in sync with the cluster's configuration. We then invoke a CSR approve on any nodes that +# are waiting to join the cluster. +# +--- +- name: Copy unit service +  copy: +    src: openshift-bootstrap-update.timer +    dest: /etc/systemd/system/openshift-bootstrap-update.timer +    owner: root +    group: root +    mode: 0664 + +- name: Copy unit timer +  copy: +    src: openshift-bootstrap-update.service +    dest: /etc/systemd/system/openshift-bootstrap-update.service +    owner: root +    group: root +    mode: 0664 + +- name: Create bootstrap update script +  template: src=openshift-bootstrap-update.j2 dest=/usr/bin/openshift-bootstrap-update mode=u+rx + +- name: Start bootstrap update timer +  systemd: +    name: "openshift-bootstrap-update.timer" +    state: started + +- name: Bootstrap all nodes that were identified with bootstrap metadata +  run_once: true +  oc_adm_csr: +    nodes: "{{ groups['all'] | map('extract', hostvars) | selectattr('gce_metadata.bootstrap', 'match', 'true') | map(attribute='gce_name') | list }}" +    timeout: 60 diff --git a/roles/openshift_gcp/tasks/configure_master_healthcheck.yml b/roles/openshift_gcp/tasks/configure_master_healthcheck.yml new file mode 100644 index 000000000..aa9655977 --- /dev/null +++ b/roles/openshift_gcp/tasks/configure_master_healthcheck.yml @@ -0,0 +1,19 @@ +--- +- name: refresh yum cache +  command: yum clean all +  args: +    warn: no +  when: ansible_os_family == "RedHat" + +- name: install haproxy +  package: name=haproxy state=present +  register: result +  until: '"failed" not in result' +  retries: 10 +  delay: 10 + +- name: configure haproxy +  template: src=master_healthcheck.j2 dest=/etc/haproxy/haproxy.cfg + +- name: start and enable haproxy service +  service: name=haproxy state=started enabled=yes diff --git a/roles/openshift_gcp/tasks/dynamic_inventory.yml b/roles/openshift_gcp/tasks/dynamic_inventory.yml new file mode 100644 index 000000000..1637da945 --- /dev/null +++ b/roles/openshift_gcp/tasks/dynamic_inventory.yml @@ -0,0 +1,5 @@ +--- +- name: Extract PEM from service account file +  copy: content="{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).private_key }}" dest=/tmp/gce.pem mode=0600 +- name: Templatize environment script +  template: src=inventory.j2.sh dest=/tmp/inventory.sh mode=u+rx diff --git a/roles/openshift_gcp/tasks/frequent_log_rotation.yml b/roles/openshift_gcp/tasks/frequent_log_rotation.yml new file mode 100644 index 000000000..0b4b27f84 --- /dev/null +++ b/roles/openshift_gcp/tasks/frequent_log_rotation.yml @@ -0,0 +1,18 @@ +--- +- name: Rotate logs daily +  replace: +    dest: /etc/logrotate.conf +    regexp: '^weekly|monthly|yearly$' +    replace: daily +- name: Rotate at a smaller size of log +  lineinfile: +    dest: /etc/logrotate.conf +    state: present +    regexp: '^size' +    line: size 10M +- name: Limit total size of log files +  lineinfile: +    dest: /etc/logrotate.conf +    state: present +    regexp: '^maxsize' +    line: maxsize 20M diff --git a/roles/openshift_gcp/tasks/main.yaml b/roles/openshift_gcp/tasks/main.yml index ad205ba33..fb147bc78 100644 --- a/roles/openshift_gcp/tasks/main.yaml +++ b/roles/openshift_gcp/tasks/main.yml @@ -17,7 +17,7 @@  - name: Provision GCP DNS domain    command: /tmp/openshift_gcp_provision_dns.sh    args: -    chdir: "{{ playbook_dir }}/files" +    chdir: "{{ files_dir }}"    register: dns_provision    when:    - state | default('present') == 'present' @@ -33,7 +33,7 @@  - name: Provision GCP resources    command: /tmp/openshift_gcp_provision.sh    args: -    chdir: "{{ playbook_dir }}/files" +    chdir: "{{ files_dir }}"    when:    - state | default('present') == 'present' diff --git a/roles/openshift_gcp/tasks/node_cloud_config.yml b/roles/openshift_gcp/tasks/node_cloud_config.yml new file mode 100644 index 000000000..4e982f497 --- /dev/null +++ b/roles/openshift_gcp/tasks/node_cloud_config.yml @@ -0,0 +1,12 @@ +--- +- name: ensure the /etc/origin folder exists +  file: name=/etc/origin state=directory + +- name: configure gce cloud config options +  ini_file: dest=/etc/origin/cloudprovider/gce.conf section=Global option={{ item.key }} value={{ item.value }} state=present create=yes +  with_items: +    - { key: 'project-id', value: '{{ openshift_gcp_project }}' } +    - { key: 'network-name', value: '{{ openshift_gcp_network_name }}' } +    - { key: 'node-tags', value: '{{ openshift_gcp_prefix }}ocp' } +    - { key: 'node-instance-prefix', value: '{{ openshift_gcp_prefix }}' } +    - { key: 'multizone', value: 'false' } diff --git a/roles/openshift_gcp/tasks/publish_image.yml b/roles/openshift_gcp/tasks/publish_image.yml new file mode 100644 index 000000000..db8a7ca69 --- /dev/null +++ b/roles/openshift_gcp/tasks/publish_image.yml @@ -0,0 +1,32 @@ +--- +- name: Require openshift_gcp_image +  fail: +    msg: "A source image name or family is required for image publishing.  Please ensure `openshift_gcp_image` is defined." +  when: openshift_gcp_image is undefined + +- name: Require openshift_gcp_target_image +  fail: +    msg: "A target image name or family is required for image publishing.  Please ensure `openshift_gcp_target_image` is defined." +  when: openshift_gcp_target_image is undefined + +- block: +  - name: Retrieve images in the {{ openshift_gcp_target_image }} family +    command: > +      gcloud --project "{{ openshift_gcp_project }}" compute images list +        "--filter=family={{ openshift_gcp_target_image }}" +        --format=json --sort-by ~creationTimestamp +    register: images +  - name: Prune oldest images +    command: > +      gcloud --project "{{ openshift_gcp_project }}" compute images delete "{{ item['name'] }}" +    with_items: "{{ (images.stdout | default('[]') | from_json )[( openshift_gcp_keep_images | int ):] }}" +  when: openshift_gcp_keep_images is defined + +- name: Copy the latest image in the family {{ openshift_gcp_image }} to {{ openshift_gcp_target_image }} +  command: > +    gcloud --project "{{ openshift_gcp_target_project | default(openshift_gcp_project) }}" +      beta compute images create +      "{{ openshift_gcp_target_image_name | default(openshift_gcp_target_image + '-' + lookup('pipe','date +%Y%m%d-%H%M%S')) }}" +      --family "{{ openshift_gcp_target_image }}" +      --source-image-family "{{ openshift_gcp_image }}" +      --source-image-project "{{ openshift_gcp_project }}" diff --git a/roles/openshift_gcp/tasks/setup_scale_group_facts.yml b/roles/openshift_gcp/tasks/setup_scale_group_facts.yml new file mode 100644 index 000000000..0fda43123 --- /dev/null +++ b/roles/openshift_gcp/tasks/setup_scale_group_facts.yml @@ -0,0 +1,44 @@ +--- +- name: Add masters to requisite groups +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: masters, etcd +  with_items: "{{ groups['tag_ocp-master'] }}" + +- name: Add a master to the primary masters group +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: primary_master +  with_items: "{{ groups['tag_ocp-master'].0 }}" + +- name: Add non-bootstrapping master node instances to node group +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: nodes +    openshift_node_labels: +      role: infra +  with_items: "{{ groups['tag_ocp-master'] | default([]) | difference(groups['tag_ocp-bootstrap'] | default([])) }}" + +- name: Add infra node instances to node group +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: nodes +    openshift_node_labels: +      role: infra +  with_items: "{{ groups['tag_ocp-infra-node'] | default([]) | difference(groups['tag_ocp-bootstrap'] | default([])) }}" + +- name: Add node instances to node group +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: nodes +    openshift_node_labels: +      role: app +  with_items: "{{ groups['tag_ocp-node'] | default([]) | difference(groups['tag_ocp-bootstrap'] | default([])) }}" + +- name: Add bootstrap node instances +  add_host: +    name: "{{ hostvars[item].gce_name }}" +    groups: bootstrap_nodes +    openshift_node_bootstrap: True +  with_items: "{{ groups['tag_ocp-node'] | default([]) | intersect(groups['tag_ocp-bootstrap'] | default([])) }}" +  when: not (openshift_node_bootstrap | default(False))  | 
