diff options
| author | Clayton Coleman <ccoleman@redhat.com> | 2017-12-21 03:14:04 -0500 | 
|---|---|---|
| committer | Clayton Coleman <ccoleman@redhat.com> | 2018-01-23 10:52:07 -0500 | 
| commit | 949f4eacd2aa47833e1283de284aaed1c7ce91fe (patch) | |
| tree | da6e3f36b196723433969372d5e1f37ef9cb4f97 /playbooks | |
| parent | 91c78123abee34893f5b91ee78749bb3cabb5056 (diff) | |
| download | openshift-949f4eacd2aa47833e1283de284aaed1c7ce91fe.tar.gz openshift-949f4eacd2aa47833e1283de284aaed1c7ce91fe.tar.bz2 openshift-949f4eacd2aa47833e1283de284aaed1c7ce91fe.tar.xz openshift-949f4eacd2aa47833e1283de284aaed1c7ce91fe.zip | |
Move origin-gce roles and playbooks into openshift-ansible
This moves all core functionality into the openshift-ansible repo, adds
the necessary equivalent entrypoint to the openshift-ansible installer
image, and ensures the dynamic inventory mechanisms in openshift-ansible
continue to work.
Notable changes from origin-gce:
* playbook extensions changed to .yml
* dynamic inventory subdirectory created to prevent accidental use
* use the custom entrypoint entrypoint-gcp for this image
* move tasks into openshift_gcp role
Diffstat (limited to 'playbooks')
| -rw-r--r-- | playbooks/gcp/openshift-cluster/build_base_image.yml | 160 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/build_image.yml | 106 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/deprovision.yml | 10 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/install.yml | 24 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/install_gcp.yml | 21 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/inventory.yml | 10 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/launch.yml | 12 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/provision.yml (renamed from playbooks/gcp/provision.yml) | 9 | ||||
| -rw-r--r-- | playbooks/gcp/openshift-cluster/publish_image.yml | 9 | ||||
| l--------- | playbooks/gcp/openshift-cluster/roles | 1 | 
10 files changed, 357 insertions, 5 deletions
| diff --git a/playbooks/gcp/openshift-cluster/build_base_image.yml b/playbooks/gcp/openshift-cluster/build_base_image.yml new file mode 100644 index 000000000..732407334 --- /dev/null +++ b/playbooks/gcp/openshift-cluster/build_base_image.yml @@ -0,0 +1,160 @@ +--- +# This playbook ensures that a base image is up to date with all of the required settings +- name: Launch image build instance +  hosts: localhost +  connection: local +  gather_facts: no +  tasks: +  - name: Require openshift_gcp_root_image +    fail: +      msg: "A root OS image name or family is required for base image building.  Please ensure `openshift_gcp_root_image` is defined." +    when: openshift_gcp_root_image is undefined + +  - name: Create the image instance disk +    gce_pd: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      name: "{{ openshift_gcp_prefix }}build-image-instance" +      disk_type: pd-ssd +      image: "{{ openshift_gcp_root_image }}" +      size_gb: 10 +      state: present + +  - name: Launch the image build instance +    gce: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      machine_type: n1-standard-1 +      instance_names: "{{ openshift_gcp_prefix }}build-image-instance" +      state: present +      tags: +      - build-image-instance +      disk_auto_delete: false +      disks: +      - "{{ openshift_gcp_prefix }}build-image-instance" +    register: gce + +  - add_host: +      hostname: "{{ item.public_ip }}" +      groupname: build_instance_ips +    with_items: "{{ gce.instance_data }}" + +  - name: Wait for instance to respond to SSH +    wait_for: +      delay: 1 +      host: "{{ item.public_ip }}" +      port: 22 +      state: started +      timeout: 120 +    with_items: "{{ gce.instance_data }}" + +- name: Prepare instance content sources +  pre_tasks: +  - set_fact: +      allow_rhel_subscriptions: "{{ rhsub_skip | default('no', True) | lower in ['no', 'false'] }}" +  - set_fact: +      using_rhel_subscriptions: "{{ (deployment_type in ['enterprise', 'atomic-enterprise', 'openshift-enterprise'] or ansible_distribution == 'RedHat') and allow_rhel_subscriptions }}" +  hosts: build_instance_ips +  roles: +  - role: rhel_subscribe +    when: using_rhel_subscriptions +  - role: openshift_repos +    vars: +      openshift_additional_repos: [] +  post_tasks: +  - name: Add custom repositories +    include_role: +      name: openshift_gcp +      tasks_from: add_custom_repositories.yml +  - name: Add the Google Cloud repo +    yum_repository: +      name: google-cloud +      description: Google Cloud Compute +      baseurl: https://packages.cloud.google.com/yum/repos/google-cloud-compute-el7-x86_64 +      gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg +      gpgcheck: yes +      repo_gpgcheck: yes +      state: present +    when: ansible_os_family == "RedHat" +  - name: Add the jdetiber-qemu-user-static copr repo +    yum_repository: +      name: jdetiber-qemu-user-static +      description: QEMU user static COPR +      baseurl: https://copr-be.cloud.fedoraproject.org/results/jdetiber/qemu-user-static/epel-7-$basearch/ +      gpgkey: https://copr-be.cloud.fedoraproject.org/results/jdetiber/qemu-user-static/pubkey.gpg +      gpgcheck: yes +      repo_gpgcheck: no +      state: present +    when: ansible_os_family == "RedHat" +  - name: Install qemu-user-static +    package: +      name: qemu-user-static +      state: present +  - name: Start and enable systemd-binfmt service +    systemd: +      name: systemd-binfmt +      state: started +      enabled: yes + +- name: Build image +  hosts: build_instance_ips +  pre_tasks: +  - name: Set up core host GCP configuration +    include_role: +      name: openshift_gcp +      tasks_from: configure_gcp_base_image.yml +  roles: +  - role: os_update_latest +  post_tasks: +  - name: Disable all repos on RHEL +    command: subscription-manager repos --disable="*" +    when: using_rhel_subscriptions +  - name: Enable repos for packages on RHEL +    command: subscription-manager repos --enable="rhel-7-server-rpms" --enable="rhel-7-server-extras-rpms" +    when: using_rhel_subscriptions +  - name: Install common image prerequisites +    package: name={{ item }} state=latest +    with_items: +    - docker +    - google-compute-engine +    - google-compute-engine-init +    - google-config +    - wget +    - git +    - net-tools +    - bind-utils +    - iptables-services +    - bridge-utils +    - bash-completion +  - name: Clean yum metadata +    command: yum clean all +    args: +      warn: no +    when: ansible_os_family == "RedHat" + +- name: Commit image +  hosts: localhost +  connection: local +  tasks: +  - name: Terminate the image build instance +    gce: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      instance_names: "{{ openshift_gcp_prefix }}build-image-instance" +      state: absent +  - name: Save the new image +    command: gcloud --project "{{ openshift_gcp_project}}" compute images create "{{ openshift_gcp_base_image_name | default(openshift_gcp_base_image + '-' + lookup('pipe','date +%Y%m%d-%H%M%S')) }}" --source-disk "{{ openshift_gcp_prefix }}build-image-instance" --source-disk-zone "{{ openshift_gcp_zone }}" --family "{{ openshift_gcp_base_image }}" +  - name: Remove the image instance disk +    gce_pd: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      name: "{{ openshift_gcp_prefix }}build-image-instance" +      state: absent diff --git a/playbooks/gcp/openshift-cluster/build_image.yml b/playbooks/gcp/openshift-cluster/build_image.yml new file mode 100644 index 000000000..787de8ebc --- /dev/null +++ b/playbooks/gcp/openshift-cluster/build_image.yml @@ -0,0 +1,106 @@ +--- +- name: Verify prerequisites for image build +  hosts: localhost +  connection: local +  gather_facts: no +  tasks: +  - name: Require openshift_gcp_base_image +    fail: +      msg: "A base image name or family is required for image building.  Please ensure `openshift_gcp_base_image` is defined." +    when: openshift_gcp_base_image is undefined + +- name: Launch image build instance +  hosts: localhost +  connection: local +  gather_facts: no +  tasks: +  - name: Set facts +    set_fact: +      openshift_node_bootstrap: True +      openshift_master_unsupported_embedded_etcd: True + +  - name: Create the image instance disk +    gce_pd: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      name: "{{ openshift_gcp_prefix }}build-image-instance" +      disk_type: pd-ssd +      image: "{{ openshift_gcp_base_image }}" +      size_gb: 10 +      state: present + +  - name: Launch the image build instance +    gce: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      machine_type: n1-standard-1 +      instance_names: "{{ openshift_gcp_prefix }}build-image-instance" +      state: present +      tags: +      - build-image-instance +      disk_auto_delete: false +      disks: +      - "{{ openshift_gcp_prefix }}build-image-instance" +    register: gce + +  - name: add host to nodes +    add_host: +      hostname: "{{ item.public_ip }}" +      groupname: nodes +    with_items: "{{ gce.instance_data }}" + +  - name: Wait for instance to respond to SSH +    wait_for: +      delay: 1 +      host: "{{ item.public_ip }}" +      port: 22 +      state: started +      timeout: 120 +    with_items: "{{ gce.instance_data }}" + +- hosts: nodes +  tasks: +  - name: Set facts +    set_fact: +      openshift_node_bootstrap: True + +# This is the part that installs all of the software and configs for the instance +# to become a node. +- import_playbook: ../../openshift-node/private/image_prep.yml + +# Add additional GCP specific behavior +- hosts: nodes +  tasks: +  - include_role: +      name: openshift_gcp +      tasks_from: node_cloud_config.yml +  - include_role: +      name: openshift_gcp +      tasks_from: frequent_log_rotation.yml + +- name: Commit image +  hosts: localhost +  connection: local +  tasks: +  - name: Terminate the image build instance +    gce: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      instance_names: "{{ openshift_gcp_prefix }}build-image-instance" +      state: absent +  - name: Save the new image +    command: gcloud --project "{{ openshift_gcp_project}}" compute images create "{{ openshift_gcp_image_name | default(openshift_gcp_image + '-' + lookup('pipe','date +%Y%m%d-%H%M%S')) }}" --source-disk "{{ openshift_gcp_prefix }}build-image-instance" --source-disk-zone "{{ openshift_gcp_zone }}" --family "{{ openshift_gcp_image }}" +  - name: Remove the image instance disk +    gce_pd: +      service_account_email: "{{ (lookup('file', openshift_gcp_iam_service_account_keyfile ) | from_json ).client_email }}" +      credentials_file: "{{ openshift_gcp_iam_service_account_keyfile }}" +      project_id: "{{ openshift_gcp_project }}" +      zone: "{{ openshift_gcp_zone }}" +      name: "{{ openshift_gcp_prefix }}build-image-instance" +      state: absent diff --git a/playbooks/gcp/openshift-cluster/deprovision.yml b/playbooks/gcp/openshift-cluster/deprovision.yml new file mode 100644 index 000000000..589fddd2f --- /dev/null +++ b/playbooks/gcp/openshift-cluster/deprovision.yml @@ -0,0 +1,10 @@ +# This playbook terminates a running cluster +--- +- name: Terminate running cluster and remove all supporting resources in GCE +  hosts: localhost +  connection: local +  tasks: +  - include_role: +      name: openshift_gcp +    vars: +      state: absent diff --git a/playbooks/gcp/openshift-cluster/install.yml b/playbooks/gcp/openshift-cluster/install.yml new file mode 100644 index 000000000..01eefb023 --- /dev/null +++ b/playbooks/gcp/openshift-cluster/install.yml @@ -0,0 +1,24 @@ +# This playbook installs onto a provisioned cluster +--- +- hosts: localhost +  connection: local +  tasks: +  - name: place all scale groups into Ansible groups +    include_role: +      name: openshift_gcp +      tasks_from: setup_scale_group_facts.yml + +- name: run the cluster deploy +  import_playbook: ../../deploy_cluster.yml + +- name: run the GCP specific post steps +  import_playbook: install_gcp.yml + +- hosts: primary_master +  gather_facts: no +  tasks: +  - name: Retrieve cluster configuration +    fetch: +      src: "{{ openshift.common.config_base }}/master/admin.kubeconfig" +      dest: "/tmp/" +      flat: yes diff --git a/playbooks/gcp/openshift-cluster/install_gcp.yml b/playbooks/gcp/openshift-cluster/install_gcp.yml new file mode 100644 index 000000000..09db78971 --- /dev/null +++ b/playbooks/gcp/openshift-cluster/install_gcp.yml @@ -0,0 +1,21 @@ +--- +- hosts: masters +  gather_facts: no +  tasks: +  - name: create master health check service +    include_role: +      name: openshift_gcp +      tasks_from: configure_master_healthcheck.yml +  - name: configure node bootstrapping +    include_role: +      name: openshift_gcp +      tasks_from: configure_master_bootstrap.yml +    when: +    - openshift_master_bootstrap_enabled | default(False) +  - name: configure node bootstrap autoapprover +    include_role: +      name: openshift_bootstrap_autoapprover +      tasks_from: main +    when: +    - openshift_master_bootstrap_enabled | default(False) +    - openshift_master_bootstrap_auto_approve | default(False) | bool diff --git a/playbooks/gcp/openshift-cluster/inventory.yml b/playbooks/gcp/openshift-cluster/inventory.yml new file mode 100644 index 000000000..96de6d6db --- /dev/null +++ b/playbooks/gcp/openshift-cluster/inventory.yml @@ -0,0 +1,10 @@ +--- +- name: Set up the connection variables for retrieving inventory from GCE +  hosts: localhost +  connection: local +  gather_facts: no +  tasks: +  - name: materialize the inventory +    include_role: +      name: openshift_gcp +      tasks_from: dynamic_inventory.yml diff --git a/playbooks/gcp/openshift-cluster/launch.yml b/playbooks/gcp/openshift-cluster/launch.yml new file mode 100644 index 000000000..02f00408a --- /dev/null +++ b/playbooks/gcp/openshift-cluster/launch.yml @@ -0,0 +1,12 @@ +# This playbook launches a new cluster or converges it if already launched +--- +- import_playbook: build_image.yml +  when: openshift_gcp_build_image | default(False) | bool + +- import_playbook: provision.yml + +- hosts: localhost +  tasks: +  - meta: refresh_inventory + +- import_playbook: install.yml diff --git a/playbooks/gcp/provision.yml b/playbooks/gcp/openshift-cluster/provision.yml index b6edf9961..293a195c9 100644 --- a/playbooks/gcp/provision.yml +++ b/playbooks/gcp/openshift-cluster/provision.yml @@ -3,11 +3,10 @@    hosts: localhost    connection: local    gather_facts: no +  roles: +  - openshift_gcp    tasks: - -  - name: provision a GCP cluster in the specified project +  - name: recalculate the dynamic inventory      import_role:        name: openshift_gcp - -- name: run the cluster deploy -  import_playbook: ../deploy_cluster.yml +      tasks_from: dynamic_inventory.yml diff --git a/playbooks/gcp/openshift-cluster/publish_image.yml b/playbooks/gcp/openshift-cluster/publish_image.yml new file mode 100644 index 000000000..76fd49e9c --- /dev/null +++ b/playbooks/gcp/openshift-cluster/publish_image.yml @@ -0,0 +1,9 @@ +--- +- name: Publish the most recent image +  hosts: localhost +  connection: local +  gather_facts: no +  tasks: +  - import_role: +      name: openshift_gcp +      tasks_from: publish_image.yml diff --git a/playbooks/gcp/openshift-cluster/roles b/playbooks/gcp/openshift-cluster/roles new file mode 120000 index 000000000..20c4c58cf --- /dev/null +++ b/playbooks/gcp/openshift-cluster/roles @@ -0,0 +1 @@ +../../../roles
\ No newline at end of file | 
