Compare commits

...

115 commits

Author SHA1 Message Date
Nico Schottelius
159ac76134 really do so
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-08 00:40:17 +02:00
Nico Schottelius
0ec3c2d017 document bug
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-08 00:39:04 +02:00
Nico Schottelius
0b5e7b5855 debug log for code inserted
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-08 00:17:28 +02:00
Nico Schottelius
279d519dda debug for core/__cdist_object_code_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-08 00:10:53 +02:00
Nico Schottelius
adf2e05a08 more changes for 1.8.0
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:18:03 +02:00
Nico Schottelius
44586bc6f9 changes for 1.8.0
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:17:18 +02:00
Nico Schottelius
512ff69574 +"
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:13:00 +02:00
Nico Schottelius
06a6bf1a0d debug object run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:12:40 +02:00
Nico Schottelius
68a51da380 make debug more verbose
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:10:46 +02:00
Nico Schottelius
bd85d22a89 +debugging of __cdist_object_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:09:19 +02:00
Nico Schottelius
c3bf34bf3d add support for __cdist_debug={0,1,2}
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:07:04 +02:00
Nico Schottelius
74418c77e0 remove obsolete calls to set +e/-e
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-07 10:01:59 +02:00
Nico Schottelius
fe68c5b556 do not exit implicitly via set -e anymore
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-06 12:24:53 +02:00
Nico Schottelius
2b955b09bc move out all functions that do not only print a value from bin/cdist-config
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 10:01:56 +02:00
Nico Schottelius
a5564850ce -whitespaces at the end of lines
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:57:44 +02:00
Nico Schottelius
368ea87b89 call to __cdist_object_list
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:55:22 +02:00
Nico Schottelius
f7f2194b8f move __cdist_object_list into seperate file
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:54:20 +02:00
Nico Schottelius
bea7d5f828 also fix the function name :-)
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:51:38 +02:00
Nico Schottelius
4440838650 enable debugging before catching unset variables
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:49:00 +02:00
Nico Schottelius
86e30c7a8a re-rename variable, which got broken during core integration
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:47:58 +02:00
Nico Schottelius
cdc6f0d0c0 fix wrong call to __cdist_type_build_emulation
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:43:26 +02:00
Nico Schottelius
f65b61ee8f add debug via __cdist_debug variable
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-09-05 09:42:10 +02:00
Nico Schottelius
6886c2e6f1 ++todo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-21 15:18:41 +02:00
Nico Schottelius
8dbe6f9c77 add prefix to variable name [once more]
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:20:24 +02:00
Nico Schottelius
8fe9e86254 add prefix to variable name
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:18:20 +02:00
Nico Schottelius
160d85dee1 only setup path when executing something, not generally
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:17:15 +02:00
Nico Schottelius
97e8c431af only build emulator binaries once
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:15:10 +02:00
Nico Schottelius
c9f4455677 less todo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:11:08 +02:00
Nico Schottelius
b5b8bdc016 cleanup __cdist_dir
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:03:12 +02:00
Nico Schottelius
f8595793c1 cleanup caching function
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 16:00:06 +02:00
Nico Schottelius
c70bfb2e20 cleanup for correct working in function environment
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 15:55:55 +02:00
Nico Schottelius
a4f45dfcf4 go back to production mode and enable rm -rf
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 08:52:06 +02:00
Nico Schottelius
cb3b16d63f -obsolete script
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-10 08:45:44 +02:00
Nico Schottelius
49bad52715 remove debug
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:54:28 +02:00
Nico Schottelius
4ab6c5bbc9 cleanup object naming in cache handling
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:53:25 +02:00
Nico Schottelius
765c3d152a allow cache to function again
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:51:51 +02:00
Nico Schottelius
f6fac37f1d successfully run remote code!
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:50:38 +02:00
Nico Schottelius
5c35cad477 cleanups
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:39:21 +02:00
Nico Schottelius
8daa07acbf only check, do not run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:38:59 +02:00
Nico Schottelius
bd39d5c185 finish __cdist_run_if_executable
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:23:05 +02:00
Nico Schottelius
f6d7a3e478 and give it a good name
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:18:49 +02:00
Nico Schottelius
07dc79410a add template for script that only runs if the file exists
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:18:35 +02:00
Nico Schottelius
2926532560 begin to merge __cdist_object_code_run and __cdist_code_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-09 17:14:38 +02:00
Nico Schottelius
6bf1680f2d Merge branch 'master' into createcorelib 2011-08-09 16:57:04 +02:00
Nico Schottelius
7fab1c9dd9 use new wrapper __cdist_run_shell
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-02 12:17:48 +02:00
Nico Schottelius
39f1c8a242 add two new wrapper to run code and shellcode
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-02 12:15:59 +02:00
Nico Schottelius
5bb177eef9 ++todo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-08-02 12:05:02 +02:00
Nico Schottelius
76a796103c Merge branch 'master' into createcorelib 2011-07-28 10:58:59 +02:00
Nico Schottelius
815de25d9a continue corelib
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-28 10:54:18 +02:00
Nico Schottelius
0c00e4a0d2 no need for eval here
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-28 10:53:58 +02:00
Nico Schottelius
3a1bf25398 do not exit if a type does not have explorer :-)
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 01:27:05 +02:00
Nico Schottelius
6d3053a9bc fix type explorer: working again
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 01:22:54 +02:00
Nico Schottelius
8ad8ce162f -legacy
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 01:03:51 +02:00
Nico Schottelius
67ba0f7e9f do not use __global directly; manifest run works
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 00:14:04 +02:00
Nico Schottelius
41a0c1dc8a cleanup/continue
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 00:07:44 +02:00
Nico Schottelius
197fa583b5 finish global explorer part - works again!
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 00:06:24 +02:00
Nico Schottelius
cfd0f776c9 disable removal of temp data for debugging
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-27 00:00:31 +02:00
Nico Schottelius
4a5c161e96 ideas of unit testing
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-26 23:46:05 +02:00
Nico Schottelius
666744209e running explorers works again
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-26 23:42:09 +02:00
Nico Schottelius
b06f6be5a6 begin to re-do __explorer and __global on remote side with functions
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-07-26 23:39:53 +02:00
Nico Schottelius
5b9881bef6 Merge branch 'master' into createcorelib 2011-07-26 22:01:36 +02:00
Nico Schottelius
a53782805d ++log
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-23 12:13:46 +02:00
Nico Schottelius
eeaab438c2 logfile
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-21 12:34:18 +02:00
Nico Schottelius
f544fc5c42 next todo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 15:01:31 +02:00
Nico Schottelius
bb06a69bd5 cleanup
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:52:06 +02:00
Nico Schottelius
390d527515 global explorers work again
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:51:32 +02:00
Nico Schottelius
29e029a2eb replace __cdist_type_has_explorer with __cdist_dir_listing
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:37:36 +02:00
Nico Schottelius
e9fe915519 Merge branch 'master' into createcorelib 2011-06-17 14:29:28 +02:00
Nico Schottelius
a5b9713986 ++todo, use new function
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:28:45 +02:00
Nico Schottelius
83e75666c3 begin integration of type|global support
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:28:10 +02:00
Nico Schottelius
3c903fae67 abort execution until global explorers work
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:27:50 +02:00
Nico Schottelius
141b808603 do not use cdist-remote always
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:16:43 +02:00
Nico Schottelius
6d0cdc9456 Merge branch 'master' into createcorelib 2011-06-17 14:14:52 +02:00
Nico Schottelius
6a37d58cc8 more thoughts
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 14:13:12 +02:00
Nico Schottelius
4fbe2a2676 begin work on __cdist_explorer_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 13:01:03 +02:00
Nico Schottelius
a277d5a4d4 some ideas about future design
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 13:00:50 +02:00
Nico Schottelius
29450e5e99 add __cdist_explorer_run, which should replace __cdist_remote_explorer_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 12:49:02 +02:00
Nico Schottelius
c474317a6a migrate more stuff from cdist-config to core/
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 12:34:40 +02:00
Nico Schottelius
f3a88ef98d ../bin/cdist-config -> __cdist_echo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 12:31:00 +02:00
Nico Schottelius
75bff0b13f +cleanup
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 10:40:28 +02:00
Nico Schottelius
7d6b1b5236 ../bin/cdist-config -> core/__cdist_init_deploy
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 10:36:44 +02:00
Nico Schottelius
d680c8a5f1 corelib will go into cdist 1.8.0, if at all
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 10:34:52 +02:00
Nico Schottelius
1132ec8756 cdist-explorer-run-global -> ../core/__cdist_explorer_run_global
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 10:32:09 +02:00
Nico Schottelius
7050342d90 ../bin/cdist-cache -> __cdist_cache
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-17 10:30:23 +02:00
Nico Schottelius
0fa95a5adc more to fix
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-16 23:58:31 +02:00
Nico Schottelius
0e7d822d16 re-add set -e to cdist-config
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 11:14:24 +02:00
Nico Schottelius
cda6c24799 new: core/__cdist_remote_explorer_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 11:10:58 +02:00
Nico Schottelius
022db22924 +debug
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 10:57:33 +02:00
Nico Schottelius
00bbadef78 fix first bugs in remotely running code
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:49:43 +02:00
Nico Schottelius
9e94bb56a2 core/__cdist_run_remote
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:47:26 +02:00
Nico Schottelius
188afa2777 add wrapper script to execute functions remotely
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:44:40 +02:00
Nico Schottelius
2f5b416a33 +marker
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:37:52 +02:00
Nico Schottelius
1565c73559 no target host needed anymore
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:36:13 +02:00
Nico Schottelius
9a86b392dc ../core/__cdist_code_run and ../core/__cdist_type_build_emulation
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:27:53 +02:00
Nico Schottelius
47c32d1b53 ../core/__cdist_manifest_run_init
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:22:51 +02:00
Nico Schottelius
da9974b9ce -bug :-)
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:19:58 +02:00
Nico Schottelius
0167f4a9f3 ../core/__cdist_manifest_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:18:55 +02:00
Nico Schottelius
5dff2157e2 bin/cdist-object-manifest-run -> core/__cdist_object_manifest_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:15:50 +02:00
Nico Schottelius
f7138c2921 bin/cdist-object-explorer-run -> core/__cdist_object_explorer_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:13:01 +02:00
Nico Schottelius
5c378dcb1b ++todo
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:11:12 +02:00
Nico Schottelius
95ce60637c enhance for use as function
cdist-deploy-to localhost  1.38s user 1.28s system 69% cpu 3.842 total

Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:08:52 +02:00
Nico Schottelius
0e2c221b43 ../bin/cdist-object-prepare -> __cdist_object_prepare
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:07:56 +02:00
Nico Schottelius
cc7da0c264 ../bin/cdist-object-all -> __cdist_object_all
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:05:26 +02:00
Nico Schottelius
ef2336cb1e cdist-object-run -> ../core/__cdist_object_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 01:00:55 +02:00
Nico Schottelius
27a810705e cdist-object-code-run -> ../core/__cdist_object_code_run
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:54:52 +02:00
Nico Schottelius
9e246b18ed -debug message for library loading
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:48:07 +02:00
Nico Schottelius
580b5da688 remove obsolete cdist-object-push
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:47:24 +02:00
Nico Schottelius
152cc930e1 also migrate cdist-object-gencode
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:41:52 +02:00
Nico Schottelius
0603322bbd begin to make cdist-object-gencode-run a function
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:30:22 +02:00
Nico Schottelius
cf88f9cacb finished migration of cdist-dir to __cdist_dir
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:28:08 +02:00
Nico Schottelius
6a500d5570 and run again
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:21:15 +02:00
Nico Schottelius
7fbc4b8b77 introduce first (and only?) global variable __cdist_target_host
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:20:51 +02:00
Nico Schottelius
e6d2a301c9 replace usage of cdist-dir and use new syntax
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:19:57 +02:00
Nico Schottelius
abe6e695bc load __cdist_dir from core
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:17:31 +02:00
Nico Schottelius
630fced69d begin experiement: move cdist-dir to core lib
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-06-14 00:12:15 +02:00
47 changed files with 1139 additions and 752 deletions

