Commits vergleichen

...

12 Commits

14 geänderte Dateien mit 114 neuen und 21 gelöschten Zeilen

2
.gitignore gevendort
Datei anzeigen

@ -162,4 +162,4 @@ cython_debug/
# ---> Ansible # ---> Ansible
*.retry *.retry
*.tar.gz

Datei anzeigen

@ -5,6 +5,35 @@ stop50.ansible-netcup Release Notes
.. contents:: Topics .. contents:: Topics
v0.1.3
======
Release Summary
---------------
changed owner of collection
v0.1.2
======
Release Summary
---------------
added additional_info parameter
Minor Changes
-------------
- added additional_info to the config. this allows addtional data to be added to the inventory
v0.1.1
======
Release Summary
---------------
added nickname_is_hostname config to let the nickname be the hostname of the host
v0.1.0 v0.1.0
====== ======

Datei anzeigen

@ -6,7 +6,10 @@ changelog:
antsibull-changelog generate antsibull-changelog generate
docs: format docs: format
./update_doc update-doc
release: changelog docs release: changelog docs
ansible-galaxy collection build ansible-galaxy collection build
upload: release
./upload.sh

Datei anzeigen

@ -20,4 +20,4 @@ plugins:
strategy: {} strategy: {}
test: {} test: {}
vars: {} vars: {}
version: 0.1.0 version: 0.1.3

Datei anzeigen

@ -11,3 +11,25 @@ releases:
name: scp name: scp
namespace: null namespace: null
release_date: '2023-11-26' release_date: '2023-11-26'
0.1.1:
changes:
release_summary: added nickname_is_hostname config to let the nickname be the
hostname of the host
fragments:
- scp-hostname.yml
release_date: '2023-12-10'
0.1.2:
changes:
minor_changes:
- added additional_info to the config. this allows addtional data to be added
to the inventory
release_summary: added additional_info parameter
fragments:
- scp-additional_info.yml
release_date: '2023-12-10'
0.1.3:
changes:
release_summary: changed owner of collection
fragments:
- owner-change.yml
release_date: '2023-12-30'

Datei anzeigen

@ -0,0 +1,2 @@
---
release_summary: fixed scp.py

Datei anzeigen

@ -0,0 +1,2 @@
---
release_summary: changed owner of collection

Datei anzeigen

@ -0,0 +1,4 @@
---
release_summary: added additional_info parameter
minor_changes:
- added additional_info to the config. this allows addtional data to be added to the inventory

Datei anzeigen

@ -0,0 +1,2 @@
---
release_summary: added nickname_is_hostname config to let the nickname be the hostname of the host

Datei anzeigen

@ -1,7 +1,7 @@
--- ---
namespace: sebastian namespace: sebastian
name: netcup name: netcup
version: 0.1.0 version: 0.1.5
readme: README.md readme: README.md
authors: authors:
- Sebastian Tobie - Sebastian Tobie

Datei anzeigen

@ -1,4 +1,5 @@
--- ---
plugin: sebastian.netcup.scp plugin: ansible.netcup.scp
userid: userid:
password: password:
nickname_is_hostname: false

Datei anzeigen

