Skip to content
This repository has been archived by the owner on Apr 13, 2022. It is now read-only.

Commit

Permalink
Merge branch 'python'
Browse files Browse the repository at this point in the history
  • Loading branch information
feldsam committed Jan 4, 2020
2 parents ea4954b + 8246a3e commit 63fa174
Show file tree
Hide file tree
Showing 7 changed files with 227 additions and 185 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
.idea
config.js
node_modules
config.py
*.pyc
41 changes: 37 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,36 @@ git clone https://github.com/FELDSAM-INC/ansible-one-inv.git

```bash
cd ansible-one-inv
npm install
cp config.sample.js config.js
nano config.js # configure
pip install pyone
cp config.sample.py config.py
nano config.py # configure
cd -
```

**Sample config:**
```
# OpenNebula XML-RPC API connection details
ONE = {
'address': 'https://opennebula:2633/RPC2',
'username': 'user',
'password': 'pass'
}
# Whether to use VM name or IP (first one found) as hostname
USE_VM_NAME = False
# VM USER_TEMPLATE var to use as hostname
# Fallback:
# 1. check USE_VM_NAME and if True return use VM name
# 2. use VM IP (first one found)
HOSTNAME_USER_TEMPLATE_VAR = ''
# Skip VMs by labels
SKIP_LABELS = [
'SomeLabel'
]
```

### Test

```
Expand All @@ -40,9 +64,18 @@ inventory = ./ansible-one-inv/one-inv

Now you can use dynamic inventory in your playbooks. Hosts will be grouped by OpenNebula Labels to Ansible Host Groups.

## Notes

### Host groups

This script defines host groups by labels assigned to VMs in OpenNebula.
There is one special group `All`, which contains all VMs.
One VM can be in more groups if have more labels.

### Custom SSH ports

I added support for define custom ssh port in vm user template. Just add variable `SSH_PORT` and ansible use it.
There is support to define custom ssh port in VM USER_TEMPLATE.
Just add variable `SSH_PORT` and Ansible use it.

## Ansible

Expand Down
8 changes: 0 additions & 8 deletions config.sample.js

This file was deleted.

37 changes: 37 additions & 0 deletions config.sample.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
# -------------------------------------------------------------------------- #
# Copyright 2020, FeldHost™ (feldhost.net) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
# -------------------------------------------------------------------------- #

# OpenNebula XML-RPC API connection details
ONE = {
'address': 'https://opennebula:2633/RPC2',
'username': 'user',
'password': 'pass'
}

# Whether to use VM name or IP (first one found) as hostname
USE_VM_NAME = False

# VM USER_TEMPLATE var to use as hostname
# Fallback:
# 1. check USE_VM_NAME and if True return use VM name
# 2. use VM IP (first one found)
HOSTNAME_USER_TEMPLATE_VAR = ''

# Skip VMs by labels
SKIP_LABELS = [
'SomeLabel'
]
47 changes: 47 additions & 0 deletions functions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# -------------------------------------------------------------------------- #
# Copyright 2020, FeldHost™ (feldhost.net) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
# -------------------------------------------------------------------------- #

import config


def get_hostname(vm):
if not config.USE_VM_NAME and config.HOSTNAME_USER_TEMPLATE_VAR != '' and vm.USER_TEMPLATE.get(config.HOSTNAME_USER_TEMPLATE_VAR):
return vm.USER_TEMPLATE.get(config.HOSTNAME_USER_TEMPLATE_VAR)

if not config.USE_VM_NAME:
return get_vm_ip(vm)

return vm.NAME


def get_vm_ip(vm):
nic = vm.TEMPLATE.get('NIC')

if isinstance(nic, dict):
nic = [nic]

for net in nic:
return net['IP']

return False


def get_ssh_port(vm):
if vm.USER_TEMPLATE.get('SSH_PORT'):
return vm.USER_TEMPLATE.get('SSH_PORT')

return False
Loading

0 comments on commit 63fa174

Please sign in to comment.