Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 3 additions & 14 deletions README_GCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,29 +39,18 @@ Create a gce.ini file for GCE
* gce_service_account_pem_file_path - Full path from previous steps
* gce_project_id - Found in "Projects", it list all the gce projects you are associated with. The page lists their "Project Name" and "Project ID". You want the "Project ID"

Mandatory customization variables (check the values according to your tenant):
* zone = europe-west1-d
* network = default
* gce_machine_type = n1-standard-2
* gce_machine_image = preinstalled-slave-50g-v5


1. vi ~/.gce/gce.ini
1. make the contents look like this:
```
[gce]
gce_service_account_email_address = long...@developer.gserviceaccount.com
gce_service_account_pem_file_path = /full/path/to/project_id-gce_key_hash.pem
gce_project_id = project_id
zone = europe-west1-d
network = default
gce_machine_type = n1-standard-2
gce_machine_image = preinstalled-slave-50g-v5

```
1. Define the environment variable GCE_INI_PATH so gce.py can pick it up and bin/cluster can also read it
1. Setup a sym link so that gce.py will pick it up (link must be in same dir as gce.py)
```
export GCE_INI_PATH=~/.gce/gce.ini
cd openshift-ansible/inventory/gce
ln -s ~/.gce/gce.ini gce.ini
```


Expand Down
12 changes: 4 additions & 8 deletions bin/cluster
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,10 @@ class Cluster(object):
"""
config = ConfigParser.ConfigParser()
if 'gce' == provider:
gce_ini_default_path = os.path.join(
'inventory/gce/hosts/gce.ini')
gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path)
if os.path.exists(gce_ini_path):
config.readfp(open(gce_ini_path))

for key in config.options('gce'):
os.environ[key] = config.get('gce', key)
config.readfp(open('inventory/gce/hosts/gce.ini'))

for key in config.options('gce'):
os.environ[key] = config.get('gce', key)

inventory = '-i inventory/gce/hosts'
elif 'aws' == provider:
Expand Down
9 changes: 3 additions & 6 deletions inventory/gce/hosts/gce.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ def get_gce_driver(self):
os.path.dirname(os.path.realpath(__file__)), "gce.ini")
gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path)


# Create a ConfigParser.
# This provides empty defaults to each key, so that environment
# variable configuration (as opposed to INI configuration) is able
Expand Down Expand Up @@ -174,7 +173,6 @@ def get_gce_driver(self):
args[1] = os.environ.get('GCE_PEM_FILE_PATH', args[1])
kwargs['project'] = os.environ.get('GCE_PROJECT', kwargs['project'])


# Retrieve and return the GCE driver.
gce = get_driver(Provider.GCE)(*args, **kwargs)
gce.connection.user_agent_append(
Expand Down Expand Up @@ -213,17 +211,16 @@ def node_to_dict(self, inst):
'gce_image': inst.image,
'gce_machine_type': inst.size,
'gce_private_ip': inst.private_ips[0],
# Hosts don't always have a public IP name
#'gce_public_ip': inst.public_ips[0],
'gce_public_ip': inst.public_ips[0],
'gce_name': inst.name,
'gce_description': inst.extra['description'],
'gce_status': inst.extra['status'],
'gce_zone': inst.extra['zone'].name,
'gce_tags': inst.extra['tags'],
'gce_metadata': md,
'gce_network': net,
# Hosts don't always have a public IP name
#'ansible_ssh_host': inst.public_ips[0]
# Hosts don't have a public name, so we add an IP
'ansible_ssh_host': inst.public_ips[0]
}

def get_instance(self, instance_name):
Expand Down
2 changes: 1 addition & 1 deletion inventory/openstack/hosts/nova.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
# executed with no parameters, return the list of
# all groups and hosts

NOVA_CONFIG_FILES = [os.path.join(os.path.dirname(os.path.realpath(__file__)), "nova.ini"),
NOVA_CONFIG_FILES = [os.getcwd() + "/nova.ini",
os.path.expanduser(os.environ.get('ANSIBLE_CONFIG', "~/nova.ini")),
"/etc/ansible/nova.ini"]

Expand Down

This file was deleted.

4 changes: 0 additions & 4 deletions playbooks/gce/openshift-cluster/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
- set_fact:
g_ssh_user_tmp: "{{ deployment_vars[deployment_type].ssh_user }}"
g_sudo_tmp: "{{ deployment_vars[deployment_type].sudo }}"
use_sdn: "{{ do_we_use_openshift_sdn }}"
sdn_plugin: "{{ sdn_network_plugin }}"

- include: ../../common/openshift-cluster/config.yml
vars:
Expand All @@ -24,5 +22,3 @@
openshift_debug_level: 2
openshift_deployment_type: "{{ deployment_type }}"
openshift_hostname: "{{ gce_private_ip }}"
openshift_use_openshift_sdn: "{{ hostvars.localhost.use_sdn }}"
os_sdn_network_plugin_name: "{{ hostvars.localhost.sdn_plugin }}"
49 changes: 0 additions & 49 deletions playbooks/gce/openshift-cluster/join_node.yml

This file was deleted.

54 changes: 27 additions & 27 deletions playbooks/gce/openshift-cluster/launch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,33 @@
type: "{{ k8s_type }}"
g_sub_host_type: "{{ sub_host_type }}"

# - include: ../../common/openshift-cluster/set_infra_launch_facts_tasks.yml
# vars:
# type: "infra"
# count: "{{ num_infra }}"
# - include: tasks/launch_instances.yml
# vars:
# instances: "{{ infra_names }}"
# cluster: "{{ cluster_id }}"
# type: "{{ k8s_type }}"
# g_sub_host_type: "{{ sub_host_type }}"
#
# - set_fact:
# a_infra: "{{ infra_names[0] }}"
# - add_host: name={{ a_infra }} groups=service_master
#
- include: ../../common/openshift-cluster/set_node_launch_facts_tasks.yml
vars:
type: "infra"
count: "{{ num_infra }}"
- include: tasks/launch_instances.yml
vars:
instances: "{{ infra_names }}"
cluster: "{{ cluster_id }}"
type: "{{ k8s_type }}"
g_sub_host_type: "{{ sub_host_type }}"

- set_fact:
a_infra: "{{ infra_names[0] }}"
- add_host: name={{ a_infra }} groups=service_master

- include: update.yml
#
#- name: Deploy OpenShift Services
# hosts: service_master
# connection: ssh
# gather_facts: yes
# roles:
# - openshift_registry
# - openshift_router
#
#- include: ../../common/openshift-cluster/create_services.yml
# vars:
# g_svc_master: "{{ service_master }}"

- name: Deploy OpenShift Services
hosts: service_master
connection: ssh
gather_facts: yes
roles:
- openshift_registry
- openshift_router

- include: ../../common/openshift-cluster/create_services.yml
vars:
g_svc_master: "{{ service_master }}"

- include: list.yml
4 changes: 2 additions & 2 deletions playbooks/gce/openshift-cluster/list.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
groups: oo_list_hosts
ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"
ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated | default([]))
with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated)

- name: List instance(s)
hosts: oo_list_hosts
gather_facts: no
tasks:
- debug:
msg: "private ip:{{ hostvars[inventory_hostname].gce_private_ip }}"
msg: "public ip:{{ hostvars[inventory_hostname].gce_public_ip }} private ip:{{ hostvars[inventory_hostname].gce_private_ip }}"
21 changes: 8 additions & 13 deletions playbooks/gce/openshift-cluster/tasks/launch_instances.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,33 @@
service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
project_id: "{{ lookup('env', 'gce_project_id') }}"
zone: "{{ lookup('env', 'zone') }}"
network: "{{ lookup('env', 'network') }}"
# unsupported in 1.9.+
#service_account_permissions: "datastore,logging-write"
tags:
- created-by-{{ lookup('env', 'LOGNAME') |default(cluster, true) }}
- env-{{ cluster }}
- host-type-{{ type }}
- sub-host-type-{{ g_sub_host_type }}
- sub-host-type-{{ sub_host_type }}
- env-host-type-{{ cluster }}-openshift-{{ type }}
when: instances |length > 0
register: gce

- name: Add new instances to groups and set variables needed
add_host:
hostname: "{{ item.name }}"
ansible_ssh_host: "{{ item.name }}"
ansible_ssh_host: "{{ item.public_ip }}"
ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"
ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
groups: "{{ item.tags | oo_prepend_strings_in_list('tag_') | join(',') }}"
gce_public_ip: "{{ item.public_ip }}"
gce_private_ip: "{{ item.private_ip }}"
with_items: gce.instance_data | default([])
with_items: gce.instance_data

- name: Wait for ssh
wait_for: port=22 host={{ item.name }}
with_items: gce.instance_data | default([])
wait_for: port=22 host={{ item.public_ip }}
with_items: gce.instance_data

- name: Wait for user setup
command: "ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ hostvars[item.name].ansible_ssh_user }}@{{ item.public_ip }} echo {{ hostvars[item.name].ansible_ssh_user }} user is setup"
register: result
until: result.rc == 0
retries: 30
delay: 5
with_items: gce.instance_data | default([])
retries: 20
delay: 10
with_items: gce.instance_data
55 changes: 21 additions & 34 deletions playbooks/gce/openshift-cluster/terminate.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
---
- name: Terminate instance(s)
hosts: localhost
connection: local
gather_facts: no
vars_files:
- vars.yml
tasks:
- set_fact: scratch_group=tag_env-{{ cluster_id }}
- set_fact: scratch_group=tag_env-host-type-{{ cluster_id }}-openshift-node
- add_host:
name: "{{ item }}"
groups: oo_hosts_to_terminate
groups: oo_hosts_to_terminate, oo_nodes_to_terminate
ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"
ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated | default([]))
with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated)

- set_fact: scratch_group=tag_env-host-type-{{ cluster_id }}-openshift-master
- add_host:
name: "{{ item }}"
groups: oo_hosts_to_terminate, oo_masters_to_terminate
ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"
ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated)

- name: Unsubscribe VMs
hosts: oo_hosts_to_terminate
Expand All @@ -25,34 +32,14 @@
lookup('oo_option', 'rhel_skip_subscription') | default(rhsub_skip, True) |
default('no', True) | lower in ['no', 'false']

- name: Terminate instances(s)
hosts: localhost
connection: local
gather_facts: no
vars_files:
- vars.yml
tasks:

- name: Terminate instances that were previously launched
local_action:
module: gce
state: 'absent'
name: "{{ item }}"
service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
project_id: "{{ lookup('env', 'gce_project_id') }}"
zone: "{{ lookup('env', 'zone') }}"
with_items: groups['oo_hosts_to_terminate'] | default([])
when: item is defined
- include: ../openshift-node/terminate.yml
vars:
gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
gce_project_id: "{{ lookup('env', 'gce_project_id') }}"

#- include: ../openshift-node/terminate.yml
# vars:
# gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
# gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
# gce_project_id: "{{ lookup('env', 'gce_project_id') }}"
#
#- include: ../openshift-master/terminate.yml
# vars:
# gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
# gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
# gce_project_id: "{{ lookup('env', 'gce_project_id') }}"
- include: ../openshift-master/terminate.yml
vars:
gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"
gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"
gce_project_id: "{{ lookup('env', 'gce_project_id') }}"
8 changes: 3 additions & 5 deletions playbooks/gce/openshift-cluster/vars.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
---
do_we_use_openshift_sdn: true
sdn_network_plugin: redhat/openshift-ovs-subnet
# os_sdn_network_plugin_name can be ovssubnet or multitenant, see https://docs.openshift.org/latest/architecture/additional_concepts/sdn.html#ovssubnet-plugin-operation
deployment_vars:
origin:
image: preinstalled-slave-50g-v5
ssh_user: root
image: centos-7
ssh_user:
sudo: yes
online:
image: libra-rhel7
Expand All @@ -15,3 +12,4 @@ deployment_vars:
image: rhel-7
ssh_user:
sudo: yes

Loading