summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn34
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment30
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment38
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment11
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment16
-rw-r--r--doc/forum/Propellor_without_superuser_privileges.mdwn3
-rw-r--r--doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment26
-rw-r--r--doc/forum/Supported_OS.mdwn5
-rw-r--r--doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment23
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn12
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment10
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment19
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment7
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn1
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment10
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__.mdwn1
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment7
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment9
-rw-r--r--doc/forum/property_combinator_ordering.mdwn8
-rw-r--r--doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment31
-rw-r--r--doc/news/propellor_demo.mdwn8
-rw-r--r--doc/news/version_1.2.1.mdwn6
-rw-r--r--doc/news/version_1.2.2.mdwn4
-rw-r--r--doc/news/version_1.3.0.mdwn17
-rw-r--r--doc/news/version_1.3.1.mdwn6
-rw-r--r--doc/news/version_1.3.2.mdwn5
-rw-r--r--doc/security.mdwn2
-rw-r--r--doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment10
-rw-r--r--doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment8
-rw-r--r--doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment17
-rw-r--r--doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment22
-rw-r--r--doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment13
-rw-r--r--doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment11
-rw-r--r--doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment8
-rw-r--r--doc/todo/docker_todo_list.mdwn2
-rw-r--r--doc/todo/editor_for_privdata__63__.mdwn4
-rw-r--r--doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment9
-rw-r--r--doc/todo/etckeeper.mdwn1
-rw-r--r--doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment9
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn3
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment30
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment7
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment19
-rw-r--r--doc/todo/git_push_over_propellor_ssh_channel.mdwn13
-rw-r--r--doc/todo/info_propigation_out_of_nested_properties.mdwn109
-rw-r--r--doc/todo/lxc_containers_support.mdwn1
-rw-r--r--doc/todo/port_info_for_properties_for_firewall.mdwn24
-rw-r--r--doc/todo/type_level_port_conflict_detection.mdwn5
-rw-r--r--privdata.joey/keyring.gpgbin113014 -> 0 bytes
-rw-r--r--privdata.joey/privdata.gpg1199
-rw-r--r--src/Propellor/PrivData/Paths.hs2
55 files changed, 672 insertions, 1229 deletions
diff --git a/config.hs b/config.hs
index 07959a0a..ec313725 120000
--- a/config.hs
+++ b/config.hs
@@ -1 +1 @@
-config-joey.hs \ No newline at end of file
+config-simple.hs \ No newline at end of file
diff --git a/debian/rules b/debian/rules
index c553132f..bcb681c1 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,4 +1,4 @@
-#!/bin/false
+#!/usr/bin/make -f
# Avoid using cabal, as it writes to $HOME
export CABAL=./Setup
diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn
new file mode 100644
index 00000000..b678d8d0
--- /dev/null
+++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn
@@ -0,0 +1,34 @@
+Hello,
+
+Still working on the reprepro property :)
+
+Here A property that I am using to publish a repository via apache (this is a prototype)
+
+ website :: String -> Property
+ website hn = toProp $ Apache.siteEnabled hn apachecfg
+ where
+ apachecfg = [ "<VirtualHost *>"
+ , "DocumentRoot " ++ basePath
+ , "<Directory " ++ basePath ++ ">"
+ , " Options Indexes FollowSymLinks Multiviews"
+ , " Order allow,deny"
+ , Apache.allowAll
+ , "</Directory>"
+ ] ++ concatMap deny ["db", "conf", "incoming"]
+ ++ ["</VirtualHost>"]
+
+ deny dir = [ "<Directory \"" ++ basePath ++ "apt/*/" ++ dir ++ "\">"
+ , " Order deny,allow"
+ , " Deny from all"
+ , "</Directory>"
+ ]
+
+during my test I am runing the config.hs with
+runhaskell config.hs (it work the first time, the apache config files are ok)
+
+but when I do a modification on the apachecfg and rerun the runhaskell,
+the config files are not updated. I need to remove them to have an updated version.
+
+cheers
+
+Fred
diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment
new file mode 100644
index 00000000..0101ccb2
--- /dev/null
+++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="first run"
+ date="2014-12-08T09:31:46Z"
+ content="""
+root@mordor:~/propellor/src# PROPELLOR_DEBUG=1 runhaskell config.hs
+[2014-12-08 10:27:10 CET] read: hostname [\"-f\"]
+[2014-12-08 10:27:10 CET] command line: Run \"mordor\"
+[2014-12-08 10:27:10 CET] read: git [\"remote\"]
+[2014-12-08 10:27:10 CET] read: git [\"symbolic-ref\",\"--short\",\"HEAD\"]
+[2014-12-08 10:27:10 CET] call: git [\"fetch\"]
+Pull from central git repository ... done
+[2014-12-08 10:27:12 CET] read: git [\"show-ref\",\"--hash\",\"master\"]
+[2014-12-08 10:27:12 CET] read: git [\"show-ref\",\"--hash\",\"master\"]
+mordor has Operating System (Debian Unstable) \"i386\" ... ok
+[2014-12-08 10:27:12 CET] read: apt-cache [\"policy\",\"etckeeper\"]
+mordor apt installed etckeeper ... ok
+[2014-12-08 10:27:13 CET] read: apt-cache [\"policy\",\"ssh\"]
+mordor apt installed ssh ... ok
+[2014-12-08 10:27:13 CET] read: passwd [\"-S\",\"root\"]
+mordor root has password ... ok
+[2014-12-08 10:27:13 CET] call: a2query [\"-q\",\"-s\",\"reprepro\"]
+[2014-12-08 10:27:14 CET] read: apt-cache [\"policy\",\"apache2\"]
+[2014-12-08 10:27:14 CET] call: a2ensite [\"--quiet\",\"reprepro\"]
+Enabling site reprepro.
+[2014-12-08 10:27:15 CET] call: sh [\"-c\",\"set -e ; service 'apache2' reload >/dev/null 2>&1 || true\"]
+mordor create reprepro ... done
+mordor overall ... done
+
+"""]]
diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment
new file mode 100644
index 00000000..85a57383
--- /dev/null
+++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="second run with content modified"
+ date="2014-12-08T09:37:43Z"
+ content="""
+Second run after adding a space here
+
+ - , \" Options Indexes FollowSymLinks Multiviews\"
+ + , \" Options Indexes FollowSymLinks Multiviews\"
+
+
+ root@mordor:~/propellor/src# PROPELLOR_DEBUG=1 runhaskell config.hs
+ [2014-12-08 10:34:19 CET] read: hostname [\"-f\"]
+ [2014-12-08 10:34:19 CET] command line: Run \"mordor\"
+ [2014-12-08 10:34:19 CET] read: git [\"remote\"]
+ [2014-12-08 10:34:19 CET] read: git [\"symbolic-ref\",\"--short\",\"HEAD\"]
+ [2014-12-08 10:34:19 CET] call: git [\"fetch\"]
+ remote: Counting objects: 32, done.
+ remote: Compressing objects: 100% (6/6), done.
+ remote: Total 6 (delta 3), reused 0 (delta 0)
+ Dépaquetage des objets: 100% (6/6), fait.
+ Depuis git://git.kitenet.net/propellor
+ c5a8cae..9ac0dfb master -> origin/master
+ Pull from central git repository ... done
+ [2014-12-08 10:34:20 CET] read: git [\"show-ref\",\"--hash\",\"master\"]
+ [2014-12-08 10:34:20 CET] read: git [\"show-ref\",\"--hash\",\"master\"]
+ mordor has Operating System (Debian Unstable) \"i386\" ... ok
+ [2014-12-08 10:34:20 CET] read: apt-cache [\"policy\",\"etckeeper\"]
+ mordor apt installed etckeeper ... ok
+ [2014-12-08 10:34:21 CET] read: apt-cache [\"policy\",\"ssh\"]
+ mordor apt installed ssh ... ok
+ [2014-12-08 10:34:21 CET] read: passwd [\"-S\",\"root\"]
+ mordor root has password ... ok
+ [2014-12-08 10:34:21 CET] call: a2query [\"-q\",\"-s\",\"reprepro\"]
+ mordor create reprepro ... ok
+ mordor overall ... ok
+
+"""]]
diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment
new file mode 100644
index 00000000..5dc67fb0
--- /dev/null
+++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 3"
+ date="2014-12-08T10:47:59Z"
+ content="""
+I forgot to say that the content of
+
+/etc/apache2/site-xxx/reprepro[.conf]
+
+is unmodifed after this second run
+"""]]
diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment
new file mode 100644
index 00000000..a9201541
--- /dev/null
+++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2014-12-09T04:35:12Z"
+ content="""
+Pretty obvious why if you look at the code:
+
+ enable = check (not <$> isenabled) $
+ cmdProperty "a2ensite" ["--quiet", hn]
+ `describe` ("apache site enabled " ++ hn)
+ `requires` siteAvailable hn cf
+
+So that property was skipped entirely if the site was already enabled and never looked at the config file.
+
+I've put in a fix.
+"""]]
diff --git a/doc/forum/Propellor_without_superuser_privileges.mdwn b/doc/forum/Propellor_without_superuser_privileges.mdwn
new file mode 100644
index 00000000..d7288a72
--- /dev/null
+++ b/doc/forum/Propellor_without_superuser_privileges.mdwn
@@ -0,0 +1,3 @@
+Joey uses propellor to popular his /home/joey on hosts he controls. I'd like to use it to populate my home directory on hosts where I don't have root. If someone gives me a shell account on a Debian box, it would be great to just run `propellor --spin` to have apply properties such as having certain stuff downloaded and compiled in `~/local/bin`, putting cronjobs in place, and checking stuff out with `myrepos`.
+
+Does propellor assume root access at a deep enough level that writing properties to do this stuff would be impractical?
diff --git a/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment b/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment
new file mode 100644
index 00000000..1a38ef94
--- /dev/null
+++ b/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-26T19:26:00Z"
+ content="""
+I think that the root assumptions are in basically 3 places:
+
+* Many Properties assume they're run as root, and will fail if they're not.
+ Probably not a problem in practice for most of them. It might be nice
+ to make a few, such as `User.hasSomePassword` work when run as a normal
+ user.
+
+* Propellor's self-deployment involves running apt-get to instal ghc,
+ etc. This could be modified to check if it's not root and do a local
+ user of ghc if necessary.
+
+* `localdir = "/usr/local" and this is used in various places by eg,
+ `--spin`. It is, however, entirely possible to run "./propellor" in
+ some other directory, which causes it to run in that directory
+ and ensure the properties of localhost. `--spin` could certianly be
+ taught to run in a user mode where it uses "~/.propellor/" instead of
+ `localdir`.
+
+I think that's all! I don't plan to try to add this feature myself, but
+will be happy to support anyone who wants to work on it.
+"""]]
diff --git a/doc/forum/Supported_OS.mdwn b/doc/forum/Supported_OS.mdwn
new file mode 100644
index 00000000..f17b9054
--- /dev/null
+++ b/doc/forum/Supported_OS.mdwn
@@ -0,0 +1,5 @@
+What are the requirements for the configured OS ? Does it need to be Debian ?
+
+Would Propellor work for Arch linux, RHEL, Windows, AIX or linux on pSeries) ?
+
+Cheers
diff --git a/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment b/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment
new file mode 100644
index 00000000..3a2055ea
--- /dev/null
+++ b/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-07T15:58:03Z"
+ content="""
+I have heard of propellor being used on OSX. Probably that user wrote their
+own code for OSX specific stuff.
+
+Propellor properites can be parameterized by OS. Currently it has support
+for Debian and some untested support for Ubuntu. A property can be parameterized
+like this:
+
+ foo :: Property
+ foo = property "foo" withOS desc $ \o -> case o of
+ (Just (System (Debian _) _)) -> ensureProperty fooDebian
+ (Just (System (Ubuntu _) _)) -> ensureProperty fooUbuntu
+
+The first step for adding a new OS will be to modify <http://hackage.haskell.org/package/propellor-1.0.0/docs/Propellor-Types-OS.html>.
+Compilation will then warn about all OS parameterized properties that
+need to be updated to support your added OS, and it can be taken from there.
+
+I'll accept reasonable patches to support other OS's.
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn
new file mode 100644
index 00000000..c88defcf
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn
@@ -0,0 +1,12 @@
+Hello,
+
+I am trying propellor on Debian Jessie (haskell is fantastic for this sort or things) to setup one of my computer.
+
+On my network, the system administrator set proxies for http and https.
+These information are available via a http://proxy/proxy.pac URL.
+
+So I would like to know what should be done to extract this information and set it for all users on the system ?
+
+Cheers
+
+Frederic
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment
new file mode 100644
index 00000000..6bf8844d
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-25T15:44:13Z"
+ content="""
+You could, for example, use Propellor.Propety.Cmd.cmdProperty
+to run a command that sets up the proxying. If there's not a single command
+that does it, you could cause propellor to fetch the url and deploy the
+info itself.
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment
new file mode 100644
index 00000000..8458ee49
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 2"
+ date="2014-11-25T17:55:25Z"
+ content="""
+In my case I need to wget the proxy.pac file and parse it to find the right proxy.
+
+what worried me is that these proxy.pac things are dynamical depending on the ip of the sender AND the receive.
+It work nicely with web browser, but not with the unix http_proxy and HTTPS_PROXY env.
+
+nevertheless, I can create something to parse my local setup and extract the right http_proxy.
+
+Is there something available in Propellor to set a global environment variable in /etc/environment (the right place for this ?)
+
+cheers
+
+Frederic
+
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment
new file mode 100644
index 00000000..9bdcb4df
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-25T19:37:46Z"
+ content="""
+There's no Property that handles setting global environment currently, but
+it's a reasonable one to add.
+
+I think that /etc/environment is read by `pam_env` logins, but maybe not
+other things, so dunno.
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment
new file mode 100644
index 00000000..d2a0b45e
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 4"
+ date="2014-11-25T20:01:12Z"
+ content="""
+I saw that there is an haskell binding for augeas.
+
+Maybe this could be a nice uniform interface to deal with all the system configuration files.
+then no need to deal with the config file formats.
+
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment
new file mode 100644
index 00000000..d670fa3b
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 5"
+ date="2014-11-27T08:17:36Z"
+ content="""
+Just looked at augeas, and add it to propellor would be great. Much more robust than Propellor.Property.File.{containsLine,containsLines,lacksLine}, at least.
+"""]]
diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn
new file mode 100644
index 00000000..0815b4b3
--- /dev/null
+++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn
@@ -0,0 +1 @@
+How can I modify the configuration of a managed host (which seems to be stored in /usr/local/propellor/.git/config) from the host on which I run propellor?
diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment
new file mode 100644
index 00000000..f034a377
--- /dev/null
+++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T14:40:33Z"
+ content="""
+I'm curious what you need to configure there..
+
+But, there seems to be a simple solution: Add a Property that configures
+the .git/config however you need to! :)
+"""]]
diff --git a/doc/forum/propellor_with_no_central_repository__63__.mdwn b/doc/forum/propellor_with_no_central_repository__63__.mdwn
new file mode 100644
index 00000000..5f322878
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__.mdwn
@@ -0,0 +1 @@
+Is there a way to use propellor with no central repository?
diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment
new file mode 100644
index 00000000..1f1456c5
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T14:39:48Z"
+ content="""
+Not yet, but see [[todo/git_push_over_propellor_ssh_channel]]
+"""]]
diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment
new file mode 100644
index 00000000..6a6aa946
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""yay!"""
+ date="2014-11-19T01:31:14Z"
+ content="""
+propellor now supports this mode by default, just use `propellor --spin
+hostname` and the changes in the local repo will be pushed and deployed to
+the host, w/o needing a centralized git repo.
+"""]]
diff --git a/doc/forum/property_combinator_ordering.mdwn b/doc/forum/property_combinator_ordering.mdwn
new file mode 100644
index 00000000..25549bb4
--- /dev/null
+++ b/doc/forum/property_combinator_ordering.mdwn
@@ -0,0 +1,8 @@
+when I write
+
+ setDistribution cfg = f `File.hasContent` cfg
+ `onChange` update
+ `requires` File.dirExists confDir
+
+is update called before ensuring the confiDir Exist ?
+It seems to me but who knows ?
diff --git a/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment
new file mode 100644
index 00000000..c41abd90
--- /dev/null
+++ b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T15:53:11Z"
+ content="""
+I think that should behave intuitively, but of course if you're unsure
+of this kind of thing, adding parens is a good way to disambiguate the
+code.
+
+ (f `File.hasContent` cfg `onChange` update)
+ `requires` File.dirExists confDir
+
+Written that way, it's explicit that the parenthesized part runs
+together as one action.
+
+Or, we can do a quick test in ghci:
+
+ joey@darkstar:~/src/propellor/src#joeyconfig>ghci Propellor.hs Propellor/Property.hs
+ *Propellor> let f1 = property "hasContent" (liftIO (print "f1") >> return MadeChange)
+ *Propellor> let f2 = property "update" (liftIO (print "f2") >> return MadeChange)
+ *Propellor> let f3 = property "dirExists" (liftIO (print "f3") >> return MadeChange)
+ *Propellor> runPropellor (Host "foo" [] mempty) $ ensureProperty $ f1 `onChange` f2 `requires` f3
+ "dirExists"
+ "hasContent"
+ "update"
+ MadeChange
+
+So, yes, it's behaving as it should, first ensuring that the `requires`
+property is met, and then running the main property, and since it made a
+change, following up by running the `onChange` property.
+"""]]
diff --git a/doc/news/propellor_demo.mdwn b/doc/news/propellor_demo.mdwn
new file mode 100644
index 00000000..362f56e6
--- /dev/null
+++ b/doc/news/propellor_demo.mdwn
@@ -0,0 +1,8 @@
+A quick demo of propellor.
+
+<video controls src="http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm"></video>
+
+[video](http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm)
+
+(Audio quality is clipped/fast in places, unfortunately this was a problem
+with the source recording.)
diff --git a/doc/news/version_1.2.1.mdwn b/doc/news/version_1.2.1.mdwn
new file mode 100644
index 00000000..59dd4cee
--- /dev/null
+++ b/doc/news/version_1.2.1.mdwn
@@ -0,0 +1,6 @@
+propellor 1.2.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added CryptPassword to PrivDataField, for password hashes as produced
+ by crypt(3).
+ * User.hasPassword and User.hasSomePassword will now use either
+ a CryptPassword or a Password from privdata, depending on which is set."""]] \ No newline at end of file
diff --git a/doc/news/version_1.2.2.mdwn b/doc/news/version_1.2.2.mdwn
new file mode 100644
index 00000000..c10940fd
--- /dev/null
+++ b/doc/news/version_1.2.2.mdwn
@@ -0,0 +1,4 @@
+propellor 1.2.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Revert ensureProperty warning message, too many false positives in places
+ where Info is correctly propigated. Better approach needed."""]] \ No newline at end of file
diff --git a/doc/news/version_1.3.0.mdwn b/doc/news/version_1.3.0.mdwn
new file mode 100644
index 00000000..87abb2f7
--- /dev/null
+++ b/doc/news/version_1.3.0.mdwn
@@ -0,0 +1,17 @@
+propellor 1.3.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * --spin checks if the DNS matches any configured IP address property
+ of the host, and if not, sshes to the host by IP address.
+ * Detect #774376 and refuse to use docker if the system is so broken
+ that docker exec doesn't enter a chroot.
+ * Update intermediary propellor in --spin --via
+ * Added support for DNSSEC.
+ * Ssh.hostKey and Ssh.hostKeys no longer install public keys from
+ the privdata. Instead, the public keys are included in the
+ configuration. (API change)
+ * Ssh.hostKeys now removes any host keys of types that the host is not
+ configured to have.
+ * sshPubKey is renamed to Ssh.pubKey, and has an added SshKeyType
+ parameter. (API change)
+ * CloudAtCost.deCruft no longer forces randomHostKeys.
+ * Fix build with process 1.2.1.0."""]] \ No newline at end of file
diff --git a/doc/news/version_1.3.1.mdwn b/doc/news/version_1.3.1.mdwn
new file mode 100644
index 00000000..74a39ac4
--- /dev/null
+++ b/doc/news/version_1.3.1.mdwn
@@ -0,0 +1,6 @@
+propellor 1.3.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Fix bug that prevented deploying ssh host keys when the file for the
+ key didn't already exist.
+ * DNS records for hosts with known ssh public keys now automatically
+ include SSHFP records."""]] \ No newline at end of file
diff --git a/doc/news/version_1.3.2.mdwn b/doc/news/version_1.3.2.mdwn
new file mode 100644
index 00000000..77902008
--- /dev/null
+++ b/doc/news/version_1.3.2.mdwn
@@ -0,0 +1,5 @@
+propellor 1.3.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * SSHFP records are also generated for CNAMES of hosts.
+ * Merge Utiity modules from git-annex.
+ * Ignore bogus DNS when spinning the local host."""]] \ No newline at end of file
diff --git a/doc/security.mdwn b/doc/security.mdwn
index 12ae18de..831b2b41 100644
--- a/doc/security.mdwn
+++ b/doc/security.mdwn
@@ -29,7 +29,7 @@ in cleartext private data such as passwords, ssh private keys, etc.
Instead, `propellor --spin $host` looks for a
`~/.propellor/privdata/privdata.gpg` file and if found decrypts it,
-extracts the private that that the $host needs, and sends it to to the
+extracts the private data that the $host needs, and sends it to to the
$host using ssh. This lets a host know its own private data, without
seeing all the rest.
diff --git a/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment b/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment
new file mode 100644
index 00000000..4ed9ecdb
--- /dev/null
+++ b/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="Is it ok to publish to a public repository?"
+ date="2014-08-29T21:13:19Z"
+ content="""
+It is not clear to me whether or not it is safe to publish my own propellor repository to a publicly hosted service. It seems to me that when I do ./propellor --add-key MYKEYID, the private key data is stored in the repository as a commit, so pushing it exposes this data to the public. Am I wrong?
+
+Thanks
+"""]]
diff --git a/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment b/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment
new file mode 100644
index 00000000..4d209b03
--- /dev/null
+++ b/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="131.252.200.111"
+ subject="comment 2"
+ date="2014-08-29T21:52:02Z"
+ content="""
+--add-key puts your **public** key in the repository, not the private key.
+"""]]
diff --git a/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment b/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment
new file mode 100644
index 00000000..4d75842d
--- /dev/null
+++ b/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="Remote host fails to connect"
+ date="2014-08-30T06:40:33Z"
+ content="""
+Makes sense of course, but the message one gets when doing that is a bit misleading.
+
+I ran into another issue: propellor deploys itself to remote host, but then the propellor instance run on remote host cannot read the remote git repo, because:
+
+1. the host key is not initially present in root's known_hosts, then
+2. the user's (root) public key is unknown to the remote git repo, in my case bitbucket.org, and the URL used is git@bitbucket.org:abailly/capital-match-infra.git which implies connection goes through SSH
+
+I am puzzled: Does this mean I should add some for use by the remote host deployed to? This does not make sense so there should be another way... If I change the origin url to use https, then I cannot push locally anymore.
+
+Thanks for your help
+"""]]
diff --git a/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment b/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment
new file mode 100644
index 00000000..b2ac4d57
--- /dev/null
+++ b/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="Output from propellor --spin $host"
+ date="2014-08-30T07:17:52Z"
+ content="""
+Here is the output (truncated):
+
+
+ Permission denied (publickey).
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+ Git fetch ... failed
+ fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.
+ Use '--' to separate paths from revisions, like this:
+ 'git <command> [<revision>...] -- [<file>...]'
+ propellor: user error (git [\"log\",\"-n\",\"1\",\"--format=%G?\",\"origin/master\"] exited 128)
+
+
+"""]]
diff --git a/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment b/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment
new file mode 100644
index 00000000..cc26f42d
--- /dev/null
+++ b/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="Got it working..."
+ date="2014-08-31T12:50:17Z"
+ content="""
+OK, I manage to get my first propellor config run fine by setting different branch.master.url and branch.master.pushUrl configurations:
+
+* Use a https:// based url for the first
+* Use a git:// based url for the second
+
+I had to nuke the remote /usr/local/propellor directory because it still had wrong configuration with a single remote url.
+"""]]
diff --git a/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment b/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment
new file mode 100644
index 00000000..be8ac7f9
--- /dev/null
+++ b/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2014-11-19T01:35:59Z"
+ content="""
+@Arnaud, see [[centralized_repository]], including its documentation of a
+"deploy" remote, which can be used to configure the url that remote hosts
+should pull from.
+
+Also, propellor can be used now without any centralized repository.
+"""]]
diff --git a/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment b/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment
new file mode 100644
index 00000000..e9d20642
--- /dev/null
+++ b/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkgUir7k_amh9RFp4D3QutX1fGh_nd7ko4"
+ nickname="Philipp"
+ subject="Passwords in PrivData"
+ date="2014-12-13T18:25:23Z"
+ content="""
+I wonder if there could be a shortcut in PrivData handling that hashes the input with crypt() instead of passing it raw to a machine. For instance passwords are stored in plain on the target machines, while this is not required to set the password in shadow: the hash would suffice. I think this page should at least spell out that fact.
+"""]]
diff --git a/doc/todo/docker_todo_list.mdwn b/doc/todo/docker_todo_list.mdwn
index 72ded426..1321445d 100644
--- a/doc/todo/docker_todo_list.mdwn
+++ b/doc/todo/docker_todo_list.mdwn
@@ -1,5 +1,3 @@
* There is no way for a property of a docker container to require
some property be met outside the container. For example, some servers
need ntp installed for a good date source.
-* The SimpleSh was added before `docker exec` existed, and could probably
- be eliminated by using that.
diff --git a/doc/todo/editor_for_privdata__63__.mdwn b/doc/todo/editor_for_privdata__63__.mdwn
new file mode 100644
index 00000000..8b91338c
--- /dev/null
+++ b/doc/todo/editor_for_privdata__63__.mdwn
@@ -0,0 +1,4 @@
+Would adding a way to call $EDITOR to edit privdata be possible?
+It would make sense for editing data like logcheck files.
+
+> [[done]]
diff --git a/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment b/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment
new file mode 100644
index 00000000..bbe93fe3
--- /dev/null
+++ b/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 2"
+ date="2014-11-11T21:16:09Z"
+ content="""
+Already exists in `propellor --edit`
+
+Documentation patches accepted! :)
+"""]]
diff --git a/doc/todo/etckeeper.mdwn b/doc/todo/etckeeper.mdwn
new file mode 100644
index 00000000..7dc80cef
--- /dev/null
+++ b/doc/todo/etckeeper.mdwn
@@ -0,0 +1 @@
+It would be cool to have an etckeeper module :-).
diff --git a/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment b/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment
new file mode 100644
index 00000000..f080f70e
--- /dev/null
+++ b/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-06T15:46:56Z"
+ content="""
+All I've needed for this is `& Apt.installed ["etckeeper"]`
+
+Patches welcome, I suppose.
+"""]]
diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn b/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn
new file mode 100644
index 00000000..046f4a6f
--- /dev/null
+++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn
@@ -0,0 +1,3 @@
+Sometimes I forget to commit a modification, and running "propellor --spin" automatically commits this stuff. It would be better if "propellor --spin" failed (or, even better, warned the user) that there are uncommited changes, and "propellor --spin" would just always add an empty commit.
+
+> --merge added; [[done]] --[[Joey]]
diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment
new file mode 100644
index 00000000..19b2fab6
--- /dev/null
+++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-23T18:41:40Z"
+ content="""
+Letting --spin commit is part of my workflow. It's great when you're just
+changing config.hs to quickly blast out the changes.
+
+Granted, it is not so nice when doing Property development, as changes get
+fragmented across the spins used to test them. I'd be happy to find some
+way to improve that. Perhaps a way could be found to get this structure of
+git commits:
+
+ manual commit------------------------->manual commit--merge
+ \--spin--spin--spin--spin--spin------------/
+
+Where the second manual commit has an identical tree committed as does the
+spin just underneath it, and so the following merge doesn't change any files,
+just grafts the two branches back together.
+
+I guess that could be handled by haing a checkpoint command, that squashes
+all the previous spins since the last checkpoint together into one commit,
+lets the user edit the commit message of that, and the juggles the branches
+into place and creates the merge commit -- which then becomes the new last
+checkpoint.
+
+I'll take patches for such a thing, or more simply a way to configure --spin's
+auto-committing behavior. However, I don't want to change the default
+behavior to not commit.
+"""]]
diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment
new file mode 100644
index 00000000..3e8e5f62
--- /dev/null
+++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2014-11-23T20:23:24Z"
+ content="""
+Your solution seems a lot better :-).
+"""]]
diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment
new file mode 100644
index 00000000..8ad6ab49
--- /dev/null
+++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-11-23T21:12:19Z"
+ content="""
+Here's a almost-script to do it, which worked when it did it by hand:
+
+<pre>
+get old-head (git show-ref HEAD -s)
+get curr-branch (refs/heads/master eg)
+find old-commit (look back through git log for the first commit that was not "propellor spin")
+git reset old-commit
+git commit -a # user gets to edit commit message for all the spins and any staged changes here
+git merge -S -s ours old-head
+get current-commit (result of merge)
+git update-ref curr-branch current-commit
+git checkout curr-branch
+</pre>
+"""]]
diff --git a/doc/todo/git_push_over_propellor_ssh_channel.mdwn b/doc/todo/git_push_over_propellor_ssh_channel.mdwn
new file mode 100644
index 00000000..c6d42fcf
--- /dev/null
+++ b/doc/todo/git_push_over_propellor_ssh_channel.mdwn
@@ -0,0 +1,13 @@
+Propellor currently needs a central git server. And it has a special-cased
+protocol during bootstrap that transfers the git repo over to a new host,
+using the ssh connection that will be used to run propellor.
+
+This could be improved by making a git push be done whenever
+`propellor spin $host` runs. The remote propellor runs `git receive-pack`;
+the local one runs `git send-pack`.
+
+Then there would be no need for a central git repo. Although still very
+useful if you have multiple propellor driven hosts and you want to just git
+commit and let cron sort them out.
+
+> [[done]]! --[[Joey]]
diff --git a/doc/todo/info_propigation_out_of_nested_properties.mdwn b/doc/todo/info_propigation_out_of_nested_properties.mdwn
index e6427069..536d6719 100644
--- a/doc/todo/info_propigation_out_of_nested_properties.mdwn
+++ b/doc/todo/info_propigation_out_of_nested_properties.mdwn
@@ -1,36 +1,97 @@
> Now [[fixed|done]]!! --[[Joey]]
-Currently, Info about a Host's Properties is manually gathered and
-propigated. propertyList combines the Info of the Properties in the list.
-Docker.docked extracts relevant Info from the Properties of the container
-(but not al of it, intentionally!).
+Currently, Info about a Host's Properties is propigated to the host by
+examining the tree of Properties.
-This works, but it's error-prone. Consider this example:
+This works, but there's one problem. Consider this example:
withOS desc $ \o -> case o of
(Just (System (Debian Unstable) _)) -> ensureProperty foo
_ -> ensureProperty bar
Here, the Info of `foo` is not propigated out. Nor is `bar`'s Info.
-Of course, only one of them will be run, and only its info should be propigated
-out..
+It's not really clear if just one Info, or both should be propigated out.
-This commonly afflicts eg, privData. For example, `User.hasPassword'`
-has this problem, and this prevents --list-fields from listing privdata
-that's not set from that property.
+----
One approach might be to make the Propellor monad be able to be run in two
-modes. In one mode, it actually perform IO, etc. In the other mode, all
-liftIO is a no-op, but all Info encountered is accumulated using a Reader
-monad. This might need two separate monad definitions.
-
-That is surely doable, but the withOS example above shows a problem with it --
-the OS is itself part of a Host's info, so won't be known until all its
-properties have been examined for info!
-
-Perhaps that can be finessed. We don't really need to propigate out OS info.
-Just DNS and PrivDataField Info. So info could be collected in 2 passes,
-first as it's done now by static propertyInfo values. Then take that
-and use it as the Info when running the Properties in the Reader monad.
-Combine what the Reader accumulates with the static info to get the full
-info.
+modes. In run mode, it actually performs IO, etc. In introspection mode, all
+liftIO is a no-op, but all Info encountered is accumulated using a Reader.
+This might need two separate monad definitions.
+
+That is surely doable, but consider this example:
+
+ property "demo" = do
+ needfoo <- liftIO checkFoo
+ if needfoo
+ then ensureProperty foo
+ else ensureProperty . bar =<< liftIO (getBarParam)
+
+In introspection mode, the liftIO is a no-op, but needs to return a Bool.
+That seems unlikely (how to pick which?), but even if some defaulting is
+used, only one of foo or bar's info will be seen.
+
+Worse, the bar property is not fully known until IO can be performed to get
+its parameter.
+
+----
+
+Another approach could be something like this:
+
+ withInfoFrom foo $ \callfoo ->
+ withInfoFrom bar $ \callbar ->
+ property "demo" = do
+ needfoo <- liftIO checkFoo
+ if needfoo
+ then callfoo
+ else callbar
+
+Here withInfoFrom adds foo and bar as child properties of the demo property
+that (may) call them.
+
+This approach is not fully type safe; it would be possible to call
+withInfoFrom in a way that didn't let it propigate the info.
+
+And again this doesn't solve the problem that IO can be needed to get
+a parameter of a child property.
+
+----
+
+Another approach would be to add a new SimpleProperty, which is a property
+that has no Info. Only allow calling ensureProperty on this new type.
+
+(Or, remove propertyInfo from Property, and add a new InfoProperty that
+has the info.)
+
+But, propertyList can only contain one type at a time,
+not a mixed list of Property and SimpleProperty.
+
+Could a GADT be used instead?
+
+ {-# LANGUAGE GADTs #-}
+ {-# LANGUAGE EmptyDataDecls #-}
+
+ data HasInfo
+ data NoInfo
+
+ data Property = IProperty (GProperty HasInfo) | SProperty (GProperty NoInfo)
+
+ data GProperty i where
+ GIProperty :: Desc -> Propellor Result -> Info -> GProperty HasInfo
+ GSProperty :: Desc -> Propellor Result -> GProperty NoInfo
+
+ ensureProperty :: GProperty NoInfo -> Propellor Result
+ ensureProperty (GSProperty d r) = r
+
+That works. I made a `gadtwip` git branch that elaborated on that,
+to the point that Property.File compiles, but is otherwise
+unfinished. Most definitions of `Property` need to be changed to
+`GProperty NoInfo`, so that ensureProperty can call them. It's a big,
+intrusive change, and it may complicate propellor too much.
+
+I've tried to make this change a couple times now, and not been completely
+successful so far.
+
+(I may need to make instances of Prop for `GProperty NoInfo` and `GProperty
+HasInfo`, if that's possible, and make more Property combinators work on
+Prop.)
diff --git a/doc/todo/lxc_containers_support.mdwn b/doc/todo/lxc_containers_support.mdwn
new file mode 100644
index 00000000..5e9da306
--- /dev/null
+++ b/doc/todo/lxc_containers_support.mdwn
@@ -0,0 +1 @@
+Adding lxc containers support would be great, as an alternative to docker, chroot, or systemd containers.
diff --git a/doc/todo/port_info_for_properties_for_firewall.mdwn b/doc/todo/port_info_for_properties_for_firewall.mdwn
new file mode 100644
index 00000000..efaaba05
--- /dev/null
+++ b/doc/todo/port_info_for_properties_for_firewall.mdwn
@@ -0,0 +1,24 @@
+The firewall module could be improved if properties that set up a service
+on a port included info (see Propellor.Info and Propellor.Types.Info)
+about the port(s) used.
+
+While currently the ports have to be explicitly listed:
+
+ & Apache.installed
+ & Firewall.installed
+ & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 80))
+ & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 443))
+
+Instead the ports would be derived from the installed services.
+
+ & Apache.installed
+ & Firewall.installed
+
+There could also be some combinators to adjust the exposed
+ports of a property.
+
+ & localOnly Apache.installed
+ & exposedPorts [443,80] (Apt.serviceInstalledRunning "apache2")
+
+Such port enformation is also going to be needed as a basis of
+[[type_level_port_conflict_detection]]. --[[Joey]]
diff --git a/doc/todo/type_level_port_conflict_detection.mdwn b/doc/todo/type_level_port_conflict_detection.mdwn
new file mode 100644
index 00000000..5aec5775
--- /dev/null
+++ b/doc/todo/type_level_port_conflict_detection.mdwn
@@ -0,0 +1,5 @@
+See <http://stackoverflow.com/questions/26027765/using-types-to-prevent-conflicting-port-numbers-in-a-list> --[[Joey]]
+
+Needs ghc newer than 7.6.3. It may be possible to port Data.Type.Equality
+and Data.Type.Bool to older versions; I got them to compile but they didn't
+work right. --[[Joey]]
diff --git a/privdata.joey/keyring.gpg b/privdata.joey/keyring.gpg
deleted file mode 100644
index 01dd24e7..00000000
--- a/privdata.joey/keyring.gpg
+++ /dev/null
Binary files differ
diff --git a/privdata.joey/privdata.gpg b/privdata.joey/privdata.gpg
deleted file mode 100644
index e29b5cf8..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,1199 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-=oizW
------END PGP MESSAGE-----
diff --git a/src/Propellor/PrivData/Paths.hs b/src/Propellor/PrivData/Paths.hs
index 9f791b76..3d0d8a58 100644
--- a/src/Propellor/PrivData/Paths.hs
+++ b/src/Propellor/PrivData/Paths.hs
@@ -3,7 +3,7 @@ module Propellor.PrivData.Paths where
import System.FilePath
privDataDir :: FilePath
-privDataDir = "privdata.joey"
+privDataDir = "privdata"
privDataFile :: FilePath
privDataFile = privDataDir </> "privdata.gpg"