Rational Boot Storage: Drydock validator
Adds logic for rational boot storage and corresponding unit tests. Update test_validate_design with correct yaml. Change-Id: I7ec0b4adb8be1dd90b7aa2a30fc29309b9a0563e
This commit is contained in:
parent
d365f8a254
commit
d340096b0c
|
@ -0,0 +1,47 @@
|
||||||
|
# Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
"""Utility Classes For Ochestrator"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
import drydock_provisioner.error as errors
|
||||||
|
|
||||||
|
class SimpleBytes():
|
||||||
|
def calulate_bytes(size_str):
|
||||||
|
"""
|
||||||
|
Calculate the size in bytes of a size_str.
|
||||||
|
|
||||||
|
#m or #M or #mb or #MB = # * 1024 * 1024
|
||||||
|
#g or #G or #gb or #GB = # * 1024 * 1024 * 1024
|
||||||
|
#t or #T or #tb or #TB = # * 1024 * 1024 * 1024 * 1024
|
||||||
|
|
||||||
|
:param size_str: A string representing the desired size
|
||||||
|
:return size: The calculated size in bytes
|
||||||
|
"""
|
||||||
|
pattern = '(\d+)([mMbBgGtT]{1,2})'
|
||||||
|
regex = re.compile(pattern)
|
||||||
|
match = regex.match(size_str)
|
||||||
|
|
||||||
|
if not match:
|
||||||
|
raise errors.InvalidSizeFormat("Invalid size string format: %s" % size_str)
|
||||||
|
|
||||||
|
base_size = int(match.group(1))
|
||||||
|
|
||||||
|
if match.group(2) in ['m', 'M', 'mb', 'MB']:
|
||||||
|
computed_size = base_size * (1000 * 1000)
|
||||||
|
elif match.group(2) in ['g', 'G', 'gb', 'GB']:
|
||||||
|
computed_size = base_size * (1000 * 1000 * 1000)
|
||||||
|
elif match.group(2) in ['t', 'T', 'tb', 'TB']:
|
||||||
|
computed_size = base_size * (1000 * 1000 * 1000 * 1000)
|
||||||
|
|
||||||
|
return computed_size
|
|
@ -14,10 +14,12 @@
|
||||||
"""Business Logic Validation"""
|
"""Business Logic Validation"""
|
||||||
|
|
||||||
import drydock_provisioner.objects.fields as hd_fields
|
import drydock_provisioner.objects.fields as hd_fields
|
||||||
|
import drydock_provisioner.error as errors
|
||||||
|
|
||||||
from drydock_provisioner.objects.task import TaskStatus
|
|
||||||
from drydock_provisioner.objects.task import TaskStatusMessage
|
|
||||||
from netaddr import IPNetwork, IPAddress
|
from netaddr import IPNetwork, IPAddress
|
||||||
|
from drydock_provisioner.orchestrator.util import SimpleBytes
|
||||||
|
from drydock_provisioner.objects.task import TaskStatus, TaskStatusMessage
|
||||||
|
|
||||||
|
|
||||||
class Validator():
|
class Validator():
|
||||||
def validate_design(self, site_design, result_status=None):
|
def validate_design(self, site_design, result_status=None):
|
||||||
|
@ -393,6 +395,68 @@ class Validator():
|
||||||
message_list.append(
|
message_list.append(
|
||||||
TaskStatusMessage(
|
TaskStatusMessage(
|
||||||
msg=msg, error=False, ctx_type='NA', ctx='NA'))
|
msg=msg, error=False, ctx_type='NA', ctx='NA'))
|
||||||
|
|
||||||
|
return message_list
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def boot_storage_rational(cls, site_design):
|
||||||
|
"""
|
||||||
|
Ensures that root volume is defined and is at least 20GB and that boot volume is at least 1 GB
|
||||||
|
"""
|
||||||
|
message_list = []
|
||||||
|
site_design = site_design.obj_to_simple()
|
||||||
|
BYTES_IN_GB = SimpleBytes.calulate_bytes('1GB')
|
||||||
|
|
||||||
|
baremetal_node_list = site_design.get('baremetal_nodes', [])
|
||||||
|
|
||||||
|
for baremetal_node in baremetal_node_list:
|
||||||
|
storage_devices_list = baremetal_node.get('storage_devices', [])
|
||||||
|
|
||||||
|
root_set = False
|
||||||
|
|
||||||
|
for storage_device in storage_devices_list:
|
||||||
|
partitions_list = storage_device.get('partitions', [])
|
||||||
|
|
||||||
|
for host_partition in partitions_list:
|
||||||
|
if host_partition.get('name') == 'root':
|
||||||
|
size = host_partition.get('size')
|
||||||
|
try:
|
||||||
|
cal_size = SimpleBytes.calulate_bytes(size)
|
||||||
|
root_set = True
|
||||||
|
# check if size < 20GB
|
||||||
|
if cal_size < 20 * BYTES_IN_GB:
|
||||||
|
msg = ('Boot Storage Error: Root volume must be > 20GB on BaremetalNode '
|
||||||
|
'%s' % baremetal_node.get('name'))
|
||||||
|
message_list.append(TaskStatusMessage(msg=msg, error=True, ctx_type='NA', ctx='NA'))
|
||||||
|
except errors.InvalidSizeFormat as e:
|
||||||
|
msg = ('Boot Storage Error: Root volume has an invalid size format on BaremetalNode'
|
||||||
|
'%s.' % baremetal_node.get('name'))
|
||||||
|
message_list.append(TaskStatusMessage(msg=msg, error=True, ctx_type='NA', ctx='NA'))
|
||||||
|
|
||||||
|
# check make sure root has been defined and boot volume > 1GB
|
||||||
|
if root_set and host_partition.get('name') == 'boot':
|
||||||
|
size = host_partition.get('size')
|
||||||
|
|
||||||
|
try:
|
||||||
|
cal_size = SimpleBytes.calulate_bytes(size)
|
||||||
|
# check if size < 1GB
|
||||||
|
if cal_size < BYTES_IN_GB:
|
||||||
|
msg = ('Boot Storage Error: Boot volume must be > 1GB on BaremetalNode '
|
||||||
|
'%s' % baremetal_node.get('name'))
|
||||||
|
message_list.append(TaskStatusMessage(msg=msg, error=True, ctx_type='NA', ctx='NA'))
|
||||||
|
except errors.InvalidSizeFormat as e:
|
||||||
|
msg = ('Boot Storage Error: Boot volume has an invalid size format on BaremetalNode '
|
||||||
|
'%s.' % baremetal_node.get('name'))
|
||||||
|
message_list.append(TaskStatusMessage(msg=msg, error=True, ctx_type='NA', ctx='NA'))
|
||||||
|
|
||||||
|
# This must be set
|
||||||
|
if not root_set:
|
||||||
|
msg = ('Boot Storage Error: Root volume has to be set and must be > 20GB on BaremetalNode '
|
||||||
|
'%s' % baremetal_node.get('name'))
|
||||||
|
message_list.append(TaskStatusMessage(msg=msg, error=True, ctx_type='NA', ctx='NA'))
|
||||||
|
|
||||||
|
if not message_list:
|
||||||
|
message_list.append(TaskStatusMessage(msg='Boot Storage', error=False, ctx_type='NA', ctx='NA'))
|
||||||
return message_list
|
return message_list
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -486,4 +550,5 @@ rule_set = [
|
||||||
Validator.storage_sizing,
|
Validator.storage_sizing,
|
||||||
Validator.ip_locality_check,
|
Validator.ip_locality_check,
|
||||||
Validator.no_duplicate_IPs_check,
|
Validator.no_duplicate_IPs_check,
|
||||||
|
Validator.boot_storage_rational,
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,28 +13,23 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import drydock_provisioner.objects.fields as hd_fields
|
import drydock_provisioner.objects.fields as hd_fields
|
||||||
from drydock_provisioner.statemgmt.state import DrydockState
|
from drydock_provisioner.orchestrator.orchestrator import Orchestrator
|
||||||
from drydock_provisioner.ingester.ingester import Ingester
|
|
||||||
from drydock_provisioner.orchestrator.validations.validator import Validator
|
from drydock_provisioner.orchestrator.validations.validator import Validator
|
||||||
|
|
||||||
|
|
||||||
class TestDesignValidator(object):
|
class TestDesignValidator(object):
|
||||||
def test_validate_design(self, input_files, setup):
|
def test_validate_design(self, deckhand_ingester, drydock_state, input_files):
|
||||||
"""Test the basic validation engine."""
|
"""Test the basic validation engine."""
|
||||||
|
|
||||||
input_file = input_files.join("fullsite.yaml")
|
input_file = input_files.join("deckhand_fullsite.yaml")
|
||||||
|
|
||||||
design_state = DrydockState()
|
|
||||||
design_ref = "file://%s" % str(input_file)
|
design_ref = "file://%s" % str(input_file)
|
||||||
|
|
||||||
ingester = Ingester()
|
orch = Orchestrator(state_manager=drydock_state, ingester=deckhand_ingester)
|
||||||
ingester.enable_plugin(
|
|
||||||
'drydock_provisioner.ingester.plugins.yaml.YamlIngester')
|
status, site_design = Orchestrator.get_effective_site(orch, design_ref)
|
||||||
design_status, design_data = ingester.ingest_data(
|
|
||||||
design_state=design_state, design_ref=design_ref)
|
|
||||||
|
|
||||||
val = Validator()
|
val = Validator()
|
||||||
response = val.validate_design(design_data)
|
response = val.validate_design(site_design)
|
||||||
|
|
||||||
for msg in response.message_list:
|
for msg in response.message_list:
|
||||||
assert msg.error is False
|
assert msg.error is False
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
# Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
"""Test Validation Rule Rational Boot Storage"""
|
||||||
|
|
||||||
|
from drydock_provisioner.orchestrator.orchestrator import Orchestrator
|
||||||
|
from drydock_provisioner.orchestrator.validations.validator import Validator
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class TestRationalBootStorage(object):
|
||||||
|
def test_boot_storage_rational(self, deckhand_ingester, drydock_state, input_files):
|
||||||
|
|
||||||
|
input_file = input_files.join("boot_storage_rational.yaml")
|
||||||
|
design_ref = "file://%s" % str(input_file)
|
||||||
|
|
||||||
|
orch = Orchestrator(state_manager=drydock_state, ingester=deckhand_ingester)
|
||||||
|
|
||||||
|
status, site_design = Orchestrator.get_effective_site(orch, design_ref)
|
||||||
|
|
||||||
|
message_list = Validator.boot_storage_rational(site_design)
|
||||||
|
msg = message_list[0].to_dict()
|
||||||
|
|
||||||
|
assert msg.get('message') == 'Boot Storage'
|
||||||
|
assert msg.get('error') is False
|
||||||
|
assert len(message_list) == 1
|
||||||
|
|
||||||
|
def test_invalid_boot_storage_small(self, deckhand_ingester, drydock_state, input_files):
|
||||||
|
|
||||||
|
input_file = input_files.join("invalid_boot_storage_small.yaml")
|
||||||
|
design_ref = "file://%s" % str(input_file)
|
||||||
|
|
||||||
|
orch = Orchestrator(state_manager=drydock_state, ingester=deckhand_ingester)
|
||||||
|
|
||||||
|
status, site_design = Orchestrator.get_effective_site(orch, design_ref)
|
||||||
|
|
||||||
|
message_list = Validator.boot_storage_rational(site_design)
|
||||||
|
|
||||||
|
regex = re.compile('Boot Storage Error: .+ volume must be > .+GB on BaremetalNode .+')
|
||||||
|
|
||||||
|
for msg in message_list:
|
||||||
|
msg = msg.to_dict()
|
||||||
|
assert regex.match(msg.get('message')) is not None
|
||||||
|
assert msg.get('error')
|
||||||
|
|
||||||
|
assert len(message_list) == 4
|
||||||
|
|
||||||
|
def test_invalid_boot_storage_root_not_set(self, deckhand_ingester, drydock_state, input_files):
|
||||||
|
|
||||||
|
input_file = input_files.join("invalid_boot_storage_root_not_set.yaml")
|
||||||
|
design_ref = "file://%s" % str(input_file)
|
||||||
|
|
||||||
|
orch = Orchestrator(state_manager=drydock_state, ingester=deckhand_ingester)
|
||||||
|
|
||||||
|
status, site_design = Orchestrator.get_effective_site(orch, design_ref)
|
||||||
|
|
||||||
|
message_list = Validator.boot_storage_rational(site_design)
|
||||||
|
|
||||||
|
regex = re.compile('Boot Storage Error: Root volume has to be set and must be > 20GB on BaremetalNode .+')
|
||||||
|
|
||||||
|
for msg in message_list:
|
||||||
|
msg = msg.to_dict()
|
||||||
|
assert regex.match(msg.get('message')) is not None
|
||||||
|
assert msg.get('error')
|
||||||
|
|
||||||
|
assert len(message_list) == 2
|
|
@ -0,0 +1,448 @@
|
||||||
|
#Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
####################
|
||||||
|
#
|
||||||
|
# bootstrap_seed.yaml - Site server design definition for physical layer
|
||||||
|
#
|
||||||
|
####################
|
||||||
|
# version the schema in this file so consumers can rationally parse it
|
||||||
|
---
|
||||||
|
schema: 'drydock/Region/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'sitename'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tag_definitions:
|
||||||
|
- tag: 'test'
|
||||||
|
definition_type: 'lshw_xpath'
|
||||||
|
definition: "//node[@id=\"display\"]/'clock units=\"Hz\"' > 1000000000"
|
||||||
|
authorized_keys:
|
||||||
|
- |
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDENeyO5hLPbLLQRZ0oafTYWs1ieo5Q+XgyZQs51Ju
|
||||||
|
jDGc8lKlWsg1/6yei2JewKMgcwG2Buu1eqU92Xn1SvMZLyt9GZURuBkyjcfVc/8GiU5QP1Of8B7CV0c
|
||||||
|
kfUpHWYJ17olTzT61Hgz10ioicBF6cjgQrLNcyn05xoaJHD2Vpf8Unxzi0YzA2e77yRqBo9jJVRaX2q
|
||||||
|
wUJuZrzb62x3zw8Knz6GGSZBn8xRKLaw1SKFpd1hwvL62GfqX5ZBAT1AYTZP1j8GcAoK8AFVn193SEU
|
||||||
|
vjSdUFa+RNWuJhkjBRfylJczIjTIFb5ls0jpbA3bMA9DE7lFKVQl6vVwFmiIVBI1 samplekey
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: 100full
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: oob
|
||||||
|
allowed_networks:
|
||||||
|
- oob
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: pxe
|
||||||
|
allowed_networks:
|
||||||
|
- pxe
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: gp
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: 802.3ad
|
||||||
|
hash: layer3+4
|
||||||
|
peer_rate: slow
|
||||||
|
mtu: 9000
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: 802.1q
|
||||||
|
default_network: mgmt
|
||||||
|
allowed_networks:
|
||||||
|
- public
|
||||||
|
- mgmt
|
||||||
|
---
|
||||||
|
schema: 'drydock/Rack/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: rack1
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tor_switches:
|
||||||
|
switch01name:
|
||||||
|
mgmt_ip: 1.1.1.1
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch01name
|
||||||
|
switch02name:
|
||||||
|
mgmt_ip: 1.1.1.2
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch02name
|
||||||
|
location:
|
||||||
|
clli: HSTNTXMOCG0
|
||||||
|
grid: EG12
|
||||||
|
local_networks:
|
||||||
|
- pxe-rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
cidr: 172.16.100.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.100.15
|
||||||
|
end: 172.16.100.254
|
||||||
|
dns:
|
||||||
|
domain: ilo.sitename.att.com
|
||||||
|
servers: 172.16.100.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
dhcp_relay:
|
||||||
|
self_ip: 172.16.0.4
|
||||||
|
upstream_target: 172.16.5.5
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.0.0/24
|
||||||
|
ranges:
|
||||||
|
- type: dhcp
|
||||||
|
start: 172.16.0.5
|
||||||
|
end: 172.16.0.254
|
||||||
|
dns:
|
||||||
|
domain: admin.sitename.att.com
|
||||||
|
servers: 172.16.0.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: mgmt
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '100'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.1.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.1.15
|
||||||
|
end: 172.16.1.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.1.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: mgmt.sitename.example.com
|
||||||
|
servers: 172.16.1.9,172.16.1.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: private
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '101'
|
||||||
|
mtu: 9000
|
||||||
|
cidr: 172.16.2.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.2.15
|
||||||
|
end: 172.16.2.254
|
||||||
|
dns:
|
||||||
|
domain: priv.sitename.example.com
|
||||||
|
servers: 172.16.2.9,172.16.2.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: public
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '102'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.3.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.3.15
|
||||||
|
end: 172.16.3.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.3.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: sitename.example.com
|
||||||
|
servers: 8.8.8.8
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: defaults
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
oob:
|
||||||
|
type: ipmi
|
||||||
|
network: oob
|
||||||
|
account: admin
|
||||||
|
credential: admin
|
||||||
|
storage:
|
||||||
|
physical_devices:
|
||||||
|
sda:
|
||||||
|
labels:
|
||||||
|
role: rootdisk
|
||||||
|
partitions:
|
||||||
|
- name: root
|
||||||
|
size: 20g
|
||||||
|
bootable: true
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
- name: boot
|
||||||
|
size: 1g
|
||||||
|
bootable: false
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/boot'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
sdb:
|
||||||
|
volume_group: 'log_vg'
|
||||||
|
volume_groups:
|
||||||
|
log_vg:
|
||||||
|
logical_volumes:
|
||||||
|
- name: 'log_lv'
|
||||||
|
size: '500m'
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/var/log'
|
||||||
|
fstype: 'xfs'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
platform:
|
||||||
|
image: ubuntu_16.04
|
||||||
|
kernel: generic
|
||||||
|
kernel_params:
|
||||||
|
quiet: true
|
||||||
|
console: ttyS2
|
||||||
|
metadata:
|
||||||
|
owner_data:
|
||||||
|
foo: bar
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'k8-node'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: defaults
|
||||||
|
hardware_profile: HPGen9v3
|
||||||
|
primary_network: mgmt
|
||||||
|
interfaces:
|
||||||
|
pxe:
|
||||||
|
device_link: pxe
|
||||||
|
labels:
|
||||||
|
noconfig: true
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
networks:
|
||||||
|
- pxe
|
||||||
|
bond0:
|
||||||
|
device_link: gp
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
- prim_nic02
|
||||||
|
networks:
|
||||||
|
- mgmt
|
||||||
|
- private
|
||||||
|
metadata:
|
||||||
|
tags:
|
||||||
|
- 'test'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: controller01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
interfaces:
|
||||||
|
bond0:
|
||||||
|
networks:
|
||||||
|
- '!private'
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.20
|
||||||
|
- network: public
|
||||||
|
address: 172.16.3.20
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.20
|
||||||
|
metadata:
|
||||||
|
rack: rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: compute01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.21
|
||||||
|
- network: private
|
||||||
|
address: 172.16.2.21
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.21
|
||||||
|
metadata:
|
||||||
|
rack: rack2
|
||||||
|
---
|
||||||
|
schema: 'drydock/HardwareProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: HPGen9v3
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vendor: HP
|
||||||
|
generation: '8'
|
||||||
|
hw_version: '3'
|
||||||
|
bios_version: '2.2.3'
|
||||||
|
boot_mode: bios
|
||||||
|
bootstrap_protocol: pxe
|
||||||
|
pxe_interface: 0
|
||||||
|
device_aliases:
|
||||||
|
prim_nic01:
|
||||||
|
address: '0000:00:03.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
prim_nic02:
|
||||||
|
address: '0000:00:04.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
primary_boot:
|
||||||
|
address: '2:0.0.0'
|
||||||
|
dev_type: 'VBOX HARDDISK'
|
||||||
|
bus_type: 'scsi'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: helloworld
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: hw_filtered
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
node_filter:
|
||||||
|
filter_set_type: 'union'
|
||||||
|
filter_set:
|
||||||
|
- filter_type: 'union'
|
||||||
|
node_names:
|
||||||
|
- 'compute01'
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
...
|
|
@ -0,0 +1,450 @@
|
||||||
|
#Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
####################
|
||||||
|
#
|
||||||
|
# bootstrap_seed.yaml - Site server design definition for physical layer
|
||||||
|
#
|
||||||
|
####################
|
||||||
|
# version the schema in this file so consumers can rationally parse it
|
||||||
|
---
|
||||||
|
schema: 'drydock/Region/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'sitename'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tag_definitions:
|
||||||
|
- tag: 'test'
|
||||||
|
definition_type: 'lshw_xpath'
|
||||||
|
definition: "//node[@id=\"display\"]/'clock units=\"Hz\"' > 1000000000"
|
||||||
|
authorized_keys:
|
||||||
|
- |
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDENeyO5hLPbLLQRZ0oafTYWs1ieo5Q+XgyZQs51Ju
|
||||||
|
jDGc8lKlWsg1/6yei2JewKMgcwG2Buu1eqU92Xn1SvMZLyt9GZURuBkyjcfVc/8GiU5QP1Of8B7CV0c
|
||||||
|
kfUpHWYJ17olTzT61Hgz10ioicBF6cjgQrLNcyn05xoaJHD2Vpf8Unxzi0YzA2e77yRqBo9jJVRaX2q
|
||||||
|
wUJuZrzb62x3zw8Knz6GGSZBn8xRKLaw1SKFpd1hwvL62GfqX5ZBAT1AYTZP1j8GcAoK8AFVn193SEU
|
||||||
|
vjSdUFa+RNWuJhkjBRfylJczIjTIFb5ls0jpbA3bMA9DE7lFKVQl6vVwFmiIVBI1 samplekey
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: 100full
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: oob
|
||||||
|
allowed_networks:
|
||||||
|
- oob
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: pxe
|
||||||
|
allowed_networks:
|
||||||
|
- pxe
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: gp
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: 802.3ad
|
||||||
|
hash: layer3+4
|
||||||
|
peer_rate: slow
|
||||||
|
mtu: 9000
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: 802.1q
|
||||||
|
default_network: mgmt
|
||||||
|
allowed_networks:
|
||||||
|
- public
|
||||||
|
- mgmt
|
||||||
|
---
|
||||||
|
schema: 'drydock/Rack/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: rack1
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tor_switches:
|
||||||
|
switch01name:
|
||||||
|
mgmt_ip: 1.1.1.1
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch01name
|
||||||
|
switch02name:
|
||||||
|
mgmt_ip: 1.1.1.2
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch02name
|
||||||
|
location:
|
||||||
|
clli: HSTNTXMOCG0
|
||||||
|
grid: EG12
|
||||||
|
local_networks:
|
||||||
|
- pxe-rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
cidr: 172.16.100.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.100.15
|
||||||
|
end: 172.16.100.254
|
||||||
|
dns:
|
||||||
|
domain: ilo.sitename.att.com
|
||||||
|
servers: 172.16.100.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
dhcp_relay:
|
||||||
|
self_ip: 172.16.0.4
|
||||||
|
upstream_target: 172.16.5.5
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.0.0/24
|
||||||
|
ranges:
|
||||||
|
- type: dhcp
|
||||||
|
start: 172.16.0.5
|
||||||
|
end: 172.16.0.254
|
||||||
|
dns:
|
||||||
|
domain: admin.sitename.att.com
|
||||||
|
servers: 172.16.0.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: mgmt
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '100'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.1.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.1.15
|
||||||
|
end: 172.16.1.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.1.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: mgmt.sitename.example.com
|
||||||
|
servers: 172.16.1.9,172.16.1.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: private
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '101'
|
||||||
|
mtu: 9000
|
||||||
|
cidr: 172.16.2.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.2.15
|
||||||
|
end: 172.16.2.254
|
||||||
|
dns:
|
||||||
|
domain: priv.sitename.example.com
|
||||||
|
servers: 172.16.2.9,172.16.2.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: public
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '102'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.3.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.3.15
|
||||||
|
end: 172.16.3.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.3.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: sitename.example.com
|
||||||
|
servers: 8.8.8.8
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: defaults
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
oob:
|
||||||
|
type: ipmi
|
||||||
|
network: oob
|
||||||
|
account: admin
|
||||||
|
credential: admin
|
||||||
|
storage:
|
||||||
|
physical_devices:
|
||||||
|
sda:
|
||||||
|
labels:
|
||||||
|
role: rootdisk
|
||||||
|
partitions:
|
||||||
|
##########################################
|
||||||
|
# FAILS HERE: Root not set
|
||||||
|
- name: rootfail
|
||||||
|
size: 20GB
|
||||||
|
bootable: true
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
- name: boot
|
||||||
|
size: 1GB
|
||||||
|
bootable: false
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/boot'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
sdb:
|
||||||
|
volume_group: 'log_vg'
|
||||||
|
volume_groups:
|
||||||
|
log_vg:
|
||||||
|
logical_volumes:
|
||||||
|
- name: 'log_lv'
|
||||||
|
size: '500m'
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/var/log'
|
||||||
|
fstype: 'xfs'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
platform:
|
||||||
|
image: ubuntu_16.04
|
||||||
|
kernel: generic
|
||||||
|
kernel_params:
|
||||||
|
quiet: true
|
||||||
|
console: ttyS2
|
||||||
|
metadata:
|
||||||
|
owner_data:
|
||||||
|
foo: bar
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'k8-node'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: defaults
|
||||||
|
hardware_profile: HPGen9v3
|
||||||
|
primary_network: mgmt
|
||||||
|
interfaces:
|
||||||
|
pxe:
|
||||||
|
device_link: pxe
|
||||||
|
labels:
|
||||||
|
noconfig: true
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
networks:
|
||||||
|
- pxe
|
||||||
|
bond0:
|
||||||
|
device_link: gp
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
- prim_nic02
|
||||||
|
networks:
|
||||||
|
- mgmt
|
||||||
|
- private
|
||||||
|
metadata:
|
||||||
|
tags:
|
||||||
|
- 'test'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: controller01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
interfaces:
|
||||||
|
bond0:
|
||||||
|
networks:
|
||||||
|
- '!private'
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.20
|
||||||
|
- network: public
|
||||||
|
address: 172.16.3.20
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.20
|
||||||
|
metadata:
|
||||||
|
rack: rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: compute01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.21
|
||||||
|
- network: private
|
||||||
|
address: 172.16.2.21
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.21
|
||||||
|
metadata:
|
||||||
|
rack: rack2
|
||||||
|
---
|
||||||
|
schema: 'drydock/HardwareProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: HPGen9v3
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vendor: HP
|
||||||
|
generation: '8'
|
||||||
|
hw_version: '3'
|
||||||
|
bios_version: '2.2.3'
|
||||||
|
boot_mode: bios
|
||||||
|
bootstrap_protocol: pxe
|
||||||
|
pxe_interface: 0
|
||||||
|
device_aliases:
|
||||||
|
prim_nic01:
|
||||||
|
address: '0000:00:03.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
prim_nic02:
|
||||||
|
address: '0000:00:04.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
primary_boot:
|
||||||
|
address: '2:0.0.0'
|
||||||
|
dev_type: 'VBOX HARDDISK'
|
||||||
|
bus_type: 'scsi'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: helloworld
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: hw_filtered
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
node_filter:
|
||||||
|
filter_set_type: 'union'
|
||||||
|
filter_set:
|
||||||
|
- filter_type: 'union'
|
||||||
|
node_names:
|
||||||
|
- 'compute01'
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
...
|
|
@ -0,0 +1,452 @@
|
||||||
|
#Copyright 2017 AT&T Intellectual Property. All other rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
####################
|
||||||
|
#
|
||||||
|
# bootstrap_seed.yaml - Site server design definition for physical layer
|
||||||
|
#
|
||||||
|
####################
|
||||||
|
# version the schema in this file so consumers can rationally parse it
|
||||||
|
---
|
||||||
|
schema: 'drydock/Region/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'sitename'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tag_definitions:
|
||||||
|
- tag: 'test'
|
||||||
|
definition_type: 'lshw_xpath'
|
||||||
|
definition: "//node[@id=\"display\"]/'clock units=\"Hz\"' > 1000000000"
|
||||||
|
authorized_keys:
|
||||||
|
- |
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDENeyO5hLPbLLQRZ0oafTYWs1ieo5Q+XgyZQs51Ju
|
||||||
|
jDGc8lKlWsg1/6yei2JewKMgcwG2Buu1eqU92Xn1SvMZLyt9GZURuBkyjcfVc/8GiU5QP1Of8B7CV0c
|
||||||
|
kfUpHWYJ17olTzT61Hgz10ioicBF6cjgQrLNcyn05xoaJHD2Vpf8Unxzi0YzA2e77yRqBo9jJVRaX2q
|
||||||
|
wUJuZrzb62x3zw8Knz6GGSZBn8xRKLaw1SKFpd1hwvL62GfqX5ZBAT1AYTZP1j8GcAoK8AFVn193SEU
|
||||||
|
vjSdUFa+RNWuJhkjBRfylJczIjTIFb5ls0jpbA3bMA9DE7lFKVQl6vVwFmiIVBI1 samplekey
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: 100full
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: oob
|
||||||
|
allowed_networks:
|
||||||
|
- oob
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: disabled
|
||||||
|
mtu: 1500
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: disabled
|
||||||
|
default_network: pxe
|
||||||
|
allowed_networks:
|
||||||
|
- pxe
|
||||||
|
---
|
||||||
|
schema: 'drydock/NetworkLink/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: gp
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: 802.3ad
|
||||||
|
hash: layer3+4
|
||||||
|
peer_rate: slow
|
||||||
|
mtu: 9000
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: 802.1q
|
||||||
|
default_network: mgmt
|
||||||
|
allowed_networks:
|
||||||
|
- public
|
||||||
|
- mgmt
|
||||||
|
---
|
||||||
|
schema: 'drydock/Rack/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: rack1
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
tor_switches:
|
||||||
|
switch01name:
|
||||||
|
mgmt_ip: 1.1.1.1
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch01name
|
||||||
|
switch02name:
|
||||||
|
mgmt_ip: 1.1.1.2
|
||||||
|
sdn_api_uri: polo+https://polo-api.web.att.com/switchmgmt?switch=switch02name
|
||||||
|
location:
|
||||||
|
clli: HSTNTXMOCG0
|
||||||
|
grid: EG12
|
||||||
|
local_networks:
|
||||||
|
- pxe-rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: oob
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
cidr: 172.16.100.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.100.15
|
||||||
|
end: 172.16.100.254
|
||||||
|
dns:
|
||||||
|
domain: ilo.sitename.att.com
|
||||||
|
servers: 172.16.100.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: pxe
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
dhcp_relay:
|
||||||
|
self_ip: 172.16.0.4
|
||||||
|
upstream_target: 172.16.5.5
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.0.0/24
|
||||||
|
ranges:
|
||||||
|
- type: dhcp
|
||||||
|
start: 172.16.0.5
|
||||||
|
end: 172.16.0.254
|
||||||
|
dns:
|
||||||
|
domain: admin.sitename.att.com
|
||||||
|
servers: 172.16.0.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: mgmt
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '100'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.1.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.1.15
|
||||||
|
end: 172.16.1.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.1.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: mgmt.sitename.example.com
|
||||||
|
servers: 172.16.1.9,172.16.1.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: private
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '101'
|
||||||
|
mtu: 9000
|
||||||
|
cidr: 172.16.2.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.2.15
|
||||||
|
end: 172.16.2.254
|
||||||
|
dns:
|
||||||
|
domain: priv.sitename.example.com
|
||||||
|
servers: 172.16.2.9,172.16.2.10
|
||||||
|
---
|
||||||
|
schema: 'drydock/Network/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: public
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vlan: '102'
|
||||||
|
mtu: 1500
|
||||||
|
cidr: 172.16.3.0/24
|
||||||
|
ranges:
|
||||||
|
- type: static
|
||||||
|
start: 172.16.3.15
|
||||||
|
end: 172.16.3.254
|
||||||
|
routes:
|
||||||
|
- subnet: 0.0.0.0/0
|
||||||
|
gateway: 172.16.3.1
|
||||||
|
metric: 10
|
||||||
|
dns:
|
||||||
|
domain: sitename.example.com
|
||||||
|
servers: 8.8.8.8
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: defaults
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
oob:
|
||||||
|
type: ipmi
|
||||||
|
network: oob
|
||||||
|
account: admin
|
||||||
|
credential: admin
|
||||||
|
storage:
|
||||||
|
physical_devices:
|
||||||
|
sda:
|
||||||
|
labels:
|
||||||
|
role: rootdisk
|
||||||
|
partitions:
|
||||||
|
###############################################
|
||||||
|
# FAILS HERE: root volume < 20G
|
||||||
|
- name: root
|
||||||
|
size: 10g
|
||||||
|
bootable: true
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
###############################################
|
||||||
|
# FAILS HERE: boot volume < 1GB
|
||||||
|
- name: boot
|
||||||
|
size: 500m
|
||||||
|
bootable: false
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/boot'
|
||||||
|
fstype: 'ext4'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
sdb:
|
||||||
|
volume_group: 'log_vg'
|
||||||
|
volume_groups:
|
||||||
|
log_vg:
|
||||||
|
logical_volumes:
|
||||||
|
- name: 'log_lv'
|
||||||
|
size: '500m'
|
||||||
|
filesystem:
|
||||||
|
mountpoint: '/var/log'
|
||||||
|
fstype: 'xfs'
|
||||||
|
mount_options: 'defaults'
|
||||||
|
platform:
|
||||||
|
image: ubuntu_16.04
|
||||||
|
kernel: generic
|
||||||
|
kernel_params:
|
||||||
|
quiet: true
|
||||||
|
console: ttyS2
|
||||||
|
metadata:
|
||||||
|
owner_data:
|
||||||
|
foo: bar
|
||||||
|
---
|
||||||
|
schema: 'drydock/HostProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: 'k8-node'
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: defaults
|
||||||
|
hardware_profile: HPGen9v3
|
||||||
|
primary_network: mgmt
|
||||||
|
interfaces:
|
||||||
|
pxe:
|
||||||
|
device_link: pxe
|
||||||
|
labels:
|
||||||
|
noconfig: true
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
networks:
|
||||||
|
- pxe
|
||||||
|
bond0:
|
||||||
|
device_link: gp
|
||||||
|
slaves:
|
||||||
|
- prim_nic01
|
||||||
|
- prim_nic02
|
||||||
|
networks:
|
||||||
|
- mgmt
|
||||||
|
- private
|
||||||
|
metadata:
|
||||||
|
tags:
|
||||||
|
- 'test'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: controller01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
interfaces:
|
||||||
|
bond0:
|
||||||
|
networks:
|
||||||
|
- '!private'
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.20
|
||||||
|
- network: public
|
||||||
|
address: 172.16.3.20
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.20
|
||||||
|
metadata:
|
||||||
|
rack: rack1
|
||||||
|
---
|
||||||
|
schema: 'drydock/BaremetalNode/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: compute01
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
host_profile: k8-node
|
||||||
|
addressing:
|
||||||
|
- network: pxe
|
||||||
|
address: dhcp
|
||||||
|
- network: mgmt
|
||||||
|
address: 172.16.1.21
|
||||||
|
- network: private
|
||||||
|
address: 172.16.2.21
|
||||||
|
- network: oob
|
||||||
|
address: 172.16.100.21
|
||||||
|
metadata:
|
||||||
|
rack: rack2
|
||||||
|
---
|
||||||
|
schema: 'drydock/HardwareProfile/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: HPGen9v3
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
vendor: HP
|
||||||
|
generation: '8'
|
||||||
|
hw_version: '3'
|
||||||
|
bios_version: '2.2.3'
|
||||||
|
boot_mode: bios
|
||||||
|
bootstrap_protocol: pxe
|
||||||
|
pxe_interface: 0
|
||||||
|
device_aliases:
|
||||||
|
prim_nic01:
|
||||||
|
address: '0000:00:03.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
prim_nic02:
|
||||||
|
address: '0000:00:04.0'
|
||||||
|
dev_type: '82540EM Gigabit Ethernet Controller'
|
||||||
|
bus_type: 'pci'
|
||||||
|
primary_boot:
|
||||||
|
address: '2:0.0.0'
|
||||||
|
dev_type: 'VBOX HARDDISK'
|
||||||
|
bus_type: 'scsi'
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: helloworld
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
---
|
||||||
|
schema: 'drydock/BootAction/v1'
|
||||||
|
metadata:
|
||||||
|
schema: 'metadata/Document/v1'
|
||||||
|
name: hw_filtered
|
||||||
|
storagePolicy: 'cleartext'
|
||||||
|
labels:
|
||||||
|
application: 'drydock'
|
||||||
|
data:
|
||||||
|
node_filter:
|
||||||
|
filter_set_type: 'union'
|
||||||
|
filter_set:
|
||||||
|
- filter_type: 'union'
|
||||||
|
node_names:
|
||||||
|
- 'compute01'
|
||||||
|
assets:
|
||||||
|
- path: /var/tmp/hello.sh
|
||||||
|
type: file
|
||||||
|
permissions: '555'
|
||||||
|
data: |-
|
||||||
|
IyEvYmluL2Jhc2gKCmVjaG8gJ0hlbGxvIFdvcmxkISAtZnJvbSB7eyBub2RlLmhvc3RuYW1lIH19
|
||||||
|
Jwo=
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
- template
|
||||||
|
- path: /lib/systemd/system/hello.service
|
||||||
|
type: unit
|
||||||
|
permissions: '600'
|
||||||
|
data: |-
|
||||||
|
W1VuaXRdCkRlc2NyaXB0aW9uPUhlbGxvIFdvcmxkCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4
|
||||||
|
ZWNTdGFydD0vdmFyL3RtcC9oZWxsby5zaAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIu
|
||||||
|
dGFyZ2V0Cg==
|
||||||
|
data_pipeline:
|
||||||
|
- base64_decode
|
||||||
|
- utf8_decode
|
||||||
|
...
|
Loading…
Reference in New Issue