Skip to content
Snippets Groups Projects
Commit dfc2afaa authored by Chris Hines's avatar Chris Hines
Browse files

Merge pull request #39 from shahaan/mcc-nectar

I'm merging this one, but I'd like a couple of extra features down the line. In particular I would like the dynamic inventory to take as an argument the heat stack name or ID and walk down the tree from there (so that I can run two independent clusters out of the same tenancy). I like the use of ansible_host_group and ansible_ssh_user in the metadata.
parents 82e9fa6e 3515783d
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
import sys, os, string, subprocess, socket, re
import copy, shlex,uuid, random, multiprocessing, time, shutil, json
import novaclient.v1_1.client as nvclient
import novaclient.exceptions as nvexceptions
class Authenticate:
def __init__(self, username, passwd):
self.username=username
self.passwd=passwd
self.tenantName= os.environ['OS_TENANT_NAME']
self.tenantID= os.environ['OS_TENANT_ID']
self.authUrl="https://keystone.rc.nectar.org.au:5000/v2.0"
def gatherInfo(self):
## Fetch the Nova Object
nc = nvclient.Client( auth_url=self.authUrl,
username=self.username,
api_key=self.passwd,
project_id=self.tenantName,
tenant_id=self.tenantID,
service_type="compute"
)
inventory = {}
inventory['_meta'] = { 'hostvars': {} }
for server in nc.servers.list():
if server.metadata:
hostname = socket.gethostbyaddr(server.networks.values()[0][0])[0]
# Set Ansible Host Group
if server.metadata['ansible_host_group'] in inventory:
inventory[server.metadata['ansible_host_group']].append(hostname)
else:
inventory[server.metadata['ansible_host_group']] = [hostname]
# Set the other host variables
inventory['_meta']['hostvars'][hostname] = {}
inventory['_meta']['hostvars'][hostname]['ansible_ssh_user'] = server.metadata['ansible_ssh_user']
inventory['_meta']['hostvars'][hostname]['ansible_ssh_private_key_file'] = server.metadata['ansible_ssh_private_key_file']
else:
continue
print json.dumps(inventory)
if __name__ == "__main__":
username = os.environ['OS_USERNAME']
passwd = os.environ['OS_PASSWORD']
auth = Authenticate(username, passwd)
auth.gatherInfo()
---
description: " A simple template to boot a 3 node cluster"
heat_template_version: 2013-05-23
parameters:
image_id:
type: string
label: Image ID
description: Image to be used for compute instance
default: a5e74703-f343-415a-aa23-bd0f0aacfc9e
key_name:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
default: shahaan
availability_z:
type: string
label: Availability Zone
description: Availability Zone to be used for launching compute instance
default: monash-01
resources:
headNode:
type: "OS::Nova::Server"
properties:
availability_zone: { get_param: availability_z }
flavor: m1.small
image: { get_param: image_id }
key_name: { get_param: key_name }
metadata:
ansible_host_group: headNode
ansible_ssh_user: ec2-user
ansible_ssh_private_key_file: /home/sgeadmin/.ssh/shahaan.pem
headVolume:
type: OS::Cinder::Volume
properties:
availability_zone: { get_param: availability_z }
description: Volume that will attach the headNode
name: headNodeVolume
size: 50
volumeAttachment:
type: OS::Cinder::VolumeAttachment
properties:
instance_uuid: { get_resource: headNode }
volume_id: { get_resource: headVolume }
......@@ -3,10 +3,7 @@
hosts: openvpn-servers
remote_user: ec2-user
roles:
- easy-rsa-common
- easy-rsa-CA
- easy-rsa-certificate
- OpenVPN-Server
#- OpenVPN-Server
- nfs-server
sudo: true
vars:
......@@ -15,9 +12,9 @@
hosts: openvpn-clients
remote_user: ec2-user
roles:
- easy-rsa-common
- easy-rsa-certificate
- OpenVPN-Client
#- easy-rsa-common
#- easy-rsa-certificate
#- OpenVPN-Client
- syncExports
- nfs-client
sudo: true
......
---
description: " A simple template to boot a 3 node cluster"
heat_template_version: 2013-05-23
parameters:
image_id:
type: string
label: Image ID
description: Image to be used for compute instance
default: a5e74703-f343-415a-aa23-bd0f0aacfc9e
key_name:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
default: shahaan
availability_z:
type: string
label: Availability Zone
description: Availability Zone to be used for launching compute instance
default: monash-01
resources:
computeNodes:
type: "OS::Heat::ResourceGroup"
properties:
count: 2
resource_def:
type: "OS::Nova::Server"
properties:
availability_zone: { get_param: availability_z }
flavor: m1.small
image: { get_param: image_id }
key_name: { get_param: key_name }
metadata:
ansible_host_group: computeNodes
ansible_ssh_user: ec2-user
ansible_ssh_private_key_file: /home/sgeadmin/.ssh/shahaan.pem
headNodes:
type: "OS::Heat::ResourceGroup"
properties:
count: 1
resource_def:
type: headNode.yaml
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment