git.fiddlerwoaroof.com
Ed Langley authored on 09/03/2018 19:17:06
Showing 6 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,13 @@
1
+/target
2
+/classes
3
+/checkouts
4
+pom.xml
5
+pom.xml.asc
6
+*.jar
7
+*.class
8
+/.lein-*
9
+/.nrepl-history
10
+/.nrepl-port
11
+.hgignore
12
+.hg/
13
+*~
0 14
new file mode 100644
... ...
@@ -0,0 +1,24 @@
1
+# Change Log
2
+All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).
3
+
4
+## [Unreleased]
5
+### Changed
6
+- Add a new arity to `make-widget-async` to provide a different widget shape.
7
+
8
+## [0.1.1] - 2018-02-22
9
+### Changed
10
+- Documentation on how to make the widgets.
11
+
12
+### Removed
13
+- `make-widget-sync` - we're all async, all the time.
14
+
15
+### Fixed
16
+- Fixed widget maker to keep working when daylight savings switches over.
17
+
18
+## 0.1.0 - 2018-02-22
19
+### Added
20
+- Files from the new template.
21
+- Widget maker public API - `make-widget-sync`.
22
+
23
+[Unreleased]: https://github.com/your-name/my-infra/compare/0.1.1...HEAD
24
+[0.1.1]: https://github.com/your-name/my-infra/compare/0.1.0...0.1.1
0 25
new file mode 100644
... ...
@@ -0,0 +1,214 @@
1
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
2
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
3
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
4
+
5
+1. DEFINITIONS
6
+
7
+"Contribution" means:
8
+
9
+a) in the case of the initial Contributor, the initial code and
10
+documentation distributed under this Agreement, and
11
+
12
+b) in the case of each subsequent Contributor:
13
+
14
+i) changes to the Program, and
15
+
16
+ii) additions to the Program;
17
+
18
+where such changes and/or additions to the Program originate from and are
19
+distributed by that particular Contributor. A Contribution 'originates' from
20
+a Contributor if it was added to the Program by such Contributor itself or
21
+anyone acting on such Contributor's behalf. Contributions do not include
22
+additions to the Program which: (i) are separate modules of software
23
+distributed in conjunction with the Program under their own license
24
+agreement, and (ii) are not derivative works of the Program.
25
+
26
+"Contributor" means any person or entity that distributes the Program.
27
+
28
+"Licensed Patents" mean patent claims licensable by a Contributor which are
29
+necessarily infringed by the use or sale of its Contribution alone or when
30
+combined with the Program.
31
+
32
+"Program" means the Contributions distributed in accordance with this
33
+Agreement.
34
+
35
+"Recipient" means anyone who receives the Program under this Agreement,
36
+including all Contributors.
37
+
38
+2. GRANT OF RIGHTS
39
+
40
+a) Subject to the terms of this Agreement, each Contributor hereby grants
41
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
42
+reproduce, prepare derivative works of, publicly display, publicly perform,
43
+distribute and sublicense the Contribution of such Contributor, if any, and
44
+such derivative works, in source code and object code form.
45
+
46
+b) Subject to the terms of this Agreement, each Contributor hereby grants
47
+Recipient a non-exclusive, worldwide, royalty-free patent license under
48
+Licensed Patents to make, use, sell, offer to sell, import and otherwise
49
+transfer the Contribution of such Contributor, if any, in source code and
50
+object code form.  This patent license shall apply to the combination of the
51
+Contribution and the Program if, at the time the Contribution is added by the
52
+Contributor, such addition of the Contribution causes such combination to be
53
+covered by the Licensed Patents. The patent license shall not apply to any
54
+other combinations which include the Contribution. No hardware per se is
55
+licensed hereunder.
56
+
57
+c) Recipient understands that although each Contributor grants the licenses
58
+to its Contributions set forth herein, no assurances are provided by any
59
+Contributor that the Program does not infringe the patent or other
60
+intellectual property rights of any other entity. Each Contributor disclaims
61
+any liability to Recipient for claims brought by any other entity based on
62
+infringement of intellectual property rights or otherwise. As a condition to
63
+exercising the rights and licenses granted hereunder, each Recipient hereby
64
+assumes sole responsibility to secure any other intellectual property rights
65
+needed, if any. For example, if a third party patent license is required to
66
+allow Recipient to distribute the Program, it is Recipient's responsibility
67
+to acquire that license before distributing the Program.
68
+
69
+d) Each Contributor represents that to its knowledge it has sufficient
70
+copyright rights in its Contribution, if any, to grant the copyright license
71
+set forth in this Agreement.
72
+
73
+3. REQUIREMENTS
74
+
75
+A Contributor may choose to distribute the Program in object code form under
76
+its own license agreement, provided that:
77
+
78
+a) it complies with the terms and conditions of this Agreement; and
79
+
80
+b) its license agreement:
81
+
82
+i) effectively disclaims on behalf of all Contributors all warranties and
83
+conditions, express and implied, including warranties or conditions of title
84
+and non-infringement, and implied warranties or conditions of merchantability
85
+and fitness for a particular purpose;
86
+
87
+ii) effectively excludes on behalf of all Contributors all liability for
88
+damages, including direct, indirect, special, incidental and consequential
89
+damages, such as lost profits;
90
+
91
+iii) states that any provisions which differ from this Agreement are offered
92
+by that Contributor alone and not by any other party; and
93
+
94
+iv) states that source code for the Program is available from such
95
+Contributor, and informs licensees how to obtain it in a reasonable manner on
96
+or through a medium customarily used for software exchange.
97
+
98
+When the Program is made available in source code form:
99
+
100
+a) it must be made available under this Agreement; and
101
+
102
+b) a copy of this Agreement must be included with each copy of the Program.
103
+
104
+Contributors may not remove or alter any copyright notices contained within
105
+the Program.
106
+
107
+Each Contributor must identify itself as the originator of its Contribution,
108
+if any, in a manner that reasonably allows subsequent Recipients to identify
109
+the originator of the Contribution.
110
+
111
+4. COMMERCIAL DISTRIBUTION
112
+
113
+Commercial distributors of software may accept certain responsibilities with
114
+respect to end users, business partners and the like. While this license is
115
+intended to facilitate the commercial use of the Program, the Contributor who
116
+includes the Program in a commercial product offering should do so in a
117
+manner which does not create potential liability for other Contributors.
118
+Therefore, if a Contributor includes the Program in a commercial product
119
+offering, such Contributor ("Commercial Contributor") hereby agrees to defend
120
+and indemnify every other Contributor ("Indemnified Contributor") against any
121
+losses, damages and costs (collectively "Losses") arising from claims,
122
+lawsuits and other legal actions brought by a third party against the
123
+Indemnified Contributor to the extent caused by the acts or omissions of such
124
+Commercial Contributor in connection with its distribution of the Program in
125
+a commercial product offering.  The obligations in this section do not apply
126
+to any claims or Losses relating to any actual or alleged intellectual
127
+property infringement. In order to qualify, an Indemnified Contributor must:
128
+a) promptly notify the Commercial Contributor in writing of such claim, and
129
+b) allow the Commercial Contributor tocontrol, and cooperate with the
130
+Commercial Contributor in, the defense and any related settlement
131
+negotiations. The Indemnified Contributor may participate in any such claim
132
+at its own expense.
133
+
134
+For example, a Contributor might include the Program in a commercial product
135
+offering, Product X. That Contributor is then a Commercial Contributor. If
136
+that Commercial Contributor then makes performance claims, or offers
137
+warranties related to Product X, those performance claims and warranties are
138
+such Commercial Contributor's responsibility alone. Under this section, the
139
+Commercial Contributor would have to defend claims against the other
140
+Contributors related to those performance claims and warranties, and if a
141
+court requires any other Contributor to pay any damages as a result, the
142
+Commercial Contributor must pay those damages.
143
+
144
+5. NO WARRANTY
145
+
146
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
147
+AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
148
+EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
149
+CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
150
+PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
151
+appropriateness of using and distributing the Program and assumes all risks
152
+associated with its exercise of rights under this Agreement , including but
153
+not limited to the risks and costs of program errors, compliance with
154
+applicable laws, damage to or loss of data, programs or equipment, and
155
+unavailability or interruption of operations.
156
+
157
+6. DISCLAIMER OF LIABILITY
158
+
159
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
160
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
161
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
162
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
163
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
164
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
165
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
166
+OF SUCH DAMAGES.
167
+
168
+7. GENERAL
169
+
170
+If any provision of this Agreement is invalid or unenforceable under
171
+applicable law, it shall not affect the validity or enforceability of the
172
+remainder of the terms of this Agreement, and without further action by the
173
+parties hereto, such provision shall be reformed to the minimum extent
174
+necessary to make such provision valid and enforceable.
175
+
176
+If Recipient institutes patent litigation against any entity (including a
177
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
178
+(excluding combinations of the Program with other software or hardware)
179
+infringes such Recipient's patent(s), then such Recipient's rights granted
180
+under Section 2(b) shall terminate as of the date such litigation is filed.
181
+
182
+All Recipient's rights under this Agreement shall terminate if it fails to
183
+comply with any of the material terms or conditions of this Agreement and
184
+does not cure such failure in a reasonable period of time after becoming
185
+aware of such noncompliance. If all Recipient's rights under this Agreement
186
+terminate, Recipient agrees to cease use and distribution of the Program as
187
+soon as reasonably practicable. However, Recipient's obligations under this
188
+Agreement and any licenses granted by Recipient relating to the Program shall
189
+continue and survive.
190
+
191
+Everyone is permitted to copy and distribute copies of this Agreement, but in
192
+order to avoid inconsistency the Agreement is copyrighted and may only be
193
+modified in the following manner. The Agreement Steward reserves the right to
194
+publish new versions (including revisions) of this Agreement from time to
195
+time. No one other than the Agreement Steward has the right to modify this
196
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
197
+Eclipse Foundation may assign the responsibility to serve as the Agreement
198
+Steward to a suitable separate entity. Each new version of the Agreement will
199
+be given a distinguishing version number. The Program (including
200
+Contributions) may always be distributed subject to the version of the
201
+Agreement under which it was received. In addition, after a new version of
202
+the Agreement is published, Contributor may elect to distribute the Program
203
+(including its Contributions) under the new version. Except as expressly
204
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
205
+licenses to the intellectual property of any Contributor under this
206
+Agreement, whether expressly, by implication, estoppel or otherwise. All
207
+rights in the Program not expressly granted under this Agreement are
208
+reserved.
209
+
210
+This Agreement is governed by the laws of the State of New York and the
211
+intellectual property laws of the United States of America. No party to this
212
+Agreement will bring a legal action under this Agreement more than one year
213
+after the cause of action arose. Each party waives its rights to a jury trial
214
+in any resulting litigation.
0 215
new file mode 100644
... ...
@@ -0,0 +1,50 @@
1
+# my-infra
2
+
3
+FIXME: description
4
+
5
+## Installation
6
+
7
+Download from http://example.com/FIXME.
8
+
9
+## Usage
10
+
11
+FIXME: explanation
12
+
13
+Run the project directly:
14
+
15
+    $ boot run
16
+
17
+Run the project's tests (they'll fail until you edit them):
18
+
19
+    $ boot test
20
+
21
+Build an uberjar from the project:
22
+
23
+    $ boot build
24
+
25
+Run the uberjar:
26
+
27
+    $ java -jar target/my-infra-0.1.0-SNAPSHOT-standalone.jar [args]
28
+
29
+## Options
30
+
31
+FIXME: listing of options this app accepts.
32
+
33
+## Examples
34
+
35
+...
36
+
37
+### Bugs
38
+
39
+...
40
+
41
+### Any Other Sections
42
+### That You Think
43
+### Might be Useful
44
+
45
+## License
46
+
47
+Copyright © 2018 FIXME
48
+
49
+Distributed under the Eclipse Public License either version 1.0 or (at
50
+your option) any later version.
0 51
new file mode 100644
... ...
@@ -0,0 +1,46 @@
1
+(def project 'my-infra)
2
+(def version "0.1.0-SNAPSHOT")
3
+
4
+(set-env! :resource-paths #{"resources" "src"}
5
+          :source-paths   #{"test"}
6
+          :dependencies   '[[org.clojure/clojure "RELEASE"]
7
+                            [samestep/boot-refresh "0.1.0"]
8
+                            [adzerk/boot-test "RELEASE" :scope "test"]
9
+                            [amazonica "0.3.120"]])
10
+
11
+(task-options!
12
+ aot {:namespace   #{'my-infra.core}}
13
+ pom {:project     project
14
+      :version     version
15
+      :description "FIXME: write description"
16
+      :url         "http://example/FIXME"
17
+      :scm         {:url "https://github.com/yourname/correlation-learning"}
18
+      :license     {"Eclipse Public License"
19
+                    "http://www.eclipse.org/legal/epl-v10.html"}}
20
+ jar {:main        'my-infra.core
21
+      :file        (str "my-infra-" version "-standalone.jar")})
22
+
23
+(require '[samestep.boot-refresh :refer [refresh]])
24
+(require '[adzerk.boot-test :refer [test]])
25
+
26
+(deftask build
27
+  "Build the project locally as a JAR."
28
+  [d dir PATH #{str} "the set of directories to write to (target)."]
29
+  (let [dir (if (seq dir) dir #{"target"})]
30
+    (comp (aot) (pom) (uber) (jar) (target :dir dir))))
31
+
32
+(deftask dev []
33
+  (comp (watch :verbose true)
34
+        #_(repl :server true)
35
+        (refresh)
36
+        (speak)
37
+        (build)
38
+        #_(test)))
39
+
40
+(deftask run
41
+  "Run the project."
42
+  [a args ARG [str] "the arguments for the application."]
43
+  (require '[my-infra.core :as app])
44
+  (apply (resolve 'app/-main) args))
45
+
46
+(require '[adzerk.boot-test :refer [test]])
0 47
new file mode 100644
... ...
@@ -0,0 +1,171 @@
1
+(ns my-infra.core
2
+  (:use [amazonica.aws.ec2])
3
+  (:gen-class))
4
+
5
+(defn mapply [f & args]
6
+  (apply f (apply concat (butlast args) (last args))))
7
+
8
+(defn ^:private id-dispatch-fn [type descriptor]
9
+  type)
10
+
11
+(defmulti id
12
+  #'id-dispatch-fn)
13
+
14
+(defmethod id ::vpc [_ thing]
15
+  (:vpc-id thing))
16
+
17
+(defmethod id ::internet-gateway [_ thing]
18
+  (:internet-gateway-id thing))
19
+           
20
+(defmethod id ::subnet [_ thing]
21
+  (:subnet-id thing))
22
+           
23
+(defmethod id ::route-table [_ thing]
24
+  (:route-table-id thing))
25
+
26
+(defn ^:private create-dispatch-fn [a & r]
27
+  (::type a))
28
+
29
+(defn ^:private params-dispatch-fn [a & r]
30
+  (::type a))
31
+
32
+(defmulti params
33
+  #'params-dispatch-fn)
34
+
35
+(defmulti create 
36
+  #'create-dispatch-fn)
37
+
38
+(defn unwrap [thing]
39
+  (dissoc thing ::type))
40
+
41
+(defmethod create ::vpc [thing cred & r]
42
+  (:vpc (mapply create-vpc cred
43
+                (unwrap thing))))
44
+
45
+(defmethod create ::subnet [thing cred vpc & r]
46
+  (:subnet (mapply create-subnet cred
47
+                   (assoc (unwrap thing)
48
+                          :vpc-id (id ::vpc vpc)))))
49
+
50
+(defmethod create ::route-table [thing cred vpc & r]
51
+  (:route-table (mapply create-route-table cred
52
+                        (assoc (unwrap thing)
53
+                               :vpc-id (id ::vpc vpc)))))
54
+
55
+(defmethod create ::route [thing cred route-table & r]
56
+  (:route (mapply create-route cred
57
+                  (assoc (unwrap thing)
58
+                         :route-table-id (id ::route-table route-table)))))
59
+
60
+(defmethod create ::internet-gateway [thing cred vpc & r]
61
+  (let [result (:internet-gateway (mapply create-internet-gateway cred
62
+                                          (unwrap thing)))]
63
+    (println (attach-internet-gateway cred
64
+                                      :internet-gateway-id (id ::internet-gateway result)
65
+                                      :vpc-id (id ::vpc vpc)))
66
+    result))
67
+
68
+(def cred {:profile "personal"
69
+           :endpoint "us-west-2"})
70
+
71
+(defmethod params ::my-vpc [thing & r]
72
+  {:cidr-block "172.16.234.0/24"})
73
+
74
+(defmethod params ::my-subnet [thing vpc & r]
75
+  {:vpc-id (id ::vpc vpc)
76
+   :cidr-block "172.16.234.0/25"
77
+   :associate-public-ip-address true})
78
+
79
+(defmethod params ::my-route-table [thing vpc & r]
80
+  {:vpc-id (id ::vpc vpc)})
81
+
82
+(defmulti route-type identity)
83
+(defmethod route-type ::internet-gateway [_] :gateway-id)
84
+
85
+(defn make-routes [route-table cred vpc subnet & routes]
86
+  (clojure.pprint/pprint routes)
87
+  (doall
88
+   (map (fn [[destination target-type target :as first] other]
89
+          (create {::type ::route
90
+                   :destination-cidr-block destination
91
+                   (route-type target-type) (id target-type target)}
92
+                  route-table))
93
+        routes))
94
+  (associate-route-table cred
95
+                         :route-table-id (id ::route-table route-table)
96
+                         :subnet-id (id ::subnet subnet))
97
+  route-table)
98
+
99
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
100
+;; new-api
101
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
102
+
103
+(def vpc (create {::type ::vpc
104
+                  :cidr-block "10.1.0.0/16"}
105
+                 cred))
106
+
107
+(def subnet (create {::type ::subnet
108
+                     :cidr-block "10.1.1.0/24"
109
+                     :associate-public-ip-address true}
110
+                    cred
111
+                    vpc))
112
+
113
+(def internet-gateway (create {::type ::internet-gateway}
114
+                              cred
115
+                              vpc))
116
+
117
+(def route-table (make-routes {::type ::my-route-table}
118
+                              cred vpc subnet
119
+                              ["0.0.0.0/0" ::internet-gateway internet-gateway]))
120
+
121
+(defn -main
122
+  "I don't do a whole lot ... yet."
123
+  [& args]
124
+  (println "Hello, World!"))
125
+
126
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
127
+;; old-api
128
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
129
+;; 
130
+;; (derive ::my-vpc ::vpc)
131
+;; (derive ::my-subnet ::subnet)
132
+;; (derive ::my-internet-gateway ::internet-gateway)
133
+;; (derive ::my-route-table ::route-table)
134
+;; 
135
+;; 
136
+;; (def vpc (create ::my-vpc cred))
137
+;; 
138
+;; (def subnet (create ::my-subnet cred vpc))
139
+;; 
140
+;; (def internet-gateway (create ::my-internet-gateway cred vpc))
141
+;; 
142
+;; (def route-table (make-routes ::my-route-table cred vpc subnet
143
+;;                               ["0.0.0.0/0" ::internet-gateway internet-gateway]))
144
+;; 
145
+;; (def init
146
+;;   "#!/bin/bash
147
+;;   cd /home/admin
148
+;;   umask 077
149
+;;   mkdir -p .ssh
150
+;;   cd .ssh
151
+;;   echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB//SW/+2QPkeDh6qvXFymOAyxjL+Cq9QBWgnZrZT/Qx edwlan@srv2' > authorized_keys
152
+;;   ping -c 3 srv2.elangley.org
153
+;;   curl https://srv2.elangley.org/~edwlan/.well-known/ssh/authorized_keys | tee -a authorized_keys
154
+;;   ssh-keygen -t ed25519 -f id_ed25519 -N ''
155
+;;   export DEBIAN_FRONTEND=noninteractive
156
+;;   apt-get install -yq encfs
157
+;;   apt-get install -yq postfix postfix-pgsql
158
+;;   apt-get install -yq dovecot-core dovecot-imapd dovecot-mysql mysql-server dovecot-lmtpd
159
+;;   ")
160
+;; 
161
+;; (def vms
162
+;;   (run-instances cred
163
+;;                  :image-id "ami-71d8820b"
164
+;;                  :instance-type "t2.micro"
165
+;;                  :min-count 1
166
+;;                  :max-count 1
167
+;;                  :user-data (encode init)
168
+;;                  :network-interfaces [{:device-index 0
169
+;;                                        :subnet-id (id ::subnet subnet)
170
+;;                                        :associate-public-ip-address true}]))
171
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;