UCL for FreeBSD

Video in TIB AV-Portal: UCL for FreeBSD

Formal Metadata

UCL for FreeBSD
Universal Configuration Files
Title of Series
CC Attribution - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this license.
Release Date

Content Metadata

Subject Area
Most system administrators no longer edit the majority of configuration files by hand, they use automation and configuration management tools like puppet, saltstack, ansible, and the like. Many utilities and daemons in the FreeBSD base system use their own custom configuration file format. While these various different formats are usually accompanied by man pages, they do not lend themselves to automation or programmatic editing. Space and tab delimited files make it harder to extract a specific value, and difficult to edit that value in place, whereas nested key-value pairs are easier to read, and are easily addressed using libUCLs dotted notation. To solve this, I propose teaching the various utilities and daemons in the FreeBSD base system to speak UCL – the Universal Config Language, as implemented by libucl. In addition, I propose adding two small tools to the base system to make the administration of such config files easier for humans and automated scripts.
Scale (map) Cache (computing) Server (computing) Universe (mathematics) Videoconferencing Focus (optics) Twitter Formal language Content delivery network Sanitary sewer Formal language
Presentation of a group Server (computing) Freeware Computer file Multiplication sign File format 1 (number) Electronic mailing list Replication (computing) Focus (optics) Number Formal language Mathematics Cache (computing) Bit rate Synchronization Nichtkommutative Jordan-Algebra Videoconferencing Operating system Utility software Content delivery network Sanitary sewer Physical system Scale (map) Focus (optics) Theory of relativity Mapping File format Software developer Line (geometry) Binary file Entire function Process (computing) Logic Data center Utility software Videoconferencing
Point (geometry) Server (computing) Installation art Computer file Code Logarithm Multiplication sign Execution unit Virtual machine Sheaf (mathematics) Maxima and minima Set (mathematics) Login Computer programming Rotation Number Web 2.0 Mathematics Goodness of fit Different (Kate Ryan album) Representation (politics) Utility software Series (mathematics) Website Local ring Physical system Default (computer science) Overlay-Netz Default (computer science) Multiplication File format Software developer Maxima and minima Line (geometry) Complete metric space Formal language Function (mathematics) Network topology Universe (mathematics) Statement (computer science) Website Right angle Finite-state machine Quicksort Library (computing)
Boolean algebra Computer file Equals sign Sheaf (mathematics) Maxima and minima Coma Berenices Variable (mathematics) Complete metric space Code Element (mathematics) Computer programming Connected space Writing Different (Kate Ryan album) Function (mathematics) Mixed reality Order (biology) Pattern language Object (grammar) output Macro (computer science) Asynchronous Transfer Mode Condition number
Web page Email Asynchronous Transfer Mode Server (computing) Context awareness Computer file Multiplication sign Execution unit File format Sheaf (mathematics) 1 (number) Coma Berenices Counting Field (computer science) Number Array data structure Mathematics Different (Kate Ryan album) Integrated development environment Message passing Physical system Area Default (computer science) Email File format Content (media) Special unitary group Line (geometry) Cartesian coordinate system Dressing (medical) Arithmetic mean Integrated development environment Order (biology) Right angle Physical system Asynchronous Transfer Mode
Slide rule Group action Existence Implementation Computer file Multiplication sign System administrator Execution unit Sheaf (mathematics) Set (mathematics) Water vapor Function (mathematics) Field (computer science) Number Mathematics Operator (mathematics) Software testing Recursion Macro (computer science) Physical system Default (computer science) Moment (mathematics) Content (media) Mathematical analysis Shared memory Bit Lattice (order) Line (geometry) Message passing Software repository Right angle Musical ensemble Quicksort
Point (geometry) Key (cryptography) Firewall (computing) Order (biology) Statement (computer science) Set (mathematics) Data conversion Figurate number Rule of inference
Point (geometry) Functional (mathematics) Perfect group Computer file Code Patch (Unix) Multiplication sign View (database) 1 (number) Mereology Number Revision control Prototype Mathematics Strategy game Different (Kate Ryan album) Utility software Form (programming) File format Bit Line (geometry) Parsing Message passing Kernel (computing) Statement (computer science) Reading (process)
Area Default (computer science) Functional (mathematics) Computer file Moment (mathematics) Coroutine Protein Complete metric space Computer programming Personal digital assistant Data logger Iteration Quicksort Data structure Object (grammar) Data compression
Group action Code Decision theory Multiplication sign Sheaf (mathematics) Set (mathematics) Coma Berenices Client (computing) Disk read-and-write head Computer programming Different (Kate Ryan album) Flag Recursion Namespace File format Electronic mailing list Bit Thermal expansion Complete metric space Variable (mathematics) Arithmetic mean Order (biology) Data logger Bounded variation Slide rule Computer file Patch (Unix) Login Distance Number Element (mathematics) Revision control Latent heat Energy level Utility software Data structure Compilation album Default (computer science) Dot product Multiplication Key (cryptography) Consistency Content (media) Database Directory service Word Software Personal digital assistant Logic Read-only memory Point cloud
Scripting language Point (geometry) Default (computer science) Computer file Code Interface (computing) Bit Complete metric space Information privacy Computer programming Uniform resource locator Positional notation Personal digital assistant Gastropod shell Traffic reporting
Functional (mathematics) Key (cryptography) Length Multiplication sign Range (statistics) 1 (number) Sheaf (mathematics) Set (mathematics) Bit Function (mathematics) Mereology Variable (mathematics) Computer programming Type theory Word Integrated development environment Operator (mathematics) String (computer science) Gastropod shell Object (grammar) Recursion Social class
Computer file Personal digital assistant String (computer science) Object (grammar) Routing
Point (geometry) Group action Computer file Code Range (statistics) 1 (number) Set (mathematics) Function (mathematics) Coma Berenices Distance Wave packet Revision control Mathematics Operator (mathematics) Operating system Macro (computer science) Error message Compilation album Default (computer science) Dot product Validity (statistics) Mapping Model theory Content (media) Limit (category theory) Complete metric space Message passing Personal digital assistant Network topology Statement (computer science) Right angle Text editor Figurate number Local ring Writing Asynchronous Transfer Mode
Suite (music) Group action Parsing State of matter Multiplication sign Source code 1 (number) Coma Berenices Replication (computing) Disk read-and-write head Software bug Programmer (hardware) Mathematics Bit rate Computer configuration Error message Social class Physical system Scripting language Meta element Linear regression Block (periodic table) Structural load Electronic mailing list Sound effect Physicalism Instance (computer science) Parsing Right angle Pattern language Functional (mathematics) Service (economics) Identifiability Computer file Control flow Twitter Revision control Population density String (computer science) Gastropod shell Operating system Representation (politics) Energy level Software testing Medizinische Informatik Macro (computer science) Form (programming) Boolean algebra Default (computer science) Key (cryptography) Information Augmented reality Forcing (mathematics) Mathematical analysis Counting Directory service Uniform resource locator Kernel (computing) Loop (music) Password Universe (mathematics)
dynamic this that by 5 so I'm going talking about UCL the universal configure language and my goal of converting everything in previous using my my
my my my
I have
and fast so for any method is noble and I had my name's alan due and I've been previously server administrator for about 13 years now and I'm not previously documented mostly focusing on documenting is at present beehive UCL observe those of mostly new stuff I I'm also the co-author of previously mastery ZFS which is a book that just came out and walks through the use of affects how you snapshots and let's call systems there and therefore my day job I built and run the still engine city and we do mostly video streaming in history content-delivery all of that is because line like that and I host to podcast every week on wednesdays there's BST now where we opt out with the latest things are happening in is the new development and so on and have an interview with the random developer and we've had to 90 something a little so far as we have quite a collection of related interviews with various people from the previous distinct and wider BST community are and then on Thursdays I do text map which is a system instituted podcasts that's operating system Austin for work manage about 100 servers by myself using puppets which is unfortunate for me and we have book 35 data centers in 12 different countries that we have a small number several sprinkle into the hands of the mostly used as the best for storing the giant video collections and does that as replication for moving it between places and we host the package nears for PCBs diesel well 500 gigs itself that's been used all the time and if you're familiar with how package works replication that very sensitive if all the files are not perfectly in sync things happening that you'd rather didn't have are so why
I ran we decided to start looking at using the DCL for everything up backed by your basic on last year and Sofia progerin Hubbard gave the keynote about you know how we have to adopt to adapt previous D for the future but at any rate everything he said his focus seemed to be more towards will embedded things instead of running entire data centers with previous but but the recommendation that really I hit home with me was that we should have their way from having 1 configured file it's completely different for every utility because the is the operating system basically kind of came together in pieces over time and you know what was the best way to make a complaint filed change over time but every utility has its own configure language that is entirely different and some of them are especially offensive to me like news logic as some other ones like that and so when Jordan was talking about here is raving about XML that these at Apple and I really 1 of the 1 true complete format not to be x amount AP
so I've looked at some point book on was about why it was a good idea to have a universal complete file formats are you know we wanna be able to have readable and structured complete files you know the idea of having a kind include statement in your conveyed multiple in a step from somewhere else for all the snippets in a subdirectory is something that I've always liked you know we use in all of our web servers to to seperate different stuff but every utilities and to do that differently and you know that Brenda redrafted includes onto new syslog but what if the complaint persecuted handle that and we have the same system in every utility without actually having to write that code and put it in every utility also the idea of overlays for example previously shift a lot of default configuration of for example this is Socrates all log files that is by default while if only change that I have to modify a file and then at the merge it every time upgrade this is different than how I would like to do it and also it's very is is good for when you're already here contains 2 labels able this is all the default here and and this is what I've changed away from the default and so the idea of overlays basically you have your default configuration and on top of that i've layered on our site wide configuration that applies to everything and then on top of that of layered on the configuration is specific to this 1 machine and so basically being able set configuration multiple times and eventually you know the last 1 with that I thought was something I would like to have that so I
found out about UCL of which is written by the previously developer and is already included in the system as a private library because it's used by TTG but but as a system it really speaks to me because it's based on the binder and Excel complete file right t equals value optionally with the terminating semicolon and a new sections like combined arrangements so it's what every system in is already probably used to doing or is the complete file they would prefer that everything you are but it can also read just sort of which is something people like to use although if if you've ever tried to write by hand it's very finicky other you still get away from that but actually making most of those taking things up to ask a very good state machine so are if you make an array in Jason you can't include a comma after last item in that so knows series over all UCL those here is over when you close the erect so you can include the tree from which makes a big difference you can think files is when you different you you did is the item you added to the array not the previous line getting a comma and the next item you at all the other thing is has syntax step for example you're specifying the maximum size of a log file and a solid while you can just put 100 k are currently produces log of complete file assumes you want to rotate your logs well maybe 1 alone take them in megabytes or something end but the configuration doesn't tell you what the units are you have to go and read that in the mandates so being able to just play you know that a hundred kilobytes whatever is handy but also UCL does time right however I do this every 5 minutes or every 7 days are in you know in the internal representation that's just turned into a number of sectors and that works really well with programming and it handles all the person for so this is what you
still can look like but I kind of purposely used a bunch of different styles local together because it will take all of them and just be happy so you can have d equals value the coding is optional and the terminating semicolon is optional when you sections you can make it look like JavaScript objects with colon or you can make them look like and that's sections with the course or a connection but an equal sign if you really want to in the same way we can define a T in Jason style or you can do it with an equal sign or whatever and the other thing is it has Indexter for Booleans yes no on off or true false or any mix of that defines Boolean or if you want the literal text the were true then you just work out and so
kind of briefly gone over the things that are you has a very over using something like James on but the biggest 1 is that you can put comments in you can think of which you cannot do for it you see how so all of which is of course our UCL yes yes you can and you can include I does gloving it can do are trying mode where it's not a failure if the file you including doesn't actually exist they can also do include the race to the s but I'm not sure you want to do all the work on all the all the 1 not play out there the decimal about explaining why not and if macro doesn't quite work yet but but it does support of variables and complete files but those have to be defined by the program is going to pass it so we can set a bunch of variables they can then use inside the effect from of 1 thing we're looking to add to it is the ability to reference values you set previously are specifically in order to converge L . com is very handy once you set your jails hostname to will use the hosting in the patterning and things like that so it's coming along for that although are currently there's not much in the way of conditional stuff I don't know I
out but the main reasons to use DCL over something else as that of it's very flexible right you can because you do sections and arrays or just key-value pairs when you need to do you can express the configuration for pretty much any application I can think of are using it and you're convict Falcon look as simple as RC . com fright whatever equals whatever or you can do and X was nesting and and whatever you need to end during but it has an includes feature which also support priorities so you can say you know here's some conveyed and now include this something with a higher priority so if conflicting he's the overwrite or included with a lower priors because is just the default and so conflict the original ones that wins rather than that what you're including are and it also has a mode where if you include or just specify the same value twice for the same priority it can actually create an array of them if that's what you want to do on it can be very terse right just evils value there's no access format in which given x amount of right now so makes a much easier to read at and yes well as easy to read but unlike the sun it's also easy to write and allows common so for example crontab as a format that we've all used although trying to teach it to classrooms full of people as I have done I you quickly learn that they don't quite understand that to get what they want they don't put if you wanna run something once an hour but you don't put a star 1 which run every minute only at 1 o'clock if you have just take a minute to run it out and then run it every hour or something of that if you convert content fade into something like this for you see how it ends up actually looking like how you specify content in public or salt or any orchestration system right where you specify the cheese by the name of but also like to do things like specify the environment are more clearly right in regular up front content values specified mail to something path is this and then you specify some content and maybe right half again but you can't on set an environment variable very easily resisted isolated more easily but this is an example of what I'm trying to have the like it was so this is
large especially is this 1 at the top there you can see with the original configure looks like this is like a complete file is especially offensive because of beyond the end of what you see there there are optional fields but because the optional all overloaded under 1 field so if the last field starts with a slash then it's the path to file and what you want to operate on or if it doesn't server this last then it is the command you want to invoke in order to reload the deserve and then if it's a special characters of the then the area if number then it's the signal that you want to send and this is you know is that 1 field has different meanings in different context and that's not very good probably have problem is unit with which these lines in file and it's not really possible that's not very easy to romantically pass what's actually happening there or to programmatically change it but you know we're using public so we we wanna enable something see outcome for users to search the line processes the see this variable we get the value compare that to our manifest it right fine if not we can use this sir c is a pro change this without risking modified working my complete for so we want something like that in all this more on that later but this is what I you would end up looking like are if you converted Mrs. lot which I have to have a patch for on fabricate that had found name the mode and the number you of larger and so on but instead of 5 JC being random place you have to look at the main page you to specify different Williams for each thing you want and I refused include support here are except . front and you can specify things like you know tried so that it will not fail if there are no complete vows meta-reference at the still question is what to do with the time field in the far and it's solid is a standard way to specify time but it's not a very intuitive also that
expand the concept beyond just replacing much of the complete files and that having a standard way to deal with the common problems are actually really moving default think files right right and we ship UGC content it seems like the comfort a about because they need to see that people modify our and D better to move the defaults away at the some discussion the Working Group solos should actually probably be moved to like user share rather than ETC defaults but either way the default live someplace and then the file you put ECC should only be the changes you locally made away from the defaults in all I forget I forget why it was someone else's recommendation of again it was a Linux guys recommendations of that of the but the question was why I said that at the depths summit of working group we had earlier in the week they suggested that the defaults not being sold into each seed defaults but moved to users share like where our example convict files go on and the rest of the people just the implied as 1st and remember what the rest of the use of people are expected to last only 5 of the world will vary over time and how many units should system and the ball goes to here that some of the things we do have allergies it defaults by passing through the analysis of the people who work in the field of you and you get exactly the proposed is that we're in the clear that this so that you those here and in the fall somewhere else and so that the place where you can also use of shared by I think it's interesting uses a default problem explore sense because some people still partitioned into Sierra user separately I knew when you're complete about existence amusing work began right it yeah so it but yeah so what the override feature basically including 1 file including a 2nd follow higher priority leisured overwrite the existing things are so for example Mrs. large I like to keep more copies of you know log messages then the default of which is 5 uh I want like 8 so I can always go back a but if I modify the think fall for that then every time operate at merger it need it's annoying at whereas the UCL I would use in my you know what it is the is like that come and you say you know messages through the base can equals 8 and that's final meeting that 1 setting and everything else is inherited from the father right that came up in the working group and so we're probably going to add a macro . delete and anarchy and will destroy any previous thing that was there so that you'll be able to respecify everything all yes yes out yet there's still some controls for but it's it's all about controlling the recursion of the mergers is not really possible at the moment but ah I've done quite a bit of work on improving that and give a little bit more control of but the other 1 was relationship ship a bunch of contacts in each content whatever 1 it is able to currently at going there and delete the liner commented out something whereas if we did something more likely would package in the 4 packet repo I would use in my crontab file that where the dead and of living I could just select a certain that enables the no and I can't have 1 executed are so that this
1 kind of deals with that the president's is a kind of like you just mentioned so if we had used the package aphrodisiac company it's enabled but then in user willfully deceive repos I've said it enabled no and then in yet a higher priority placed somewhere I said back to yes how do we decide who wins and how the administrator see who wins up so we can use the priority to decide you know because the water might just the alphabetical you of the includes you can use the priority number which transport value between 0 and 16 of June 15 but to indicate how high of a priority your changes to the complete file are so you can decide how it's going to end up getting merged and severally attack later on a tool that allows you to compile this conveyed see with the resulting in it will look like a like like post-conference Postfach sort test from from samba back and uh so when is wrote this slides for Asia B is defined on the idea of priorities includes exist yet but but since then of course that it actually implemented that and I've actually I separately but recently added a feature where you can do it for us small block of of can create rather than you know with the original implementation you only set change the priority of each file is you included it but you can actually change prior the priority in line in a complaint filed for even just certain sections of the complete from interesting 1 and I haven't
run into yet but I forces possibly being a problem is the ordering of keys and mostly absent looked at so far but what order you specify configuration for something doesn't really matter but but at some point that there might be something that did it obviously firewall rules or something of the order is actually really important and deciding how to preserve that but I haven't written anything for that because I have encountered a tool 1 converter yet that requires a very specific ordering of the complete set in all everything we've looked at so far I was just prior assumptions side with the resulting in Figure look like not here where the actual order of the statements in the complete will actually I change how it's completed as an idea in most places that actually that design other than things like the firewall where you've been very specific this all all the side there's there's
a slight to me up on because
mostly is that it's almost finished out so fine well actually doing it so there are I got the idea originally acts are your B is the time after hearing the topic and covered a month and some later I was at the me is the and I had done a short lightning talk about this idea of hate somebody should do this and then I was stuck in an airport waiting for an airplane numbers like how RGB beach so I I I think new syslog because it's a relatively small piece of code and it's not something that if I broke it I would get you know murder and and also I playing with it and you know I was basically was the 1st thing in C I ever tried to write I've never read a little bit of C to try to understand what's happening is the 1st time I was adding more than an if statement into a program and so I started doing it and now there's a patch of fabricated for actually converting users lot to use by the CIA and its set to be backwards compatible so it will actually implement the read the old convict flower pot in only you switch the person with the new parts-a if you have a comment at the top of the file that indicates it's the new integral form and I wrote most that on an airplane out back home from California and then it was a bit rough but over the course of a couple of spare weekends I managed to actually get a working prototype are and the best part is it doesn't change any of the existing code just added some new stuff and a little hijacked to the big positive says is the 1st line is this run the new parser if it's not rewind the point of view of file and pass it traditional and so that brings up
compatibility you know really changed in Fig file format of all these utilities in time for reduced 11 or something that people of different 10 11 accumulate well you want to rewrite all like because other kernels so if we use a similar strategy as we did with news logged there of you know a certain or the top of file some way to indicate this is you see complete file then we can do that or if it doesn't have that then we fall back to the traditional passing so people operating from 10 to 11 can just keep the existing thing files but anyway doing a fresh install of 11 can start with the new format and we can definitely old ones and 12 or 13 or something that and the other thing I did is part of a sentinel was include a version number in the file format because I quite sure that the 1st revision won't be perfect and so on this would allow us to do something like in a deli code they have a long version number and you know this on the version number it it takes a different person function to read the configuration that hopefully we don't add too much but doing that and so this
is describes how I change that this is sort sort of protein on discredited
possibility busy out what it does is you run the live UCL parsonical thing file it handles all the includes an layering and stuff and gives you an object that represents are the complete configuration then we just use is iterator function to walk over the config file extract of the routines which there should be 1 for each complete file area what Hollywood rotate then we process the subkeys you know all this log files as compress equals x z vesicles yes and is the default investments on our and then it actually is it low that up into the structure that this solid original convict Percy used and then it just runs a program as long as the 1 feature that missing at the moment is a way to specify the default are specifically to be really handy to disable compression on all my log files if my log files around that affects our where it's going to compress that way instead because in our case you have your log files being written to that of s constantly getting impressed and then I'm going to rotate it read all if President would be zippers and that's basically was a waste of disciples of course
also the remaining items to sort out are of possibly design a consistent set of keys to use across something files like the enabled that we talked about for content and package but in the working group it seemed that those would be fairly specific to different use cases and we we don't actually need a set of them have but having something like this a land where we could do that kind of build up a database of the common names of keys and try to be consistent across the convict files problem it's a lot of sense but we decided against actually having a set of specific keys that are reserved for previously utilities or trying to namespaces so they may not complete with what an application specific although the problem was you know developing a universal API for actually reading the lives of UCL stuff into C and and I think we actually settled on basically writing a convict Faustina and a program a lot take that can generate the C code for you since there's not really a great way to load it directly into the structure whatever and so that the decision there was probably best to just auto-generate the stir comp latter you'd end up with 2 logia configuration are and so this is a is written this tool UCL and which is a command line interface allows you to have read and said merge UCL convict files so that for example I can construct puppet to go change the number of our log files that we keep our and the other thing that it needs to learn at most a dozen now I would be they compiling the resulting configuration of but based on talk at the Denver Summit also be nice if they could exclude the default from that so you can all you can see what is different between the resulting configuration and what would the original default configuration was as a kind of a version of data are built into it as well and suggest that we had a dead somewhat working group for about 3 hours earlier this week and quite a bit of interesting stuff resulted from that and then we looked at other
things that we would use the word for yet so it can do out so loving so you can include new cis London comp that D. slash dot com and it will include every file in the directory I don't know if you wanna support recursion to go in a subdirectory probably not to be applied to them they have a use case that what is that yeah you have to have a lot in the cloud in order to want to sort them into some directors and hopefully you don't have that many friends it's not even a lot of variation of a lot of these multiple levels of growth yet so this is slightly did unless we actually build a much larger 1 of the dead much about what utilities we would like to convert and actually I the hiding of example there is a patch already done for that so that you can just say the high end of the and name and reason can figure out of your beehive configuration nest and the VM starts off are very expressive logic you things like on my desk this distance is read-only Kansas City and so now I have to do it but there are other suggestions we had a denser network login . com and you know it was at the me many are there are I will give the slides at the end if there's time where where the complete list of extra things we targeted but the I said this stuff most that's fairly new that the client retained the complete format from the original 1 out so you know but because it's new now be a good time to switch it before people adopt the old new configure left answer lies to the GLD Ottawa 1st offering with the update hopefully would just go away with packaging based so we don't touch the head all that currently it was mostly probably just pass UCL as it is except for the cases where there are multiple values and there would be a matter of adding some commas around the Geller comp has us some interesting problems but it has the means of dots them but it's actually trying to express that as sections so big expanding into sections would eliminate the dots is almost the problem of using problem is the self referencing variables where I need to include the host name of the jails in the path of the jail are and so that 1 could be interesting especially since you have to do like late expansion or something otherwise if you override the hostname later on how do you you know and should it I expand late or early on and talk about so Denby this syntax is almost matching except is some cases their true values for 1 seat and that's not something that might have to be changed or in a separate the most lies in a list it's slightly more complicated but yes are in general yes and that was of 1 of the outstanding things that less about now we're looking at was on implicit expansion of like flags into a list of original looking at the flags for our news systolic for compressed and create a like would be cool to get somewhere that's why there's a list here that as minus trained but actually explode that in a separate elements at so the new
toys this is the things you can actually play with offer example we have you still see indeed which I've written here really I wrote it because I want I wrote a shell script to start my beehives but I wanted to read from UCL complete file and so I wrote a small little C program that basically was a shell interface to BBC and you can basically using you and UCL gets pointed a complete file and tell you know in jason . notation privacy that URL and it goes into that of the file and pulls out the value for they can expand that variable there because that's populated by DCG not by the art museum and so I have some other
examples where you can do that for example if you want to change the default package before I you can use you still see the sector and point as the file and it will read the current value of for the entire file but then changed my report a URL to my packages phone set up but there are some more complex cases that are gonna require a bit more code when you wanna do things like you know indicate that I want to delete this whole object and replace it with a new 1 rather than just over right the 1 Pacific value so that you can remove other subtrees and so on I'll so I'm over a
little bit of a little local tool called JQ which is some person for a shell of and so after you get a key you can type it into little operators that are part of program and so I've implemented these ones that each just let you iterate over all the keys object in and perform another function on after or you can do pipe season give you just Bikinians where the values just the values of key or you can type in a range into length function and it will tell you how many objects are indirect or even pipe some object into type and I'll tell you you know this is the object of this is an array of this is a a string or whatever other iterate once slightly different but it allows you to expand the implicit race if you said sinking multiple times our UCL will create an implicit array and the 1 I'm most proud of is recurse which will take a UCL object and flattening into shell environment variables which I think I have an example that and the main
of verbs it supports are gets 3 key set to override a key words to take 2 files and put them together and trading output are and and removed to remove a section or achieved from an existing class so yes the merge operation isn't meant for compiling configurations you just you get for that and it would do the includes automatically merges more for I have this new blob of UCL that I want to append and deal with complex into a complete crock so slight set instead of saying 1 key you can write a whole fragmented or merge into a certain what are so here's an
example file are done up in UCL with plain string and in red and so on or in this case an array of objects are and if I take that and get you know route every value you can see that is that
string there and we get back that
strength on but I can do this array here are the list of
things I can do you know list of
things iterate over each item enacting give me just the value and I get the 4 values my
or this is a sub file where basically I've added 1 new t to the object and overwritten the size of the new bigger size and then when I do merge
between the original file in this new file and tells output is UCL idea get this new size and the 150 k was expanded to bytes and the new value is dependent on the and and it didn't change all the other stuff whereas if you wanted to get rid of subsidy and just properly with the new ones are there's not a great way to indicate that yes but it's just because I'm so working with all of the up with set the file indicated with minus F is when you're actually writing into a UCL has protection against that include of the file you including whatever other because my is to several passes you could quite easily she foot off attack on that 1 in the original place where was defined you or my wife and I all of the act out currently currently the limitation of the CLC India's when you output it gives you the final version so all the includes will have been done and you will get 1 single file with no include statements Lieutenant it's something we're looking at in the positive what action being able to preserve the include macros to solve the problem said yes is the 2nd change something 1st it compiles it gets all the current configuration resolve all the includes turn in 1 big flat complete file then applies a set operation right at it could but it would overwrite the original file and all the include files along the included but the content of them would be foot and so the a limitation of personality retain get back the original include statements and we discuss the Working Group in John came up with an idea of how to solve it with the AST tree or something that I say this tool is fairly rudimentary because it's the 1st thing I've ever written in C yes so if you if you targeted the override file you could easily solve our and there might be a way I could specify because that's like online don't actually evaluate my includes so that might changes happen in the 1 file and i don't end up obliterate my whole include tree because it's not actually would have liked to see our but some other
things are UCL has a schema validation thing but I haven't added that to use the but that would allow you to make sure configuration is valid before you deploy and and check for syntax errors but they can actually be expanded such that we ship are schemas for things like news like that count and like 0 you set the mode to something that's not afterload that's all out for you know you specified some value that was outside the acceptable range up so interesting ideas we had were something like at the i 2 w 2 atomically editor can file and not let you override the complete file until you sold any person years that because you know nobody wants to say the conveyed that has 1 to many commas in it and British suspect at that could be some interesting things because the DCL users and that if you are a complete failure writing and the being smaller than it was originally continues somewhere that could possibly cult problems I'm not sure I don't know that much about that I just remember reading somewhere in the code that and mapping training files causes fun but but the aspect of the compilations it mostly does it now but you have a way to extract the D falls out of that and actually generate a useful that but something like a post on for some attest firm is on my road map so that you'll be able to you know especially if you are really easy defaults behind com ETC behind the counter the company's slash dot com and use local ETC behind the distance that account the debt would enable wanna get what the actual configuration that your problems when the user looks like so you can actually read and it might be important for your public to be able to see what the resulting figuration is and find the 1 value that's not right and I just another file to use locally to see if up and obviously adding of recipes or models or whatever for ECOC and the 2 opposition framers like public manciple insult and so on so that everybody can start using it and once previously is the easiest operating systems to to configure we have more of a case for using it in large points
I another idea that came up at the age of years the time when I presented earlier version of this talk was wouldn't it be nice we had something like a rather have a mutual running invading against me configured everything on the entire system are so this is basically a minute file that include all the other files in some senses about might even go so far as using the . load macro we've added which allows you to include a file as a multiline string in the complete file where it can actually slip up you know your SSH com and stick it in as a string for the couple files that were not going to go over because they're from another source and extended by another interesting 1 was are being able to generate and the lists from UCL and the other way around but no and are a binary representation and able to get a text version of that thing go back and forth between the 2 would be really interesting and you know the Libya still parser and meta already there so adding and the list is that shouldn't be that hard on the other 1 is not possible using and as the internal representation inside replication and using UCL to 1st all are 1 of the 2 items is adding more regression test that UCL I'm very novice C programmer and been making a lot of changes so for regression tests would be good I and you know we've broken things a couple of times our on fix bugs that we fixed so having more that would be good and I also have a fairly simple test suite is just a shell script living over a bunch of examples offer you Indiana like to add more to that as well of what it means what you you know and you you you you you you vary this picture in mind you know some of the things in the universe of possible thing to about the effect of the rights of all of the the text of the of the of the of the people in the middle of the nite because of all of its all times new age group in the only start with this that address and add 1 every time yes and things like that that would be very interesting yes so it's something that is not yet yet after added to make to this and there's a whole discussion of that of the some of the things that I wanted not to have a during a break in the class you know maybe we should I should converge you c . com and get away from having a trend in which people are and that it is the this actually raise the question of once a complete follows a simple do we need an orchestration system like public or salt but could we build something that just relied on the operating system providing you know UCL C and since our C or whatever and the service command instances the jails to be able to extract all the information into the lives octave able extract any information is from the system and enabled expresses configuration back to the system which is a couple of basic tools and you could write out much simpler orchestration system but you know it it people body into an existing organizations as and there's no reason it can't work out with these tools as well like the 3rd current count I was the topic of thinking that all you have to be helpful it is a more expressive includes and has now and studied book I as I work analysis will have people have to fear of all right that's worse than what is right what you write and but most of our class or yes you know all the time and in was way of history in the people of the form your use of the name of the net force on all right all right so that these are all the 1 of the most or all right so what we right so I I'm looking imagining occurring concurrently the my head region have your device fly device block so we need a writers want implicit Boolean so if you say devised a lot that says it to true lady detective false or something or not all right all delete this item but so include this file and then delete this item from the the array of devices and the rate of a yes or no I'm compiling this you know the no debug kernel is include the generic and delete these couple of keys that enable debugging error is to work for a lot of use of all right let me and
lastly if you're somehow not aware of this there's podcast that you can watch out for quite a few interesting interviews here and we have more every week and also if you're doing anything interesting our had ever done anything interesting or have a spare 15 minutes we'd love to interview you how to do it here the conference after lunch or identify state actor can be any other questions before you go like 1 of the reasons the possibly uh so the question was about story where to store the defaults and you know maybe that's just be something people can choose on it yet told me that people for the publication of the default files and currently the way implemented beehive is it it explicitly loads EGCG falls behind that can't and that's where these locations of every other can think about are included to define those and then obviously in the behind the computation include your own extra directories but I don't I easy people seemed like the right place to make his password configuration goes and that's where the false there are already lots of defaults that need for where the files physics is using the other is an option that you guys decide tell me what to do work and that that's I'm just doing my way unless somebody else has better idea to have a but you think about this year of have no use a on the 1st of all I guess correct I and that functionality was added for package so when you do in are included you can not specify an array of patterns and then the of the file you looking for so you don't include parse equals due to the use locally DC whatever and then include my thing that comes off and it will iterate over all those in order and stop after finds the 1st 1 that matches it is a glob equals true kind overriding about art then it will actually include all adults at all the paths and if yes yeah and so it'll loop over every 1 of the parser specify include all the files and compile resulting figuration out of that you use them in the last 1 over the right right and so that's where the priority system comes in all of currently you can do that all of once you have to include all the ones want at 1 level densities priority and include do search again for the file you want over but are you know we can always augment API people as a work a 76 any other questions common ideas things to do things that you wouldn't think it


  555 ms - page object


AV-Portal 3.20.1 (bea96f1033d39fbe77f82542458e108105398441)