Ejemplo n.º 1
0
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(
        dict(
            state=dict(default='present', choices=('present', 'absent')),
            name=dict(),
            uuid=dict(),
            zone=dict(),
            size_gb=dict(type='int'),
            type=dict(choices=('ssd', 'bulk')),
            server_uuids=dict(type='list', aliases=['server_uuid']),
            tags=dict(type='dict'),
        ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('name', 'uuid'), ),
        supports_check_mode=True,
    )

    cloudscale_volume = AnsibleCloudscaleVolume(module)

    if module.params['state'] == 'absent':
        server_group = cloudscale_volume.absent()
    else:
        server_group = cloudscale_volume.present()

    result = cloudscale_volume.get_result(server_group)
    module.exit_json(**result)
Ejemplo n.º 2
0
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(dict(
        state=dict(default='running', choices=ALLOWED_STATES),
        name=dict(),
        uuid=dict(),
        flavor=dict(),
        image=dict(),
        volume_size_gb=dict(type='int', default=10),
        bulk_volume_size_gb=dict(type='int'),
        ssh_keys=dict(type='list'),
        use_public_network=dict(type='bool', default=True),
        use_private_network=dict(type='bool', default=False),
        use_ipv6=dict(type='bool', default=True),
        anti_affinity_with=dict(),
        user_data=dict(),
        force=dict(type='bool', default=False)
    ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('name', 'uuid'),),
        supports_check_mode=True,
    )

    cloudscale_server = AnsibleCloudscaleServer(module)
    if module.params['state'] == "absent":
        server = cloudscale_server.absent_server()
    else:
        server = cloudscale_server.present_server()

    result = cloudscale_server.get_result(server)
    module.exit_json(**result)
Ejemplo n.º 3
0
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(
        dict(
            name=dict(),
            uuid=dict(),
            type=dict(default='anti-affinity'),
            tags=dict(type='dict'),
            state=dict(default='present', choices=['absent', 'present']),
        ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('name', 'uuid'), ),
        supports_check_mode=True,
    )
    cloudscale_server_group = AnsibleCloudscaleServerGroup(
        module, 'cloudscale_server_group')

    if module.params['state'] == 'absent':
        server_group = cloudscale_server_group.absent_group()
    else:
        server_group = cloudscale_server_group.present_group()

    result = cloudscale_server_group.get_result(server_group)
    module.exit_json(**result)
Ejemplo n.º 4
0
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(
        dict(
            state=dict(default='running', choices=ALLOWED_STATES),
            name=dict(),
            uuid=dict(),
            flavor=dict(),
            image=dict(),
            volume_size_gb=dict(type='int', default=10),
            bulk_volume_size_gb=dict(type='int'),
            ssh_keys=dict(type='list'),
            use_public_network=dict(type='bool', default=True),
            use_private_network=dict(type='bool', default=False),
            use_ipv6=dict(type='bool', default=True),
            anti_affinity_with=dict(),
            user_data=dict(),
        ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('name', 'uuid'), ),
        mutually_exclusive=(('name', 'uuid'), ),
        supports_check_mode=True,
    )

    target_state = module.params['state']
    server = AnsibleCloudscaleServer(module)
    # The server could be in a changeing or error state.
    # Wait for one of the allowed states before doing anything.
    # If an allowed state can't be reached, this module fails.
    if not server.info['state'] in ALLOWED_STATES:
        server.wait_for_state(ALLOWED_STATES)
    current_state = server.info['state']

    if module.check_mode:
        module.exit_json(changed=not target_state == current_state,
                         **server.info)

    changed = False
    if current_state == 'absent' and target_state == 'running':
        server.create_server()
        changed = True
    elif current_state == 'absent' and target_state == 'stopped':
        server.create_server()
        server.stop_server()
        changed = True
    elif current_state == 'stopped' and target_state == 'running':
        server.start_server()
        changed = True
    elif current_state in ('running', 'stopped') and target_state == 'absent':
        server.delete_server()
        changed = True
    elif current_state == 'running' and target_state == 'stopped':
        server.stop_server()
        changed = True

    module.exit_json(changed=changed, **server.info)
Ejemplo n.º 5
0
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(dict(
        state=dict(default='present', choices=('present', 'absent')),
        name=dict(),
        uuid=dict(),
        size_gb=dict(type='int'),
        type=dict(choices=('ssd', 'bulk')),
        server_uuids=dict(type='list', aliases=['server_uuid']),
    ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('name', 'uuid'),),
        mutually_exclusive=(('name', 'uuid'),),
        supports_check_mode=True,
    )

    volume = AnsibleCloudscaleVolume(module)
    if module.check_mode:
        changed = False
        for param, conv in (('state', str),
                            ('server_uuids', set),
                            ('size_gb', int)):
            if module.params[param] is None:
                continue

            if conv(volume.info[param]) != conv(module.params[param]):
                changed = True
                break

        module.exit_json(changed=changed,
                         **volume.info)

    if (volume.info['state'] == 'absent'
       and module.params['state'] == 'present'):
        volume.create()
    elif (volume.info['state'] == 'present'
          and module.params['state'] == 'absent'):
        volume.delete()

    if module.params['state'] == 'present':
        for param, conv in (('server_uuids', set), ('size_gb', int)):
            if module.params[param] is None:
                continue
            if conv(volume.info[param]) != conv(module.params[param]):
                volume.update(param)

        if (module.params['type'] is not None
           and volume.info['type'] != module.params['type']):
            module.fail_json(
                msg='Cannot change type of an existing volume.',
            )

    module.exit_json(changed=volume.changed, **volume.info)
def main():
    argument_spec = cloudscale_argument_spec()
    argument_spec.update(
        dict(
            state=dict(default='present',
                       choices=('present', 'absent'),
                       type='str'),
            ip=dict(aliases=('network', ), type='str'),
            ip_version=dict(choices=(4, 6), type='int'),
            server=dict(type='str'),
            prefix_length=dict(choices=(56, ), type='int'),
            reverse_ptr=dict(type='str'),
        ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        required_one_of=(('ip', 'ip_version'), ),
        supports_check_mode=True,
    )

    if not HAS_IPADDRESS:
        module.fail_json(msg=missing_required_lib('ipaddress'),
                         exception=IPADDRESS_IMP_ERR)

    target_state = module.params['state']
    target_server = module.params['server']
    floating_ip = AnsibleCloudscaleFloatingIP(module)
    current_state = floating_ip.info['state']
    current_server = floating_ip.info[
        'server'] if 'server' in floating_ip.info else None

    if module.check_mode:
        module.exit_json(
            changed=not target_state == current_state or
            (current_state == 'present' and current_server != target_server),
            **floating_ip.info)

    changed = False
    if current_state == 'absent' and target_state == 'present':
        floating_ip.request_floating_ip()
        changed = True
    elif current_state == 'present' and target_state == 'absent':
        floating_ip.release_floating_ip()
        changed = True
    elif current_state == 'present' and current_server != target_server:
        floating_ip.update_floating_ip()
        changed = True

    module.exit_json(changed=changed, **floating_ip.info)