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
c9ebdb98
Commit
c9ebdb98
authored
Sep 18, 2015
by
Brian Coca
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #12440 from privateip/vca
added new module object to vca
parents
aca83b15
e45b71d6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
153 additions
and
15 deletions
+153
-15
lib/ansible/module_utils/vca.py
+153
-15
No files found.
lib/ansible/module_utils/vca.py
View file @
c9ebdb98
...
...
@@ -22,9 +22,9 @@ except ImportError:
SERVICE_MAP
=
{
'vca'
:
'ondemand'
,
'vchs'
:
'subscription'
,
'vcd'
:
'vcd'
}
LOGIN_HOST
=
{
'vca'
:
'vca.vmware.com'
,
'vchs'
:
'vchs.vmware.com'
}
VCA_REQ_ARGS
=
[
'instance_id'
,
'vdc_name'
]
VCHS_REQ_ARGS
=
[
'service_id'
]
DEFAULT_SERVICE_TYPE
=
'vca'
DEFAULT_VERSION
=
'5.7'
class
VcaError
(
Exception
):
...
...
@@ -32,6 +32,153 @@ class VcaError(Exception):
self
.
kwargs
=
kwargs
super
(
VcaError
,
self
)
.
__init__
(
msg
)
def
vca_argument_spec
():
return
dict
(
username
=
dict
(),
password
=
dict
(),
org
=
dict
(),
service_id
=
dict
(),
instance_id
=
dict
(),
host
=
dict
(),
api_version
=
dict
(
default
=
DEFAULT_VERSION
),
service_type
=
dict
(
default
=
DEFAULT_SERVICE_TYPE
,
choices
=
SERVICE_MAP
.
keys
()),
vdc_name
=
dict
(),
gateway_name
=
dict
(
default
=
'gateway'
)
)
class
VcaAnsibleModule
(
AnsibleModule
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
argument_spec
=
vca_argument_spec
()
argument_spec
.
update
(
kwargs
.
get
(
'argument_spec'
,
dict
()))
kwargs
[
'argument_spec'
]
=
argument_spec
super
(
VcaAnsibleModule
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
if
not
HAS_PYVCLOUD
:
self
.
fail
(
"python module pyvcloud is required for this module"
)
self
.
_vca
=
self
.
create_instance
()
self
.
login
()
self
.
_gateway
=
None
self
.
_vdc
=
None
@property
def
vca
(
self
):
return
self
.
_vca
@property
def
gateway
(
self
):
if
self
.
_gateway
is
not
None
:
return
self
.
_gateway
vdc_name
=
self
.
params
[
'vdc_name'
]
gateway_name
=
self
.
params
[
'gateway_name'
]
_gateway
=
self
.
vca
.
get_gateway
(
vdc_name
,
gateway_name
)
if
not
_gateway
:
raise
VcaError
(
'vca instance has no gateway named
%
s'
%
name
)
self
.
_gateway
=
_gateway
return
_gateway
@property
def
vdc
(
self
):
if
self
.
_vdc
is
not
None
:
return
self
.
_vdc
_vdc
=
self
.
vca
.
get_vdc
(
self
.
params
[
'vdc_name'
])
if
not
_vdc
:
raise
VcaError
(
'vca instance has no vdc named
%
s'
%
name
)
self
.
_vdc
=
_vdc
return
_vdc
def
create_instance
(
self
):
service_type
=
self
.
params
.
get
(
'service_type'
,
DEFAULT_SERVICE_TYPE
)
host
=
self
.
params
.
get
(
'host'
,
LOGIN_HOST
.
get
(
'service_type'
))
username
=
self
.
params
[
'username'
]
version
=
self
.
params
.
get
(
'api_version'
)
if
service_type
==
'vchs'
:
version
=
'5.6'
verify
=
self
.
params
.
get
(
'verify_certs'
)
return
VCA
(
host
=
host
,
username
=
username
,
service_type
=
SERVICE_MAP
[
service_type
],
version
=
version
,
verify
=
verify
)
def
login
(
self
):
service_type
=
self
.
params
[
'service_type'
]
password
=
self
.
params
[
'password'
]
if
not
self
.
vca
.
login
(
password
=
password
):
self
.
fail
(
'Login to VCA failed'
,
response
=
self
.
vca
.
response
.
content
)
try
:
method_name
=
'login_
%
s'
%
service_type
meth
=
getattr
(
self
,
method_name
)
meth
()
except
AttributeError
:
self
.
fail
(
'no login method exists for service_type
%
s'
%
service_type
)
except
VcaError
,
e
:
self
.
fail
(
e
.
message
,
response
=
self
.
vca
.
response
.
content
,
**
e
.
kwargs
)
def
login_vca
(
self
):
instance_id
=
self
.
params
[
'instance_id'
]
if
not
instance_id
:
raise
VcaError
(
'missing required instance_id for service_type vca'
)
self
.
vca
.
login_to_instance_sso
(
instance
=
instance_id
)
def
login_vchs
(
self
):
service_id
=
self
.
params
[
'service_id'
]
if
not
service_id
:
raise
VcaError
(
'missing required service_id for service_type vchs'
)
org
=
self
.
params
[
'org'
]
if
not
org
:
raise
VcaError
(
'missing required or for service_type vchs'
)
self
.
vca
.
login_to_org
(
service_id
,
org
)
def
login_vcd
(
self
):
org
=
self
.
params
[
'org'
]
if
not
org
:
raise
VcaError
(
'missing required or for service_type vchs'
)
if
not
self
.
vca
.
token
:
raise
VcaError
(
'unable to get token for service_type vcd'
)
if
not
self
.
vca
.
vcloud_session
.
org_url
:
raise
VcaError
(
'unable to get org_url for service_type vcd'
)
self
.
vca
.
login
(
token
=
self
.
vca
.
token
,
org
=
org
,
org_url
=
self
.
vca
.
vcloud_session
.
org_url
)
def
save_services_config
(
self
,
blocking
=
True
):
task
=
self
.
gateway
.
save_services_configuration
()
if
not
task
:
self
.
fail
(
msg
=
'unable to save gateway services configuration'
)
if
blocking
:
self
.
vca
.
block_until_completed
(
task
)
def
fail
(
self
,
msg
,
**
kwargs
):
self
.
fail_json
(
msg
=
msg
,
**
kwargs
)
def
exit
(
self
,
**
kwargs
):
self
.
exit_json
(
**
kwargs
)
# -------------------------------------------------------------
# 9/18/2015 @privateip
# All of the functions below here were migrated from the original
# vca_* modules. All functions below should be considered deprecated
# and will be removed once all of the vca_* modules have been updated
# to use the new instance module above
# -------------------------------------------------------------
VCA_REQ_ARGS
=
[
'instance_id'
,
'vdc_name'
]
VCHS_REQ_ARGS
=
[
'service_id'
]
def
_validate_module
(
module
):
if
not
HAS_PYVCLOUD
:
module
.
fail_json
(
"python module pyvcloud is needed for this module"
)
...
...
@@ -63,19 +210,6 @@ def serialize_instances(instance_list):
instances
.
append
(
dict
(
apiUrl
=
i
[
'apiUrl'
],
instance_id
=
i
[
'id'
]))
return
instances
def
vca_argument_spec
():
return
dict
(
username
=
dict
(
default
=
None
),
password
=
dict
(
default
=
None
),
org
=
dict
(
default
=
None
),
service_id
=
dict
(
default
=
None
),
instance_id
=
dict
(
default
=
None
),
host
=
dict
(
default
=
None
),
api_version
=
dict
(
default
=
'5.7'
),
service_type
=
dict
(
default
=
'vca'
,
choices
=
[
'vchs'
,
'vca'
,
'vcd'
]),
vdc_name
=
dict
(
default
=
None
),
)
def
_vca_login
(
vca
,
password
,
instance
):
if
not
vca
.
login
(
password
=
password
):
raise
VcaError
(
"Login Failed: Please check username or password"
,
...
...
@@ -163,3 +297,7 @@ def vca_login(module):
return
vca
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