Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
1105 Внедрение механизмов обеспечения безопасности цепочки поставки программных проектов
Legacy
scanned-projects
helm
Commits
08c8e10c
Commit
08c8e10c
authored
9 years ago
by
Brendan Melville
Browse files
Options
Download
Patches
Plain Diff
Moving replicatedservice.py to its own example to be used by others.
parent
b73278bb
main
Release
add-codeql
dependabot/go_modules/github.com/docker/distribution-2.8.2incompatible
dependabot/go_modules/github.com/lib/pq-1.10.9
dependabot/go_modules/github.com/rubenv/sql-migrate-1.4.0
dependabot/go_modules/golang.org/x/crypto-0.9.0
dependabot/go_modules/golang.org/x/term-0.8.0
dependabot/go_modules/k8s.io/klog/v2-2.100.1
dev-v2
feat-v3/event-emitter-lua
kube-update-test
release-2.0
release-2.1
release-2.10
release-2.11
release-2.12
release-2.13
release-2.14
release-2.15
release-2.16
release-2.17
release-2.2
release-2.3
release-2.4
release-2.5
release-2.6
release-2.7
release-2.8
release-2.9
release-3.0
release-3.1
release-3.10
release-3.11
release-3.12
release-3.2
release-3.3
release-3.4
release-3.5
release-3.6
release-3.6.1
release-3.6.2
release-3.7
release-3.8
release-3.9
release-v1.2.1
release-v3.0.0-beta.4
1.999.0
v3.12.0
v3.12.0-rc.1
v3.12.0-dev.1
v3.11.3
v3.11.2
v3.11.1
v3.11.0
v3.11.0-rc.2
v3.11.0-rc.1
v3.10.3
v3.10.2
v3.10.1
v3.10.0
v3.10.0-rc.1
v3.9.4
v3.9.3
v3.9.2
v3.9.1
v3.9.0
v3.9.0-rc.1
v3.8.2
v3.8.1
v3.8.0
v3.8.0-rc.2
v3.8.0-rc.1
v3.7.2
v3.7.1
v3.7.0
v3.7.0-rc.3
v3.7.0-rc.2
v3.7.0-rc.1
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.6.0-rc.1
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.5.0-rc.2
v3.5.0-rc.1
v3.4.2
v3.4.1
v3.4.0
v3.4.0-rc.1
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.3.0-rc.2
v3.3.0-rc.1
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.2.0-rc.1
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc.1
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-beta.5
v3.0.0-beta.4
v3.0.0-beta.3
v3.0.0-beta.2
v3.0.0-beta.1
v3.0.0-alpha.2
v3.0.0-alpha.1
v2.17.0
v2.17.0-rc.1
v2.16.12
v2.16.11
v2.16.10
v2.16.9
v2.16.8
v2.16.7
v2.16.6
v2.16.5
v2.16.4
v2.16.3
v2.16.2
v2.16.1
v2.16.0
v2.16.0-rc.2
v2.16.0-rc.1
v2.15.2
v2.15.1
v2.15.0
v2.15.0-rc.2
v2.15.0-rc.1
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.14.0-rc.2
v2.14.0-rc.1
v2.13.1
v2.13.1-rc.1
v2.13.0
v2.13.0-rc.2
v2.13.0-rc.1
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.12.0-rc.2
v2.12.0-rc.1
v2.11.0
v2.11.0-rc.4
v2.11.0-rc.3
v2.11.0-rc.2
v2.11.0-rc.1
v2.10.0
v2.10.0-rc.3
v2.10.0-rc.2
v2.10.0-rc.1
v2.9.1
v2.9.0
v2.9.0-rc5
v2.9.0-rc4
v2.9.0-rc3
v2.9.0-rc2
v2.9.0-rc1
v2.8.2
v2.8.2-rc1
v2.8.1
v2.8.0
v2.8.0-rc.1
v2.7.2
v2.7.1
v2.7.0
v2.7.0-rc1
v2.6.2
v2.6.1
v2.6.0
v2.5.1
v2.5.0
v2.4.2
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.2
v2.0.1
v2.0.0
v2.0.0-rc.2
v2.0.0-rc.1
v2.0.0-beta.2
v2.0.0-beta.1
v2.0.0-alpha.5
v2.0.0-alpha.4
v2.0.0-alpha.3
v2.0.0-alpha.2
v2.0.0-alpha.1
v1.2.1
v1.2
v1.1
v1.0
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/replicatedservice/replicatedservice.py
+187
-0
examples/replicatedservice/replicatedservice.py
with
187 additions
and
0 deletions
+187
-0
examples/replicatedservice/replicatedservice.py
0 → 100644
+
187
−
0
View file @
08c8e10c
"""Defines a ReplicatedService type by creating both a Service and an RC.
This module creates a typical abstraction for running a service in a
Kubernetes cluster, namely a replication controller and a service packaged
together into a single unit.
"""
import
yaml
SERVICE_TYPE_COLLECTION
=
'Service'
RC_TYPE_COLLECTION
=
'ReplicationController'
def
GenerateConfig
(
context
):
"""Generates a Replication Controller and a matching Service.
Args:
context: Template context, which can contain the following properties:
container_name - Name to use for container. If omitted, name is
used.
namespace - Namespace to create the resources in. If omitted,
'default' is used.
service_name - Name to use for service. If omitted name-service is
used.
protocol - Protocol to use for the service
service_port - Port to use for the service
target_port - Target port for the service
container_port - Container port to use
replicas - Number of replicas to create in RC
image - Docker image to use for replicas. Required.
labels - labels to apply.
env - Environmental variables to apply (list of maps). Format
should be:
[{'name': ENV_VAR_NAME, 'value':'ENV_VALUE'},
{'name': ENV_VAR_NAME_2, 'value':'ENV_VALUE_2'}]
external_service - If set to true, enable external Load Balancer
Returns:
A Container Manifest as a YAML string.
"""
# YAML config that we're going to create for both RC & Service
config
=
{
'resources'
:
[]}
name
=
context
.
env
[
'name'
]
container_name
=
context
.
properties
.
get
(
'container_name'
,
name
)
namespace
=
context
.
properties
.
get
(
'namespace'
,
'default'
)
# Define things that the Service cares about
service_name
=
context
.
properties
.
get
(
'service_name'
,
name
+
'-service'
)
service_type
=
SERVICE_TYPE_COLLECTION
# Define things that the Replication Controller (rc) cares about
rc_name
=
name
+
'-rc'
rc_type
=
RC_TYPE_COLLECTION
service
=
{
'name'
:
service_name
,
'type'
:
service_type
,
'properties'
:
{
'apiVersion'
:
'v1'
,
'kind'
:
'Service'
,
'namespace'
:
namespace
,
'metadata'
:
{
'name'
:
service_name
,
'labels'
:
GenerateLabels
(
context
,
service_name
),
},
'spec'
:
{
'ports'
:
[
GenerateServicePorts
(
context
,
container_name
)],
'selector'
:
GenerateLabels
(
context
,
name
)
}
}
}
set_up_external_lb
=
context
.
properties
.
get
(
'external_service'
,
None
)
if
set_up_external_lb
:
service
[
'properties'
][
'spec'
][
'type'
]
=
'LoadBalancer'
config
[
'resources'
].
append
(
service
)
rc
=
{
'name'
:
rc_name
,
'type'
:
rc_type
,
'properties'
:
{
'apiVersion'
:
'v1'
,
'kind'
:
'ReplicationController'
,
'namespace'
:
namespace
,
'metadata'
:
{
'name'
:
rc_name
,
'labels'
:
GenerateLabels
(
context
,
rc_name
),
},
'spec'
:
{
'replicas'
:
context
.
properties
[
'replicas'
],
'selector'
:
GenerateLabels
(
context
,
name
),
'template'
:
{
'metadata'
:
{
'labels'
:
GenerateLabels
(
context
,
name
),
},
'spec'
:
{
'containers'
:
[
{
'env'
:
GenerateEnv
(
context
),
'name'
:
container_name
,
'image'
:
context
.
properties
[
'image'
],
'ports'
:
[
{
'name'
:
container_name
,
'containerPort'
:
context
.
properties
[
'container_port'
],
}
]
}
]
}
}
}
}
}
config
[
'resources'
].
append
(
rc
)
return
yaml
.
dump
(
config
)
# Generates labels either from the context.properties['labels'] or generates
# a default label 'name':name
def
GenerateLabels
(
context
,
name
):
"""Generates labels from context.properties['labels'] or creates default.
We make a deep copy of the context.properties['labels'] section to avoid
linking in the yaml document, which I believe reduces readability of the
expanded template. If no labels are given, generate a default 'name':name.
Args:
context: Template context, which can contain the following properties:
labels - Labels to generate
Returns:
A dict containing labels in a name:value format
"""
tmp_labels
=
context
.
properties
.
get
(
'labels'
,
None
)
ret_labels
=
{
'name'
:
name
}
if
isinstance
(
tmp_labels
,
dict
):
for
key
,
value
in
tmp_labels
.
iteritems
():
ret_labels
[
key
]
=
value
return
ret_labels
def
GenerateServicePorts
(
context
,
name
):
"""Generates a ports section for a service.
Args:
context: Template context, which can contain the following properties:
service_port - Port to use for the service
target_port - Target port for the service
protocol - Protocol to use.
Returns:
A dict containing a port definition
"""
service_port
=
context
.
properties
.
get
(
'service_port'
,
None
)
target_port
=
context
.
properties
.
get
(
'target_port'
,
None
)
protocol
=
context
.
properties
.
get
(
'protocol'
)
ports
=
{}
if
name
:
ports
[
'name'
]
=
name
if
service_port
:
ports
[
'port'
]
=
service_port
if
target_port
:
ports
[
'targetPort'
]
=
target_port
if
protocol
:
ports
[
'protocol'
]
=
protocol
return
ports
def
GenerateEnv
(
context
):
"""Generates environmental variables for a pod.
Args:
context: Template context, which can contain the following properties:
env - Environment variables to set.
Returns:
A list containing env variables in dict format {name: 'name', value: 'value'}
"""
env
=
[]
tmp_env
=
context
.
properties
.
get
(
'env'
,
[])
for
entry
in
tmp_env
:
if
isinstance
(
entry
,
dict
):
env
.
append
({
'name'
:
entry
.
get
(
'name'
),
'value'
:
entry
.
get
(
'value'
)})
return
env
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets