Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
aa92a44d
authored
7 years ago
by
Czémán Arnold
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'easy_setup' into 'master'
Easy setup See merge request
!397
parents
3f1b8167
d8606201
Pipeline
#621
passed with stage
in 0 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
123 additions
and
5 deletions
+123
-5
circle/dashboard/management/commands/init.py
+123
-5
No files found.
circle/dashboard/management/commands/init.py
View file @
aa92a44d
...
...
@@ -19,12 +19,16 @@ from __future__ import unicode_literals, absolute_import
import
logging
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
,
Group
,
Permission
from
django.core.management.base
import
BaseCommand
from
django.db.models
import
Q
from
firewall.models
import
Vlan
,
VlanGroup
,
Domain
,
Firewall
,
Rule
from
firewall.models
import
Vlan
,
VlanGroup
,
Domain
,
Firewall
,
Rule
,
Host
from
firewall.fields
import
mac_custom
from
storage.models
import
DataStore
from
vm.models
import
Lease
from
vm.models
import
Lease
,
Node
from
dashboard.models
import
GroupProfile
,
Profile
from
netaddr
import
IPAddress
,
EUI
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -43,6 +47,11 @@ class Command(BaseCommand):
parser
.
add_argument
(
'--firewall-queue'
)
parser
.
add_argument
(
'--admin-user'
)
parser
.
add_argument
(
'--admin-pass'
)
parser
.
add_argument
(
'--node-hostname'
)
parser
.
add_argument
(
'--node-mac'
)
parser
.
add_argument
(
'--node-ip'
)
parser
.
add_argument
(
'--node-name'
)
parser
.
add_argument
(
'--kvm-present'
,
action
=
"store_true"
)
def
create
(
self
,
model
,
field
,
**
kwargs
):
value
=
kwargs
[
field
]
...
...
@@ -55,12 +64,13 @@ class Command(BaseCommand):
else
:
return
qs
[
0
]
# http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html
# http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html
def
print_state
(
self
):
self
.
stdout
.
write
(
"
\n
changed=
%
s"
%
(
"yes"
if
self
.
changed
else
"no"
))
def
handle
(
self
,
*
args
,
**
options
):
self
.
changed
=
False
# from pdb import set_trace; set_trace()
if
(
DataStore
.
objects
.
exists
()
and
Vlan
.
objects
.
exists
()
and
not
options
[
'force'
]):
...
...
@@ -71,6 +81,7 @@ class Command(BaseCommand):
is_superuser
=
True
,
is_staff
=
True
)
admin
.
set_password
(
options
[
'admin_pass'
])
admin
.
save
()
self
.
create
(
Profile
,
'user'
,
user
=
admin
)
self
.
create
(
DataStore
,
'path'
,
path
=
'/datastore'
,
name
=
'default'
,
hostname
=
options
[
'datastore_queue'
])
...
...
@@ -151,5 +162,112 @@ class Command(BaseCommand):
self
.
create
(
Rule
,
'description'
,
description
=
'allow man->net'
,
direction
=
'out'
,
action
=
'accept'
,
foreign_network
=
vg_net
,
vlan
=
man
)
node_ip
=
IPAddress
(
options
[
'node_ip'
])
node_mac
=
EUI
(
options
[
'node_mac'
],
dialect
=
mac_custom
)
node_host
=
Host
.
objects
.
filter
(
ipv4
=
node_ip
)
.
first
()
if
node_host
is
None
:
node_host
=
self
.
create
(
Host
,
'mac'
,
mac
=
node_mac
,
hostname
=
options
[
'node_hostname'
],
ipv4
=
node_ip
,
vlan
=
man
,
owner
=
admin
)
else
:
Host
.
objects
.
filter
(
pk
=
node_host
.
pk
)
.
update
(
mac
=
node_mac
,
hostname
=
options
[
'node_hostname'
],
ipv4
=
node_ip
,
vlan
=
man
,
owner
=
admin
)
node_host
.
refresh_from_db
()
self
.
create
(
Node
,
'name'
,
name
=
options
[
'node_name'
],
host
=
node_host
,
priority
=
1
,
enabled
=
True
,
schedule_enabled
=
True
)
# creating groups
susers
=
self
.
create
(
Group
,
'name'
,
name
=
'Superusers'
)
pusers
=
self
.
create
(
Group
,
'name'
,
name
=
'Powerusers'
)
users
=
self
.
create
(
Group
,
'name'
,
name
=
'Users'
)
# creating group profiles
self
.
create
(
GroupProfile
,
'group'
,
group
=
susers
)
self
.
create
(
GroupProfile
,
'group'
,
group
=
pusers
)
self
.
create
(
GroupProfile
,
'group'
,
group
=
users
)
# specifying group permissions
user_permissions
=
[
'create_vm'
,
'config_ports'
,
]
puser_permissions
=
[
'use_autocomplete'
,
'config_ports'
,
'create_vm'
,
'create_empty_disk'
,
'download_disk'
,
'resize_disk'
,
'access_console'
,
'change_resources'
,
'set_resources'
,
'change_template_resources'
,
'create_template'
,
]
suser_permissions
=
[
'add_group'
,
'use_autocomplete'
,
'create_empty_disk'
,
'download_disk'
,
'access_console'
,
'change_resources'
,
'config_ports'
,
'create_vm'
,
'recover'
,
'set_resources'
,
'change_template_resources'
,
'create_base_template'
,
'create_template'
]
# set group permissions
susers
.
permissions
.
set
(
self
.
_get_permissions
(
suser_permissions
))
pusers
.
permissions
.
set
(
self
.
_get_permissions
(
puser_permissions
))
users
.
permissions
.
set
(
self
.
_get_permissions
(
user_permissions
))
# creating users and their profiles
useruser
=
self
.
create
(
User
,
'username'
,
username
=
'user'
,
is_superuser
=
False
,
is_staff
=
False
)
useruser
.
set_password
(
"user"
)
useruser
.
save
()
self
.
create
(
Profile
,
'user'
,
user
=
useruser
)
poweruser
=
self
.
create
(
User
,
'username'
,
username
=
"poweruser"
,
is_superuser
=
False
,
is_staff
=
False
)
poweruser
.
set_password
(
"poweruser"
)
poweruser
.
save
()
self
.
create
(
Profile
,
'user'
,
user
=
poweruser
)
superuser
=
self
.
create
(
User
,
'username'
,
username
=
"superuser"
,
is_superuser
=
False
,
is_staff
=
False
)
superuser
.
set_password
(
"superuser"
)
superuser
.
save
()
self
.
create
(
Profile
,
'user'
,
user
=
superuser
)
# adding users o groups
users
.
user_set
.
add
(
useruser
)
pusers
.
user_set
.
add
(
poweruser
)
susers
.
user_set
.
add
(
superuser
)
# add groups to vm vlan
vm
.
set_level
(
users
,
'user'
)
vm
.
set_level
(
pusers
,
'user'
)
vm
.
set_level
(
susers
,
'user'
)
# notify admin if there is no harware virtualization
if
not
options
[
'kvm_present'
]:
admin
.
profile
.
notify
(
"hardware virtualization"
,
"No hardware virtualization detected, "
"your hardware does not support it or "
"not enabled in BIOS."
)
self
.
print_state
()
def
_get_permissions
(
self
,
code_names
):
query
=
Q
()
for
cn
in
code_names
:
query
|=
Q
(
codename
=
cn
)
return
Permission
.
objects
.
filter
(
query
)
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