@ -1,13 +1,14 @@
from ansible.plugins.inventory import BaseInventoryPlugin from xmlrpc.client import ServerProxy
from ansible.inventory.data import InventoryData from ansible.inventory.data import InventoryData
from ansible.parsing.dataloader import DataLoader from ansible.parsing.dataloader import DataLoader
from xmlrpc.client import ServerProxy from ansible.plugins.inventory import BaseInventoryPlugin
from zeep import Client, Settings
from ansible.utils.display import Display from ansible.utils.display import Display
from zeep import Client, Settings
display = Display() display = Display()
class InventoryModule(BaseInventoryPlugin): class InventoryModule(BaseInventoryPlugin):
NAME = "sebastian.netcup.scp" NAME = "sebastian.netcup.scp"
loader: DataLoader loader: DataLoader
@ -31,9 +32,11 @@ class InventoryModule(BaseInventoryPlugin):
inventory.add_group("netcup_offline") inventory.add_group("netcup_offline")
inventory.add_child("netcup", "netcup_online") inventory.add_child("netcup", "netcup_online")
inventory.add_child("netcup", "netcup_offline") inventory.add_child("netcup", "netcup_offline")
additional = self.config.get("additional_info", dict())
for hostname in self.service.getVServers(**self.args): for hostname in self.service.getVServers(**self.args):
serverinfo = self.service.getVServerInformation(vservername=hostname, **self.args) serverinfo = self.service.getVServerInformation(vservername=hostname, **self.args)
nickname = serverinfo["vServerNickname"] or serverinfo["vServerName"] nickname = serverinfo["vServerNickname"] or serverinfo["vServerName"]
ai = additional.get(nickname, dict())
group = "netcup_online" group = "netcup_online"
if serverinfo["status"] != "online": if serverinfo["status"] != "online":
group = "netcup_offline" group = "netcup_offline"
@ -41,25 +44,33 @@ class InventoryModule(BaseInventoryPlugin):
inventory.add_host(nickname, group) inventory.add_host(nickname, group)
else: else:
inventory.add_child(group, nickname) inventory.add_child(group, nickname)
interfaces = [] interfaces = dict()
ai_interfaces = ai.pop("interfaces", dict())
for interface in serverinfo["serverInterfaces"]: for interface in serverinfo["serverInterfaces"]:
interfaces.append( interfaces[interface["mac"]] = dict()
dict( interfaces[interface["mac"]].update(
driver=interface["driver"], driver=interface["driver"],
id=interface["id"], id=interface["id"],
ipv4=interface["ipv4IP"], ipv4=interface["ipv4IP"],
ipv6=interface["ipv6IP"], ipv6=interface["ipv6IP"],
mac=interface["mac"], mac=interface["mac"],
) )
) interfaces[interface["mac"]].update(ai_interfaces.pop(interface["mac"], dict()))
if len(interface["ipv4IP"]) > 0:
ansible_host = interface["ipv4IP"][0]
inventory.set_variable(nickname, "interfaces", interfaces) inventory.set_variable(nickname, "interfaces", interfaces)
inventory.set_variable(nickname, "memory", serverinfo["memory"]) inventory.set_variable(nickname, "memory", serverinfo["memory"])
inventory.set_variable(nickname, "name", serverinfo["vServerName"]) inventory.set_variable(nickname, "name", serverinfo["vServerName"])
inventory.set_variable(nickname, "cores", serverinfo["cpuCores"]) inventory.set_variable(nickname, "cores", serverinfo["cpuCores"])
inventory.set_variable(nickname, "up", serverinfo["status"] == "online") inventory.set_variable(nickname, "up", serverinfo["status"] == "online")
if ai.get("ansible_host", False):
ansible_host = ai.pop("ansible_host")
elif self.config.get("nickname_is_hostname", False):
ansible_host = nickname
inventory.set_variable(nickname, "ansible_host", ansible_host)
DOCUMENTATION = r''' DOCUMENTATION = """
name: sebastian.netcup.scp name: sebastian.netcup.scp
plugin_type: inventory plugin_type: inventory
short_description: Returns Ansible inventory from netcup SCP short_description: Returns Ansible inventory from netcup SCP
@ -78,4 +89,16 @@ DOCUMENTATION = r'''
- API password to authenticate againt the api. - API password to authenticate againt the api.
- This is different from you SCP password and must be set indipendently from the SCP password - This is different from you SCP password and must be set indipendently from the SCP password
required: true required: true
''' nickname_is_hostname:
version_added: 0.1.1
description: use the nickname as hostname
type: bool
required: false
default: false
additional_info:
version_added: 0.1.2
description:
required: false
default: {}
type: dict
"""

Datei anzeigen

@ -1,2 +1 @@
ansible-module>=0.1.3
zeep zeep

6
upload.sh Ausführbare Datei
Datei anzeigen

@ -0,0 +1,6 @@
#!/bin/bash
user=$(yq -r .namespace galaxy.yml)
package=$(yq -r .name galaxy.yml)
version=$(yq -r .version galaxy.yml)
printf "Namespace: %s\nPackage: %s\nVersion: %s\nfile name: %s\n" $user $package $version "$user-$package-$version.tar.gz"
curl -u sebastian --upload-file "${user}-${package}-${version}.tar.gz" "https://gitea.sebastian-tobie.de/api/packages/ansible/generic/${package}/${version}/${user}-${package}-${version}.tar.gz"