├── .gitignore ├── LICENSE ├── README.md ├── coreos-vagrant-cluster-gui.png └── src ├── CoreOS Cluster GUI.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── CoreOS Cluster GUI ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ └── MainMenu.xib ├── CoreOS Cluster GUI-Info.plist ├── CoreOS Cluster GUI-Prefix.pch ├── CoreOS Cluster GUI.entitlements ├── Images.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── en.lproj │ ├── Credits.rtf │ └── InfoPlist.strings └── main.m ├── Vagrantfiles ├── user-data.control └── user-data.node ├── change_release_channel.command ├── coreos-vagrant-install.command ├── coreos-vagrant.command ├── coreos-wordmark-horiz-color.png ├── coreos-wordmark-vert-color.png ├── first-init (Mac mini's conflicted copy 2015-06-02).command ├── first-init.command ├── fleet └── fleet-ui.service ├── force_coreos_update.command ├── gsed ├── icon.icns ├── icon.png ├── os_shell.command ├── update.command ├── update_vbox.command ├── vagrant_control1.command ├── vagrant_destroy.command ├── vagrant_node1.command ├── vagrant_node2.command ├── vagrant_reload.command ├── vagrant_up.command └── wget /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | # Pods/ 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CoreOS-Vagrant Cluster for OS X 2 | ============================ 3 | 4 | CoreOS-Vagrant Cluster GUI for Mac OS X is a Mac Status bar App which works like a wrapper around the [coreos-vagrant](https://github.com/coreos/coreos-vagrant) command line tool and bootstraps CoreOS cluster with one control (etcd) and two worker machines. Flannel network is set too. 5 | 6 | [CoreOS](https://coreos.com) is a Linux distribution made specifically to run [Docker](https://www.docker.io/) containers. 7 | [CoreOS-Vagrant](https://github.com/coreos/coreos-vagrant) is made to run on VirtualBox and VMWare VMs. 8 | 9 | ![CoreOS-Vagrant-Cluster-GUI](coreos-vagrant-cluster-gui.png "CoreOS-Vagrant-Cluster-GUI") 10 | 11 | Download 12 | -------- 13 | Head over to the [Releases Page](https://github.com/rimusz/coreos-osx-gui-cluster/releases) to grab the latest release. 14 | 15 | 16 | How to install 17 | ---------- 18 | 19 | Required software 20 | * [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [Vagrant](http://www.vagrantup.com/downloads.html) and [iTerm 2](http://www.iterm2.com/#/section/downloads) 21 | 22 | * Download `CoreOS Cluster GUI latest.zip` from the [Releases Page](https://github.com/rimusz/coreos-osx-gui-cluster/releases) and unzip it. 23 | * Start the `CoreOS Cluster GUI` and from menu `Setup` choose `Initial setup of CoreOS-Vagrant Cluster` 24 | * The install will do the following: 25 | ```` 26 | 1) All dependent files/folders will be put under 'coreos-osx-cluster' folder in the user's 27 | home folder e.g '/Users/someuser/coreos-osx-cluster' 28 | 2) Will clone latest coreos-vagrant from git 29 | 3) user-data file will have fleet, etcd and 'reboot off' set 30 | 4) control (etcd) machine will be set with IP `172.17.9.101` and two cluster nodes with IPs: `172.17.9.102 and 172.17.9.103` 31 | 5) Will download and install fleetctl and etcdctl clients to ~/coreos-osx-cluster/bin/ 32 | 6) Will download latest vagrant VBox and run vagrant up to initialise VM 33 | ```` 34 | 35 | How it works 36 | ------------ 37 | 38 | Just start `CoreOS Cluster GUI` application and you will find a small icon with the CoreOS logo with the (C) which means for cluster in the Status Bar. 39 | 40 | * There you can `Up`, `Suspend`, `Halt`, `Reload` CoreOS vagrant VMs 41 | * Under `Up' and 'OS shell` OS Shell will have such environment set: 42 | ```` 43 | 1) Path to ~/coreos-osx-cluster/bin where etcdclt and fleetctl binaries are stored 44 | 2) etcd endpoint - export ETCDCTL_PEERS=http://172.17.9.101:4001 45 | 3) fleetctl endpoint - export FLEETCTL_ENDPOINT=http://172.17.9.101:4001 46 | ```` 47 | 48 | * `SSH to control-01 and node-01/02` menu options will open VM shells. 49 | * Updates/Update OS X fleetctl and etcdclt will update fleetctl, etcdclt clients to the same versions as CoreOS VMs run. 50 | * Updates/Force CoreOS update will be run sudo update_engine_client -update on each CoreOS VM. 51 | * Updates/Check updates for CoreOS vbox will update CoreOS VM vagrant box. 52 | * [Fleet-UI](http://fleetui.com) dashboard will show running fleet units and etc 53 | 54 | 55 | Other Apps 56 | ----------- 57 | * Standalone CoreOS VM version of OS X App can be found here [CoreOS-OSX](https://github.com/rimusz/coreos-osx). 58 | * Kubernetes Solo Cluster VM App can be found here [Kube Solo](https://github.com/rimusz/kube-solo-osx) 59 | * Kubernetes Solo Vagrant based Cluster VM App can be found here [CoreOS-Vagrant Kubernetes Solo](https://github.com/rimusz/coreos-osx-kubernetes-solo) 60 | * Kubernetes Cluster one CoreOS VM of OS X App can be found here [CoreOS-Vagrant Kubernetes Cluster](https://github.com/rimusz/coreos-osx-kubernetes-cluster). 61 | -------------------------------------------------------------------------------- /coreos-vagrant-cluster-gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/coreos-vagrant-cluster-gui.png -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 47; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 011BBA301A2A6E2500AAB35B /* coreos-wordmark-horiz-color.png in Resources */ = {isa = PBXBuildFile; fileRef = 011BBA2E1A2A6E2500AAB35B /* coreos-wordmark-horiz-color.png */; }; 11 | 011BBA311A2A6E2500AAB35B /* coreos-wordmark-vert-color.png in Resources */ = {isa = PBXBuildFile; fileRef = 011BBA2F1A2A6E2500AAB35B /* coreos-wordmark-vert-color.png */; }; 12 | 011BBA391A2A829F00AAB35B /* vagrant_destroy.command in Resources */ = {isa = PBXBuildFile; fileRef = 011BBA381A2A829F00AAB35B /* vagrant_destroy.command */; }; 13 | 011BBA3B1A2A842A00AAB35B /* change_release_channel.command in Resources */ = {isa = PBXBuildFile; fileRef = 011BBA3A1A2A842A00AAB35B /* change_release_channel.command */; }; 14 | 011BBA3F1A2A94A100AAB35B /* vagrant_reload.command in Resources */ = {isa = PBXBuildFile; fileRef = 011BBA3E1A2A94A100AAB35B /* vagrant_reload.command */; }; 15 | 01294B371A7FAB1900762B9E /* os_shell.command in Resources */ = {isa = PBXBuildFile; fileRef = 01294B361A7FAB1900762B9E /* os_shell.command */; }; 16 | 0145318418FF209D007F9C95 /* coreos-vagrant.command in Resources */ = {isa = PBXBuildFile; fileRef = 0145318318FF209D007F9C95 /* coreos-vagrant.command */; }; 17 | 016A37F11A3F96710062386D /* fleet in Resources */ = {isa = PBXBuildFile; fileRef = 016A37F01A3F96710062386D /* fleet */; }; 18 | 01741B57190DB7B800BB1F91 /* coreos-vagrant-install.command in Resources */ = {isa = PBXBuildFile; fileRef = 01741B56190DB7B800BB1F91 /* coreos-vagrant-install.command */; }; 19 | 01741B63190DB80500BB1F91 /* first-init.command in Resources */ = {isa = PBXBuildFile; fileRef = 01741B62190DB80500BB1F91 /* first-init.command */; }; 20 | 01741B65190DB81400BB1F91 /* vagrant_up.command in Resources */ = {isa = PBXBuildFile; fileRef = 01741B64190DB81400BB1F91 /* vagrant_up.command */; }; 21 | 01741B67190DB82100BB1F91 /* update.command in Resources */ = {isa = PBXBuildFile; fileRef = 01741B66190DB82100BB1F91 /* update.command */; }; 22 | 01A496AC1B1E607C00F12072 /* update_vbox.command in Resources */ = {isa = PBXBuildFile; fileRef = 01A496AB1B1E607C00F12072 /* update_vbox.command */; }; 23 | 01AD94B81A277708009A400B /* gsed in Resources */ = {isa = PBXBuildFile; fileRef = 01AD94B71A277708009A400B /* gsed */; }; 24 | 01AD94BF1A278C94009A400B /* force_coreos_update.command in Resources */ = {isa = PBXBuildFile; fileRef = 01AD94BE1A278C94009A400B /* force_coreos_update.command */; }; 25 | 01D3685918E5C184006510B5 /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 01D3685818E5C184006510B5 /* icon.icns */; }; 26 | 01E2853E18A6C4E300BC630D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01E2853D18A6C4E300BC630D /* Cocoa.framework */; }; 27 | 01E2854818A6C4E300BC630D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 01E2854618A6C4E300BC630D /* InfoPlist.strings */; }; 28 | 01E2854A18A6C4E300BC630D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E2854918A6C4E300BC630D /* main.m */; }; 29 | 01E2854E18A6C4E300BC630D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 01E2854C18A6C4E300BC630D /* Credits.rtf */; }; 30 | 01E2855118A6C4E300BC630D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E2855018A6C4E300BC630D /* AppDelegate.m */; }; 31 | 01E2855418A6C4E300BC630D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 01E2855218A6C4E300BC630D /* MainMenu.xib */; }; 32 | 01E2855618A6C4E300BC630D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01E2855518A6C4E300BC630D /* Images.xcassets */; }; 33 | 01E285B818A6D7F400BC630D /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E285B718A6D7F400BC630D /* icon.png */; }; 34 | 01F83FF21A803BA900961E07 /* vagrant_control1.command in Resources */ = {isa = PBXBuildFile; fileRef = 01F83FEF1A803BA900961E07 /* vagrant_control1.command */; }; 35 | 01F83FF31A803BA900961E07 /* vagrant_node1.command in Resources */ = {isa = PBXBuildFile; fileRef = 01F83FF01A803BA900961E07 /* vagrant_node1.command */; }; 36 | 01F83FF41A803BA900961E07 /* vagrant_node2.command in Resources */ = {isa = PBXBuildFile; fileRef = 01F83FF11A803BA900961E07 /* vagrant_node2.command */; }; 37 | 01F83FF61A803BB800961E07 /* wget in Resources */ = {isa = PBXBuildFile; fileRef = 01F83FF51A803BB800961E07 /* wget */; }; 38 | 01F83FFA1A803C2F00961E07 /* Vagrantfiles in Resources */ = {isa = PBXBuildFile; fileRef = 01F83FF91A803C2F00961E07 /* Vagrantfiles */; }; 39 | /* End PBXBuildFile section */ 40 | 41 | /* Begin PBXFileReference section */ 42 | 011BBA2E1A2A6E2500AAB35B /* coreos-wordmark-horiz-color.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "coreos-wordmark-horiz-color.png"; sourceTree = ""; }; 43 | 011BBA2F1A2A6E2500AAB35B /* coreos-wordmark-vert-color.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "coreos-wordmark-vert-color.png"; sourceTree = ""; }; 44 | 011BBA381A2A829F00AAB35B /* vagrant_destroy.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_destroy.command; sourceTree = ""; }; 45 | 011BBA3A1A2A842A00AAB35B /* change_release_channel.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = change_release_channel.command; sourceTree = ""; }; 46 | 011BBA3E1A2A94A100AAB35B /* vagrant_reload.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_reload.command; sourceTree = ""; }; 47 | 01294B361A7FAB1900762B9E /* os_shell.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = os_shell.command; sourceTree = ""; }; 48 | 0133608F18A70E0C0024B1CB /* CoreOS Cluster GUI.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "CoreOS Cluster GUI.entitlements"; sourceTree = ""; }; 49 | 0145318318FF209D007F9C95 /* coreos-vagrant.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "coreos-vagrant.command"; sourceTree = ""; }; 50 | 016A37F01A3F96710062386D /* fleet */ = {isa = PBXFileReference; lastKnownFileType = folder; path = fleet; sourceTree = SOURCE_ROOT; }; 51 | 01741B56190DB7B800BB1F91 /* coreos-vagrant-install.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "coreos-vagrant-install.command"; sourceTree = SOURCE_ROOT; }; 52 | 01741B62190DB80500BB1F91 /* first-init.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "first-init.command"; sourceTree = SOURCE_ROOT; }; 53 | 01741B64190DB81400BB1F91 /* vagrant_up.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_up.command; sourceTree = SOURCE_ROOT; }; 54 | 01741B66190DB82100BB1F91 /* update.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = update.command; sourceTree = SOURCE_ROOT; }; 55 | 01A496AB1B1E607C00F12072 /* update_vbox.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = update_vbox.command; sourceTree = ""; }; 56 | 01AD94B71A277708009A400B /* gsed */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = gsed; sourceTree = SOURCE_ROOT; }; 57 | 01AD94BE1A278C94009A400B /* force_coreos_update.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = force_coreos_update.command; sourceTree = ""; }; 58 | 01D3685818E5C184006510B5 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = icon.icns; sourceTree = ""; }; 59 | 01E2853A18A6C4E300BC630D /* CoreOS Cluster GUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CoreOS Cluster GUI.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 01E2853D18A6C4E300BC630D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 61 | 01E2854018A6C4E300BC630D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 62 | 01E2854118A6C4E300BC630D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 63 | 01E2854218A6C4E300BC630D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 64 | 01E2854518A6C4E300BC630D /* CoreOS Cluster GUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CoreOS Cluster GUI-Info.plist"; sourceTree = ""; }; 65 | 01E2854718A6C4E300BC630D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 66 | 01E2854918A6C4E300BC630D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 67 | 01E2854B18A6C4E300BC630D /* CoreOS Cluster GUI-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CoreOS Cluster GUI-Prefix.pch"; sourceTree = ""; }; 68 | 01E2854D18A6C4E300BC630D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 69 | 01E2854F18A6C4E300BC630D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 70 | 01E2855018A6C4E300BC630D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 71 | 01E2855318A6C4E300BC630D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 72 | 01E2855518A6C4E300BC630D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 73 | 01E2855C18A6C4E300BC630D /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 74 | 01E285B718A6D7F400BC630D /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = ""; }; 75 | 01F83FEF1A803BA900961E07 /* vagrant_control1.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_control1.command; sourceTree = ""; }; 76 | 01F83FF01A803BA900961E07 /* vagrant_node1.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_node1.command; sourceTree = ""; }; 77 | 01F83FF11A803BA900961E07 /* vagrant_node2.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = vagrant_node2.command; sourceTree = ""; }; 78 | 01F83FF51A803BB800961E07 /* wget */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = wget; sourceTree = SOURCE_ROOT; }; 79 | 01F83FF91A803C2F00961E07 /* Vagrantfiles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Vagrantfiles; sourceTree = SOURCE_ROOT; }; 80 | /* End PBXFileReference section */ 81 | 82 | /* Begin PBXFrameworksBuildPhase section */ 83 | 01E2853718A6C4E300BC630D /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | 01E2853E18A6C4E300BC630D /* Cocoa.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | /* End PBXFrameworksBuildPhase section */ 92 | 93 | /* Begin PBXGroup section */ 94 | 014E6F8B18B63AF700E697C0 /* Installation Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 01F83FF91A803C2F00961E07 /* Vagrantfiles */, 98 | 016A37F01A3F96710062386D /* fleet */, 99 | 01AD94B71A277708009A400B /* gsed */, 100 | 01F83FF51A803BB800961E07 /* wget */, 101 | 01741B56190DB7B800BB1F91 /* coreos-vagrant-install.command */, 102 | 01741B62190DB80500BB1F91 /* first-init.command */, 103 | ); 104 | path = "Installation Files"; 105 | sourceTree = ""; 106 | }; 107 | 01E2853118A6C4E300BC630D = { 108 | isa = PBXGroup; 109 | children = ( 110 | 01E285D018A6F79800BC630D /* Images */, 111 | 01E2854318A6C4E300BC630D /* CoreOS Cluster GUI */, 112 | 014E6F8B18B63AF700E697C0 /* Installation Files */, 113 | 01E285B918A6E23C00BC630D /* Scripts */, 114 | 01E2853C18A6C4E300BC630D /* Frameworks */, 115 | 01E2853B18A6C4E300BC630D /* Products */, 116 | ); 117 | sourceTree = ""; 118 | }; 119 | 01E2853B18A6C4E300BC630D /* Products */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 01E2853A18A6C4E300BC630D /* CoreOS Cluster GUI.app */, 123 | ); 124 | name = Products; 125 | sourceTree = ""; 126 | }; 127 | 01E2853C18A6C4E300BC630D /* Frameworks */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 01E2853D18A6C4E300BC630D /* Cocoa.framework */, 131 | 01E2855C18A6C4E300BC630D /* XCTest.framework */, 132 | 01E2853F18A6C4E300BC630D /* Other Frameworks */, 133 | ); 134 | name = Frameworks; 135 | sourceTree = ""; 136 | }; 137 | 01E2853F18A6C4E300BC630D /* Other Frameworks */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 01E2854018A6C4E300BC630D /* AppKit.framework */, 141 | 01E2854118A6C4E300BC630D /* CoreData.framework */, 142 | 01E2854218A6C4E300BC630D /* Foundation.framework */, 143 | ); 144 | name = "Other Frameworks"; 145 | sourceTree = ""; 146 | }; 147 | 01E2854318A6C4E300BC630D /* CoreOS Cluster GUI */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 0133608F18A70E0C0024B1CB /* CoreOS Cluster GUI.entitlements */, 151 | 01E2854F18A6C4E300BC630D /* AppDelegate.h */, 152 | 01E2855018A6C4E300BC630D /* AppDelegate.m */, 153 | 01E2855218A6C4E300BC630D /* MainMenu.xib */, 154 | 01E2855518A6C4E300BC630D /* Images.xcassets */, 155 | 01E2854418A6C4E300BC630D /* Supporting Files */, 156 | ); 157 | path = "CoreOS Cluster GUI"; 158 | sourceTree = ""; 159 | }; 160 | 01E2854418A6C4E300BC630D /* Supporting Files */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 01E2854518A6C4E300BC630D /* CoreOS Cluster GUI-Info.plist */, 164 | 01E2854618A6C4E300BC630D /* InfoPlist.strings */, 165 | 01E2854918A6C4E300BC630D /* main.m */, 166 | 01E2854B18A6C4E300BC630D /* CoreOS Cluster GUI-Prefix.pch */, 167 | 01E2854C18A6C4E300BC630D /* Credits.rtf */, 168 | ); 169 | name = "Supporting Files"; 170 | sourceTree = ""; 171 | }; 172 | 01E285B918A6E23C00BC630D /* Scripts */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 0145318318FF209D007F9C95 /* coreos-vagrant.command */, 176 | 011BBA3A1A2A842A00AAB35B /* change_release_channel.command */, 177 | 011BBA381A2A829F00AAB35B /* vagrant_destroy.command */, 178 | 01294B361A7FAB1900762B9E /* os_shell.command */, 179 | 01F83FEF1A803BA900961E07 /* vagrant_control1.command */, 180 | 01F83FF01A803BA900961E07 /* vagrant_node1.command */, 181 | 01F83FF11A803BA900961E07 /* vagrant_node2.command */, 182 | 01741B64190DB81400BB1F91 /* vagrant_up.command */, 183 | 011BBA3E1A2A94A100AAB35B /* vagrant_reload.command */, 184 | 01AD94BE1A278C94009A400B /* force_coreos_update.command */, 185 | 01A496AB1B1E607C00F12072 /* update_vbox.command */, 186 | 01741B66190DB82100BB1F91 /* update.command */, 187 | ); 188 | name = Scripts; 189 | sourceTree = ""; 190 | }; 191 | 01E285D018A6F79800BC630D /* Images */ = { 192 | isa = PBXGroup; 193 | children = ( 194 | 011BBA2E1A2A6E2500AAB35B /* coreos-wordmark-horiz-color.png */, 195 | 011BBA2F1A2A6E2500AAB35B /* coreos-wordmark-vert-color.png */, 196 | 01E285B718A6D7F400BC630D /* icon.png */, 197 | 01D3685818E5C184006510B5 /* icon.icns */, 198 | ); 199 | name = Images; 200 | sourceTree = ""; 201 | }; 202 | /* End PBXGroup section */ 203 | 204 | /* Begin PBXNativeTarget section */ 205 | 01E2853918A6C4E300BC630D /* CoreOS Cluster GUI */ = { 206 | isa = PBXNativeTarget; 207 | buildConfigurationList = 01E2856B18A6C4E300BC630D /* Build configuration list for PBXNativeTarget "CoreOS Cluster GUI" */; 208 | buildPhases = ( 209 | 01E2853618A6C4E300BC630D /* Sources */, 210 | 01E2853718A6C4E300BC630D /* Frameworks */, 211 | 01E2853818A6C4E300BC630D /* Resources */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | ); 217 | name = "CoreOS Cluster GUI"; 218 | productName = "CoreOS Cluster GUI"; 219 | productReference = 01E2853A18A6C4E300BC630D /* CoreOS Cluster GUI.app */; 220 | productType = "com.apple.product-type.application"; 221 | }; 222 | /* End PBXNativeTarget section */ 223 | 224 | /* Begin PBXProject section */ 225 | 01E2853218A6C4E300BC630D /* Project object */ = { 226 | isa = PBXProject; 227 | attributes = { 228 | LastUpgradeCheck = 0710; 229 | ORGANIZATIONNAME = "Rimantas Mocevicius"; 230 | TargetAttributes = { 231 | 01E2853918A6C4E300BC630D = { 232 | DevelopmentTeam = 5LVLAZJPH7; 233 | SystemCapabilities = { 234 | com.apple.Sandbox = { 235 | enabled = 0; 236 | }; 237 | }; 238 | }; 239 | }; 240 | }; 241 | buildConfigurationList = 01E2853518A6C4E300BC630D /* Build configuration list for PBXProject "CoreOS Cluster GUI" */; 242 | compatibilityVersion = "Xcode 6.3"; 243 | developmentRegion = English; 244 | hasScannedForEncodings = 0; 245 | knownRegions = ( 246 | en, 247 | Base, 248 | ); 249 | mainGroup = 01E2853118A6C4E300BC630D; 250 | productRefGroup = 01E2853B18A6C4E300BC630D /* Products */; 251 | projectDirPath = ""; 252 | projectRoot = ""; 253 | targets = ( 254 | 01E2853918A6C4E300BC630D /* CoreOS Cluster GUI */, 255 | ); 256 | }; 257 | /* End PBXProject section */ 258 | 259 | /* Begin PBXResourcesBuildPhase section */ 260 | 01E2853818A6C4E300BC630D /* Resources */ = { 261 | isa = PBXResourcesBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | 01E2854818A6C4E300BC630D /* InfoPlist.strings in Resources */, 265 | 01F83FF31A803BA900961E07 /* vagrant_node1.command in Resources */, 266 | 01D3685918E5C184006510B5 /* icon.icns in Resources */, 267 | 01A496AC1B1E607C00F12072 /* update_vbox.command in Resources */, 268 | 01E285B818A6D7F400BC630D /* icon.png in Resources */, 269 | 01AD94BF1A278C94009A400B /* force_coreos_update.command in Resources */, 270 | 0145318418FF209D007F9C95 /* coreos-vagrant.command in Resources */, 271 | 011BBA301A2A6E2500AAB35B /* coreos-wordmark-horiz-color.png in Resources */, 272 | 01741B65190DB81400BB1F91 /* vagrant_up.command in Resources */, 273 | 011BBA391A2A829F00AAB35B /* vagrant_destroy.command in Resources */, 274 | 01E2855618A6C4E300BC630D /* Images.xcassets in Resources */, 275 | 01F83FF21A803BA900961E07 /* vagrant_control1.command in Resources */, 276 | 011BBA3F1A2A94A100AAB35B /* vagrant_reload.command in Resources */, 277 | 01AD94B81A277708009A400B /* gsed in Resources */, 278 | 01741B63190DB80500BB1F91 /* first-init.command in Resources */, 279 | 01741B57190DB7B800BB1F91 /* coreos-vagrant-install.command in Resources */, 280 | 011BBA3B1A2A842A00AAB35B /* change_release_channel.command in Resources */, 281 | 01F83FFA1A803C2F00961E07 /* Vagrantfiles in Resources */, 282 | 011BBA311A2A6E2500AAB35B /* coreos-wordmark-vert-color.png in Resources */, 283 | 01F83FF41A803BA900961E07 /* vagrant_node2.command in Resources */, 284 | 01E2854E18A6C4E300BC630D /* Credits.rtf in Resources */, 285 | 01F83FF61A803BB800961E07 /* wget in Resources */, 286 | 01E2855418A6C4E300BC630D /* MainMenu.xib in Resources */, 287 | 016A37F11A3F96710062386D /* fleet in Resources */, 288 | 01741B67190DB82100BB1F91 /* update.command in Resources */, 289 | 01294B371A7FAB1900762B9E /* os_shell.command in Resources */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | /* End PBXResourcesBuildPhase section */ 294 | 295 | /* Begin PBXSourcesBuildPhase section */ 296 | 01E2853618A6C4E300BC630D /* Sources */ = { 297 | isa = PBXSourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | 01E2855118A6C4E300BC630D /* AppDelegate.m in Sources */, 301 | 01E2854A18A6C4E300BC630D /* main.m in Sources */, 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | /* End PBXSourcesBuildPhase section */ 306 | 307 | /* Begin PBXVariantGroup section */ 308 | 01E2854618A6C4E300BC630D /* InfoPlist.strings */ = { 309 | isa = PBXVariantGroup; 310 | children = ( 311 | 01E2854718A6C4E300BC630D /* en */, 312 | ); 313 | name = InfoPlist.strings; 314 | sourceTree = ""; 315 | }; 316 | 01E2854C18A6C4E300BC630D /* Credits.rtf */ = { 317 | isa = PBXVariantGroup; 318 | children = ( 319 | 01E2854D18A6C4E300BC630D /* en */, 320 | ); 321 | name = Credits.rtf; 322 | sourceTree = ""; 323 | }; 324 | 01E2855218A6C4E300BC630D /* MainMenu.xib */ = { 325 | isa = PBXVariantGroup; 326 | children = ( 327 | 01E2855318A6C4E300BC630D /* Base */, 328 | ); 329 | name = MainMenu.xib; 330 | sourceTree = ""; 331 | }; 332 | /* End PBXVariantGroup section */ 333 | 334 | /* Begin XCBuildConfiguration section */ 335 | 01E2856918A6C4E300BC630D /* Debug */ = { 336 | isa = XCBuildConfiguration; 337 | buildSettings = { 338 | ALWAYS_SEARCH_USER_PATHS = NO; 339 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 340 | CLANG_CXX_LIBRARY = "libc++"; 341 | CLANG_ENABLE_OBJC_ARC = YES; 342 | CLANG_WARN_BOOL_CONVERSION = YES; 343 | CLANG_WARN_CONSTANT_CONVERSION = YES; 344 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 345 | CLANG_WARN_EMPTY_BODY = YES; 346 | CLANG_WARN_ENUM_CONVERSION = YES; 347 | CLANG_WARN_INT_CONVERSION = YES; 348 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 349 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 350 | COPY_PHASE_STRIP = NO; 351 | ENABLE_TESTABILITY = YES; 352 | GCC_C_LANGUAGE_STANDARD = gnu99; 353 | GCC_DYNAMIC_NO_PIC = NO; 354 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 355 | GCC_OPTIMIZATION_LEVEL = 0; 356 | GCC_PREPROCESSOR_DEFINITIONS = ( 357 | "DEBUG=1", 358 | "$(inherited)", 359 | ); 360 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 363 | GCC_WARN_UNDECLARED_SELECTOR = YES; 364 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 365 | GCC_WARN_UNUSED_FUNCTION = YES; 366 | GCC_WARN_UNUSED_VARIABLE = YES; 367 | MACOSX_DEPLOYMENT_TARGET = 10.10; 368 | ONLY_ACTIVE_ARCH = YES; 369 | SDKROOT = macosx; 370 | }; 371 | name = Debug; 372 | }; 373 | 01E2856A18A6C4E300BC630D /* Release */ = { 374 | isa = XCBuildConfiguration; 375 | buildSettings = { 376 | ALWAYS_SEARCH_USER_PATHS = NO; 377 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 378 | CLANG_CXX_LIBRARY = "libc++"; 379 | CLANG_ENABLE_OBJC_ARC = YES; 380 | CLANG_WARN_BOOL_CONVERSION = YES; 381 | CLANG_WARN_CONSTANT_CONVERSION = YES; 382 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 383 | CLANG_WARN_EMPTY_BODY = YES; 384 | CLANG_WARN_ENUM_CONVERSION = YES; 385 | CLANG_WARN_INT_CONVERSION = YES; 386 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 388 | COPY_PHASE_STRIP = YES; 389 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 390 | ENABLE_NS_ASSERTIONS = NO; 391 | GCC_C_LANGUAGE_STANDARD = gnu99; 392 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 393 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 394 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 395 | GCC_WARN_UNDECLARED_SELECTOR = YES; 396 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 397 | GCC_WARN_UNUSED_FUNCTION = YES; 398 | GCC_WARN_UNUSED_VARIABLE = YES; 399 | MACOSX_DEPLOYMENT_TARGET = 10.10; 400 | SDKROOT = macosx; 401 | }; 402 | name = Release; 403 | }; 404 | 01E2856C18A6C4E300BC630D /* Debug */ = { 405 | isa = XCBuildConfiguration; 406 | buildSettings = { 407 | CLANG_ENABLE_OBJC_ARC = YES; 408 | CODE_SIGN_IDENTITY = "Developer ID Application"; 409 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; 410 | COMBINE_HIDPI_IMAGES = YES; 411 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 412 | GCC_PREFIX_HEADER = "CoreOS Cluster GUI/CoreOS Cluster GUI-Prefix.pch"; 413 | INFOPLIST_FILE = "CoreOS Cluster GUI/CoreOS Cluster GUI-Info.plist"; 414 | MACOSX_DEPLOYMENT_TARGET = 10.9; 415 | PRODUCT_BUNDLE_IDENTIFIER = "net.linxos.${PRODUCT_NAME:rfc1034identifier}"; 416 | PRODUCT_NAME = "CoreOS Cluster GUI"; 417 | PROVISIONING_PROFILE = ""; 418 | WRAPPER_EXTENSION = app; 419 | }; 420 | name = Debug; 421 | }; 422 | 01E2856D18A6C4E300BC630D /* Release */ = { 423 | isa = XCBuildConfiguration; 424 | buildSettings = { 425 | CLANG_ENABLE_OBJC_ARC = YES; 426 | CODE_SIGN_IDENTITY = "Developer ID Application"; 427 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; 428 | COMBINE_HIDPI_IMAGES = YES; 429 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 430 | GCC_PREFIX_HEADER = "CoreOS Cluster GUI/CoreOS Cluster GUI-Prefix.pch"; 431 | INFOPLIST_FILE = "CoreOS Cluster GUI/CoreOS Cluster GUI-Info.plist"; 432 | MACOSX_DEPLOYMENT_TARGET = 10.9; 433 | PRODUCT_BUNDLE_IDENTIFIER = "net.linxos.${PRODUCT_NAME:rfc1034identifier}"; 434 | PRODUCT_NAME = "CoreOS Cluster GUI"; 435 | PROVISIONING_PROFILE = ""; 436 | WRAPPER_EXTENSION = app; 437 | }; 438 | name = Release; 439 | }; 440 | /* End XCBuildConfiguration section */ 441 | 442 | /* Begin XCConfigurationList section */ 443 | 01E2853518A6C4E300BC630D /* Build configuration list for PBXProject "CoreOS Cluster GUI" */ = { 444 | isa = XCConfigurationList; 445 | buildConfigurations = ( 446 | 01E2856918A6C4E300BC630D /* Debug */, 447 | 01E2856A18A6C4E300BC630D /* Release */, 448 | ); 449 | defaultConfigurationIsVisible = 0; 450 | defaultConfigurationName = Release; 451 | }; 452 | 01E2856B18A6C4E300BC630D /* Build configuration list for PBXNativeTarget "CoreOS Cluster GUI" */ = { 453 | isa = XCConfigurationList; 454 | buildConfigurations = ( 455 | 01E2856C18A6C4E300BC630D /* Debug */, 456 | 01E2856D18A6C4E300BC630D /* Release */, 457 | ); 458 | defaultConfigurationIsVisible = 0; 459 | defaultConfigurationName = Release; 460 | }; 461 | /* End XCConfigurationList section */ 462 | }; 463 | rootObject = 01E2853218A6C4E300BC630D /* Project object */; 464 | } 465 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CoreOS Cluster GUI for OS X 4 | // 5 | // Created by Rimantas on 01/04/2014. 6 | // Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface AppDelegate : NSObject 13 | 14 | @property (strong, nonatomic) IBOutlet NSMenu *statusMenu; 15 | @property (strong, nonatomic) NSStatusItem *statusItem; 16 | 17 | @property(strong) NSWindowController *myWindowController; 18 | 19 | @property(strong) NSString *resoucesPathFromApp; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CoreOS Cluster GUI for OS X 4 | // 5 | // Created by Rimantas on 01/04/2014. 6 | // Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @implementation AppDelegate 12 | 13 | 14 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 15 | { 16 | [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; 17 | 18 | self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 19 | [self.statusItem setMenu:self.statusMenu]; 20 | [self.statusItem setImage: [NSImage imageNamed:@"icon"]]; 21 | [self.statusItem setHighlightMode:YES]; 22 | 23 | // get the App's main bundle path 24 | _resoucesPathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@""]; 25 | // NSLog(@"applicationDirectory: '%@'", _resoucesPathFromApp); 26 | 27 | NSString *home_folder = [NSHomeDirectory() stringByAppendingPathComponent:@"coreos-osx-cluster"]; 28 | 29 | BOOL isDir; 30 | if([[NSFileManager defaultManager] 31 | fileExistsAtPath:home_folder isDirectory:&isDir] && isDir) 32 | { 33 | [self checkVMStatus]; 34 | } 35 | else 36 | { 37 | NSAlert *alert = [[NSAlert alloc] init]; 38 | [alert addButtonWithTitle:@"OK"]; 39 | [alert addButtonWithTitle:@"Cancel"]; 40 | [alert setMessageText:@"CoreOS-Vagrant Cluster was not set."]; 41 | [alert setInformativeText:@"Do you want to set it up?"]; 42 | [alert setAlertStyle:NSWarningAlertStyle]; 43 | 44 | if ([alert runModal] == NSAlertFirstButtonReturn) { 45 | // OK clicked 46 | [self initialInstall:self]; 47 | } 48 | else 49 | { 50 | // Cancel clicked 51 | NSString *msg = [NSString stringWithFormat:@"%@ ", @" 'Initial setup of CoreOS-Vagrant Cluster' at any time later one !!! "]; 52 | [self displayWithMessage:@"You can set Cluster from menu 'Setup':" infoText:msg]; 53 | } 54 | 55 | } 56 | }; 57 | 58 | 59 | - (IBAction)Start:(id)sender { 60 | 61 | NSString *home_folder = [NSHomeDirectory() stringByAppendingPathComponent:@"coreos-osx-cluster"]; 62 | 63 | BOOL isDir; 64 | if([[NSFileManager defaultManager] 65 | fileExistsAtPath:home_folder isDirectory:&isDir] && isDir) 66 | { 67 | // send a notification on to the screen 68 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 69 | notification.title = @"CoreOS-Vagrant Cluster will be up shortly"; 70 | notification.informativeText = @"and OS shell will be opened"; 71 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 72 | 73 | NSString *appName = [[NSString alloc] init]; 74 | NSString *arguments = [[NSString alloc] init]; 75 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_up.command"]]; 76 | } 77 | else 78 | { 79 | NSAlert *alert = [[NSAlert alloc] init]; 80 | [alert addButtonWithTitle:@"OK"]; 81 | [alert addButtonWithTitle:@"Cancel"]; 82 | [alert setMessageText:@"CoreOS-Vagrant Cluster was not set."]; 83 | [alert setInformativeText:@"Do you want to set it up?"]; 84 | [alert setAlertStyle:NSWarningAlertStyle]; 85 | 86 | if ([alert runModal] == NSAlertFirstButtonReturn) { 87 | // OK clicked 88 | [self initialInstall:self]; 89 | } 90 | else 91 | { 92 | // Cancel clicked 93 | NSString *msg = [NSString stringWithFormat:@"%@ ", @" 'Initial setup of CoreOS-Vagrant Cluster' at any time later one !!! "]; 94 | [self displayWithMessage:@"You can set Cluster from menu 'Setup':" infoText:msg]; 95 | } 96 | } 97 | } 98 | 99 | 100 | - (IBAction)Pause:(id)sender { 101 | // send a notification on to the screen 102 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 103 | notification.informativeText = @"CoreOS-Vagrant Cluster will be suspended"; 104 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 105 | 106 | NSString *scriptName = [[NSString alloc] init]; 107 | NSString *arguments = [[NSString alloc] init]; 108 | [self runScript:scriptName = @"coreos-vagrant" arguments:arguments = @"suspend"]; 109 | 110 | [self checkVMStatus]; 111 | } 112 | 113 | - (IBAction)Stop:(id)sender { 114 | // send a notification on to the screen 115 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 116 | notification.informativeText = @"CoreOS-Vagrant Cluster will be stopped"; 117 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 118 | 119 | NSString *scriptName = [[NSString alloc] init]; 120 | NSString *arguments = [[NSString alloc] init]; 121 | [self runScript:scriptName = @"coreos-vagrant" arguments:arguments = @"halt"]; 122 | 123 | [self checkVMStatus]; 124 | } 125 | 126 | - (IBAction)Restart:(id)sender { 127 | // send a notification on to the screen 128 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 129 | notification.informativeText = @"CoreOS-Vagrant Cluster will be reloaded"; 130 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 131 | 132 | NSString *appName = [[NSString alloc] init]; 133 | NSString *arguments = [[NSString alloc] init]; 134 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_reload.command"]]; 135 | 136 | [self checkVMStatus]; 137 | } 138 | 139 | 140 | // Updates menu 141 | - (IBAction)updates:(id)sender { 142 | // send a notification on to the screen 143 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 144 | notification.title = @"OS X etcdclt and fleetctl will be updated"; 145 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 146 | 147 | NSString *appName = [[NSString alloc] init]; 148 | NSString *arguments = [[NSString alloc] init]; 149 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"update.command"]]; 150 | // NSLog(@"Apps arguments: '%@'", [_resoucesPathFromApp stringByAppendingPathComponent:@"update.command"]); 151 | } 152 | 153 | - (IBAction)updateVbox:(id)sender { 154 | // send a notification on to the screen 155 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 156 | notification.title = @"CoreOS vbox"; 157 | notification.informativeText = @"will be updated"; 158 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 159 | 160 | NSString *appName = [[NSString alloc] init]; 161 | NSString *arguments = [[NSString alloc] init]; 162 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"update_vbox.command"]]; 163 | // NSLog(@"Apps arguments: '%@'", [_resoucesPathFromApp stringByAppendingPathComponent:@"update.command"]); 164 | } 165 | 166 | - (IBAction)force_coreos_update:(id)sender { 167 | // send a notification on to the screen 168 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 169 | notification.title = @"CoreOS VMs will be forced to be updated !!!"; 170 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 171 | 172 | NSString *appName = [[NSString alloc] init]; 173 | NSString *arguments = [[NSString alloc] init]; 174 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"force_coreos_update.command"]]; 175 | } 176 | // Updates menu 177 | 178 | 179 | // Setup menu 180 | - (IBAction)changeReleaseChannel:(id)sender { 181 | // send a notification on to the screen 182 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 183 | notification.informativeText = @"CoreOS-Vagrant Cluster release channel change"; 184 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 185 | 186 | NSString *appName = [[NSString alloc] init]; 187 | NSString *arguments = [[NSString alloc] init]; 188 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"change_release_channel.command"]]; 189 | 190 | [self checkVMStatus]; 191 | } 192 | 193 | - (IBAction)destroy:(id)sender { 194 | // send a notification on to the screen 195 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 196 | notification.informativeText = @"CoreOS-Vagrant Cluster will be destroyed"; 197 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 198 | 199 | NSString *appName = [[NSString alloc] init]; 200 | NSString *arguments = [[NSString alloc] init]; 201 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_destroy.command"]]; 202 | 203 | [self checkVMStatus]; 204 | } 205 | 206 | - (IBAction)initialInstall:(id)sender 207 | { 208 | NSString *home_folder = [NSHomeDirectory() stringByAppendingPathComponent:@"coreos-osx-cluster"]; 209 | 210 | BOOL isDir; 211 | if([[NSFileManager defaultManager] 212 | fileExistsAtPath:home_folder isDirectory:&isDir] && isDir){ 213 | NSString *msg = [NSString stringWithFormat:@"%@ %@ %@", @"Folder", home_folder, @"exists, please delete or rename that folder !!!"]; 214 | [self displayWithMessage:@"CoreOS-Vagrant Cluster" infoText:msg]; 215 | } 216 | else 217 | { 218 | // NSLog(@"Folder does not exist: '%@'", home_folder); 219 | NSString *scriptName = [[NSString alloc] init]; 220 | NSString *arguments = [[NSString alloc] init]; 221 | [self runScript:scriptName = @"coreos-vagrant-install" arguments:arguments = _resoucesPathFromApp ]; 222 | } 223 | } 224 | // Setup menu 225 | 226 | - (IBAction)About:(id)sender { 227 | 228 | NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 229 | // NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 230 | // NSString *app_version = [NSString stringWithFormat:@"%@.%@", version, build]; 231 | NSString *app_version = [NSString stringWithFormat:@"%@", version]; 232 | 233 | NSString *mText = [NSString stringWithFormat:@"%@ %@", @"CoreOS-Vagrant Cluster GUI for OS X", app_version]; 234 | NSString *infoText = @"It is a simple wrapper around the CoreOS-Vagrant, which allows to control CoreOS-Vagrant Cluster via Status Bar !!!"; 235 | [self displayWithMessage:mText infoText:infoText]; 236 | } 237 | 238 | // 239 | - (IBAction)runShell:(id)sender { 240 | // send a notification on to the screen 241 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 242 | notification.informativeText = @"OS Shell will be opened"; 243 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 244 | 245 | NSString *appName = [[NSString alloc] init]; 246 | NSString *arguments = [[NSString alloc] init]; 247 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"os_shell.command"]]; 248 | } 249 | 250 | - (IBAction)fleetUI:(id)sender { 251 | [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://172.17.9.101:3000"]]; 252 | } 253 | 254 | 255 | // ssh to hosts 256 | - (IBAction)runControl1:(id)sender { 257 | // send a notification on to the screen 258 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 259 | notification.informativeText = @"vagrant ssh shell to control-01 will be opened"; 260 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 261 | 262 | NSString *appName = [[NSString alloc] init]; 263 | NSString *arguments = [[NSString alloc] init]; 264 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_control1.command"]]; 265 | } 266 | 267 | - (IBAction)runNode1:(id)sender { 268 | // send a notification on to the screen 269 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 270 | notification.informativeText = @"vagrant ssh shell to node-01 will be opened"; 271 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 272 | 273 | NSString *appName = [[NSString alloc] init]; 274 | NSString *arguments = [[NSString alloc] init]; 275 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_node1.command"]]; 276 | } 277 | 278 | - (IBAction)runNode2:(id)sender { 279 | // send a notification on to the screen 280 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 281 | notification.informativeText = @"vagrant ssh shell to node-02 will be opened"; 282 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 283 | 284 | NSString *appName = [[NSString alloc] init]; 285 | NSString *arguments = [[NSString alloc] init]; 286 | [self runApp:appName = @"iTerm" arguments:arguments = [_resoucesPathFromApp stringByAppendingPathComponent:@"vagrant_node2.command"]]; 287 | } 288 | // ssh to hosts 289 | 290 | 291 | - (void)runScript:(NSString*)scriptName arguments:(NSString*)arguments 292 | { 293 | NSTask *task = [[NSTask alloc] init]; 294 | task.launchPath = [NSString stringWithFormat:@"%@", [[NSBundle mainBundle] pathForResource:scriptName ofType:@"command"]]; 295 | task.arguments = @[arguments]; 296 | [task launch]; 297 | [task waitUntilExit]; 298 | } 299 | 300 | 301 | - (void)runApp:(NSString*)appName arguments:(NSString*)arguments 302 | { 303 | // lunch an external App from the mainBundle 304 | [[NSWorkspace sharedWorkspace] openFile:arguments withApplication:appName]; 305 | } 306 | 307 | 308 | - (void)checkVMStatus { 309 | // check vm status and and return the shell script output 310 | NSTask *task = [[NSTask alloc] init]; 311 | task.launchPath = [NSString stringWithFormat:@"%@", [[NSBundle mainBundle] pathForResource:@"coreos-vagrant" ofType:@"command"]]; 312 | task.arguments = @[@"status"]; 313 | 314 | NSPipe *pipe; 315 | pipe = [NSPipe pipe]; 316 | [task setStandardOutput: pipe]; 317 | 318 | NSFileHandle *file; 319 | file = [pipe fileHandleForReading]; 320 | 321 | [task launch]; 322 | [task waitUntilExit]; 323 | 324 | NSData *data; 325 | data = [file readDataToEndOfFile]; 326 | 327 | NSString *string; 328 | string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 329 | // NSLog (@"Returned:\n%@", string); 330 | 331 | // send a notification on to the screen 332 | NSUserNotification *notification = [[NSUserNotification alloc] init]; 333 | notification.informativeText = string; 334 | [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 335 | } 336 | 337 | 338 | - (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center 339 | shouldPresentNotification:(NSUserNotification *)notification 340 | { 341 | return YES; 342 | } 343 | 344 | 345 | -(void) displayWithMessage:(NSString *)mText infoText:(NSString*)infoText 346 | { 347 | NSAlert *alert = [[NSAlert alloc] init]; 348 | [alert setAlertStyle:NSInformationalAlertStyle]; 349 | // [alert setIcon:[NSImage imageNamed:@"coreos-wordmark-vert-color"]]; 350 | [alert setMessageText:mText]; 351 | [alert setInformativeText:infoText]; 352 | [alert runModal]; 353 | } 354 | 355 | 356 | @end 357 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | Default 523 | 524 | 525 | 526 | 527 | 528 | 529 | Left to Right 530 | 531 | 532 | 533 | 534 | 535 | 536 | Right to Left 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | Default 548 | 549 | 550 | 551 | 552 | 553 | 554 | Left to Right 555 | 556 | 557 | 558 | 559 | 560 | 561 | Right to Left 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/CoreOS Cluster GUI-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | icon 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 0.3.6 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 121 27 | LSApplicationCategoryType 28 | public.app-category.utilities 29 | LSMinimumSystemVersion 30 | ${MACOSX_DEPLOYMENT_TARGET} 31 | LSUIElement 32 | 33 | NSHumanReadableCopyright 34 | Copyright © 2014 Rimantas Mocevicius. All rights reserved. 35 | NSMainNibFile 36 | MainMenu 37 | NSPrincipalClass 38 | NSApplication 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/CoreOS Cluster GUI-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #endif 10 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/CoreOS Cluster GUI.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} 2 | {\colortbl;\red255\green255\blue255;} 3 | \paperw9840\paperh8400 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 5 | 6 | \f0\b\fs24 \cf0 Engineering: 7 | \b0 \ 8 | Some people\ 9 | \ 10 | 11 | \b Human Interface Design: 12 | \b0 \ 13 | Some other people\ 14 | \ 15 | 16 | \b Testing: 17 | \b0 \ 18 | Hopefully not nobody\ 19 | \ 20 | 21 | \b Documentation: 22 | \b0 \ 23 | Whoever\ 24 | \ 25 | 26 | \b With special thanks to: 27 | \b0 \ 28 | Mom\ 29 | } 30 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /src/CoreOS Cluster GUI/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CoreOS Cluster OSX GUI 4 | // 5 | // Created by Rimantas on 08/02/2014. 6 | // Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) 12 | { 13 | return NSApplicationMain(argc, argv); 14 | } 15 | -------------------------------------------------------------------------------- /src/Vagrantfiles/user-data.control: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | 3 | coreos: 4 | update: 5 | reboot-strategy: off 6 | etcd2: 7 | name: control-01 8 | initial-advertise-peer-urls: http://$private_ipv4:2380 9 | initial-cluster-token: etcd01 10 | initial-cluster: control-01=http://$private_ipv4:2380 11 | initial-cluster-state: new 12 | listen-peer-urls: http://$private_ipv4:2380,http://$private_ipv4:7001 13 | listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 14 | advertise-client-urls: http://$public_ipv4:2379,http://$public_ipv4:4001 15 | fleet: 16 | public-ip: $public_ipv4 17 | metadata: role=control 18 | flannel: 19 | interface: $public_ipv4 20 | units: 21 | - name: flanneld.service 22 | command: start 23 | drop-ins: 24 | - name: 50-network-config.conf 25 | content: | 26 | [Unit] 27 | Requires=etcd2.service 28 | [Service] 29 | ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network": "10.245.0.0/16", "Backend": {"Type": "vxlan"}}' 30 | - name: etcd2.service 31 | command: start 32 | - name: fleet.service 33 | command: start 34 | - name: docker.service 35 | command: start 36 | drop-ins: 37 | - name: 50-insecure-registry.conf 38 | content: | 39 | [Unit] 40 | Requires=flanneld.service 41 | After=flanneld.service 42 | [Service] 43 | Environment=DOCKER_OPTS='--insecure-registry="0.0.0.0/0"' 44 | 45 | write_files: 46 | - path: /home/core/.ssh/id_rsa 47 | permissions: '0600' 48 | owner: core:core 49 | content: | 50 | -----BEGIN RSA PRIVATE KEY----- 51 | MIIEowIBAAKCAQEA18VKh3nRpHTOC+AAyg+YB1P0SSISR/2TjHG89c7ZhPTGCXr5 52 | P60H5vU/YOrV8sQR542inDwxfAvhn86yHe/w8dX/g4krNDB+0NFL1fbQ9BktGsao 53 | Apg5bWMGjBgVTp8WJlDfW7zYqJQu/wjZ90oz6EpL4+DhzAn/W0JUXWiFgCUpKDHJ 54 | zZIZzebywLcJ/8jngMhxpae9OSDIkR9i5QNkeqLZhR0kB65Bq/8KbtFibduxAUyG 55 | qxXnou3QB5VH9c4Ura8vzhMqsBCohKPuH5OLz2V4jcijZJY7vyNahXG3PB8Gw1c0 56 | 7XZUAlEUDuJaLA5kIBXSOMM9X5Tjq7Cvtfrz2wIDAQABAoIBAC3R0pLUVqWCvGKf 57 | Leu6xgEAXgbNum4ZNiUD3imgxGZMiGVo/Nb9yojMGapeFBLaeibe1+Ivkh6Sc1Y5 58 | UW+0DUl9tSXckhUiGzwCxgToxdSgKAjgmLr8Um2dMr27O4MXm1+FmvjjMGsUFKrJ 59 | 2Wd/FWjFpjn8/lYS5WweuMWhNYBRf8lwA4VdjU/pnlPDro8PqMysf4h+tRw26nJb 60 | NXzqzJ5zQGfBJ0wIYuZSa25SF9l9gRWEUM/KxL36S/SpwuXSdBv/GtqKB21ogyOn 61 | S3UZZjfTlkX0KvaLG0eVXptSRjqSJbZkzBbDX1WsBEJIvV1XqeJcptNtO6Ez7Kou 62 | NqE4cfkCgYEA/IX2AZCLBmCfYsQm1M6WaQ/hgaWFrcimr/huNbASuc3fE4e5vFSR 63 | Dh6jFikDg5t6Q8nUTySpRXovCHEfnvYFrS5s4tPOe/2JqBwK63KqjpeC/JPNGC1E 64 | sXPEttiFo49kkTOOh1ImCbqHJT2EIPEIuXE3RUXlTk/+MwOwYL2HaHUCgYEA2r3K 65 | 5O1gf7Cfws3lRxOdS+eK+m4z8oF92tcX7sEVphJTG6wqRR0z2Llj8SsyGbFWSYfK 66 | zalFkk66zr55MzTrOhJ35+LyJUx+IBAcYkQLTtTsp54JlJ8CMD1EcRPASYTg3L8R 67 | Rf8+cgfcSslBiL/nyhnTN0hmyjVJp7ucvbep4Q8CgYEAhFn99xH4G86WmyBtrcnd 68 | QZGGQvorF0t8Oey+brsrBWFmkwjnC1NTd5ANMDcs1VSu/0qQUS7I3VZNwmHwDdOq 69 | Y/taLISQy6G1/Xs9Kew+gl/c0l7w9sP7JfqkVqUjXfdw4T2hbUFcGGtAG/+i+dT7 70 | Gp7BNjiNF7+LXteHIR0VFGUCgYAaMorfOhLJmDS6FwCzr4SyN4vsjFBKZfnVwNcL 71 | 8DIQjrdHZCo31tSDy0hN9PduHlAQRGQkl3ZOnIFBC4zmdhsJ/HZB3mtTzkJ4wpUz 72 | q6STD2s8c+//zb9sWZod1Ni9tV1c8sE12ej3rTtT9aCUqS8whEFIqLIu24zzusN9 73 | 8UY2PwKBgHWyekUzaQRcteEYsCWsl9KeX777EdtbK6bGh5JlD9rK5YVK3Ogq24Ts 74 | 9+yKbdYPv6KjXbAnb3ywDeifIx9vna+4jtXZ8cUuZQcj4nmBtKfeaxZeN7OlHv0d 75 | LwDeOM4DDptEENhfzc0sPYHyGqUsfH6c4kq5KwtDAoY9MCS5/dGN 76 | -----END RSA PRIVATE KEY----- 77 | - path: /home/core/.ssh/id_rsa.pub 78 | permissions: '0600' 79 | owner: core:core 80 | content: | 81 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXxUqHedGkdM4L4ADKD5gHU/RJIhJH/ZOMcbz1ztmE9MYJevk/rQfm9T9g6tXyxBHnjaKcPDF8C+GfzrId7/Dx1f+DiSs0MH7Q0UvV9tD0GS0axqgCmDltYwaMGBVOnxYmUN9bvNiolC7/CNn3SjPoSkvj4OHMCf9bQlRdaIWAJSkoMcnNkhnN5vLAtwn/yOeAyHGlp705IMiRH2LlA2R6otmFHSQHrkGr/wpu0WJt27EBTIarFeei7dAHlUf1zhStry/OEyqwEKiEo+4fk4vPZXiNyKNklju/I1qFcbc8HwbDVzTtdlQCURQO4losDmQgFdI4wz1flOOrsK+1+vPb core@core-01 82 | - path: /opt/bin/wupiao 83 | permissions: '0755' 84 | content: | 85 | #!/bin/bash 86 | # [w]ait [u]ntil [p]ort [i]s [a]ctually [o]pen 87 | [ -n "$1" ] && \ 88 | until curl -o /dev/null -sIf http://${1}; do \ 89 | sleep 1 && echo .; 90 | done; 91 | exit $? 92 | -------------------------------------------------------------------------------- /src/Vagrantfiles/user-data.node: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | 3 | coreos: 4 | update: 5 | reboot-strategy: off 6 | etcd2: 7 | listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 8 | advertise-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 9 | initial-cluster: control-01=http://172.17.9.101:2380 10 | proxy: on 11 | fleet: 12 | public-ip: $public_ipv4 13 | metadata: role=node 14 | flannel: 15 | interface: $public_ipv4 16 | units: 17 | - name: flanneld.service 18 | drop-ins: 19 | - name: 50-network-config.conf 20 | content: | 21 | [Unit] 22 | Requires=etcd2.service 23 | [Service] 24 | ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network":"10.245.0.0/16", "Backend": {"Type": "vxlan"}}' 25 | command: start 26 | - name: fleet.service 27 | command: start 28 | - name: docker.service 29 | command: start 30 | drop-ins: 31 | - name: 50-insecure-registry.conf 32 | content: | 33 | [Unit] 34 | Requires=flanneld.service 35 | After=flanneld.service 36 | [Service] 37 | Environment=DOCKER_OPTS='--insecure-registry="0.0.0.0/0"' 38 | write_files: 39 | - path: /opt/bin/wupiao 40 | permissions: '0755' 41 | content: | 42 | #!/bin/bash 43 | # [w]ait [u]ntil [p]ort [i]s [a]ctually [o]pen 44 | [ -n "$1" ] && \ 45 | until curl -o /dev/null -sIf http://${1}; do \ 46 | sleep 1 && echo .; 47 | done; 48 | exit $? 49 | -------------------------------------------------------------------------------- /src/change_release_channel.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # change_release_channel.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | 10 | ### Set release channel 11 | LOOP=1 12 | while [ $LOOP -gt 0 ] 13 | do 14 | VALID_MAIN=0 15 | echo " " 16 | echo "Set CoreOS Release Channel:" 17 | echo " 1) Alpha " 18 | echo " 2) Beta " 19 | echo " 3) Stable " 20 | echo " " 21 | echo "Select an option:" 22 | 23 | read RESPONSE 24 | XX=${RESPONSE:=Y} 25 | 26 | if [ $RESPONSE = 1 ] 27 | then 28 | VALID_MAIN=1 29 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 30 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 31 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 32 | # 33 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 34 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 35 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 36 | channel="Alpha" 37 | LOOP=0 38 | fi 39 | 40 | if [ $RESPONSE = 2 ] 41 | then 42 | VALID_MAIN=1 43 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 44 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 45 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 46 | # 47 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 48 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 49 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 50 | channel="Beta" 51 | LOOP=0 52 | fi 53 | 54 | if [ $RESPONSE = 3 ] 55 | then 56 | VALID_MAIN=1 57 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 58 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 59 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 60 | # 61 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 62 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 63 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 64 | channel="Stable" 65 | LOOP=0 66 | fi 67 | 68 | if [ $VALID_MAIN != 1 ] 69 | then 70 | continue 71 | fi 72 | done 73 | ### Set release channel 74 | 75 | function pause(){ 76 | read -p "$*" 77 | } 78 | 79 | # 80 | echo "The 'config.rb' file was updated to $channel channel !!!" 81 | echo "You need to run 'Destroy Cluster (vagrant destroy)' and then" 82 | echo "on next 'Up' new cluster will be created !!!" 83 | pause 'Press [Enter] key to continue...' 84 | -------------------------------------------------------------------------------- /src/coreos-vagrant-install.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # coreos-vagrant-install.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | # create symbolic link for vagrant to work on OS X 10.11 10 | ln -s /opt/vagrant/bin/vagrant /usr/local/bin/vagrant >/dev/null 2>&1 11 | 12 | # create "coreos-osx-cluster" and other required folders and files at user's home folder where all the data will be stored 13 | mkdir ~/coreos-osx-cluster 14 | mkdir ~/coreos-osx-cluster/tmp 15 | mkdir ~/coreos-osx-cluster/bin 16 | mkdir ~/coreos-osx-cluster/fleet 17 | mkdir ~/coreos-osx-cluster/my_fleet 18 | mkdir -p ~/coreos-osx-cluster/control 19 | mkdir -p ~/coreos-osx-cluster/workers 20 | 21 | # cd to App's Resources folder 22 | cd "$1" 23 | 24 | # copy gsed to ~/coreos-osx-cluster/bin 25 | cp "$1"/gsed ~/coreos-osx-cluster/bin 26 | chmod 755 ~/coreos-osx-cluster/bin/gsed 27 | 28 | # copy wget with https support to ~/coreos-osx-cluster/bin 29 | cp "$1"/wget ~/coreos-osx-cluster/bin 30 | chmod 755 ~/coreos-osx-cluster/bin/wget 31 | 32 | # copy other files 33 | # user-data files 34 | cp "$1"/Vagrantfiles/user-data.control ~/coreos-osx-cluster/control/user-data 35 | cp "$1"/Vagrantfiles/user-data.node ~/coreos-osx-cluster/workers/user-data 36 | 37 | # copy fleet units 38 | cp -R "$1"/fleet/ ~/coreos-osx-cluster/fleet 39 | 40 | # initial init 41 | open -a iTerm.app "$1"/first-init.command 42 | -------------------------------------------------------------------------------- /src/coreos-vagrant.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # coreos-vagrant.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | export PATH=/usr/local/bin 10 | 11 | # pass first argument - up, halt ... 12 | cd ~/coreos-osx-cluster/control 13 | vagrant $1 14 | 15 | cd ~/coreos-osx-cluster/workers 16 | vagrant $1 17 | -------------------------------------------------------------------------------- /src/coreos-wordmark-horiz-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/coreos-wordmark-horiz-color.png -------------------------------------------------------------------------------- /src/coreos-wordmark-vert-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/coreos-wordmark-vert-color.png -------------------------------------------------------------------------------- /src/first-init (Mac mini's conflicted copy 2015-06-02).command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # first-init.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | 10 | ### getting files from github and setting them up 11 | echo "" 12 | echo "Downloading latest coreos-vagrant files from github to tmp folder: " 13 | git clone https://github.com/coreos/coreos-vagrant/ ~/coreos-osx-cluster/tmp 14 | echo "Done downloading from github !!!" 15 | echo "" 16 | 17 | # copy Vagrantfile 18 | cp ~/coreos-osx-cluster/tmp/Vagrantfile ~/coreos-osx-cluster/control/Vagrantfile 19 | cp ~/coreos-osx-cluster/tmp/Vagrantfile ~/coreos-osx-cluster/workers/Vagrantfile 20 | 21 | # change control IP to static 22 | sed -i "" 's/172.17.8.#{i+100}/172.17.9.101/g' ~/coreos-osx-cluster/control/Vagrantfile 23 | # change nodes network subnet and IP to start from 24 | sed -i "" 's/172.17.8.#{i+100}/172.17.9.#{i+101}/g' ~/coreos-osx-cluster/workers/Vagrantfile 25 | 26 | # config.rb files 27 | # control 28 | cp ~/coreos-osx-cluster/tmp/config.rb.sample ~/coreos-osx-cluster/control/config.rb 29 | sed -i "" 's/#$instance_name_prefix="core"/$instance_name_prefix="control"/' ~/coreos-osx-cluster/control/config.rb 30 | sed -i "" 's/#$vm_memory = 1024/$vm_memory = 512/' ~/coreos-osx-cluster/control/config.rb 31 | # nodes 32 | cp ~/coreos-osx-cluster/tmp/config.rb.sample ~/coreos-osx-cluster/workers/config.rb 33 | sed -i "" 's/#$instance_name_prefix="core"/$instance_name_prefix="node"/' ~/coreos-osx-cluster/workers/config.rb 34 | # set nodes to 2 35 | sed -i "" 's/[#]$num_instances=1/$num_instances=2/' ~/coreos-osx-cluster/workers/config.rb 36 | 37 | ### 38 | 39 | ### Set release channel 40 | LOOP=1 41 | while [ $LOOP -gt 0 ] 42 | do 43 | VALID_MAIN=0 44 | echo " " 45 | echo "Set CoreOS Release Channel:" 46 | echo " 1) Alpha " 47 | echo " 2) Beta " 48 | echo " 3) Stable " 49 | echo " " 50 | echo "Select an option:" 51 | 52 | read RESPONSE 53 | XX=${RESPONSE:=Y} 54 | 55 | if [ $RESPONSE = 1 ] 56 | then 57 | VALID_MAIN=1 58 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 59 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 60 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 61 | # 62 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 63 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 64 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 65 | channel="Alpha" 66 | LOOP=0 67 | fi 68 | 69 | if [ $RESPONSE = 2 ] 70 | then 71 | VALID_MAIN=1 72 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 73 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 74 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 75 | # 76 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 77 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 78 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 79 | channel="Beta" 80 | LOOP=0 81 | fi 82 | 83 | if [ $RESPONSE = 3 ] 84 | then 85 | VALID_MAIN=1 86 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 87 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 88 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 89 | # 90 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 91 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 92 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 93 | channel="Stable" 94 | LOOP=0 95 | fi 96 | 97 | if [ $VALID_MAIN != 1 ] 98 | then 99 | continue 100 | fi 101 | done 102 | ### Set release channel 103 | 104 | # 105 | function pause(){ 106 | read -p "$*" 107 | } 108 | 109 | # first up to initialise VMs 110 | echo "Setting up Vagrant VMs for CoreOS Cluster on OS X" 111 | cd ~/coreos-osx-cluster/control 112 | vagrant box update 113 | vagrant up 114 | # 115 | cd ~/coreos-osx-cluster/workers 116 | vagrant up 117 | 118 | # Add vagrant ssh key to ssh-agent 119 | ssh-add ~/.vagrant.d/insecure_private_key >/dev/null 2>&1 120 | 121 | # download etcdctl and fleetctl 122 | # 123 | cd ~/coreos-osx-cluster/control 124 | LATEST_RELEASE=$(vagrant ssh control-01 -c "etcdctl --version" | cut -d " " -f 3- | tr -d '\r' ) 125 | cd ~/coreos-osx-cluster/bin 126 | echo "Downloading etcdctl $LATEST_RELEASE for OS X" 127 | curl -L -o etcd.zip "https://github.com/coreos/etcd/releases/download/v$LATEST_RELEASE/etcd-v$LATEST_RELEASE-darwin-amd64.zip" 128 | unzip -j -o "etcd.zip" "etcd-v$LATEST_RELEASE-darwin-amd64/etcdctl" 129 | rm -f etcd.zip 130 | # set etcd endpoint 131 | export ETCDCTL_PEERS=http://172.17.9.101:2379 132 | echo "etcd cluster:" 133 | ~/coreos-osx-cluster/bin/etcdctl ls / 134 | echo " " 135 | # 136 | cd ~/coreos-osx-cluster/control 137 | LATEST_RELEASE=$(vagrant ssh control-01 -c 'fleetctl version' | cut -d " " -f 3- | tr -d '\r') 138 | cd ~/coreos-osx-cluster/bin 139 | echo "Downloading fleetctl v$LATEST_RELEASE for OS X" 140 | curl -L -o fleet.zip "https://github.com/coreos/fleet/releases/download/v$LATEST_RELEASE/fleet-v$LATEST_RELEASE-darwin-amd64.zip" 141 | unzip -j -o "fleet.zip" "fleet-v$LATEST_RELEASE-darwin-amd64/fleetctl" 142 | rm -f fleet.zip 143 | # set fleetctl tunnel 144 | export FLEETCTL_ENDPOINT=http://172.17.9.101:2379 145 | export FLEETCTL_DRIVER=etcd 146 | export FLEETCTL_STRICT_HOST_KEY_CHECKING=false 147 | echo "fleetctl list-machines:" 148 | ~/coreos-osx-cluster/bin/fleetctl list-machines 149 | echo " " 150 | # 151 | echo "Installing fleet units from '~/coreos-osx-cluster/fleet' folder:" 152 | cd ~/coreos-osx-cluster/fleet 153 | ~/coreos-osx-cluster/bin/fleetctl start *.service 154 | echo "Finished installing fleet units" 155 | ~/coreos-osx-cluster/bin/fleetctl list-units 156 | echo " " 157 | 158 | # 159 | echo " " 160 | echo "Installation has finished, CoreOS VMs are up and running !!!" 161 | echo "Enjoy CoreOS Cluster on your Mac !!!" 162 | echo " " 163 | echo "Run from menu 'OS Shell' to open a terninal window with fleetctl and etcdctl preset to control's IP !!!" 164 | echo " " 165 | pause 'Press [Enter] key to continue...' 166 | -------------------------------------------------------------------------------- /src/first-init.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # first-init.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | 10 | ### getting files from github and setting them up 11 | echo "" 12 | echo "Downloading latest coreos-vagrant files from github to tmp folder: " 13 | git clone https://github.com/coreos/coreos-vagrant/ ~/coreos-osx-cluster/tmp 14 | echo "Done downloading from github !!!" 15 | echo "" 16 | 17 | # copy Vagrantfile 18 | cp ~/coreos-osx-cluster/tmp/Vagrantfile ~/coreos-osx-cluster/control/Vagrantfile 19 | cp ~/coreos-osx-cluster/tmp/Vagrantfile ~/coreos-osx-cluster/workers/Vagrantfile 20 | 21 | # change control IP to static 22 | sed -i "" 's/172.17.8.#{i+100}/172.17.9.101/g' ~/coreos-osx-cluster/control/Vagrantfile 23 | # change nodes network subnet and IP to start from 24 | sed -i "" 's/172.17.8.#{i+100}/172.17.9.#{i+101}/g' ~/coreos-osx-cluster/workers/Vagrantfile 25 | 26 | # config.rb files 27 | # control 28 | cp ~/coreos-osx-cluster/tmp/config.rb.sample ~/coreos-osx-cluster/control/config.rb 29 | sed -i "" 's/#$instance_name_prefix="core"/$instance_name_prefix="control"/' ~/coreos-osx-cluster/control/config.rb 30 | sed -i "" 's/#$vm_memory = 1024/$vm_memory = 512/' ~/coreos-osx-cluster/control/config.rb 31 | sed -i "" 's/File.open/#File.open/' ~/coreos-osx-cluster/control/config.rb 32 | # nodes 33 | cp ~/coreos-osx-cluster/tmp/config.rb.sample ~/coreos-osx-cluster/workers/config.rb 34 | sed -i "" 's/#$instance_name_prefix="core"/$instance_name_prefix="node"/' ~/coreos-osx-cluster/workers/config.rb 35 | sed -i "" 's/File.open/#File.open/' ~/coreos-osx-cluster/workers/config.rb 36 | # set nodes to 2 37 | sed -i "" 's/$num_instances=1/$num_instances=2/' ~/coreos-osx-cluster/workers/config.rb 38 | 39 | # clean up tmp folder 40 | rm -rf ~/coreos-osx-cluster/tmp/* >/dev/null 2>&1 & 41 | rm -rf ~/coreos-osx-cluster/tmp/.* >/dev/null 2>&1 & 42 | 43 | ### 44 | 45 | ### Set release channel 46 | LOOP=1 47 | while [ $LOOP -gt 0 ] 48 | do 49 | VALID_MAIN=0 50 | echo " " 51 | echo "Set CoreOS Release Channel:" 52 | echo " 1) Alpha " 53 | echo " 2) Beta " 54 | echo " 3) Stable " 55 | echo " " 56 | echo "Select an option:" 57 | 58 | read RESPONSE 59 | XX=${RESPONSE:=Y} 60 | 61 | if [ $RESPONSE = 1 ] 62 | then 63 | VALID_MAIN=1 64 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 65 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 66 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/control/config.rb 67 | # 68 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 69 | sed -i "" "s/channel='stable'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 70 | sed -i "" "s/channel='beta'/channel='alpha'/" ~/coreos-osx-cluster/workers/config.rb 71 | channel="Alpha" 72 | LOOP=0 73 | fi 74 | 75 | if [ $RESPONSE = 2 ] 76 | then 77 | VALID_MAIN=1 78 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 79 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 80 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/control/config.rb 81 | # 82 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 83 | sed -i "" "s/channel='alpha'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 84 | sed -i "" "s/channel='stable'/channel='beta'/" ~/coreos-osx-cluster/workers/config.rb 85 | channel="Beta" 86 | LOOP=0 87 | fi 88 | 89 | if [ $RESPONSE = 3 ] 90 | then 91 | VALID_MAIN=1 92 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/control/config.rb 93 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 94 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/control/config.rb 95 | # 96 | sed -i "" 's/#$update_channel/$update_channel/' ~/coreos-osx-cluster/workers/config.rb 97 | sed -i "" "s/channel='alpha'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 98 | sed -i "" "s/channel='beta'/channel='stable'/" ~/coreos-osx-cluster/workers/config.rb 99 | channel="Stable" 100 | LOOP=0 101 | fi 102 | 103 | if [ $VALID_MAIN != 1 ] 104 | then 105 | continue 106 | fi 107 | done 108 | ### Set release channel 109 | 110 | # 111 | function pause(){ 112 | read -p "$*" 113 | } 114 | 115 | # first up to initialise VMs 116 | echo "Setting up Vagrant VMs for CoreOS Cluster on OS X" 117 | cd ~/coreos-osx-cluster/control 118 | vagrant box update 119 | vagrant up 120 | # 121 | cd ~/coreos-osx-cluster/workers 122 | vagrant up 123 | 124 | # Add vagrant ssh key to ssh-agent 125 | ssh-add ~/.vagrant.d/insecure_private_key >/dev/null 2>&1 126 | 127 | # download etcdctl and fleetctl 128 | # 129 | cd ~/coreos-osx-cluster/control 130 | LATEST_RELEASE=$(vagrant ssh control-01 -c "etcdctl --version" | cut -d " " -f 3- | tr -d '\r' ) 131 | cd ~/coreos-osx-cluster/bin 132 | echo "Downloading etcdctl $LATEST_RELEASE for OS X" 133 | curl -L -o etcd.zip "https://github.com/coreos/etcd/releases/download/v$LATEST_RELEASE/etcd-v$LATEST_RELEASE-darwin-amd64.zip" 134 | unzip -j -o "etcd.zip" "etcd-v$LATEST_RELEASE-darwin-amd64/etcdctl" 135 | rm -f etcd.zip 136 | # set etcd endpoint 137 | export ETCDCTL_PEERS=http://172.17.9.101:2379 138 | echo "etcd cluster:" 139 | ~/coreos-osx-cluster/bin/etcdctl ls / 140 | echo " " 141 | # 142 | cd ~/coreos-osx-cluster/control 143 | LATEST_RELEASE=$(vagrant ssh control-01 -c 'fleetctl version' | cut -d " " -f 3- | tr -d '\r') 144 | cd ~/coreos-osx-cluster/bin 145 | echo "Downloading fleetctl v$LATEST_RELEASE for OS X" 146 | curl -L -o fleet.zip "https://github.com/coreos/fleet/releases/download/v$LATEST_RELEASE/fleet-v$LATEST_RELEASE-darwin-amd64.zip" 147 | unzip -j -o "fleet.zip" "fleet-v$LATEST_RELEASE-darwin-amd64/fleetctl" 148 | rm -f fleet.zip 149 | # set fleetctl tunnel 150 | 151 | export FLEETCTL_ENDPOINT=http://172.17.9.101:2379 152 | export FLEETCTL_DRIVER=etcd 153 | export FLEETCTL_STRICT_HOST_KEY_CHECKING=false 154 | echo "fleetctl list-machines:" 155 | ~/coreos-osx-cluster/bin/fleetctl list-machines 156 | echo " " 157 | # 158 | echo "Installing fleet units from '~/coreos-osx-cluster/fleet' folder:" 159 | cd ~/coreos-osx-cluster/fleet 160 | ~/coreos-osx-cluster/bin/fleetctl start *.service 161 | echo "Finished installing fleet units" 162 | ~/coreos-osx-cluster/bin/fleetctl list-units 163 | echo " " 164 | 165 | # 166 | echo " " 167 | echo "Installation has finished, CoreOS VMs are up and running !!!" 168 | echo "Enjoy CoreOS Cluster on your Mac !!!" 169 | echo " " 170 | echo "Run from menu 'OS Shell' to open a terninal window with fleetctl and etcdctl preset to control's IP !!!" 171 | echo " " 172 | pause 'Press [Enter] key to continue...' 173 | -------------------------------------------------------------------------------- /src/fleet/fleet-ui.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=fleet-ui 3 | After=docker.service 4 | Requires=docker.service 5 | 6 | [Service] 7 | User=core 8 | TimeoutStartSec=0 9 | EnvironmentFile=/etc/environment 10 | ExecStartPre=/usr/bin/docker pull purpleworks/fleet-ui:latest 11 | ExecStartPre=-/usr/bin/docker rm fleet_ui 12 | ExecStart=/usr/bin/docker run --rm --name fleet_ui --memory="128m" \ 13 | -p 3000:3000 \ 14 | -e ETCD_PEER=172.17.9.101 \ 15 | -v /home/core/.ssh/id_rsa:/root/id_rsa \ 16 | purpleworks/fleet-ui 17 | ExecStop=/usr/bin/docker kill fleet_ui 18 | ExecStopPost=-/usr/bin/docker rm fleet_ui 19 | 20 | Restart=always 21 | RestartSec=10s 22 | 23 | [X-Fleet] 24 | MachineMetadata=role=control 25 | 26 | -------------------------------------------------------------------------------- /src/force_coreos_update.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # force_coreos_update.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | function pause(){ 10 | read -p "$*" 11 | } 12 | 13 | cd ~/coreos-osx-cluster/control 14 | vagrant up 15 | vagrant ssh control-01 -c "sudo update_engine_client -update" 16 | echo "Done with control-01 " 17 | echo " " 18 | # 19 | cd ~/coreos-osx-cluster/workers 20 | vagrant up 21 | vagrant ssh node-01 -c "sudo update_engine_client -update" 22 | echo "Done with node-01 " 23 | echo " " 24 | vagrant ssh node-02 -c "sudo update_engine_client -update" 25 | echo "Done with node-02 " 26 | echo " " 27 | 28 | echo "Update has finished !!!" 29 | echo "You need to reboot machines if CoreOS update was successful" 30 | echo "Just use 'Reload' from the App menu" 31 | pause 'Press [Enter] key to continue...' 32 | -------------------------------------------------------------------------------- /src/gsed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/gsed -------------------------------------------------------------------------------- /src/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/icon.icns -------------------------------------------------------------------------------- /src/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/icon.png -------------------------------------------------------------------------------- /src/os_shell.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # os_shell.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/12/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | # path to the bin folder where we store our binary files 10 | export PATH=${HOME}/coreos-osx-cluster/bin:$PATH 11 | 12 | # set etcd endpoint 13 | export ETCDCTL_PEERS=http://172.17.9.101:2379 14 | echo "etcd cluster:" 15 | etcdctl --no-sync ls / 16 | echo "" 17 | 18 | # set fleetctl endpoint 19 | export FLEETCTL_ENDPOINT=http://172.17.9.101:2379 20 | export FLEETCTL_DRIVER=etcd 21 | export FLEETCTL_STRICT_HOST_KEY_CHECKING=false 22 | echo "fleetctl list-machines:" 23 | fleetctl list-machines 24 | echo " " 25 | echo "fleetctl list-units:" 26 | fleetctl list-units 27 | echo " " 28 | 29 | # open bash shell 30 | /bin/bash 31 | -------------------------------------------------------------------------------- /src/update.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # update.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | function pause(){ 10 | read -p "$*" 11 | } 12 | 13 | cd ~/coreos-osx-cluster/control 14 | vagrant up 15 | # 16 | cd ~/coreos-osx-cluster/workers 17 | vagrant up 18 | 19 | # download latest versions of etcdctl and fleetctl 20 | cd ~/coreos-osx-cluster/control 21 | LATEST_RELEASE=$(vagrant ssh control-01 -c "etcdctl --version" | cut -d " " -f 3- | tr -d '\r' ) 22 | cd ~/coreos-osx-cluster/bin 23 | echo "Downloading etcdctl $LATEST_RELEASE for OS X" 24 | curl -L -o etcd.zip "https://github.com/coreos/etcd/releases/download/v$LATEST_RELEASE/etcd-v$LATEST_RELEASE-darwin-amd64.zip" 25 | unzip -j -o "etcd.zip" "etcd-v$LATEST_RELEASE-darwin-amd64/etcdctl" 26 | rm -f etcd.zip 27 | echo "etcdctl was copied to ~/coreos-osx-cluster/bin" 28 | echo " " 29 | 30 | # 31 | cd ~/coreos-osx-cluster/control 32 | LATEST_RELEASE=$(vagrant ssh control-01 -c 'fleetctl version' | cut -d " " -f 3- | tr -d '\r') 33 | cd ~/coreos-osx-cluster/bin 34 | echo "Downloading fleetctl v$LATEST_RELEASE for OS X" 35 | curl -L -o fleet.zip "https://github.com/coreos/fleet/releases/download/v$LATEST_RELEASE/fleet-v$LATEST_RELEASE-darwin-amd64.zip" 36 | unzip -j -o "fleet.zip" "fleet-v$LATEST_RELEASE-darwin-amd64/fleetctl" 37 | rm -f fleet.zip 38 | echo "fleetctl was copied to ~/coreos-osx-cluster/bin " 39 | echo " " 40 | 41 | # 42 | echo "Update has finished !!!" 43 | pause 'Press [Enter] key to continue...' 44 | -------------------------------------------------------------------------------- /src/update_vbox.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # update_vbox.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | function pause(){ 10 | read -p "$*" 11 | } 12 | 13 | # 14 | cd ~/coreos-osx-cluster/control 15 | vagrant box update 16 | # 17 | cd ~/coreos-osx-cluster/workers 18 | vagrant box update 19 | 20 | # 21 | echo "Update has finished !!!" 22 | pause 'Press [Enter] key to continue...' 23 | -------------------------------------------------------------------------------- /src/vagrant_control1.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_control.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | cd ~/coreos-osx-cluster/control 10 | vagrant ssh control-01 -- -A 11 | 12 | -------------------------------------------------------------------------------- /src/vagrant_destroy.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_destroy.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | function pause(){ 10 | read -p "$*" 11 | } 12 | 13 | cd ~/coreos-osx-cluster/workers 14 | vagrant destroy 15 | # 16 | cd ~/coreos-osx-cluster/control 17 | vagrant destroy 18 | 19 | pause 'Press [Enter] key to continue...' 20 | -------------------------------------------------------------------------------- /src/vagrant_node1.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_node1.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | cd ~/coreos-osx-cluster/workers 10 | vagrant ssh node-01 -- -A 11 | 12 | -------------------------------------------------------------------------------- /src/vagrant_node2.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_node2.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | cd ~/coreos-osx-cluster/workers 10 | vagrant ssh node-02 -- -A 11 | 12 | -------------------------------------------------------------------------------- /src/vagrant_reload.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_up.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/04/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | function pause(){ 10 | read -p "$*" 11 | } 12 | 13 | cd ~/coreos-osx-cluster/control 14 | vagrant reload 15 | # 16 | cd ~/coreos-osx-cluster/workers 17 | vagrant reload 18 | 19 | # path to the bin folder where we store our binary files 20 | export PATH=${HOME}/coreos-osx-cluster/bin:$PATH 21 | 22 | # set etcd endpoint 23 | export ETCDCTL_PEERS=http://172.17.9.101:2379 24 | export FLEETCTL_DRIVER=etcd 25 | export FLEETCTL_STRICT_HOST_KEY_CHECKING=false 26 | echo "etcd cluster:" 27 | etcdctl --no-sync ls / --recursive 28 | echo " " 29 | 30 | # set fleetctl endpoint 31 | export FLEETCTL_ENDPOINT=http://172.17.9.101:2379 32 | echo "fleetctl list-machines :" 33 | fleetctl list-machines 34 | echo " " 35 | echo "fleetctl list-units:" 36 | fleetctl list-units 37 | echo " " 38 | 39 | echo " " 40 | echo "CoreOS Cluster was reloaded !!!" 41 | echo " " 42 | pause 'Press [Enter] key to continue...' 43 | -------------------------------------------------------------------------------- /src/vagrant_up.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # vagrant_up.command 4 | # CoreOS Cluster for OS X 5 | # 6 | # Created by Rimantas on 01/12/2014. 7 | # Copyright (c) 2014 Rimantas Mocevicius. All rights reserved. 8 | 9 | cd ~/coreos-osx-cluster/control 10 | vagrant up 11 | # 12 | cd ~/coreos-osx-cluster/workers 13 | vagrant up 14 | 15 | # path to the bin folder where we store our binary files 16 | export PATH=${HOME}/coreos-osx-cluster/bin:$PATH 17 | 18 | # set etcd endpoint 19 | export ETCDCTL_PEERS=http://172.17.9.101:2379 20 | echo "etcd cluster:" 21 | etcdctl --no-sync ls / 22 | echo "" 23 | 24 | # set fleetctl endpoint 25 | export FLEETCTL_ENDPOINT=http://172.17.9.101:2379 26 | export FLEETCTL_DRIVER=etcd 27 | export FLEETCTL_STRICT_HOST_KEY_CHECKING=false 28 | echo "fleetctl list-machines:" 29 | sleep 5 30 | fleetctl list-machines 31 | echo " " 32 | cd ~/coreos-osx-cluster/fleet 33 | fleetctl start *.service 34 | echo "fleetctl list-units:" 35 | fleetctl list-units 36 | 37 | cd ~/coreos-osx-cluster/fleet 38 | 39 | # open bash shell 40 | /bin/bash 41 | -------------------------------------------------------------------------------- /src/wget: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rimusz/coreos-cluster-osx/a7d7b03fe83398450647377b6034c88ffe392db1/src/wget --------------------------------------------------------------------------------