Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
bb864435
Commit
bb864435
authored
11 years ago
by
Matt Martz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement recommendations from #4864
parent
972a27b1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
224 additions
and
124 deletions
+224
-124
library/cloud/rax_cbs
+79
-38
library/cloud/rax_cbs_attachments
+145
-86
No files found.
library/cloud/rax_cbs
View file @
bb864435
#!/usr/bin/python
-tt
#!/usr/bin/python
# This file is part of Ansible
# This file is part of Ansible
#
#
# Ansible is free software: you can redistribute it and/or modify
# Ansible is free software: you can redistribute it and/or modify
...
@@ -20,17 +20,48 @@ module: rax_cbs
...
@@ -20,17 +20,48 @@ module: rax_cbs
short_description: Manipulate Rackspace Cloud Block Storage Volumes
short_description: Manipulate Rackspace Cloud Block Storage Volumes
description:
description:
- Manipulate Rackspace Cloud Block Storage Volumes
- Manipulate Rackspace Cloud Block Storage Volumes
version_added:
"1.5"
version_added:
1.6
options:
options:
api_key:
api_key:
description:
description:
- Rackspace API key (overrides C(credentials))
- Rackspace API key (overrides I(credentials))
aliases:
- password
auth_endpoint:
description:
- The URI of the authentication service
default: https://identity.api.rackspacecloud.com/v2.0/
credentials:
credentials:
description:
description:
- File to find the Rackspace credentials in (ignored if
C
(api_key) and
- File to find the Rackspace credentials in (ignored if
I
(api_key) and
C
(username) are provided)
I
(username) are provided)
default: null
default: null
aliases: ['creds_file']
aliases:
- creds_file
env:
description:
- Environment as configured in ~/.pyrax.cfg,
see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration)
identity_type:
description:
- Authentication machanism to use, such as rackspace or keystone
default: rackspace
region:
description:
- Region to create an instance in
default: DFW
tenant_id:
description:
- The tenant ID used for authentication
tenant_name:
description:
- The tenant name used for authentication
username:
description:
- Rackspace username (overrides I(credentials))
verify_ssl:
description:
- Whether or not to require SSL validation of API endpoints
description:
description:
description:
description:
- Description to give the volume being created
- Description to give the volume being created
...
@@ -44,10 +75,6 @@ options:
...
@@ -44,10 +75,6 @@ options:
- Name to give the volume being created
- Name to give the volume being created
default: null
default: null
required: true
required: true
region:
description:
- Region to create the volume in
default: DFW
size:
size:
description:
description:
- Size of the volume to create in Gigabytes
- Size of the volume to create in Gigabytes
...
@@ -60,28 +87,32 @@ options:
...
@@ -60,28 +87,32 @@ options:
state:
state:
description:
description:
- Indicate desired state of the resource
- Indicate desired state of the resource
choices: ['present', 'absent']
choices:
- present
- absent
default: present
default: present
required: true
required: true
volume_type:
volume_type:
description:
description:
- Type of the volume being created
- Type of the volume being created
choices: ['SATA', 'SSD']
choices:
- SATA
- SSD
default: SATA
default: SATA
required: true
required: true
username:
description:
- Rackspace username (overrides C(credentials))
wait:
wait:
description:
description:
- wait for the volume to be in state 'available' before returning
- wait for the volume to be in state 'available' before returning
default: "no"
default: "no"
choices: [ "yes", "no" ]
choices:
- "yes"
- "no"
wait_timeout:
wait_timeout:
description:
description:
- how long before wait gives up, in seconds
- how long before wait gives up, in seconds
default: 300
default: 300
requirements: [ "pyrax" ]
requirements:
- pyrax
author: Christopher H. Laco, Matt Martz
author: Christopher H. Laco, Matt Martz
notes:
notes:
- The following environment variables can be used, C(RAX_USERNAME),
- The following environment variables can be used, C(RAX_USERNAME),
...
@@ -116,13 +147,14 @@ EXAMPLES = '''
...
@@ -116,13 +147,14 @@ EXAMPLES = '''
import
sys
import
sys
from
uuid
import
UUID
from
types
import
NoneType
from
types
import
NoneType
try
:
try
:
import
pyrax
import
pyrax
HAS_PYRAX
=
True
except
ImportError
:
except
ImportError
:
print
(
"failed=True msg='pyrax required for this module'"
)
HAS_PYRAX
=
False
sys
.
exit
(
1
)
NON_CALLABLES
=
(
basestring
,
bool
,
dict
,
int
,
list
,
NoneType
)
NON_CALLABLES
=
(
basestring
,
bool
,
dict
,
int
,
list
,
NoneType
)
VOLUME_STATUS
=
(
'available'
,
'attaching'
,
'creating'
,
'deleting'
,
'in-use'
,
VOLUME_STATUS
=
(
'available'
,
'attaching'
,
'creating'
,
'deleting'
,
'in-use'
,
...
@@ -133,29 +165,33 @@ def cloud_block_storage(module, state, name, description, meta, size,
...
@@ -133,29 +165,33 @@ def cloud_block_storage(module, state, name, description, meta, size,
snapshot_id
,
volume_type
,
wait
,
wait_timeout
):
snapshot_id
,
volume_type
,
wait
,
wait_timeout
):
for
arg
in
(
state
,
name
,
size
,
volume_type
):
for
arg
in
(
state
,
name
,
size
,
volume_type
):
if
not
arg
:
if
not
arg
:
module
.
fail_json
(
msg
=
'
%
s is required for rax_c
lb
'
%
arg
)
module
.
fail_json
(
msg
=
'
%
s is required for rax_c
bs
'
%
arg
)
if
int
(
size
)
<
100
:
if
size
<
100
:
module
.
fail_json
(
msg
=
'"size" must be greater than or equal to 100'
)
module
.
fail_json
(
msg
=
'"size" must be greater than or equal to 100'
)
changed
=
False
changed
=
False
volume
s
=
[]
volume
=
None
instance
=
{}
instance
=
{}
cbs
=
pyrax
.
cloud_blockstorage
cbs
=
pyrax
.
cloud_blockstorage
for
volume
in
cbs
.
list
():
if
cbs
is
None
:
if
name
!=
volume
.
name
and
name
!=
volume
.
id
:
module
.
fail_json
(
msg
=
'Failed to instantiate client. This '
continue
'typically indicates an invalid region or an '
'incorrectly capitalized region name.'
)
volumes
.
append
(
volume
)
if
len
(
volumes
)
>
1
:
try
:
module
.
fail_json
(
msg
=
'Multiple Storage Volumes were matched by name, '
UUID
(
name
)
'try using the Volume ID instead'
)
volume
=
cbs
.
get
(
name
)
except
ValueError
:
try
:
volume
=
cbs
.
find
(
name
=
name
)
except
Exception
,
e
:
module
.
fail_json
(
msg
=
'
%
s'
%
e
)
if
state
==
'present'
:
if
state
==
'present'
:
if
not
volume
s
:
if
not
volume
:
try
:
try
:
volume
=
cbs
.
create
(
name
,
size
=
size
,
volume_type
=
volume_type
,
volume
=
cbs
.
create
(
name
,
size
=
size
,
volume_type
=
volume_type
,
description
=
description
,
description
=
description
,
...
@@ -164,8 +200,11 @@ def cloud_block_storage(module, state, name, description, meta, size,
...
@@ -164,8 +200,11 @@ def cloud_block_storage(module, state, name, description, meta, size,
changed
=
True
changed
=
True
except
Exception
,
e
:
except
Exception
,
e
:
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
else
:
else
:
volume
=
volumes
[
0
]
if
wait
:
attempts
=
wait_timeout
/
5
pyrax
.
utils
.
wait_for_build
(
volume
,
interval
=
5
,
attempts
=
attempts
)
volume
.
get
()
volume
.
get
()
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
...
@@ -186,8 +225,7 @@ def cloud_block_storage(module, state, name, description, meta, size,
...
@@ -186,8 +225,7 @@ def cloud_block_storage(module, state, name, description, meta, size,
module
.
exit_json
(
**
result
)
module
.
exit_json
(
**
result
)
elif
state
==
'absent'
:
elif
state
==
'absent'
:
if
volumes
:
if
volume
:
volume
=
volumes
[
0
]
try
:
try
:
volume
.
delete
()
volume
.
delete
()
changed
=
True
changed
=
True
...
@@ -203,12 +241,12 @@ def main():
...
@@ -203,12 +241,12 @@ def main():
dict
(
dict
(
description
=
dict
(),
description
=
dict
(),
meta
=
dict
(
type
=
'dict'
,
default
=
{}),
meta
=
dict
(
type
=
'dict'
,
default
=
{}),
name
=
dict
(),
name
=
dict
(
required
=
True
),
size
=
dict
(
type
=
'int'
,
default
=
100
),
size
=
dict
(
type
=
'int'
,
default
=
100
),
snapshot_id
=
dict
(),
snapshot_id
=
dict
(),
state
=
dict
(
default
=
'present'
,
choices
=
[
'present'
,
'absent'
]),
state
=
dict
(
default
=
'present'
,
choices
=
[
'present'
,
'absent'
]),
volume_type
=
dict
(
choices
=
[
'SSD'
,
'SATA'
],
default
=
'SATA'
),
volume_type
=
dict
(
choices
=
[
'SSD'
,
'SATA'
],
default
=
'SATA'
),
wait
=
dict
(
type
=
'bool'
),
wait
=
dict
(
type
=
'bool'
,
default
=
False
),
wait_timeout
=
dict
(
type
=
'int'
,
default
=
300
)
wait_timeout
=
dict
(
type
=
'int'
,
default
=
300
)
)
)
)
)
...
@@ -218,6 +256,9 @@ def main():
...
@@ -218,6 +256,9 @@ def main():
required_together
=
rax_required_together
()
required_together
=
rax_required_together
()
)
)
if
not
HAS_PYRAX
:
module
.
fail_json
(
msg
=
'pyrax is required for this module'
)
description
=
module
.
params
.
get
(
'description'
)
description
=
module
.
params
.
get
(
'description'
)
meta
=
module
.
params
.
get
(
'meta'
)
meta
=
module
.
params
.
get
(
'meta'
)
name
=
module
.
params
.
get
(
'name'
)
name
=
module
.
params
.
get
(
'name'
)
...
@@ -226,7 +267,7 @@ def main():
...
@@ -226,7 +267,7 @@ def main():
state
=
module
.
params
.
get
(
'state'
)
state
=
module
.
params
.
get
(
'state'
)
volume_type
=
module
.
params
.
get
(
'volume_type'
)
volume_type
=
module
.
params
.
get
(
'volume_type'
)
wait
=
module
.
params
.
get
(
'wait'
)
wait
=
module
.
params
.
get
(
'wait'
)
wait_timeout
=
int
(
module
.
params
.
get
(
'wait_timeout'
)
)
wait_timeout
=
module
.
params
.
get
(
'wait_timeout'
)
setup_rax_module
(
module
,
pyrax
)
setup_rax_module
(
module
,
pyrax
)
...
...
This diff is collapsed.
Click to expand it.
library/cloud/rax_cbs_attachments
View file @
bb864435
#!/usr/bin/python
-tt
#!/usr/bin/python
# This file is part of Ansible
# This file is part of Ansible
#
#
# Ansible is free software: you can redistribute it and/or modify
# Ansible is free software: you can redistribute it and/or modify
...
@@ -20,31 +20,58 @@ module: rax_cbs_attachments
...
@@ -20,31 +20,58 @@ module: rax_cbs_attachments
short_description: Manipulate Rackspace Cloud Block Storage Volume Attachments
short_description: Manipulate Rackspace Cloud Block Storage Volume Attachments
description:
description:
- Manipulate Rackspace Cloud Block Storage Volume Attachments
- Manipulate Rackspace Cloud Block Storage Volume Attachments
version_added:
"1.5"
version_added:
1.6
options:
options:
api_key:
api_key:
description:
description:
- Rackspace API key (overrides C(credentials))
- Rackspace API key (overrides I(credentials))
aliases:
- password
auth_endpoint:
description:
- The URI of the authentication service
default: https://identity.api.rackspacecloud.com/v2.0/
credentials:
credentials:
description:
description:
- File to find the Rackspace credentials in (ignored if
C
(api_key) and
- File to find the Rackspace credentials in (ignored if
I
(api_key) and
C
(username) are provided)
I
(username) are provided)
default: null
default: null
aliases: ['creds_file']
aliases:
mountpoint:
- creds_file
env:
description:
- Environment as configured in ~/.pyrax.cfg,
see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration)
identity_type:
description:
- Authentication machanism to use, such as rackspace or keystone
default: rackspace
region:
description:
- Region to create an instance in
default: DFW
tenant_id:
description:
- The tenant ID used for authentication
tenant_name:
description:
description:
- The mount point to attach the volume to
- The tenant name used for authentication
username:
description:
- Rackspace username (overrides I(credentials))
verify_ssl:
description:
- Whether or not to require SSL validation of API endpoints
device:
description:
- The device path to attach the volume to, e.g. /dev/xvde
default: null
default: null
required: true
required: true
na
me:
volu
me:
description:
description:
- Name or id of the volume to attach/detach
- Name or id of the volume to attach/detach
default: null
default: null
required: true
required: true
region:
description:
- Region the volume and server are located in
default: DFW
server:
server:
description:
description:
- Name or id of the server to attach/detach
- Name or id of the server to attach/detach
...
@@ -53,22 +80,24 @@ options:
...
@@ -53,22 +80,24 @@ options:
state:
state:
description:
description:
- Indicate desired state of the resource
- Indicate desired state of the resource
choices: ['present', 'absent']
choices:
- present
- absent
default: present
default: present
required: true
required: true
username:
description:
- Rackspace username (overrides C(credentials))
wait:
wait:
description:
description:
- wait for the volume to be in 'in-use'/'available' state before returning
- wait for the volume to be in 'in-use'/'available' state before returning
default: "no"
default: "no"
choices: [ "yes", "no" ]
choices:
- "yes"
- "no"
wait_timeout:
wait_timeout:
description:
description:
- how long before wait gives up, in seconds
- how long before wait gives up, in seconds
default: 300
default: 300
requirements: [ "pyrax" ]
requirements:
- pyrax
author: Christopher H. Laco, Matt Martz
author: Christopher H. Laco, Matt Martz
notes:
notes:
- The following environment variables can be used, C(RAX_USERNAME),
- The following environment variables can be used, C(RAX_USERNAME),
...
@@ -89,9 +118,9 @@ EXAMPLES = '''
...
@@ -89,9 +118,9 @@ EXAMPLES = '''
local_action:
local_action:
module: rax_cbs_attachments
module: rax_cbs_attachments
credentials: ~/.raxpub
credentials: ~/.raxpub
na
me: my-volume
volu
me: my-volume
server: my-server
server: my-server
mountpoint
: /dev/xvdd
device
: /dev/xvdd
region: DFW
region: DFW
wait: yes
wait: yes
state: present
state: present
...
@@ -100,62 +129,78 @@ EXAMPLES = '''
...
@@ -100,62 +129,78 @@ EXAMPLES = '''
import
sys
import
sys
from
uuid
import
UUID
from
types
import
NoneType
from
types
import
NoneType
try
:
try
:
import
pyrax
import
pyrax
HAS_PYRAX
=
True
except
ImportError
:
except
ImportError
:
print
(
"failed=True msg='pyrax required for this module'"
)
HAS_PYRAX
=
False
sys
.
exit
(
1
)
NON_CALLABLES
=
(
basestring
,
bool
,
dict
,
int
,
list
,
NoneType
)
NON_CALLABLES
=
(
basestring
,
bool
,
dict
,
int
,
list
,
NoneType
)
VOLUME_STATUS
=
(
'available'
,
'attaching'
,
'creating'
,
'deleting'
,
'in-use'
,
'error'
,
'error_deleting'
)
def
cloud_block_storage_attachments
(
module
,
state
,
name
,
server
,
mountpoint
,
def
cloud_block_storage_attachments
(
module
,
state
,
volume
,
server
,
device
,
wait
,
wait_timeout
):
wait
,
wait_timeout
):
for
arg
in
(
state
,
name
,
server
,
mountpoint
):
for
arg
in
(
state
,
volume
,
server
,
device
):
if
not
arg
:
if
not
arg
:
module
.
fail_json
(
msg
=
'
%
s is required for rax_clb_attachments'
%
arg
)
module
.
fail_json
(
msg
=
'
%
s is required for rax_cbs_attachments'
%
arg
)
cbs
=
pyrax
.
cloud_blockstorage
cbs
=
pyrax
.
cloud_blockstorage
cs
=
pyrax
.
cloudservers
cs
=
pyrax
.
cloudservers
if
cbs
is
None
or
cs
is
None
:
module
.
fail_json
(
msg
=
'Failed to instantiate client. This '
'typically indicates an invalid region or an '
'incorrectly capitalized region name.'
)
changed
=
False
changed
=
False
volumes
=
[]
instance
=
{}
instance
=
{}
for
volume
in
cbs
.
list
():
try
:
if
name
==
volume
.
display_name
or
name
==
volume
.
id
:
UUID
(
volume
)
volumes
.
append
(
volume
)
volume
=
cbs
.
get
(
volume
)
except
ValueError
:
try
:
volume
=
cbs
.
find
(
name
=
volume
)
except
Exception
,
e
:
module
.
fail_json
(
msg
=
'
%
s'
%
e
)
if
len
(
volumes
)
>
1
:
if
not
volume
:
module
.
fail_json
(
msg
=
'Multiple Storage Volumes were matched by name, '
module
.
fail_json
(
msg
=
'No matching storage volumes were found'
)
'try using the Volume ID instead'
)
elif
not
volumes
:
module
.
fail_json
(
msg
=
'No Storage Volumes were matched by name, '
'try using the Volume ID instead'
)
volume
=
volumes
[
0
]
if
state
==
'present'
:
if
state
==
'present'
:
server
=
cs
.
servers
.
get
(
server
)
try
:
UUID
(
server
)
if
not
server
:
server
=
cs
.
servers
.
get
(
server
)
module
.
fail_json
(
msg
=
'No Server was matched by name, '
except
ValueError
:
'try using the Server ID instead'
)
servers
=
cs
.
servers
.
list
(
search_opts
=
dict
(
name
=
'^
%
s$'
%
server
))
if
not
servers
:
module
.
fail_json
(
msg
=
'No Server was matched by name, '
'try using the Server ID instead'
)
if
len
(
servers
)
>
1
:
module
.
fail_json
(
msg
=
'Multiple servers matched by name, '
'try using the Server ID instead'
)
# We made it this far, grab the first and hopefully only server
# in the list
server
=
servers
[
0
]
if
(
volume
.
attachments
and
volume
.
attachments
[
0
][
'server_id'
]
==
server
.
id
):
changed
=
False
elif
volume
.
attachments
:
module
.
fail_json
(
msg
=
'Volume is attached to another server'
)
else
:
else
:
if
volume
.
attachments
and
volume
.
attachments
[
0
][
'server_id'
]
==
server
.
id
:
try
:
changed
=
False
volume
.
attach_to_instance
(
server
,
mountpoint
=
device
)
elif
volume
.
attachments
:
changed
=
True
module
.
fail_json
(
msg
=
'Volume is attached to another server'
)
except
Exception
,
e
:
else
:
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
try
:
volume
.
attach_to_instance
(
server
,
mountpoint
=
mountpoint
)
volume
.
get
()
changed
=
True
except
Exception
,
e
:
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
volume
.
get
()
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
if
(
isinstance
(
value
,
NON_CALLABLES
)
and
if
(
isinstance
(
value
,
NON_CALLABLES
)
and
...
@@ -167,9 +212,9 @@ def cloud_block_storage_attachments(module, state, name, server, mountpoint,
...
@@ -167,9 +212,9 @@ def cloud_block_storage_attachments(module, state, name, server, mountpoint,
if
volume
.
status
==
'error'
:
if
volume
.
status
==
'error'
:
result
[
'msg'
]
=
'
%
s failed to build'
%
volume
.
id
result
[
'msg'
]
=
'
%
s failed to build'
%
volume
.
id
elif
wait
:
elif
wait
:
attempts
=
wait_timeout
/
5
pyrax
.
utils
.
wait_until
(
volume
,
'status'
,
'in-use'
,
pyrax
.
utils
.
wait_until
(
volume
,
'status'
,
'in-use'
,
interval
=
3
,
attempts
=
0
,
interval
=
5
,
attempts
=
attempts
)
verbose
=
False
)
if
'msg'
in
result
:
if
'msg'
in
result
:
module
.
fail_json
(
**
result
)
module
.
fail_json
(
**
result
)
...
@@ -177,27 +222,38 @@ def cloud_block_storage_attachments(module, state, name, server, mountpoint,
...
@@ -177,27 +222,38 @@ def cloud_block_storage_attachments(module, state, name, server, mountpoint,
module
.
exit_json
(
**
result
)
module
.
exit_json
(
**
result
)
elif
state
==
'absent'
:
elif
state
==
'absent'
:
server
=
cs
.
servers
.
get
(
server
)
try
:
UUID
(
server
)
if
not
server
:
server
=
cs
.
servers
.
get
(
server
)
module
.
fail_json
(
msg
=
'No Server was matched by name, '
except
ValueError
:
'try using the Server ID instead'
)
servers
=
cs
.
servers
.
list
(
search_opts
=
dict
(
name
=
'^
%
s$'
%
server
))
else
:
if
not
servers
:
if
volume
.
attachments
and
volume
.
attachments
[
0
][
'server_id'
]
==
server
.
id
:
module
.
fail_json
(
msg
=
'No Server was matched by name, '
try
:
'try using the Server ID instead'
)
volume
.
detach
()
if
len
(
servers
)
>
1
:
if
wait
:
module
.
fail_json
(
msg
=
'Multiple servers matched by name, '
pyrax
.
utils
.
wait_until
(
volume
,
'status'
,
'available'
,
'try using the Server ID instead'
)
interval
=
3
,
attempts
=
0
,
verbose
=
False
)
# We made it this far, grab the first and hopefully only server
changed
=
True
# in the list
except
Exception
,
e
:
server
=
servers
[
0
]
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
if
(
volume
.
attachments
and
volume
.
get
()
volume
.
attachments
[
0
][
'server_id'
]
==
server
.
id
):
try
:
volume
.
detach
()
if
wait
:
pyrax
.
utils
.
wait_until
(
volume
,
'status'
,
'available'
,
interval
=
3
,
attempts
=
0
,
verbose
=
False
)
changed
=
True
changed
=
True
elif
volume
.
attachments
:
except
Exception
,
e
:
module
.
fail_json
(
msg
=
'Volume is attached to another server'
)
module
.
fail_json
(
msg
=
'
%
s'
%
e
.
message
)
volume
.
get
()
changed
=
True
elif
volume
.
attachments
:
module
.
fail_json
(
msg
=
'Volume is attached to another server'
)
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
for
key
,
value
in
vars
(
volume
)
.
iteritems
():
if
(
isinstance
(
value
,
NON_CALLABLES
)
and
if
(
isinstance
(
value
,
NON_CALLABLES
)
and
...
@@ -221,11 +277,11 @@ def main():
...
@@ -221,11 +277,11 @@ def main():
argument_spec
=
rax_argument_spec
()
argument_spec
=
rax_argument_spec
()
argument_spec
.
update
(
argument_spec
.
update
(
dict
(
dict
(
mountpoint
=
dict
(
),
device
=
dict
(
required
=
True
),
name
=
dict
(
),
volume
=
dict
(
required
=
True
),
server
=
dict
(),
server
=
dict
(
required
=
True
),
state
=
dict
(
default
=
'present'
,
choices
=
[
'present'
,
'absent'
]),
state
=
dict
(
default
=
'present'
,
choices
=
[
'present'
,
'absent'
]),
wait
=
dict
(
type
=
'bool'
),
wait
=
dict
(
type
=
'bool'
,
default
=
False
),
wait_timeout
=
dict
(
type
=
'int'
,
default
=
300
)
wait_timeout
=
dict
(
type
=
'int'
,
default
=
300
)
)
)
)
)
...
@@ -235,16 +291,19 @@ def main():
...
@@ -235,16 +291,19 @@ def main():
required_together
=
rax_required_together
()
required_together
=
rax_required_together
()
)
)
mountpoint
=
module
.
params
.
get
(
'mountpoint'
)
if
not
HAS_PYRAX
:
name
=
module
.
params
.
get
(
'name'
)
module
.
fail_json
(
msg
=
'pyrax is required for this module'
)
device
=
module
.
params
.
get
(
'device'
)
volume
=
module
.
params
.
get
(
'volume'
)
server
=
module
.
params
.
get
(
'server'
)
server
=
module
.
params
.
get
(
'server'
)
state
=
module
.
params
.
get
(
'state'
)
state
=
module
.
params
.
get
(
'state'
)
wait
=
module
.
params
.
get
(
'wait'
)
wait
=
module
.
params
.
get
(
'wait'
)
wait_timeout
=
int
(
module
.
params
.
get
(
'wait_timeout'
)
)
wait_timeout
=
module
.
params
.
get
(
'wait_timeout'
)
setup_rax_module
(
module
,
pyrax
)
setup_rax_module
(
module
,
pyrax
)
cloud_block_storage_attachments
(
module
,
state
,
name
,
server
,
mountpoint
,
cloud_block_storage_attachments
(
module
,
state
,
volume
,
server
,
device
,
wait
,
wait_timeout
)
wait
,
wait_timeout
)
# import module snippets
# import module snippets
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment