Skip to content

Commit db8d4ef

Browse files
authored
Merge pull request #125 from tortuegenialez/INFRA-10478_new_route_installation
Use new installation route for dedicated servers.
2 parents 017c6b2 + b8c3700 commit db8d4ef

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
3+
4+
from __future__ import (absolute_import, division, print_function)
5+
__metaclass__ = type
6+
7+
from ansible.module_utils.basic import AnsibleModule
8+
9+
DOCUMENTATION = '''
10+
---
11+
module: dedicated_server_installation
12+
short_description: Install a dedicated server using OVH API
13+
description:
14+
- Install (or reinstall) an OVH dedicated server without template.
15+
- The documentation for parameters like customizations and storage can be found in the OVH API documentation.
16+
- https://eu.api.ovh.com/console/?section=%2Fdedicated%2Fserver&branch=v1#post-/dedicated/server/-serviceName-/reinstall
17+
author: Synthesio SRE Team with an initial work from @jawadevops
18+
requirements:
19+
- ovh >= 0.5.0
20+
options:
21+
service_name:
22+
required: true
23+
description: OVH service name (e.g. nsXXXX.ip-XXX)
24+
operating_system:
25+
required: true
26+
description: OS template to use (e.g. debian12_64)
27+
customizations:
28+
required: false
29+
description: Customizations for installation
30+
storage:
31+
required: false
32+
description: Disk layout config (diskGroupId, RAID, etc.)
33+
'''
34+
35+
EXAMPLES = r'''
36+
- name: Reinstall OVH server
37+
dedicated_server_installation:
38+
service_name: "xxx.ip-xxx-xx-xx.eu"
39+
operating_system: "debian12_64"
40+
customizations:
41+
hostname: "ceph-2"
42+
sshKey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
43+
httpHeaders:
44+
Authorization: "Basic bG9naW46cGFzc3dvcmQ="
45+
imageURL: "https://github.com/ashmonger/akution_test/releases/latest/download/deb11k6.qcow2"
46+
language: fr-fr
47+
storage:
48+
- diskGroupId: 1
49+
partitioning:
50+
disks: 2
51+
layout:
52+
- fileSystem: ext4
53+
mountPoint: /
54+
raidLevel: 1
55+
size: 20480
56+
- fileSystem: xfs
57+
mountPoint: /srv
58+
raidLevel: 0
59+
size: 0
60+
'''
61+
62+
RETURN = '''
63+
task_id:
64+
description: Task ID of the installation operation
65+
returned: always
66+
type: int
67+
'''
68+
69+
from ansible_collections.synthesio.ovh.plugins.module_utils.ovh import OVH, ovh_argument_spec
70+
71+
72+
def run_module():
73+
module_args = ovh_argument_spec()
74+
module_args.update(dict(
75+
service_name=dict(type="str", required=True),
76+
operating_system=dict(type="str", required=True),
77+
customizations=dict(type="dict", required=False, default=None),
78+
storage=dict(type="list", required=False, default=None)
79+
))
80+
81+
module = AnsibleModule(
82+
argument_spec=module_args,
83+
supports_check_mode=True
84+
)
85+
86+
client = OVH(module)
87+
88+
service_name = module.params['service_name']
89+
os_template = module.params['operating_system']
90+
storage = module.params['storage']
91+
customizations = module.params['customizations']
92+
93+
if module.check_mode:
94+
module.exit_json(msg=f"Installation in progress on {service_name} ({os_template}) - (dry run mode)",
95+
changed=True)
96+
97+
result = client.wrap_call(
98+
"POST",
99+
f"/dedicated/server/{service_name}/reinstall",
100+
operatingSystem=os_template,
101+
customizations=customizations,
102+
storage=storage
103+
)
104+
105+
module.exit_json(
106+
changed=True,
107+
msg=f"Installation in progress on {service_name} ({os_template})",
108+
task_id=result.get("taskId")
109+
)
110+
111+
112+
def main():
113+
run_module()
114+
115+
116+
if __name__ == '__main__':
117+
main()

0 commit comments

Comments
 (0)