Chef_Processors/ChefArray.py (58 lines of code) (raw):
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
#
"""See docstring for ChefArray class."""
from __future__ import absolute_import
from autopkglib import Processor
__all__ = ["ChefArray"]
class ChefArray(Processor):
description = (
"Produces an array that can be used with other "
" Chef blocks. See "
"https://docs.chef.io/ruby.html#arrays."
)
input_variables = {
"item_list": {
"description": (
"Array of items to be put into the array block. This "
"can also be a single string."
),
"required": True,
},
"no_wrap_quotes": {
"description": "Do not add wrapping quotation marks.",
"required": False,
},
"remove_version": {
"description": ("Removes the version string from the variable."),
"required": False,
},
}
output_variables = {"array_block": {"description": "Chef array block."}}
__doc__ = description
def main(self):
beginning_bracket = "[\n"
iterator = "item"
end_bracket = "]"
each_text = ".each do |%s|\n" % iterator
quotes = "'"
itemlist = list()
# Are we going to use wrapping quotes?
if self.env.get("no_wrap_quotes"):
quotes = ""
# Check to see if one item was passed as a single string
if isinstance(self.env["item_list"], basestring):
if self.env["remove_version"]:
# Remove the ['version'] text from the string
version_string = "['%s']" % self.env["remove_version"]
if version_string in self.env["item_list"]:
self.env["item_list"] = self.env["item_list"].replace(
version_string, ""
)
self.env["array_block"] = self.env["item_list"] + each_text
else:
itemlist = self.env["item_list"]
# Begin the block
self.env["array_block"] = beginning_bracket
# Loop through the array of items
for item in itemlist:
self.output("Item: %s" % item)
self.env["array_block"] += " %s%s%s,\n" % (quotes, str(item), quotes)
# End the block
self.env["array_block"] += end_bracket
# Remove the trailing comma on the last item
self.env["array_block"] = self.env["array_block"].replace(",\n]", "\n]")
self.env["array_block"] += each_text
self.output("Chef block: \n%s" % self.env["array_block"])
if __name__ == "__main__":
PROCESSOR = ChefArray()
PROCESSOR.execute_shell()