1
BUG Normal file
View file

@ -0,0 +1 @@
See core/__cdist_object_run.

View file

@ -19,7 +19,18 @@
# #
# #
__cdist_version="1.7.0" __cdist_version="1.8.0"
#
# Enable debugging:
#
# __cdist_debug unset -> no debug
# __cdist_debug = 1 -> debug via __cdist_echo
# __cdist_debug = 2 -> debug via set -x
#
: ${__cdist_debug:=0}
[ "$__cdist_debug" = 2 ] && set -x
# Fail if something bogus is going on # Fail if something bogus is going on
set -u set -u
@ -44,6 +55,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
: ${__cdist_name_cache:=cache} : ${__cdist_name_cache:=cache}
: ${__cdist_name_code:=code} : ${__cdist_name_code:=code}
: ${__cdist_name_conf_dir:=conf} : ${__cdist_name_conf_dir:=conf}
: ${__cdist_name_core_dir:=core}
: ${__cdist_name_dot_cdist:=.cdist} : ${__cdist_name_dot_cdist:=.cdist}
: ${__cdist_name_explorer:=explorer} : ${__cdist_name_explorer:=explorer}
: ${__cdist_name_gencode:=gencode} : ${__cdist_name_gencode:=gencode}
@ -81,7 +93,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
################################################################################ ################################################################################
# Exported variable names (usable for non core # Exported variable names (usable for non core)
# #
: ${__cdist_name_var_explorer:=__$__cdist_name_explorer} : ${__cdist_name_var_explorer:=__$__cdist_name_explorer}
: ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer} : ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer}
@ -111,6 +123,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
: ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache} : ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache}
: ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"} : ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"}
: ${__cdist_core_dir:="$(cd "$__cdist_abs_mydir/../$__cdist_name_core_dir" && pwd -P)"}
: ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer} : ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer}
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest} : ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
@ -134,6 +147,7 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
: ${__cdist_remote_base_dir:=/var/lib/cdist} : ${__cdist_remote_base_dir:=/var/lib/cdist}
: ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin} : ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin}
: ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir} : ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir}
: ${__cdist_remote_core_dir:=$__cdist_remote_base_dir/$__cdist_name_core_dir}
: ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer} : ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer}
: ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type} : ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type}
@ -149,80 +163,13 @@ __cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
################################################################################ ################################################################################
# Internal functions # Internal functions
# #
__cdist_echo()
{
__cdist_echo_type="$1"; shift
set +u # *NEW* Load functions from library
if [ "$__cdist_object_self" ]; then for __cdist_lib in $__cdist_core_dir/*; do
__cdist_echo_prefix="${__cdist_object_self}:" # echo Loading $__cdist_lib ...
else . "$__cdist_lib"
__cdist_echo_prefix="core: " done
fi
set -u
case "$__cdist_echo_type" in
debug)
set +u
if [ "$__cdist_debug" ]; then
echo $__cdist_echo_prefix "Debug: $@"
fi
set -u
;;
info)
echo $__cdist_echo_prefix "$@"
;;
warn)
echo $__cdist_echo_prefix "Warning: $@"
;;
error)
echo $__cdist_echo_prefix "Error: $@" >&2
;;
*)
echo "CORE BUG, who created the broken commit in $0?" >&2
exit 23
;;
esac
}
__cdist_exec_fail_on_error()
{
set +e
sh -e "$@"
if [ "$?" -ne 0 ]; then
__cdist_echo error "$1 exited non-zero"
__cdist_echo warn "Faulty code:"
cat "$1"
__cdist_exit_err "Aborting due to non-zero exit code."
fi
}
__cdist_exit_err()
{
__cdist_echo error "$@"
exit 1
}
__cdist_usage()
{
__cdist_exit_err "$__cdist_myname: $@"
}
__cdist_init_deploy()
{
__cdist_echo info "Creating clean directory structure "
# Ensure there is no old stuff, neither local nor remote
rm -rf "$__cdist_local_base_dir"
ssh "${__cdist_remote_user}@$1" "rm -rf ${__cdist_remote_base_dir}"
# Init base
mkdir -p "$__cdist_local_base_dir"
ssh "${__cdist_remote_user}@$1" "mkdir -p ${__cdist_remote_base_dir}"
# Link configuration source directory - consistent with remote
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
}
################################################################################ ################################################################################
# Cache # Cache
@ -266,26 +213,11 @@ __cdist_object_base_dir()
echo "${__cdist_out_object_dir}/$1" echo "${__cdist_out_object_dir}/$1"
} }
__cdist_object_id_from_object() __cdist_object_id_from_object()
{ {
echo "${1#*/}" echo "${1#*/}"
} }
# Find objects, remove ./ and /MARKER
__cdist_object_list()
{
local basedir="$1"; shift
# Use subshell to prevent changing cwd in program
(
cd "${basedir}"
find . -name "$__cdist_name_dot_cdist" | \
sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
)
}
__cdist_object_parameter_dir() __cdist_object_parameter_dir()
{ {
echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}" echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}"
@ -330,6 +262,13 @@ __cdist_remote_object_dir()
echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}" echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}"
} }
__cdist_remote_object_code()
{
# FIXME: this should probably be __cdist_name_CODE_remote instead, although
# they have the same name always
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_code}-${__cdist_name_gencode_remote}"
}
__cdist_remote_object_parameter_dir() __cdist_remote_object_parameter_dir()
{ {
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}" echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}"
@ -350,19 +289,6 @@ __cdist_remote_type_explorer_dir()
################################################################################ ################################################################################
# Traps # Traps
# #
__cdist_tmp_removal()
{
rm -rf "${__cdist_tmp_dir}"
}
# Does not work in children, will be called again in every script!
# Use only in interactive "front end" scripts
__cdist_kill_on_interrupt()
{
__cdist_tmp_removal
kill 0
exit 1
}
# Remove tempfiles at normal exit # Remove tempfiles at normal exit
trap __cdist_tmp_removal EXIT trap __cdist_tmp_removal EXIT
@ -386,15 +312,6 @@ __cdist_type_from_object()
echo "${1%%/*}" echo "${1%%/*}"
} }
__cdist_type_has_explorer()
{
# We only create output, if there's at least one explorer
# and can thus be used as a boolean ;-)
if [ -d "$(__cdist_type_explorer_dir "$1")" ]; then
ls -1 "$(__cdist_type_explorer_dir "$1")"
fi
}
__cdist_type_explorer_pushed() __cdist_type_explorer_pushed()
{ {
[ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \ [ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \

View file

@ -36,6 +36,7 @@ export $__cdist_name_var_target_user="$__cdist_remote_user"
# Export variables for core, which others do not reset # Export variables for core, which others do not reset
export __cdist_local_base_dir export __cdist_local_base_dir
export __cdist_core_dir
__cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host " __cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
@ -47,13 +48,16 @@ __cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
__cdist_init_deploy "$__cdist_target_host" __cdist_init_deploy "$__cdist_target_host"
# Transfer cdist executables # Transfer cdist executables
__cdist_echo info "Transferring cdist binaries to the target host " __cdist_echo info "Transferring cdist binaries/functions to the target host "
cdist-dir push "$__cdist_target_host" \ __cdist_dir push "${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
"${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}" __cdist_dir push "${__cdist_core_dir}" "${__cdist_remote_core_dir}"
cdist-explorer-run-global "$__cdist_target_host"
cdist-manifest-run-init "$__cdist_target_host" __cdist_explorer_run_global
cdist-object-all "$__cdist_target_host" cdist-object-prepare __cdist_manifest_run_init
cdist-object-all "$__cdist_target_host" cdist-object-run __cdist_object_all __cdist_object_prepare
cdist-cache "$__cdist_target_host" __cdist_object_all __cdist_object_run
unset __cdist_object_self
__cdist_cache
__cdist_echo info "cdist $__cdist_version: Successfully finished run" __cdist_echo info "cdist $__cdist_version: Successfully finished run"

View file

@ -1,43 +0,0 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Copy & run the global explorers, i.e. not bound to types
#
. cdist-config
[ $# -eq 1 ] || __cdist_usage "<target_host>"
set -ue
__cdist_target_host="$1"; shift
__cdist_echo info "Running global explorers "
# copy the explorers
cdist-dir push "$__cdist_target_host" \
"${__cdist_explorer_dir}" "${__cdist_remote_explorer_dir}"
# run the initial explorers remotely
cdist-run-remote "${__cdist_target_host}" cdist-remote-explorer-run \
"$__cdist_name_var_explorer" "$__cdist_remote_explorer_dir" \
"$__cdist_remote_out_explorer_dir"
# retrieve the results
cdist-dir pull "$__cdist_target_host" \
"${__cdist_remote_out_explorer_dir}" "${__cdist_out_explorer_dir}"

View file

@ -1,56 +0,0 @@
#!/bin/sh
#
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Let's build a cconfig tree from a configuration
# And save it into the cache tree
#
. cdist-config
[ $# -eq 2 ] || __cdist_usage "<target host> <manifest>"
set -u
__cdist_target_host="$1"; shift
__cdist_manifest="$1"; shift
################################################################################
# Export information for cdist-type-emulator or manifest
#
# Config dir should not get reset - FIXME: why did I do this?
export __cdist_conf_dir
# Used to record the source in the object
export __cdist_manifest
# Export information for manifests - __cdist_out_dir comes from cdist-config
export __global="$__cdist_out_dir"
################################################################################
# The actual run
#
# Ensure binaries exist and are up-to-date
cdist-type-build-emulation "${__cdist_out_type_bin_dir}" \
|| __cdist_exit_err "Failed to build type emulation binaries"
# prepend our path, so all cdist tools come before other tools
export PATH="${__cdist_out_type_bin_dir}:$PATH"
__cdist_exec_fail_on_error "${__cdist_manifest}"

View file

@ -1,56 +0,0 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the given command for each created object.
#
. cdist-config
[ $# -eq 2 ] || __cdist_usage "<target host> <command>"
set -eu
__cdist_target_host="$1"; shift
__cdist_command="$1"; shift
__cdist_objects="$__cdist_tmp_dir/objects"
# Ensure object dir exists, so marker can be created
mkdir -p "${__cdist_out_object_dir}"
# Loop until we do not create new objects anymore
# which is equal to all objects have been run
touch "$__cdist_objects_created"
while [ -f "$__cdist_objects_created" ]; do
# Assume we're done after this run
rm "$__cdist_objects_created"
# Get listing of objects
__cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects"
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
while read __cdist_object; do
set -- "$@" "$__cdist_object"
done < "$__cdist_objects"
while [ $# -gt 0 ]; do
__cdist_object="$1"; shift
$__cdist_command "$__cdist_target_host" "$__cdist_object"
done
done

View file

@ -1,67 +0,0 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the explorers for the given object on the target host.
#
. cdist-config
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
set -eu
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
# Check if type of object has >= 1 explorer
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
# Run the type explorers for the current object if any
if [ "$__cdist_has_explorer" ]; then
if ! __cdist_type_explorer_pushed "$__cdist_type"; then
src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
__cdist_echo info "Transfering explorers for $__cdist_type "
cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir"
__cdist_type_explorer_pushed_add "$__cdist_type"
fi
__cdist_echo info "Running explorers"
# Copy object parameters
cdist-dir push "$__cdist_target_host" \
"$(__cdist_object_parameter_dir "$__cdist_object_self")" \
"$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
# Execute explorers
cdist-run-remote "$__cdist_target_host" \
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
"$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
"$__cdist_name_var_self=\"$__cdist_object_self\"" \
cdist-remote-explorer-run \
"$__cdist_name_var_type_explorer" \
"$(__cdist_remote_type_explorer_dir "$__cdist_type")" \
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
# Copy back results
cdist-dir pull "$__cdist_target_host" \
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
"$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
fi

View file

@ -1,62 +0,0 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Generate code from one object (object must be relative path!)
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
#
. cdist-config
[ $# -eq 3 ] || __cdist_usage "<target host>" "<object>" "<type>"
set -eu
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift
__cdist_gencode_type="$1"; shift
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
# export variables for the gencode script
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
export __object="$(__cdist_object_dir "$__cdist_object_self")"
export __global="$__cdist_out_dir"
if [ -x "$__cdist_type_gencode" ]; then
__cdist_exec_fail_on_error "$__cdist_type_gencode" > "$__cdist_tmp_file"
else
if [ -e "$__cdist_type_gencode" ]; then
__cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
fi
# Ensure it's empty, if there is no gencode
: > "$__cdist_tmp_file"
fi
# Only create code, if gencode created output
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
#
# The following code was generated by $__cdist_type_gencode
#
eof
chmod u+x "${__cdist_code_output}"
fi

View file

@ -1,58 +0,0 @@
#!/bin/sh
#
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the manifest for the given object.
#
. cdist-config
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
set -eu
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift
# FIXME: rename to __cdist_object_dir (everywhere!)
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
__cdist_echo info "Checking manifest "
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
if [ -f "$__cdist_manifest" ]; then
if [ -x "$__cdist_manifest" ]; then
# Make __cdist_manifest available for cdist-type-emulator
export __cdist_manifest
__cdist_echo info "Executing manifest "
export $__cdist_name_var_object="$__cdist_cur_object_dir"
export $__cdist_name_var_object_id="$__cdist_object_id"
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
# Tell cdist-object-run-all that there may be new objects
touch "$__cdist_objects_created"
else
__cdist_exit_err "${__cdist_manifest} needs to be executable."
fi
fi

View file

@ -1,65 +0,0 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# For the given object:
# - run type explorers
# - run type manifest
# - generate code
# - copy object to target
# - execute code on target
#
. cdist-config
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
set -eu
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
# Export to non-core for use in manifest and gencode scripts
export $__cdist_name_var_self=$__cdist_object_self
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
if [ ! -f "$__cdist_object_finished" ]; then
# Resolve dependencies, if any
__cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
if [ -f "$__cdist_object_require" ]; then
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
while read __cdist_requirement; do
set -- "$@" "$__cdist_requirement"
done < "$__cdist_object_require"
while [ $# -gt 0 ]; do
__cdist_requirement="$1"; shift
__cdist_echo info "Resolving requirement $__cdist_requirement"
cdist-object-run "$__cdist_target_host" "$__cdist_requirement"
done
fi
cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object_self"
cdist-object-push "$__cdist_target_host" "$__cdist_object_self"
cdist-object-code-run "$__cdist_target_host" "$__cdist_object_self"
# Mark this object as done
touch "$__cdist_object_finished"
fi

View file

@ -1,68 +0,0 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# This binary is executed on the remote side to execute explorers
#
# It supports different variables names to be used, so __explorers
# and __type_explorers can be submitted :-)
#
. cdist-config
[ $# -eq 3 ] || __cdist_usage "<variable name> <explorer dir> <out dir>"
set -ue
# Variable that defines the home of the explorers
__cdist_variable_name="$1"; shift
# Find explorers here
__cdist_explorer_dir="$1"; shift
# Write output here
__cdist_my_out_dir="$1"; shift
# Setup environment
export $__cdist_variable_name="$__cdist_explorer_dir"
export __global="$__cdist_remote_out_dir"
mkdir -p "$__cdist_my_out_dir"
# Ensure there is at least one explorer
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
if [ "$num" -lt 1 ]; then
__cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
fi
# Execute all explorers
for explorer in "$__cdist_explorer_dir/"*; do
explorer_name="${explorer##*/}"
if [ -f "$explorer" ]; then
if [ ! -x "$explorer" ]; then
__cdist_exit_err "Explorer \"$explorer\" exists, but is not executable."
fi
# Execute explorers and save results in remote destination directory
"$explorer" > "${__cdist_my_out_dir}/$explorer_name"
else
if [ -e "$explorer" ]; then
__cdist_exit_err "Explorer \"$explorer\" exists, but is not a file."
fi
fi
done

View file

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2010 Nico Schottelius (nico-cdist at schottelius.org) # 2010 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -19,17 +18,17 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# #
# Transfer the given object to the target host. # Save the configuration tree into the local cache
# #
. cdist-config __cdist_cache()
[ $# -eq 2 ] || __cdist_usage "<target host> <object>" {
set -eu # Create base to move into
mkdir -p "${__cdist_local_base_cache_dir}"
__cdist_target_host="$1"; shift __cdist_echo info \
__cdist_object_self="$1"; shift "Caching to $(__cdist_host_cache_dir "$__cdist_target_host")"
rm -rf "$(__cdist_host_cache_dir "$__cdist_target_host")"
__cdist_echo info "Transferring object" mv "$__cdist_local_base_dir" \
cdist-dir push "$__cdist_target_host" \ "$(__cdist_host_cache_dir "$__cdist_target_host")"
"$(__cdist_object_dir "$__cdist_object_self")" \ }
"$(__cdist_remote_object_dir "$__cdist_object_self")"

View file

@ -23,29 +23,24 @@
# Pull a directory from a target, both sides have the same name (i.e. explorers) # Pull a directory from a target, both sides have the same name (i.e. explorers)
# #
__cdist_dir()
{
[ $# -eq 3 ] || __cdist_usage "<push|pull> <src dir> <dst dir>"
. cdist-config # ${3%/*} will be the destination directory, so no subdirectories
[ $# -eq 4 ] || __cdist_usage "<push|pull> <target host> <src dir> <dst dir>"
set -ue
__cdist_action="$1"; shift
__cdist_target_host="$1"; shift
__cdist_src_dir="$1"; shift
__cdist_dst_dir="$1"; shift
# This will be the destination directory, so no subdirectories
# of the same name are created, if the directory is already existing # of the same name are created, if the directory is already existing
__cdist_top_dir="${__cdist_dst_dir%/*}"
if [ "$__cdist_action" = "push" ]; then if [ "$1" = "push" ]; then
# FIXME: add error handling with __cdist_run_remote_... or so
ssh "${__cdist_remote_user}@${__cdist_target_host}" \ ssh "${__cdist_remote_user}@${__cdist_target_host}" \
"mkdir -p \"${__cdist_dst_dir}\"" "mkdir -p \"$3\""
scp -qr "$__cdist_src_dir" \ scp -qr "$2" \
"${__cdist_remote_user}@${__cdist_target_host}:${__cdist_top_dir}" "${__cdist_remote_user}@${__cdist_target_host}:${3%/*}"
elif [ "$__cdist_action" = "pull" ]; then elif [ "$1" = "pull" ]; then
mkdir -p "${__cdist_dst_dir}" mkdir -p "$3"
scp -qr "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_src_dir}" \ scp -qr "${__cdist_remote_user}@${__cdist_target_host}:$2" \
"${__cdist_top_dir}" "${3%/*}"
else else
__cdist_exit_err "Unknown action $__cdist_action" __cdist_exit_err "Unknown action $1"
fi fi
}

30
core/__cdist_dir_listing Executable file
View file

@ -0,0 +1,30 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# List files in a directory, if it exists
#
# We only create output, if there's at least one entry
# and can thus be used as a boolean ;-)
#
__cdist_dir_listing()
{
[ -d "$1" ] && ls -1 "$1"
}

View file

@ -18,33 +18,39 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# #
# This binary is executed on the remote side to execute code # echo / syslog alike function
# #
. cdist-config __cdist_echo()
[ $# -eq 2 ] || __cdist_usage "<object> <type>" {
set -ue __cdist_echo_type="$1"; shift
__cdist_object_self="$1"; shift set +u
__cdist_code_type="$1"; shift if [ "$__cdist_object_self" ]; then
__cdist_echo_prefix="${__cdist_object_self}:"
if [ ! -d "$(__cdist_object_dir "$__cdist_object_self")" ]; then
__cdist_exit_err "Object undefined"
fi
__cdist_code="$(__cdist_object_code "$__cdist_object_self" "${__cdist_code_type}")"
__cdist_echo info "Checking code-${__cdist_code_type}"
if [ -e "$__cdist_code" ]; then
if [ -f "$__cdist_code" ]; then
if [ -x "$__cdist_code" ]; then
__cdist_echo info "Executing code-${__cdist_code_type}"
__cdist_exec_fail_on_error "$__cdist_code"
else else
__cdist_exit_err "$__cdist_code exists, but is not executable." __cdist_echo_prefix="core: "
fi
else
__cdist_exit_err "$__cdist_code exists, but is not a file."
fi fi
set -u
case "$__cdist_echo_type" in
debug)
if [ "$__cdist_debug" = 1 ]; then
echo $__cdist_echo_prefix "DEBUG: $@"
fi fi
;;
info)
echo $__cdist_echo_prefix "$@"
;;
warn)
echo $__cdist_echo_prefix "Warning: $@"
;;
error)
echo $__cdist_echo_prefix "Error: $@" >&2
;;
*)
echo "CORE BUG, who created the broken commit in $0?" >&2
exit 23
;;
esac
}

28
core/__cdist_exit_err Executable file
View file

@ -0,0 +1,28 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Print error and exit (perror() alike)
#
__cdist_exit_err()
{
__cdist_echo error "$@"
exit 1
}

79
core/__cdist_explorer_run Executable file
View file

@ -0,0 +1,79 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run explorers - FIXME: this function is ugly
#
__cdist_explorer_run()
{
[ $# -eq 5 ] || __cdist_usage "<global|type> <local explorer dir> <remote explorer dir> <remote out dir> <local out dir>"
# Ensure there is at least one explorer
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
if [ "$num" -lt 1 ]; then
__cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
fi
# Check whether to setup variable for type explorer
case "$1" in
global)
;;
type)
# FIXME: think about how and where this gets setup!
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\""
;;
esac
# Transfer explorers
__cdist_dir push "$2" "$3"
# Create output directory
__cdist_run_remote mkdir -p "$4"
# Execute all explorers - FIXME: isolate cd call?
cd "$2";
# FIXME: cleanup double variable, no need when in directory
for __cdist_explorer_run_explorer in *; do
__cdist_explorer_explorer_name="${__cdist_explorer_run_explorer##*/}"
if [ -f "$__cdist_explorer_run_explorer" ]; then
if [ ! -x "$__cdist_explorer_run_explorer" ]; then
__cdist_exit_err "Explorer \"$__cdist_explorer_run_explorer\" exists, but is not executable."
fi
else
if [ -e "$__cdist_explorer_run_explorer" ]; then
__cdist_exit_err "Explorer \"$__cdist_explorer_run_explorer\" exists, but is not a file."
fi
fi
# FIXME: no need for remote out dir probably?
# or should we leave it and continue using __cdist_dir pull?
__cdist_run_remote \
"export $__cdist_name_var_explorer=\"$__cdist_remote_explorer_dir\";" \
"export $__cdist_name_var_global=\"$__cdist_remote_out_dir\";" \
"$3/$__cdist_explorer_run_explorer" ">" \
"$4/$__cdist_explorer_run_explorer" || \
__cdist_exit_err "Explorer $__cdist_explorer_run_explorer failed."
done
# Transfer results back
__cdist_dir pull "$4" "$5"
}

View file

@ -1,7 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) # 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -19,20 +18,15 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# #
# Exec the code for the given object locally and remote # Copy & run the global explorers, i.e. not bound to types
# #
. cdist-config __cdist_explorer_run_global()
[ $# -eq 2 ] || __cdist_usage "<target host> <object>" {
set -e __cdist_echo info "Running global explorers "
__cdist_target_host="$1"; shift # run the global explorers remotely
__cdist_object="$1"; shift __cdist_explorer_run global \
"$__cdist_explorer_dir" "$__cdist_remote_explorer_dir" \
# Code local "$__cdist_remote_out_explorer_dir" "$__cdist_out_explorer_dir"
export __cdist_out_object_dir="$__cdist_out_object_dir" }
cdist-code-run "$__cdist_object" "${__cdist_name_gencode_local}"
# Code remote
cdist-run-remote "$__cdist_target_host" \
"cdist-code-run" "$__cdist_object" "${__cdist_name_gencode_remote}"

40
core/__cdist_init_deploy Executable file
View file

@ -0,0 +1,40 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Prepare deployment
#
__cdist_init_deploy()
{
__cdist_echo info "Creating clean directory structure "
# Ensure there is no old stuff, neither local nor remote
rm -rf "$__cdist_local_base_dir"
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
"rm -rf ${__cdist_remote_base_dir}"
# Init base
mkdir -p "$__cdist_local_base_dir"
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
"mkdir -p ${__cdist_remote_base_dir}"
# Link configuration source directory - consistent with remote
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
}

44
core/__cdist_is_executable Executable file
View file

@ -0,0 +1,44 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Test whether something is executable (that should be executable) or
# is missing
#
__cdist_is_executable()
{
[ $# -eq 1 ] || __cdist_exit_err "<executable>"
if [ -e "$1" ]; then
if [ -f "$1" ]; then
if [ -x "$1" ]; then
# Exists and is a correct executable
true
else
__cdist_exit_err "$1 exists, but is not executable."
fi
else
__cdist_exit_err "$1 exists, but is not a file."
fi
else
# Does not exist
false
fi
}

View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the given command for each created object.
#
# Does not work in children, will be called again in every script!
# Use only in interactive "front end" scripts
__cdist_kill_on_interrupt()
{
__cdist_tmp_removal
kill 0
exit 1
}

53
core/__cdist_manifest_run Executable file
View file

@ -0,0 +1,53 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Let's build a cconfig tree from a configuration
# And save it into the cache tree
#
__cdist_manifest_run()
{
[ $# -eq 1 ] || __cdist_usage "<manifest>"
__cdist_manifest="$1"; shift
################################################################################
# Export information for cdist-type-emulator or manifest
#
# Config dir should not get reset - FIXME: why did I do this?
export __cdist_conf_dir
# Used to record the source in the object
export __cdist_manifest
# Export information for manifests - __cdist_out_dir comes from cdist-config
export $__cdist_name_var_global="$__cdist_out_dir"
################################################################################
# The actual run
#
# Ensure binaries are existing - FIXME: move error handling into __cdist_type_build_emulation
__cdist_type_build_emulation \
|| __cdist_exit_err "Failed to build type emulation binaries"
__cdist_run_shell "${__cdist_manifest}"
}

View file

@ -22,13 +22,11 @@
# And save it into the cache tree # And save it into the cache tree
# #
. cdist-config __cdist_manifest_run_init()
[ $# -eq 1 ] || __cdist_usage "<target host>" {
set -e # FIXME: probably do not export but always set explicitly?
export $__cdist_name_var_manifest="$__cdist_manifest_dir"
__cdist_target_host="$1"; shift
eval export $__cdist_name_var_manifest=\"\$__cdist_manifest_dir\"
__cdist_echo info "Running initial manifest for $__cdist_target_host " __cdist_echo info "Running initial manifest for $__cdist_target_host "
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest_init" __cdist_manifest_run "$__cdist_manifest_init"
}

60
core/__cdist_object_all Executable file
View file

@ -0,0 +1,60 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the given command for each created object.
#
__cdist_object_all()
{
[ $# -eq 1 ] || __cdist_usage "<command>"
__cdist_object_all_object_all_command="$1"; shift
__cdist_object_all_object_all_objects="$__cdist_tmp_dir/objects"
# Ensure object dir exists, so marker can be created
mkdir -p "${__cdist_out_object_dir}"
# FIXME: : - why do we use a file?
# core/__cdist_object_manifest_run: touch "$__cdist_objects_created"
# Loop until we do not create new objects anymore
# which is equal to all objects have been run
touch "$__cdist_objects_created"
while [ -f "$__cdist_objects_created" ]; do
# Assume we're done after this run
rm "$__cdist_objects_created"
# Get listing of objects
__cdist_object_list "$__cdist_out_object_dir" > \
"$__cdist_object_all_object_all_objects"
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
while read __cdist_object_all_object; do
set -- "$@" "$__cdist_object_all_object"
done < "$__cdist_object_all_object_all_objects"
while [ $# -gt 0 ]; do
__cdist_object_all_object="$1"; shift
$__cdist_object_all_object_all_command "$__cdist_object_all_object"
done
done
}

54
core/__cdist_object_code_run Executable file
View file

@ -0,0 +1,54 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Exec the code for the given object locally and remote
#
__cdist_object_code_run()
{
[ $# -eq 1 ] || __cdist_exit_err "<object>"
if [ ! -d "$(__cdist_object_dir "$1")" ]; then
__cdist_exit_err "Object undefined"
fi
# Code local
export __cdist_out_object_dir="$__cdist_out_object_dir"
__cdist_echo debug "Trying to run local code"
if __cdist_is_executable \
"$(__cdist_object_code "$1" "${__cdist_name_gencode_local}")"; then
__cdist_run_shell \
"$(__cdist_object_code "$1" "${__cdist_name_gencode_local}")"
else
__cdist_echo debug "Local code: none"
fi
# Code remote
__cdist_echo debug "Trying to run remote code"
if __cdist_is_executable \
"$(__cdist_object_code "$1" "${__cdist_name_gencode_remote}")"; then
__cdist_run_remote $(__cdist_remote_object_code "$1")
else
__cdist_echo debug "Remote code: none"
fi
}

View file

@ -0,0 +1,89 @@
#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the explorers for the given object on the target host.
#
# FIXME: many cleanups needed before going production!
__cdist_object_explorer_run()
{
__cdist_object_self="$1"; shift
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
# Check if type of object has >= 1 explorer
__cdist_has_explorer="$(__cdist_dir_listing "$(__cdist_type_explorer_dir "$__cdist_type")" | wc -l)"
# Run the type explorers for the current object if any
if [ "$__cdist_has_explorer" -ge 1 ]; then
if ! __cdist_type_explorer_pushed "$__cdist_type"; then
# FIXME: variables!
src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
__cdist_echo info "Transfering explorers for $__cdist_type "
__cdist_dir push "$src_dir" "$dst_dir"
__cdist_type_explorer_pushed_add "$__cdist_type"
fi
__cdist_echo info "Running explorers"
# Copy object parameters
__cdist_dir push \
"$(__cdist_object_parameter_dir "$__cdist_object_self")" \
"$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
# Execute explorers
# FIXME: STOPPED:
# - remove cdist-remote-explorer-run
# - problem: new variables / need to run explorer directly?
# -> or put logic into __cdist_explorer_run
# -> think about having _one_ wrapper script for remote to execute
# shell functions
# Create remote output directory
__cdist_run_remote mkdir -p "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
cd "$(__cdist_type_explorer_dir "$__cdist_type")"
for __cdist_object_explorer_run_explorer in *; do
__cdist_run_remote \
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
"$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
"$__cdist_name_var_self=\"$__cdist_object_self\"" \
"$(__cdist_remote_type_explorer_dir "$__cdist_type")/$__cdist_object_explorer_run_explorer" \
">" "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")/$__cdist_object_explorer_run_explorer"
done
# __cdist_run_remote \
# "$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
# "$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
# "$__cdist_name_var_self=\"$__cdist_object_self\"" \
# cdist-remote-explorer-run \
# "$__cdist_name_var_type_explorer" \
# "$(__cdist_remote_type_explorer_dir "$__cdist_type")" \
# "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
# Copy back results
__cdist_dir pull "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
"$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
fi
}

66
core/__cdist_object_gencode Executable file
View file

@ -0,0 +1,66 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Generate code from one object (object must be relative path!)
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
#
# FIXME: check variable names:
# either prefix or use global or use functions directly
# functions looks good, they are cheap anyway!
__cdist_object_gencode()
{
[ $# -eq 2 ] || __cdist_usage "<object>" "<type>"
__cdist_object_self="$1"; shift
__cdist_gencode_type="$1"; shift
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
# export variables for the gencode script
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
export __object="$(__cdist_object_dir "$__cdist_object_self")"
export __global="$__cdist_out_dir"
if [ -x "$__cdist_type_gencode" ]; then
__cdist_run_shell "$__cdist_type_gencode" > "$__cdist_tmp_file"
else
if [ -e "$__cdist_type_gencode" ]; then
__cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
fi
# Ensure it's empty, if there is no gencode
: > "$__cdist_tmp_file"
fi
# Only create code, if gencode created output
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
#
# The following code was generated by $__cdist_type_gencode
#
eof
chmod u+x "${__cdist_code_output}"
fi
}

View file

@ -22,17 +22,15 @@
# For the given object create the code to be executed on the target. # For the given object create the code to be executed on the target.
# #
. cdist-config __cdist_object_gencode_run()
[ $# -eq 2 ] || __cdist_usage "<target host> <object>" {
set -eu __cdist_object_gencode_run_object="$1"; shift
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift
__cdist_echo info "Generating local code " __cdist_echo info "Generating local code "
cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \ __cdist_object_gencode "$__cdist_object_gencode_run_object" \
"${__cdist_name_gencode_local}" "${__cdist_name_gencode_local}"
__cdist_echo info "Generating remote code " __cdist_echo info "Generating remote code "
cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \ __cdist_object_gencode "$__cdist_object_gencode_run_object" \
"${__cdist_name_gencode_remote}" "${__cdist_name_gencode_remote}"
}

36
core/__cdist_object_list Executable file
View file

@ -0,0 +1,36 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Print error and exit (perror() alike)
#
__cdist_object_list()
{
# FIXME: no local in posix
local basedir="$1"; shift
# Use subshell to prevent changing cwd in program
(
cd "${basedir}"
find . -name "$__cdist_name_dot_cdist" | \
sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
)
}

View file

@ -0,0 +1,59 @@
#!/bin/sh
#
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Run the manifest for the given object.
#
__cdist_object_manifest_run()
{
[ $# -eq 1 ] || __cdist_usage "<object>"
__cdist_object_self="$1"; shift
# FIXME: rename to __cdist_object_dir (everywhere!)
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
__cdist_echo info "Checking manifest "
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
if [ -f "$__cdist_manifest" ]; then
if [ -x "$__cdist_manifest" ]; then
# Make __cdist_manifest available for cdist-type-emulator
export __cdist_manifest
__cdist_echo info "Executing manifest "
export $__cdist_name_var_object="$__cdist_cur_object_dir"
export $__cdist_name_var_object_id="$__cdist_object_id"
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
__cdist_manifest_run "$__cdist_manifest"
# Tell cdist-object-run-all that there may be new objects
touch "$__cdist_objects_created"
else
__cdist_exit_err "${__cdist_manifest} needs to be executable."
fi
fi
}

View file

@ -24,11 +24,10 @@
# - run type manifest # - run type manifest
# #
. cdist-config __cdist_object_prepare()
[ $# -eq 2 ] || __cdist_usage "<target host> <object>" {
set -eu [ $# -eq 1 ] || __cdist_usage "<object>"
__cdist_target_host="$1"; shift
__cdist_object_self="$1"; shift __cdist_object_self="$1"; shift
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")" __cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined" [ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
@ -39,9 +38,10 @@ export $__cdist_name_var_self=$__cdist_object_self
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")" __cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")"
if [ ! -f "$__cdist_object_prepared" ]; then if [ ! -f "$__cdist_object_prepared" ]; then
__cdist_echo info "Preparing object" __cdist_echo info "Preparing object"
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object_self" __cdist_object_explorer_run "$__cdist_object_self"
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object_self" __cdist_object_manifest_run "$__cdist_object_self"
# Mark this object as prepared # Mark this object as prepared
touch "$__cdist_object_prepared" touch "$__cdist_object_prepared"
fi fi
}

74
core/__cdist_object_run Executable file
View file

@ -0,0 +1,74 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# For the given object:
# - run type explorers
# - run type manifest
# - generate code
# - copy object to target
# - execute code on target
#
__cdist_object_run()
{
[ $# -eq 1 ] || __cdist_usage "<object>"
__cdist_object_self="$1"; shift
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
# Export to non-core for use in manifest and gencode scripts
export $__cdist_name_var_self=$__cdist_object_self
# FIXME: BUG: should be named differently!
# FIXME: BUG: I can be called recursively! -> variables are probably already set / overwritten!
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
if [ ! -f "$__cdist_object_finished" ]; then
# Resolve dependencies, if any
__cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
if [ -f "$__cdist_object_require" ]; then
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
while read __cdist_requirement; do
set -- "$@" "$__cdist_requirement"
done < "$__cdist_object_require"
while [ $# -gt 0 ]; do
__cdist_requirement="$1"; shift
__cdist_echo info "Resolving requirement $__cdist_requirement"
# FIXME: BUG: at this point, the other __cdist_object_run may have
# overwritten all our variables!
__cdist_object_run "$__cdist_requirement"
done
fi
__cdist_echo debug "Before gencode"
__cdist_object_gencode_run "$__cdist_object_self"
__cdist_echo debug "Before push"
__cdist_dir push "$(__cdist_object_dir "$__cdist_object_self")" \
"$(__cdist_remote_object_dir "$__cdist_object_self")"
__cdist_echo debug "Before run"
__cdist_object_code_run "$__cdist_object_self"
__cdist_echo debug "Object run done"
# Mark this object as done
touch "$__cdist_object_finished"
fi
}

27
core/__cdist_run Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Exit if an error occurs running something
#
__cdist_run()
{
"$@" || __cdist_echo error "$1 exited non-zero, aborting."
}

View file

@ -21,13 +21,12 @@
# Run a cdist binary on the remote side # Run a cdist binary on the remote side
# #
. cdist-config __cdist_run_remote()
[ $# -ge 2 ] || __cdist_usage "<target_host> <binary> [opts]" {
set -ue [ $# -ge 1 ] || __cdist_usage "<binary> [opts]"
__cdist_target_host="$1"; shift
ssh "${__cdist_remote_user}@${__cdist_target_host}" \ ssh "${__cdist_remote_user}@${__cdist_target_host}" \
"export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \ "export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \
"export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \ "export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \
"$@" "$@"
}

34
core/__cdist_run_shell Executable file
View file

@ -0,0 +1,34 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Exit if an error occurs when running a shell script
#
__cdist_run_shell()
{
# Prepend our path, so all cdist tools come before other tools
PATH="${__cdist_out_type_bin_dir}:$PATH" sh -e "$@"
if [ "$?" -ne 0 ]; then
__cdist_echo error "$1 exited non-zero"
__cdist_echo warn "Faulty code:"
cat "$1"
__cdist_exit_err "Aborting due to non-zero exit code."
fi
}

27
core/__cdist_tmp_removal Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Remove tmp dir
#
__cdist_tmp_removal()
{
rm -rf "${__cdist_tmp_dir}"
}

View file

@ -20,11 +20,11 @@
# Build pseudo binaries for type emulation # Build pseudo binaries for type emulation
# #
. cdist-config __cdist_type_build_emulation()
[ $# -eq 1 ] || __cdist_usage "<out dir>" {
set -eu [ $# -eq 0 ] || __cdist_usage "No arguments"
__cdist_output_dir="$1"; shift [ -f "${__cdist_out_type_bin_dir}/.marker" ] && return 0
__cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator" __cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator"
@ -33,11 +33,17 @@ if [ ! -d "${__cdist_type_dir}" ]; then
fi fi
# Get Types # Get Types
(
cd "${__cdist_type_dir}" cd "${__cdist_type_dir}"
ls -1 > "${__cdist_tmp_file}" ls -1 > "${__cdist_tmp_file}"
)
# Create binaries # Create binaries
mkdir -p "${__cdist_output_dir}" mkdir -p "${__cdist_out_type_bin_dir}"
while read type; do while read __cdist_type_build_emulation_type; do
ln -sf "${__cdist_type_emulator}" "${__cdist_output_dir}/${type}" ln -sf "${__cdist_type_emulator}" \
"${__cdist_out_type_bin_dir}/${__cdist_type_build_emulation_type}"
done < "${__cdist_tmp_file}" done < "${__cdist_tmp_file}"
touch "${__cdist_out_type_bin_dir}/.marker"
}

27
core/__cdist_usage Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Print error and exit (perror() alike)
#
__cdist_usage()
{
__cdist_exit_err "$__cdist_myname: $@"
}

View file

@ -1,3 +1,7 @@
1.8.0:
* Added debug (via __cdist_debug={1,2} environment variable)
* Transformed shell script based approach to shell functions (performance improvement)
1.7.1: 2011-07-26 1.7.1: 2011-07-26
* Documentation: Add explorers to reference * Documentation: Add explorers to reference
* Documentation: Typo cleanup (Derek Brost) * Documentation: Typo cleanup (Derek Brost)

View file

@ -17,3 +17,6 @@ run_code_from_user()
load_lib load_lib
. file_from_user . file_from_user
} }
Introduce global variables:
__cdist_target_host

View file

@ -0,0 +1,6 @@
ikq04:
cdist-deploy-to ikq04.ethz.ch 35.44s user 30.65s system 34% cpu 3:11.45 total # also migrate cdist-object-gencode
cdist-deploy-to ikq04.ethz.ch 23.56s user 22.44s system 35% cpu 2:09.78 total # ../bin/cdist-object-all -> __cdist_object_all
cdist-deploy-to ikq04.ethz.ch 17.35s user 16.83s system 30% cpu 1:53.69 total # bin/cdist-object-manifest-run -> core/__cdist_object_manifest_run
cdist-deploy-to ikq04.ethz.ch 19.76s user 23.58s system 35% cpu 2:03.33 total # ../core/__cdist_manifest_run_init

View file

@ -0,0 +1,9 @@
Should __run_remote be used or should the workflow more be
"I'm working here, part of it is executed remote?"
Indirect call to functions like __cdist_remote_explorer_run are
partly hard to debug / think about.
Setting up variables is needed for non-core (i.e. explorers)

View file

@ -0,0 +1,61 @@
Steven, Nico:
Problem:
How to execute a function instead of binary
Solutions:
1)
(
cat $lib/*
cat bin/cdist-config
echo $function $args
) | ssh foo
Works partly, does not work for export = ...
Needs to copy over lib every time again!
2)
scp $dir/lib.sh root@foo:/tmp/lib.sh
cat << DONE | ssh root@foo sh
source /tmp/lib.sh
export foo=bla
function args
DONE
Caches lib directory
3) follow up to 1)
__run_remote()
{
cat << eof | ssh foo
. /cdist-config
"$@" # NOT USABLE, no export = export = lines possible!
eof
4) final solution
- write for every remote job a new function
- this functions prepares env + reuses ssh header
__cdist_remote_explorer()
{
cat << eof
$__cdist_remote_header
export foo1=bar
export foo2=bar
export foo3=bar
"$@"
eof | __cdist_ssh
}
Problems found and solved:
- remote shell cannot work due to multi line variable export
- caching library directory with scp
- create function for every remote action
-> prepares environment

View file

@ -5,6 +5,8 @@ Feel free to pick one!
CORE CORE
---- ----
- Fix warnings / __cdist_usage in core/*
-> __cdist_usage prints $0! not function name!
- Inconsistent error messages if object is not existing! - Inconsistent error messages if object is not existing!
-> always use "Object undefined" -> always use "Object undefined"
- Add echo function / beautify output - Add echo function / beautify output

View file

@ -1,7 +1,7 @@
Catch broken instances in cdist-mass-deploy -p and report broken deployements at the end! BUG in core/__cdist_object_run: each recursive call overwrites the variables!
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Bug with requirements when indirect requires is scheduled late: Bug with requirements when indirect requires is scheduled late:
__package/collectd: Generating local code __package/collectd: Generating local code
@ -24,3 +24,15 @@ __file/etc/collectd/collectd.conf: Warning: Faulty code:
scp /home/users/nico/oeffentlich/rechner/projekte/cdist-nutzung/conf/type/__ethz_collectd/files/collectd.conf.client root@shrek08:/etc/collectd/collectd.conf scp /home/users/nico/oeffentlich/rechner/projekte/cdist-nutzung/conf/type/__ethz_collectd/files/collectd.conf.client root@shrek08:/etc/collectd/collectd.conf
__file/etc/collectd/collectd.conf: Error: Aborting due to non-zero exit code. __file/etc/collectd/collectd.conf: Error: Aborting due to non-zero exit code.
--------------------------------------------------------------------------------
Bad error reporting in functions:
[15:15] ikn:cdist-nutzung% cdist-deploy-to ikn
core: cdist 1.8.0: Configuring ikn
core: Creating clean directory structure
core: Transferring cdist binaries/functions to the target host
core: Running global explorers
core: Running initial manifest for ikn
core: Error: cdist-deploy-to: No arguments

4
test/README Normal file
View file

@ -0,0 +1,4 @@
This directory should contain unit tests.
I have not yet searched (or found) a good way to implement this for cdist,
feel free to take the hat.

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2010 Nico Schottelius (nico-cdist at schottelius.org) # 2011 Nico Schottelius (nico-cdist at schottelius.org)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -18,22 +18,8 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# #
# Let's build a cconfig tree from a configuration
# And save it into the cache tree
#
. cdist-config . cdist-config
[ $# -eq 1 ] || __cdist_usage "<target host>"
set -u
__cdist_target_host="$1"; shift mkdir -p /tmp/cdist/...
__cdist_explorer_run global
# Create base to move into
mkdir -p "${__cdist_local_base_cache_dir}"
# Now determine absolute path
__cdist_ddir="$(__cdist_host_cache_dir "$__cdist_target_host")"
__cdist_echo info "Saving cache to $__cdist_ddir "
rm -rf "$__cdist_ddir"
mv "$__cdist_local_base_dir" "$__cdist_ddir"