├── .gitignore ├── LICENSE ├── README.md ├── accounts ├── __init__.py ├── admin.py ├── api.py ├── apps.py ├── contact.py ├── fixtures │ └── default_user.yaml ├── forms.py ├── migrations │ └── __init__.py ├── models.py ├── permissions.py ├── project.py ├── templatetags │ ├── __init__.py │ └── accounts_tag.py ├── tests.py ├── urls.py └── views.py ├── cmdb ├── __init__.py ├── admin.py ├── api.py ├── apps.py ├── forms.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── commons ├── __init__.py ├── mysql_conn.py └── paginator.py ├── controller ├── __init__.py ├── ansible_api │ ├── __init__.py │ ├── callback.py │ ├── exceptions.py │ ├── get_hosts_api.py │ ├── inventory.py │ ├── playbook_api.py │ ├── runner.py │ ├── test.py │ ├── test_inventory.py │ └── test_runner.py ├── dwebsocket │ ├── __init__.py │ ├── backends │ │ ├── __init__.py │ │ ├── default │ │ │ ├── __init__.py │ │ │ ├── factory.py │ │ │ ├── protocols.py │ │ │ └── websocket.py │ │ └── uwsgi │ │ │ ├── __init__.py │ │ │ └── factory.py │ ├── decorators.py │ ├── factory.py │ ├── middleware.py │ └── websocket.py └── public │ ├── __init__.py │ ├── pagination.py │ └── permissions.py ├── dashboard ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── doc ├── file │ ├── Template.xlsx │ └── kubeconfig.yaml ├── images │ ├── add_fms.jpg │ ├── add_user.jpg │ ├── dashboard.jpg │ ├── fms.jpg │ └── group_perm.jpg ├── install │ ├── OMMSPRE.md │ └── README.md ├── kube │ ├── 00.host-auth.yml │ ├── 01.prepare.yml │ ├── 02.etcd.yml │ ├── 03.docker.yml │ ├── 04.kube-master.yml │ ├── 05.kube-node.yml │ ├── 06.network.yml │ ├── 07.cluster-addon.yml │ ├── 11.harbor.yml │ ├── 19.addetcd.yml │ ├── 20.addnode.yml │ ├── 21.addmaster.yml │ ├── 22.upgrade.yml │ ├── 23.backup.yml │ ├── 24.restore.yml │ ├── 90.setup.yml │ ├── 99.clean.yml │ ├── README.md │ ├── ansible.cfg │ ├── hosts │ ├── hosts.m-masters.example │ ├── hosts.omms │ ├── roles │ │ ├── calico │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── calico-csr.json.j2 │ │ │ │ ├── calico-v3.2.yaml.j2 │ │ │ │ ├── calico-v3.3.yaml.j2 │ │ │ │ ├── calico-v3.4.yaml.j2 │ │ │ │ └── calicoctl.cfg.j2 │ │ ├── chrony │ │ │ ├── chrony.yml │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── client-centos.conf.j2 │ │ │ │ ├── client-ubuntu.conf.j2 │ │ │ │ ├── server-centos.conf.j2 │ │ │ │ └── server-ubuntu.conf.j2 │ │ ├── cilium │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── files │ │ │ │ └── star_war_example │ │ │ │ │ ├── http-sw-app.yaml │ │ │ │ │ ├── sw_l3_l4_l7_policy.yaml │ │ │ │ │ └── sw_l3_l4_policy.yaml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── cilium-csr.json.j2 │ │ │ │ └── cilium.yaml.j2 │ │ ├── cluster-addon │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ ├── ingress.yml │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── coredns.yaml.j2 │ │ │ │ ├── kubedns.yaml.j2 │ │ │ │ └── metallb │ │ │ │ ├── bgp.yaml.j2 │ │ │ │ ├── layer2.yaml.j2 │ │ │ │ └── metallb.yaml.j2 │ │ ├── cluster-backup │ │ │ ├── files │ │ │ │ └── readme.md │ │ │ └── tasks │ │ │ │ └── main.yml │ │ ├── cluster-restore │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ └── tasks │ │ │ │ └── main.yml │ │ ├── cluster-storage │ │ │ ├── cluster-storage.yml │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── files │ │ │ │ └── alicloud-disk.yaml │ │ │ ├── tasks │ │ │ │ ├── alicloud-nas.yml │ │ │ │ ├── main.yml │ │ │ │ └── nfs-client.yml │ │ │ └── templates │ │ │ │ ├── alicloud-nas │ │ │ │ └── alicloud-nas.yaml.j2 │ │ │ │ └── nfs │ │ │ │ └── nfs-client-provisioner.yaml.j2 │ │ ├── deploy │ │ │ ├── create-admin-kubeconfig.yml │ │ │ ├── create-read-kubeconfig.yml │ │ │ ├── files │ │ │ │ └── read-group-rbac.yaml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── admin-csr.json.j2 │ │ │ │ ├── ca-config.json.j2 │ │ │ │ ├── ca-csr.json.j2 │ │ │ │ ├── kube-proxy-csr.json.j2 │ │ │ │ └── read-csr.json.j2 │ │ ├── docker │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── files │ │ │ │ ├── docker │ │ │ │ └── docker-tag │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── daemon.json.j2 │ │ │ │ └── docker.service.j2 │ │ ├── etcd │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── etcd-csr.json.j2 │ │ │ │ └── etcd.service.j2 │ │ ├── ex-lb │ │ │ ├── clean-ex-lb.yml │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── ex-lb.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── haproxy.cfg.j2 │ │ │ │ ├── haproxy.service.j2 │ │ │ │ ├── keepalived-backup.conf.j2 │ │ │ │ └── keepalived-master.conf.j2 │ │ ├── flannel │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ └── kube-flannel.yaml.j2 │ │ ├── harbor │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── harbor-csr.json.j2 │ │ │ │ ├── harbor-v1.5.cfg.j2 │ │ │ │ └── harbor-v1.6.cfg.j2 │ │ ├── helm │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── helm.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── helm-csr.json.j2 │ │ │ │ ├── helm-rbac.yaml.j2 │ │ │ │ ├── strict-helm-rbac.yaml.j2 │ │ │ │ └── tiller-csr.json.j2 │ │ ├── host-auth │ │ │ ├── files │ │ │ │ ├── auth.py │ │ │ │ └── pexpect-3.3.zip │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ └── host_list.txt.j2 │ │ ├── kube-master │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── aggregator-proxy-csr.json.j2 │ │ │ │ ├── basic-auth.csv.j2 │ │ │ │ ├── kube-apiserver-v1.8.service.j2 │ │ │ │ ├── kube-apiserver.service.j2 │ │ │ │ ├── kube-controller-manager.service.j2 │ │ │ │ ├── kube-scheduler.service.j2 │ │ │ │ └── kubernetes-csr.json.j2 │ │ ├── kube-node │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── cni-default.conf.j2 │ │ │ │ ├── kube-proxy.service.j2 │ │ │ │ ├── kubelet-csr.json.j2 │ │ │ │ └── kubelet.service.j2 │ │ ├── kube-router │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── kube-router.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── kuberouter-all.yaml.j2 │ │ │ │ └── kuberouter.yaml.j2 │ │ ├── lb │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── lb.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── haproxy.cfg.j2 │ │ │ │ ├── haproxy.service.j2 │ │ │ │ ├── keepalived-backup.conf.j2 │ │ │ │ └── keepalived-master.conf.j2 │ │ ├── new-etcd │ │ │ ├── clean-etcd.yml │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ └── main.yml │ │ │ └── templates │ │ │ │ ├── etcd-csr.json.j2 │ │ │ │ └── etcd.service.j2 │ │ ├── os-harden │ │ │ ├── README.md │ │ │ ├── defaults │ │ │ │ └── main.yml │ │ │ ├── meta │ │ │ │ └── main.yml │ │ │ ├── os-harden.yml │ │ │ ├── tasks │ │ │ │ ├── apt.yml │ │ │ │ ├── auditd.yml │ │ │ │ ├── find_files.yml │ │ │ │ ├── hardening.yml │ │ │ │ ├── limits.yml │ │ │ │ ├── login_defs.yml │ │ │ │ ├── main.yml │ │ │ │ ├── minimize_access.yml │ │ │ │ ├── modprobe.yml │ │ │ │ ├── pam.yml │ │ │ │ ├── profile.yml │ │ │ │ ├── rhosts.yml │ │ │ │ ├── securetty.yml │ │ │ │ ├── suid_sgid.yml │ │ │ │ ├── sysctl.yml │ │ │ │ ├── user_accounts.yml │ │ │ │ └── yum.yml │ │ │ ├── templates │ │ │ │ ├── etc │ │ │ │ │ ├── audit │ │ │ │ │ │ └── auditd.conf.j2 │ │ │ │ │ ├── default │ │ │ │ │ │ └── ufw.j2 │ │ │ │ │ ├── initramfs-tools │ │ │ │ │ │ └── modules.j2 │ │ │ │ │ ├── login.defs.j2 │ │ │ │ │ ├── modprobe.d │ │ │ │ │ │ └── modprobe.j2 │ │ │ │ │ ├── pam.d │ │ │ │ │ │ └── rhel_system_auth.j2 │ │ │ │ │ ├── profile.d │ │ │ │ │ │ └── profile.conf.j2 │ │ │ │ │ ├── rhel_libuser.conf.j2 │ │ │ │ │ ├── securetty.j2 │ │ │ │ │ └── sysconfig │ │ │ │ │ │ └── rhel_sysconfig_init.j2 │ │ │ │ └── usr │ │ │ │ │ └── share │ │ │ │ │ └── pam-configs │ │ │ │ │ ├── pam_passwdqd.j2 │ │ │ │ │ └── pam_tally2.j2 │ │ │ └── vars │ │ │ │ ├── Amazon.yml │ │ │ │ ├── Debian.yml │ │ │ │ ├── Oracle Linux.yml │ │ │ │ ├── RedHat-6.yml │ │ │ │ ├── RedHat.yml │ │ │ │ └── main.yml │ │ └── prepare │ │ │ ├── tasks │ │ │ ├── centos.yml │ │ │ ├── common.yml │ │ │ ├── debian.yml │ │ │ └── main.yml │ │ │ └── templates │ │ │ ├── 10-k8s-modules.conf.j2 │ │ │ ├── 30-k8s-ulimits.conf.j2 │ │ │ └── 95-k8s-sysctl.conf.j2 │ └── test.yml └── scripts │ └── install_webssh.sh ├── kube ├── __init__.py ├── admin.py ├── apps.py ├── forms.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── manage.py ├── monitor ├── __init__.py ├── admin.py ├── api.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── omms ├── Dockerfile ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ├── release ├── __init__.py ├── admin.py ├── api.py ├── apps.py ├── forms.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── requirements.txt ├── static ├── css │ ├── animate.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ ├── endless.min.css │ ├── patterns │ │ ├── congruent_pentagon.png │ │ ├── header-profile-skin-1.png │ │ ├── header-profile-skin-2.png │ │ ├── header-profile-skin-3.png │ │ ├── header-profile.png │ │ ├── otis_redding.png │ │ ├── shattered.png │ │ └── triangular.png │ ├── plugins │ │ ├── chosen │ │ │ ├── chosen-sprite.png │ │ │ ├── chosen-sprite@2x.png │ │ │ └── chosen.css │ │ ├── codemirror │ │ │ ├── ambiance.css │ │ │ ├── codemirror.css │ │ │ └── fold │ │ │ │ └── foldgutter.css │ │ ├── fileinput │ │ │ └── fileinput.min.css │ │ ├── font-awesome │ │ │ ├── css │ │ │ │ ├── font-awesome.css │ │ │ │ └── font-awesome.min.css │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ └── fontawesome-webfont.woff │ │ │ ├── less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── core.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── icons.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── mixins.less │ │ │ │ ├── path.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── spinning.less │ │ │ │ ├── stacked.less │ │ │ │ └── variables.less │ │ │ └── scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _spinning.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _variables.scss │ │ │ │ └── font-awesome.scss │ │ ├── iCheck │ │ │ ├── custom.css │ │ │ ├── green.png │ │ │ └── green@2x.png │ │ ├── morris │ │ │ └── morris-0.4.3.min.css │ │ └── select2 │ │ │ └── select2.min.css │ ├── style.css │ └── style.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── img │ ├── Down.gif │ ├── Up.gif │ ├── a1.jpg │ ├── a2.jpg │ ├── a3.jpg │ ├── a4.jpg │ ├── a5.jpg │ ├── a6.jpg │ ├── a7.jpg │ ├── a8.jpg │ ├── angular_logo.png │ ├── email_1.jpg │ ├── email_2.jpg │ ├── email_3.jpg │ ├── p.ico │ ├── p1.jpg │ ├── p2.jpg │ ├── p3.jpg │ ├── p4.jpg │ ├── p5.jpg │ ├── p6.jpg │ ├── p7.jpg │ ├── p8.jpg │ ├── p_big1.jpg │ ├── p_big2.jpg │ ├── p_big3.jpg │ ├── profile.jpg │ ├── profile_big.jpg │ ├── profile_small.jpg │ └── zender_logo.png └── js │ ├── bootstrap-notify.min.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── datatables.min.js │ ├── demo │ ├── chartjs-demo.js │ ├── dashboard-demo.js │ ├── flot-demo.js │ ├── flot-demo2.js │ ├── morris-demo.js │ ├── peity-demo.js │ ├── rickshaw-demo.js │ └── sparkline-demo.js │ ├── echarts.js │ ├── inspinia.js │ ├── jquery-1.10.2.min.js │ ├── jquery-2.1.1.js │ ├── jquery-3.1.1.min.js │ ├── jquery-ui-1.10.4.min.js │ ├── jquery-ui.custom.min.js │ ├── jquery.cookie.min.js │ ├── jquery.popupoverlay.min.js │ ├── jquery.slimscroll.min.js │ ├── modernizr.min.js │ ├── morris.min.js │ ├── ops.js │ ├── pace.min.js │ └── plugins │ ├── chartJs │ └── Chart.min.js │ ├── chosen │ └── chosen.jquery.js │ ├── codemirror │ ├── codemirror.js │ ├── edit │ │ └── matchbrackets.js │ ├── fold │ │ ├── brace-fold.js │ │ ├── comment-fold.js │ │ ├── foldcode.js │ │ ├── foldgutter.js │ │ ├── indent-fold.js │ │ ├── markdown-fold.js │ │ └── xml-fold.js │ └── mode │ │ ├── apl │ │ ├── apl.js │ │ └── index.html │ │ ├── asterisk │ │ ├── asterisk.js │ │ └── index.html │ │ ├── clike │ │ ├── clike.js │ │ ├── index.html │ │ └── scala.html │ │ ├── clojure │ │ ├── clojure.js │ │ └── index.html │ │ ├── cobol │ │ ├── cobol.js │ │ └── index.html │ │ ├── coffeescript │ │ ├── coffeescript.js │ │ └── index.html │ │ ├── commonlisp │ │ ├── commonlisp.js │ │ └── index.html │ │ ├── css │ │ ├── css.js │ │ ├── index.html │ │ ├── less.html │ │ ├── less_test.js │ │ ├── scss.html │ │ ├── scss_test.js │ │ └── test.js │ │ ├── cypher │ │ ├── cypher.js │ │ └── index.html │ │ ├── d │ │ ├── d.js │ │ └── index.html │ │ ├── diff │ │ ├── diff.js │ │ └── index.html │ │ ├── django │ │ ├── django.js │ │ └── index.html │ │ ├── dtd │ │ ├── dtd.js │ │ └── index.html │ │ ├── dylan │ │ ├── dylan.js │ │ └── index.html │ │ ├── ecl │ │ ├── ecl.js │ │ └── index.html │ │ ├── eiffel │ │ ├── eiffel.js │ │ └── index.html │ │ ├── erlang │ │ ├── erlang.js │ │ └── index.html │ │ ├── fortran │ │ ├── fortran.js │ │ └── index.html │ │ ├── gas │ │ ├── gas.js │ │ └── index.html │ │ ├── gfm │ │ ├── gfm.js │ │ ├── index.html │ │ └── test.js │ │ ├── gherkin │ │ ├── gherkin.js │ │ └── index.html │ │ ├── go │ │ ├── go.js │ │ └── index.html │ │ ├── groovy │ │ ├── groovy.js │ │ └── index.html │ │ ├── haml │ │ ├── haml.js │ │ ├── index.html │ │ └── test.js │ │ ├── haskell │ │ ├── haskell.js │ │ └── index.html │ │ ├── haxe │ │ ├── haxe.js │ │ └── index.html │ │ ├── htmlembedded │ │ ├── htmlembedded.js │ │ └── index.html │ │ ├── htmlmixed │ │ ├── htmlmixed.js │ │ └── index.html │ │ ├── http │ │ ├── http.js │ │ └── index.html │ │ ├── index.html │ │ ├── jade │ │ ├── index.html │ │ └── jade.js │ │ ├── javascript │ │ ├── index.html │ │ ├── javascript.js │ │ ├── json-ld.html │ │ ├── test.js │ │ └── typescript.html │ │ ├── jinja2 │ │ ├── index.html │ │ └── jinja2.js │ │ ├── julia │ │ ├── index.html │ │ └── julia.js │ │ ├── kotlin │ │ ├── index.html │ │ └── kotlin.js │ │ ├── livescript │ │ ├── index.html │ │ └── livescript.js │ │ ├── lua │ │ ├── index.html │ │ └── lua.js │ │ ├── markdown │ │ ├── index.html │ │ ├── markdown.js │ │ └── test.js │ │ ├── meta.js │ │ ├── mirc │ │ ├── index.html │ │ └── mirc.js │ │ ├── mllike │ │ ├── index.html │ │ └── mllike.js │ │ ├── modelica │ │ ├── index.html │ │ └── modelica.js │ │ ├── nginx │ │ ├── index.html │ │ └── nginx.js │ │ ├── ntriples │ │ ├── index.html │ │ └── ntriples.js │ │ ├── octave │ │ ├── index.html │ │ └── octave.js │ │ ├── pascal │ │ ├── index.html │ │ └── pascal.js │ │ ├── pegjs │ │ ├── index.html │ │ └── pegjs.js │ │ ├── perl │ │ ├── index.html │ │ └── perl.js │ │ ├── php │ │ ├── index.html │ │ ├── php.js │ │ └── test.js │ │ ├── pig │ │ ├── index.html │ │ └── pig.js │ │ ├── properties │ │ ├── index.html │ │ └── properties.js │ │ ├── puppet │ │ ├── index.html │ │ └── puppet.js │ │ ├── python │ │ ├── index.html │ │ └── python.js │ │ ├── q │ │ ├── index.html │ │ └── q.js │ │ ├── r │ │ ├── index.html │ │ └── r.js │ │ ├── rpm │ │ ├── changes │ │ │ └── index.html │ │ ├── index.html │ │ └── rpm.js │ │ ├── rst │ │ ├── index.html │ │ └── rst.js │ │ ├── ruby │ │ ├── index.html │ │ ├── ruby.js │ │ └── test.js │ │ ├── rust │ │ ├── index.html │ │ └── rust.js │ │ ├── sass │ │ ├── index.html │ │ └── sass.js │ │ ├── scheme │ │ ├── index.html │ │ └── scheme.js │ │ ├── shell │ │ ├── index.html │ │ ├── shell.js │ │ └── test.js │ │ ├── sieve │ │ ├── index.html │ │ └── sieve.js │ │ ├── slim │ │ ├── index.html │ │ ├── slim.js │ │ └── test.js │ │ ├── smalltalk │ │ ├── index.html │ │ └── smalltalk.js │ │ ├── smarty │ │ ├── index.html │ │ └── smarty.js │ │ ├── smartymixed │ │ ├── index.html │ │ └── smartymixed.js │ │ ├── solr │ │ ├── index.html │ │ └── solr.js │ │ ├── sparql │ │ ├── index.html │ │ └── sparql.js │ │ ├── sql │ │ ├── index.html │ │ └── sql.js │ │ ├── stex │ │ ├── index.html │ │ ├── stex.js │ │ └── test.js │ │ ├── tcl │ │ ├── index.html │ │ └── tcl.js │ │ ├── textile │ │ ├── index.html │ │ ├── test.js │ │ └── textile.js │ │ ├── tiddlywiki │ │ ├── index.html │ │ ├── tiddlywiki.css │ │ └── tiddlywiki.js │ │ ├── tiki │ │ ├── index.html │ │ ├── tiki.css │ │ └── tiki.js │ │ ├── toml │ │ ├── index.html │ │ └── toml.js │ │ ├── tornado │ │ ├── index.html │ │ └── tornado.js │ │ ├── turtle │ │ ├── index.html │ │ └── turtle.js │ │ ├── vb │ │ ├── index.html │ │ └── vb.js │ │ ├── vbscript │ │ ├── index.html │ │ └── vbscript.js │ │ ├── velocity │ │ ├── index.html │ │ └── velocity.js │ │ ├── verilog │ │ ├── index.html │ │ ├── test.js │ │ └── verilog.js │ │ ├── xml │ │ ├── index.html │ │ ├── test.js │ │ └── xml.js │ │ ├── xquery │ │ ├── index.html │ │ ├── test.js │ │ └── xquery.js │ │ ├── yaml │ │ ├── index.html │ │ └── yaml.js │ │ └── z80 │ │ ├── index.html │ │ └── z80.js │ ├── datetimepicker │ ├── css │ │ ├── bootstrap-datetimepicker.css │ │ └── bootstrap-datetimepicker.min.css │ └── js │ │ ├── bootstrap-datetimepicker.js │ │ └── bootstrap-datetimepicker.min.js │ ├── echart │ ├── echarts.js │ ├── line.js │ ├── macarons.js │ ├── pie.js │ ├── tree.js │ ├── vintage.js │ └── vintage.json │ ├── editormd │ ├── editormd.css │ ├── editormd.min.js │ ├── editormd.preview.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── editormd-logo.eot │ │ ├── editormd-logo.svg │ │ ├── editormd-logo.ttf │ │ ├── editormd-logo.woff │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── images │ │ ├── loading.gif │ │ ├── loading@2x.gif │ │ ├── loading@3x.gif │ │ └── logos │ │ │ ├── editormd-favicon-16x16.ico │ │ │ ├── editormd-favicon-24x24.ico │ │ │ ├── editormd-favicon-32x32.ico │ │ │ ├── editormd-favicon-48x48.ico │ │ │ ├── editormd-favicon-64x64.ico │ │ │ ├── editormd-logo-114x114.png │ │ │ ├── editormd-logo-120x120.png │ │ │ ├── editormd-logo-144x144.png │ │ │ ├── editormd-logo-16x16.png │ │ │ ├── editormd-logo-180x180.png │ │ │ ├── editormd-logo-240x240.png │ │ │ ├── editormd-logo-24x24.png │ │ │ ├── editormd-logo-320x320.png │ │ │ ├── editormd-logo-32x32.png │ │ │ ├── editormd-logo-48x48.png │ │ │ ├── editormd-logo-57x57.png │ │ │ ├── editormd-logo-64x64.png │ │ │ ├── editormd-logo-72x72.png │ │ │ ├── editormd-logo-96x96.png │ │ │ └── vi.png │ └── plugins │ │ ├── code-block-dialog │ │ └── code-block-dialog.js │ │ ├── emoji-dialog │ │ ├── emoji-dialog.js │ │ └── emoji.json │ │ ├── goto-line-dialog │ │ └── goto-line-dialog.js │ │ ├── help-dialog │ │ ├── help-dialog.js │ │ └── help.md │ │ ├── html-entities-dialog │ │ ├── html-entities-dialog.js │ │ └── html-entities.json │ │ ├── image-dialog │ │ └── image-dialog.js │ │ ├── link-dialog │ │ └── link-dialog.js │ │ ├── plugin-template.js │ │ ├── preformatted-text-dialog │ │ └── preformatted-text-dialog.js │ │ ├── reference-link-dialog │ │ └── reference-link-dialog.js │ │ ├── table-dialog │ │ └── table-dialog.js │ │ └── test-plugin │ │ └── test-plugin.js │ ├── endless │ ├── endless.js │ ├── endless_dashboard.js │ ├── endless_form.js │ └── endless_wizard.js │ ├── fileinput │ ├── fileinput.min.js │ └── locales │ │ ├── LANG.js │ │ ├── ar.js │ │ ├── az.js │ │ ├── bg.js │ │ ├── ca.js │ │ ├── cr.js │ │ ├── cs.js │ │ ├── da.js │ │ ├── de.js │ │ ├── el.js │ │ ├── es.js │ │ ├── et.js │ │ ├── fa.js │ │ ├── fi.js │ │ ├── fr.js │ │ ├── gl.js │ │ ├── hu.js │ │ ├── id.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── kr.js │ │ ├── kz.js │ │ ├── lt.js │ │ ├── nl.js │ │ ├── no.js │ │ ├── pl.js │ │ ├── pt-BR.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sl.js │ │ ├── sv.js │ │ ├── th.js │ │ ├── tr.js │ │ ├── uk.js │ │ ├── vi.js │ │ ├── zh-TW.js │ │ └── zh.js │ ├── flot │ ├── curvedLines.js │ ├── excanvas.min.js │ ├── jquery.flot.js │ ├── jquery.flot.pie.js │ ├── jquery.flot.resize.js │ ├── jquery.flot.spline.js │ ├── jquery.flot.symbol.js │ └── jquery.flot.tooltip.min.js │ ├── iCheck │ └── icheck.min.js │ ├── jquery-ui │ ├── i18n │ │ ├── jquery-ui-i18n.min.js │ │ ├── jquery.ui.datepicker-af.min.js │ │ ├── jquery.ui.datepicker-ar-DZ.min.js │ │ ├── jquery.ui.datepicker-ar.min.js │ │ ├── jquery.ui.datepicker-az.min.js │ │ ├── jquery.ui.datepicker-be.min.js │ │ ├── jquery.ui.datepicker-bg.min.js │ │ ├── jquery.ui.datepicker-bs.min.js │ │ ├── jquery.ui.datepicker-ca.min.js │ │ ├── jquery.ui.datepicker-cs.min.js │ │ ├── jquery.ui.datepicker-cy-GB.min.js │ │ ├── jquery.ui.datepicker-da.min.js │ │ ├── jquery.ui.datepicker-de.min.js │ │ ├── jquery.ui.datepicker-el.min.js │ │ ├── jquery.ui.datepicker-en-AU.min.js │ │ ├── jquery.ui.datepicker-en-GB.min.js │ │ ├── jquery.ui.datepicker-en-NZ.min.js │ │ ├── jquery.ui.datepicker-eo.min.js │ │ ├── jquery.ui.datepicker-es.min.js │ │ ├── jquery.ui.datepicker-et.min.js │ │ ├── jquery.ui.datepicker-eu.min.js │ │ ├── jquery.ui.datepicker-fa.min.js │ │ ├── jquery.ui.datepicker-fi.min.js │ │ ├── jquery.ui.datepicker-fo.min.js │ │ ├── jquery.ui.datepicker-fr-CA.min.js │ │ ├── jquery.ui.datepicker-fr-CH.min.js │ │ ├── jquery.ui.datepicker-fr.min.js │ │ ├── jquery.ui.datepicker-gl.min.js │ │ ├── jquery.ui.datepicker-he.min.js │ │ ├── jquery.ui.datepicker-hi.min.js │ │ ├── jquery.ui.datepicker-hr.min.js │ │ ├── jquery.ui.datepicker-hu.min.js │ │ ├── jquery.ui.datepicker-hy.min.js │ │ ├── jquery.ui.datepicker-id.min.js │ │ ├── jquery.ui.datepicker-is.min.js │ │ ├── jquery.ui.datepicker-it.min.js │ │ ├── jquery.ui.datepicker-ja.min.js │ │ ├── jquery.ui.datepicker-ka.min.js │ │ ├── jquery.ui.datepicker-kk.min.js │ │ ├── jquery.ui.datepicker-km.min.js │ │ ├── jquery.ui.datepicker-ko.min.js │ │ ├── jquery.ui.datepicker-ky.min.js │ │ ├── jquery.ui.datepicker-lb.min.js │ │ ├── jquery.ui.datepicker-lt.min.js │ │ ├── jquery.ui.datepicker-lv.min.js │ │ ├── jquery.ui.datepicker-mk.min.js │ │ ├── jquery.ui.datepicker-ml.min.js │ │ ├── jquery.ui.datepicker-ms.min.js │ │ ├── jquery.ui.datepicker-nb.min.js │ │ ├── jquery.ui.datepicker-nl-BE.min.js │ │ ├── jquery.ui.datepicker-nl.min.js │ │ ├── jquery.ui.datepicker-nn.min.js │ │ ├── jquery.ui.datepicker-no.min.js │ │ ├── jquery.ui.datepicker-pl.min.js │ │ ├── jquery.ui.datepicker-pt-BR.min.js │ │ ├── jquery.ui.datepicker-pt.min.js │ │ ├── jquery.ui.datepicker-rm.min.js │ │ ├── jquery.ui.datepicker-ro.min.js │ │ ├── jquery.ui.datepicker-ru.min.js │ │ ├── jquery.ui.datepicker-sk.min.js │ │ ├── jquery.ui.datepicker-sl.min.js │ │ ├── jquery.ui.datepicker-sq.min.js │ │ ├── jquery.ui.datepicker-sr-SR.min.js │ │ ├── jquery.ui.datepicker-sr.min.js │ │ ├── jquery.ui.datepicker-sv.min.js │ │ ├── jquery.ui.datepicker-ta.min.js │ │ ├── jquery.ui.datepicker-th.min.js │ │ ├── jquery.ui.datepicker-tj.min.js │ │ ├── jquery.ui.datepicker-tr.min.js │ │ ├── jquery.ui.datepicker-uk.min.js │ │ ├── jquery.ui.datepicker-vi.min.js │ │ ├── jquery.ui.datepicker-zh-CN.min.js │ │ ├── jquery.ui.datepicker-zh-HK.min.js │ │ └── jquery.ui.datepicker-zh-TW.min.js │ ├── images │ │ ├── animated-overlay.gif │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ ├── jquery-ui.css │ ├── jquery-ui.js │ ├── jquery-ui.min.css │ └── jquery-ui.min.js │ ├── jvectormap │ ├── jquery-jvectormap-1.2.2.min.js │ └── jquery-jvectormap-world-mill-en.js │ ├── layer │ ├── layer.js │ └── skin │ │ ├── default │ │ ├── icon-ext.png │ │ ├── icon.png │ │ ├── loading-0.gif │ │ ├── loading-1.gif │ │ └── loading-2.gif │ │ └── layer.css │ ├── metisMenu │ └── jquery.metisMenu.js │ ├── pace │ └── pace.min.js │ ├── peity │ └── jquery.peity.min.js │ ├── select2 │ └── select2.full.min.js │ ├── slimscroll │ ├── jquery.slimscroll.js │ └── jquery.slimscroll.min.js │ └── sparkline │ └── jquery.sparkline.min.js ├── tasks ├── __init__.py ├── admin.py ├── apps.py ├── form.py ├── migrations │ └── __init__.py ├── models.py ├── script │ ├── 1.sh │ └── test.sh ├── task.py ├── tests.py ├── urls.py └── views.py ├── templates ├── 403.html ├── accounts │ ├── contact.html │ ├── contact_modal.html │ ├── contact_table.html │ ├── login-old.html │ ├── login.html │ └── user │ │ ├── group.html │ │ ├── group_modal.html │ │ ├── group_table.html │ │ ├── permission.html │ │ ├── permission_modal.html │ │ ├── user.html │ │ ├── user_add.html │ │ ├── user_content.html │ │ ├── user_edit.html │ │ └── user_table.html ├── base │ ├── base_site.html │ ├── footer.html │ ├── sidebar.html │ └── top_nav.html ├── cmdb │ ├── group.html │ ├── group_server_detail.html │ ├── group_server_modal.html │ ├── group_server_table.html │ ├── group_table.html │ ├── idc.html │ ├── idc_server_detail.html │ ├── idc_server_modal.html │ ├── idc_server_table.html │ ├── idc_table.html │ ├── index-old.html │ ├── server.html │ ├── server_add.html │ ├── server_edit.html │ ├── server_modal.html │ ├── server_table.html │ ├── user.html │ └── user_table.html ├── common │ └── paginator.html ├── dashboard │ └── index.html ├── error.html ├── kube │ ├── container.html │ ├── container_table.html │ ├── kube.html │ ├── kube_add.html │ ├── kube_form.html │ ├── kube_modal.html │ └── kube_table.html ├── mail │ └── detail_template.html ├── monitor │ ├── graph.html │ ├── server.html │ └── server_table.html ├── release │ ├── app.html │ ├── app_modal.html │ ├── app_server_detail.html │ ├── app_server_modal.html │ ├── app_server_table.html │ ├── app_table.html │ ├── platform.html │ ├── platform_app_detail.html │ ├── platform_app_modal.html │ ├── platform_app_table.html │ ├── platform_table.html │ ├── release_plan.html │ ├── release_plan_modal.html │ └── release_plan_table.html └── tasks │ ├── cmd.html │ ├── deploy_maven_jar.html │ ├── k8s-install.html │ ├── k8s.html │ ├── k8s_modal.html │ ├── software_install.html │ ├── test.html │ ├── tools-add.html │ ├── tools-add_table.html │ ├── tools-script.html │ ├── tools-update.html │ ├── tools.html │ └── tools_table.html └── uwsgi.ini /accounts/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Author: smallmi 3 | Blog: http://www.smallmi.com 4 | ''' -------------------------------------------------------------------------------- /accounts/admin.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Author: smallmi 3 | Blog: http://www.smallmi.com 4 | ''' 5 | 6 | # Register your models here. 7 | -------------------------------------------------------------------------------- /accounts/api.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.shortcuts import render_to_response 7 | from commons.paginator import paginator 8 | from accounts.models import User 9 | from django.db.models import Q 10 | 11 | def user_search(request): 12 | 13 | data = {} 14 | search = request.GET.get("search") 15 | user = User.objects.filter(Q(group__name__icontains=search) | Q(username__icontains=search) | Q(email__icontains=search) | Q(fullname__icontains=search) | Q(mobile__icontains=search)) 16 | data = paginator(request, user) 17 | return render_to_response('accounts/user/user_table.html',data) -------------------------------------------------------------------------------- /accounts/apps.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Author: smallmi 3 | Blog: http://www.smallmi.com 4 | ''' 5 | from django.apps import AppConfig 6 | 7 | 8 | class AccountsConfig(AppConfig): 9 | name = 'accounts' 10 | -------------------------------------------------------------------------------- /accounts/fixtures/default_user.yaml: -------------------------------------------------------------------------------- 1 | - model: accounts.user 2 | pk: 1 3 | fields: 4 | username: admin 5 | email: admin@smallmi.com 6 | fullname: smallmi 7 | is_active: 1 8 | is_superuser: 1 9 | password: pbkdf2_sha256$36000$bwOL2ef45UxQ$gllF7f7tlz9xskknOhqcanFFpez+4yWW5QNXJDgpcS8= 10 | date_joined: 2017-09-15 11 | 12 | - model: tasks.InstallYaml 13 | pk: 1 14 | fields: 15 | service: k8s 16 | yaml_path: /etc/ansible/90.setup.yml 17 | tasks: install 18 | 19 | - model: tasks.InstallYaml 20 | pk: 2 21 | fields: 22 | service: k8s 23 | yaml_path: /etc/ansible/99.clean.yml 24 | tasks: uninstall 25 | 26 | - model: tasks.InstallYaml 27 | pk: 3 28 | fields: 29 | service: ceph 30 | yaml_path: /etc/ansible/30.setup.yml 31 | tasks: install 32 | 33 | - model: tasks.InstallYaml 34 | pk: 4 35 | fields: 36 | service: ceph 37 | yaml_path: /etc/ansible/59.clean.yml 38 | tasks: uninstall 39 | -------------------------------------------------------------------------------- /accounts/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/accounts/migrations/__init__.py -------------------------------------------------------------------------------- /accounts/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/accounts/templatetags/__init__.py -------------------------------------------------------------------------------- /accounts/templatetags/accounts_tag.py: -------------------------------------------------------------------------------- 1 | # -*- encoding:utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django import template 7 | 8 | register = template.Library() 9 | 10 | @register.filter() 11 | def usetostr(value): 12 | 13 | data = [] 14 | for v in value: 15 | data.append("%s(%s)"%(v.username,v.fullname)) 16 | 17 | if data: 18 | data = (',').join(data) 19 | return data 20 | 21 | @register.filter() 22 | def grouptostr(value): 23 | 24 | data = [] 25 | for v in value: 26 | data.append("%s"%(v.name)) 27 | 28 | if data: 29 | data = (',').join(data) 30 | return data 31 | 32 | @register.filter() 33 | def gsetostr(value): 34 | 35 | data = [] 36 | for v in value: 37 | data.append(v.name) 38 | 39 | if data: 40 | data = (',').join(data) 41 | return data -------------------------------------------------------------------------------- /accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | # Create your tests here. 7 | -------------------------------------------------------------------------------- /cmdb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/cmdb/__init__.py -------------------------------------------------------------------------------- /cmdb/admin.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Author: smallmi 3 | Blog: http://www.smallmi.com 4 | ''' 5 | 6 | # Register your models here. 7 | -------------------------------------------------------------------------------- /cmdb/apps.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Author: smallmi 3 | Blog: http://www.smallmi.com 4 | ''' 5 | from __future__ import unicode_literals 6 | 7 | from django.apps import AppConfig 8 | 9 | 10 | class CmdbConfig(AppConfig): 11 | name = 'cmdb' 12 | -------------------------------------------------------------------------------- /cmdb/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/cmdb/migrations/__init__.py -------------------------------------------------------------------------------- /commons/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/commons/__init__.py -------------------------------------------------------------------------------- /commons/paginator.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 7 | 8 | def paginator(request,model_data): 9 | 10 | data = {} 11 | current_page = request.GET.get("page", 1) 12 | page_number = request.GET.get("pagenumber", 30) 13 | 14 | pages = Paginator(model_data, page_number) 15 | try: 16 | content = pages.page(current_page) 17 | except EmptyPage: 18 | content = pages.page(1) 19 | data["pagenumber"] = page_number 20 | data["content"] = content 21 | data["pages"] = pages 22 | data["request"] = request 23 | 24 | return data 25 | -------------------------------------------------------------------------------- /controller/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/__init__.py -------------------------------------------------------------------------------- /controller/ansible_api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/ansible_api/__init__.py -------------------------------------------------------------------------------- /controller/ansible_api/exceptions.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # 8 | 9 | __all__ = [ 10 | 'AnsibleError' 11 | ] 12 | 13 | 14 | class AnsibleError(Exception): 15 | pass 16 | -------------------------------------------------------------------------------- /controller/dwebsocket/__init__.py: -------------------------------------------------------------------------------- 1 | from .decorators import * 2 | -------------------------------------------------------------------------------- /controller/dwebsocket/backends/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/dwebsocket/backends/__init__.py -------------------------------------------------------------------------------- /controller/dwebsocket/backends/default/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/dwebsocket/backends/default/__init__.py -------------------------------------------------------------------------------- /controller/dwebsocket/backends/uwsgi/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/dwebsocket/backends/uwsgi/__init__.py -------------------------------------------------------------------------------- /controller/public/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/controller/public/__init__.py -------------------------------------------------------------------------------- /controller/public/permissions.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | 8 | import six 9 | 10 | 11 | def check_perms(request, perm, raise_exception=False): 12 | user = request.user 13 | if isinstance(perm, six.string_types): 14 | perms = (perm, ) 15 | else: 16 | perms = perm 17 | # First check if the user has the permission (even anon users) 18 | if user.has_perms(perms): 19 | return True 20 | # In case the 403 handler should be called raise the exception 21 | if raise_exception: 22 | # raise PermissionDenied 23 | return False -------------------------------------------------------------------------------- /dashboard/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/dashboard/__init__.py -------------------------------------------------------------------------------- /dashboard/admin.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # Register your models here. 8 | -------------------------------------------------------------------------------- /dashboard/apps.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.apps import AppConfig 7 | 8 | 9 | class DashboardConfig(AppConfig): 10 | name = 'dashboard' 11 | -------------------------------------------------------------------------------- /dashboard/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/dashboard/migrations/__init__.py -------------------------------------------------------------------------------- /dashboard/models.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # Create your models here. 8 | -------------------------------------------------------------------------------- /dashboard/tests.py: -------------------------------------------------------------------------------- 1 | a=[1,2,4,5] 2 | print('{0}'.format(tuple(a))) -------------------------------------------------------------------------------- /dashboard/urls.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from __future__ import unicode_literals 7 | 8 | from django.conf.urls import url 9 | from dashboard import views 10 | 11 | urlpatterns = [ 12 | 13 | url(r'^$', views.index, name='dashboard_index'), 14 | ] 15 | -------------------------------------------------------------------------------- /dashboard/views.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.shortcuts import render_to_response 7 | from accounts.models import User 8 | from cmdb.models import Server 9 | from release.models import Platform, AppProject 10 | 11 | 12 | def index(request): 13 | 14 | request.breadcrumbs((('仪表盘', '/'),)) 15 | users_count = User.objects.count() 16 | hosts_count = Server.objects.count() 17 | platform_count = Platform.objects.count() 18 | app_count = AppProject.objects.count() 19 | return render_to_response('dashboard/index.html', {'request': request, 'users_count': users_count, 'hosts_count': hosts_count, 'platform_count': platform_count, 'app_count': app_count}) 20 | -------------------------------------------------------------------------------- /doc/file/Template.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/file/Template.xlsx -------------------------------------------------------------------------------- /doc/images/add_fms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/images/add_fms.jpg -------------------------------------------------------------------------------- /doc/images/add_user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/images/add_user.jpg -------------------------------------------------------------------------------- /doc/images/dashboard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/images/dashboard.jpg -------------------------------------------------------------------------------- /doc/images/fms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/images/fms.jpg -------------------------------------------------------------------------------- /doc/images/group_perm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/images/group_perm.jpg -------------------------------------------------------------------------------- /doc/install/OMMSPRE.md: -------------------------------------------------------------------------------- 1 | ## 界面预览: 2 | 以下只是部分功能界面预览,更多功能请安装体验,请点击安装指南 3 | 4 | ![资产页面](https://gitee.com/uploads/images/2017/1103/163547_29bfb40b_1521920.png "1.png") 5 | 6 | ![资产组页面](https://gitee.com/uploads/images/2017/1103/163605_b696ec54_1521920.png "2.png") 7 | 8 | ![登录用户页面](https://gitee.com/uploads/images/2017/1103/163642_d9e5b600_1521920.png "3.png") 9 | 10 | ![k8s安装页面](https://images.gitee.com/uploads/images/2019/0307/115024_36f1a556_1521920.png) 11 | 12 | ![监控页面1](https://images.gitee.com/uploads/images/2019/0129/164022_60343dd9_1521920.jpeg) 13 | 14 | ![监控页面2](https://images.gitee.com/uploads/images/2019/0129/164112_7780e34b_1521920.png) -------------------------------------------------------------------------------- /doc/kube/00.host-auth.yml: -------------------------------------------------------------------------------- 1 | # 新增主机间的双向信任: 2 | # 1.先手动将deploy节点做信任,即omms部署节点。 3 | # 注意:如果omms是使用普通用户运行,需要普通用户信任root用户(即普通用户可以免密ssh root) 4 | # 2.auth-node节点需安装openssh-clients以支持ssh-copy-id命令 5 | # 3.需在host_list.txt文件中密码为root密码 6 | 7 | # deploy节点与auth-node节点单向信任 8 | - hosts: 9 | - deploy 10 | roles: 11 | - host-auth 12 | 13 | # auth-node节点间相互信任 14 | #- hosts: 15 | # - auth-node 16 | # roles: 17 | # - host-auth -------------------------------------------------------------------------------- /doc/kube/01.prepare.yml: -------------------------------------------------------------------------------- 1 | # [optional] to synchronize time of nodes with 'chrony' 2 | - hosts: all 3 | roles: 4 | - { role: chrony, when: "hostvars[groups.deploy[0]]['NTP_ENABLED'] == 'yes'" } 5 | 6 | # to create CA, kubeconfig, kube-proxy.kubeconfig etc. on 'deploy' node 7 | - hosts: deploy 8 | roles: 9 | - deploy 10 | 11 | # prepare tasks for all nodes 12 | - hosts: 13 | - kube-master 14 | - kube-node 15 | - deploy 16 | - etcd 17 | - lb 18 | roles: 19 | - prepare 20 | 21 | # [optional] to install loadbalance service, only needed by multi-master cluster 22 | - hosts: lb 23 | roles: 24 | - lb 25 | -------------------------------------------------------------------------------- /doc/kube/02.etcd.yml: -------------------------------------------------------------------------------- 1 | # to install etcd cluster 2 | - hosts: etcd 3 | roles: 4 | - etcd 5 | -------------------------------------------------------------------------------- /doc/kube/03.docker.yml: -------------------------------------------------------------------------------- 1 | # to install docker service 2 | - hosts: 3 | - kube-master 4 | - new-master 5 | - kube-node 6 | - new-node 7 | roles: 8 | - docker 9 | -------------------------------------------------------------------------------- /doc/kube/04.kube-master.yml: -------------------------------------------------------------------------------- 1 | # to set up 'kube-master' nodes 2 | - hosts: kube-master 3 | roles: 4 | - kube-master 5 | - kube-node 6 | tasks: 7 | - name: Making master nodes SchedulingDisabled 8 | shell: "{{ bin_dir }}/kubectl cordon {{ inventory_hostname }} " 9 | delegate_to: "{{ groups.deploy[0] }}" 10 | when: DEPLOY_MODE != "allinone" 11 | ignore_errors: true 12 | 13 | - name: Setting master role name 14 | shell: "{{ bin_dir }}/kubectl label node {{ inventory_hostname }} kubernetes.io/role=master --overwrite" 15 | ignore_errors: true 16 | delegate_to: "{{ groups.deploy[0] }}" 17 | -------------------------------------------------------------------------------- /doc/kube/05.kube-node.yml: -------------------------------------------------------------------------------- 1 | # to set up 'kube-node' nodes 2 | - hosts: kube-node 3 | roles: 4 | - kube-node 5 | -------------------------------------------------------------------------------- /doc/kube/06.network.yml: -------------------------------------------------------------------------------- 1 | # to install network plugin, only one can be choosen 2 | - hosts: 3 | - kube-master 4 | - kube-node 5 | roles: 6 | - { role: calico, when: "CLUSTER_NETWORK == 'calico'" } 7 | - { role: cilium, when: "CLUSTER_NETWORK == 'cilium'" } 8 | - { role: flannel, when: "CLUSTER_NETWORK == 'flannel'" } 9 | - { role: kube-router, when: "CLUSTER_NETWORK == 'kube-router'" } 10 | -------------------------------------------------------------------------------- /doc/kube/07.cluster-addon.yml: -------------------------------------------------------------------------------- 1 | # to install clust-addons 2 | - hosts: 3 | - kube-node 4 | roles: 5 | - cluster-addon 6 | -------------------------------------------------------------------------------- /doc/kube/22.upgrade.yml: -------------------------------------------------------------------------------- 1 | # WARNING: Upgrade the k8s cluster can be risky. Make sure you know what you are doing. 2 | # Read the guide: 'op/upgrade.md' . 3 | 4 | # update kubectl binary 5 | - hosts: 6 | - kube-master 7 | - new-master 8 | - kube-node 9 | - new-node 10 | - deploy 11 | roles: 12 | - prepare 13 | 14 | # update masters 15 | - hosts: 16 | - kube-master 17 | - new-master 18 | roles: 19 | - kube-master 20 | - kube-node 21 | 22 | # update nodes 23 | - hosts: 24 | - kube-node 25 | - new-node 26 | roles: 27 | - { role: kube-node, when: "DEPLOY_MODE != 'allinone'" } 28 | -------------------------------------------------------------------------------- /doc/kube/roles/calico/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 部分calico相关配置,更全配置可以去roles/calico/templates/calico.yaml.j2自定义 2 | 3 | # 如果 node 节点有多块网卡,请设置 true 4 | # 另外发现设置为 true 时能够解决v1.10使用ipvs偶尔出现pod内‘dial tcp 10.68.0.1:443: i/o timeout’的 bug 5 | NODE_WITH_MULTIPLE_NETWORKS: "true" 6 | 7 | # etcd 集群服务地址列表, 根据etcd组成员自动生成 8 | TMP_ENDPOINTS: "{% for h in groups['etcd'] %}https://{{ h }}:2379,{% endfor %}" 9 | ETCD_ENDPOINTS: "{{ TMP_ENDPOINTS.rstrip(',') }}" 10 | 11 | # 设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能,条件限制详见 docs/setup/calico.md 12 | CALICO_IPV4POOL_IPIP: "Always" 13 | 14 | # 设置 Felix 日志级别 15 | FELIX_LOG_LVL: "warning" 16 | 17 | # 设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手工指定也可以自动发现 18 | #IP_AUTODETECTION_METHOD: "interface=eth0" 19 | IP_AUTODETECTION_METHOD: "can-reach={{ groups.deploy[0] }}" 20 | 21 | # 更新支持calico 版本: [v3.2.x] [v3.3.x] [v3.4.x] 22 | calico_ver: "v3.4.1" 23 | 24 | # calico 主版本 25 | calico_ver_main: "{{ calico_ver.split('.')[0] }}.{{ calico_ver.split('.')[1] }}" 26 | 27 | # 离线镜像tar包 28 | calico_offline: "calico_{{ calico_ver }}.tar" 29 | -------------------------------------------------------------------------------- /doc/kube/roles/calico/templates/calico-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "calico", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/calico/templates/calicoctl.cfg.j2: -------------------------------------------------------------------------------- 1 | apiVersion: projectcalico.org/v3 2 | kind: CalicoAPIConfig 3 | metadata: 4 | spec: 5 | datastoreType: "etcdv3" 6 | etcdEndpoints: {{ ETCD_ENDPOINTS }} 7 | etcdKeyFile: /etc/calico/ssl/calico-key.pem 8 | etcdCertFile: /etc/calico/ssl/calico.pem 9 | etcdCACertFile: {{ ca_dir }}/ca.pem 10 | -------------------------------------------------------------------------------- /doc/kube/roles/chrony/chrony.yml: -------------------------------------------------------------------------------- 1 | - hosts: all 2 | roles: 3 | - { role: chrony, when: "hostvars[groups.deploy[0]]['NTP_ENABLED'] == 'yes'" } 4 | -------------------------------------------------------------------------------- /doc/kube/roles/chrony/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 设置时间源服务器 2 | ntp_server: "ntp1.aliyun.com" 3 | 4 | # 设置允许内部时间同步的网络段,比如"10.0.0.0/8",默认全部允许 5 | local_network: "0.0.0.0/0" 6 | 7 | 8 | -------------------------------------------------------------------------------- /doc/kube/roles/cilium/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 部分cilium相关配置, Note: cilium 需要Linux kernel >= 4.9.17 2 | 3 | # 如果 node 节点有多块网卡,请设置 true 4 | # 另外发现设置为 true 时能够解决v1.10使用ipvs偶尔出现pod内‘dial tcp 10.68.0.1:443: i/o timeout’的 bug 5 | NODE_WITH_MULTIPLE_NETWORKS: "true" 6 | 7 | # debug mode 8 | Debug_Mode: "false" 9 | 10 | # Removes any Cilium state, e.g. BPF policy maps, before starting 11 | Clean_Start: "false" 12 | 13 | # If true, the policy with the entity 'reserved:host' allows traffic from 'world' 14 | Legacy_Host_Policy: "true" 15 | 16 | # 镜像版本 17 | busybox_ver: "1.28.4" 18 | cilium_ver: "v1.1.4" 19 | 20 | # 离线镜像tar包 21 | cilium_offline: "cilium_{{ cilium_ver }}.tar" 22 | busybox_offline: "busybox_{{ busybox_ver }}.tar" 23 | -------------------------------------------------------------------------------- /doc/kube/roles/cilium/files/star_war_example/sw_l3_l4_l7_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "cilium.io/v2" 2 | kind: CiliumNetworkPolicy 3 | description: "L7 policy to restrict access to specific HTTP call" 4 | metadata: 5 | name: "rule1" 6 | spec: 7 | endpointSelector: 8 | matchLabels: 9 | org: empire 10 | class: deathstar 11 | ingress: 12 | - fromEndpoints: 13 | - matchLabels: 14 | org: empire 15 | toPorts: 16 | - ports: 17 | - port: "80" 18 | protocol: TCP 19 | rules: 20 | http: 21 | - method: "POST" 22 | path: "/v1/request-landing" 23 | -------------------------------------------------------------------------------- /doc/kube/roles/cilium/files/star_war_example/sw_l3_l4_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "cilium.io/v2" 2 | kind: CiliumNetworkPolicy 3 | description: "L3-L4 policy to restrict deathstar access to empire ships only" 4 | metadata: 5 | name: "rule1" 6 | spec: 7 | endpointSelector: 8 | matchLabels: 9 | org: empire 10 | class: deathstar 11 | ingress: 12 | - fromEndpoints: 13 | - matchLabels: 14 | org: empire 15 | toPorts: 16 | - ports: 17 | - port: "80" 18 | protocol: TCP 19 | -------------------------------------------------------------------------------- /doc/kube/roles/cilium/templates/cilium-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "cilium", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-addon/templates/metallb/layer2.yaml.j2: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | namespace: metallb-system 5 | name: config 6 | data: 7 | config: | 8 | address-pools: 9 | - name: my-ip-space 10 | protocol: layer2 11 | addresses: 12 | - {{ metallb_vip_pool }} 13 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-backup/files/readme.md: -------------------------------------------------------------------------------- 1 | # 集群备份目录 2 | 3 | 此目标保留作为k8s 集群备份使用。 4 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-backup/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - name: 准备备份目录 2 | file: name=/backup/k8s state=directory 3 | 4 | - name: 执行etcd 数据备份 5 | shell: "cd /backup/k8s && \ 6 | ETCDCTL_API=3 {{ bin_dir }}/etcdctl snapshot save snapshot.db" 7 | 8 | - name: 获取etcd 数据备份 9 | fetch: 10 | src: /backup/k8s/snapshot.db 11 | dest: /etc/ansible/roles/cluster-backup/files/ 12 | flat: yes 13 | run_once: true 14 | 15 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-restore/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 指定需要恢复的 etcd 数据备份,默认使用最近的一次备份 2 | db_to_restore: "snapshot.db" 3 | 4 | # etcd 集群间通信的IP和端口, 根据etcd组成员自动生成 5 | TMP_NODES: "{% for h in groups['etcd'] %}{{ hostvars[h]['NODE_NAME'] }}=https://{{ h }}:2380,{% endfor %}" 6 | ETCD_NODES: "{{ TMP_NODES.rstrip(',') }}" 7 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-restore/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - name: 停止ectd 服务 2 | service: name=etcd state=stopped 3 | 4 | - name: 清除etcd 数据目录 5 | file: name=/var/lib/etcd/member state=absent 6 | 7 | - name: 生成备份目录 8 | file: name=/backup/k8s state=directory 9 | 10 | - name: 准备指定的备份etcd 数据 11 | copy: 12 | src: "{{ base_dir }}/roles/cluster-backup/files/snapshot/{{ db_to_restore }}" 13 | dest: "/backup/k8s/snapshot.db" 14 | 15 | - name: 清理原备份出来数据 16 | file: name=/backup/k8s/{{ NODE_NAME }}.etcd state=absent 17 | 18 | - name: etcd 数据恢复 19 | shell: "cd /backup/k8s && \ 20 | ETCDCTL_API=3 {{ bin_dir }}/etcdctl snapshot restore snapshot.db \ 21 | --name {{ NODE_NAME }} \ 22 | --initial-cluster {{ ETCD_NODES }} \ 23 | --initial-cluster-token etcd-cluster-0 \ 24 | --initial-advertise-peer-urls https://{{ inventory_hostname }}:2380" 25 | 26 | - name: 恢复数据至etcd 数据目录 27 | shell: "cp -rf /backup/k8s/{{ NODE_NAME }}.etcd/member /var/lib/etcd/" 28 | 29 | - name: 重启etcd 服务 30 | service: name=etcd state=restarted 31 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-storage/cluster-storage.yml: -------------------------------------------------------------------------------- 1 | - hosts: deploy 2 | roles: 3 | - cluster-storage 4 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-storage/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 动态存储类型, 目前支持自建nfs和aliyun_nas 2 | storage: 3 | # nfs server 参数 4 | nfs: 5 | enabled: "no" 6 | server: "172.16.3.86" 7 | server_path: "/data/nfs" 8 | storage_class: "nfs-dynamic-class" 9 | provisioner_name: "nfs-provisioner-01" 10 | 11 | # aliyun_nas 参数 12 | aliyun_nas: 13 | enabled: "no" 14 | server: "xxxxxxxxxxx.cn-hangzhou.nas.aliyuncs.com" 15 | server_path: "/" 16 | storage_class: "class-aliyun-nas-01" 17 | controller_name: "aliyun-nas-controller-01" 18 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-storage/tasks/alicloud-nas.yml: -------------------------------------------------------------------------------- 1 | - name: 准备alicloud-nas配置目录 2 | file: name=/opt/kube/kube-system/storage/alicloud-nas state=directory 3 | 4 | - name: 生成alicloud-nas动态存储配置 5 | template: 6 | src: alicloud-nas/alicloud-nas.yaml.j2 7 | dest: "/opt/kube/kube-system/storage/alicloud-nas/{{ storage.aliyun_nas.controller_name }}.yaml" 8 | 9 | #- name: 复制alicloud-disk配置 10 | # copy: 11 | # src: alicloud-disk.yaml 12 | # dest: "{{ base_dir }}/manifests/storage/alicloud-nas/alicloud-disk.yaml" 13 | 14 | #- name: 开始部署alicloud-disk存储 15 | # shell: "{{ bin_dir }}/kubectl apply -f {{ base_dir }}/manifests/storage/alicloud-nas/alicloud-disk.yaml" 16 | 17 | - name: 开始部署alicloud-nas动态存储 18 | shell: "{{ bin_dir }}/kubectl apply -f /opt/kube/kube-system/storage/alicloud-nas/{{ storage.aliyun_nas.controller_name }}.yaml" 19 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-storage/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - import_tasks: nfs-client.yml 2 | when: 'storage.nfs.enabled == "yes"' 3 | 4 | - import_tasks: alicloud-nas.yml 5 | when: 'storage.aliyun_nas.enabled == "yes"' 6 | 7 | -------------------------------------------------------------------------------- /doc/kube/roles/cluster-storage/tasks/nfs-client.yml: -------------------------------------------------------------------------------- 1 | - name: 准备nfs-client 配置目录 2 | file: name={{ base_dir }}/manifests/storage/nfs state=directory 3 | 4 | - name: 生成nfs-client动态存储配置 5 | template: 6 | src: nfs/nfs-client-provisioner.yaml.j2 7 | dest: "{{ base_dir }}/manifests/storage/nfs/{{ storage.nfs.provisioner_name }}.yaml" 8 | 9 | - name: 开始部署nfs-client动态存储 10 | shell: "{{ bin_dir }}/kubectl apply -f {{ base_dir }}/manifests/storage/nfs/{{ storage.nfs.provisioner_name }}.yaml" 11 | -------------------------------------------------------------------------------- /doc/kube/roles/deploy/templates/admin-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "admin", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "system:masters", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/deploy/templates/ca-config.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "signing": { 3 | "default": { 4 | "expiry": "87600h" 5 | }, 6 | "profiles": { 7 | "kubernetes": { 8 | "usages": [ 9 | "signing", 10 | "key encipherment", 11 | "server auth", 12 | "client auth" 13 | ], 14 | "expiry": "87600h" 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /doc/kube/roles/deploy/templates/ca-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "kubernetes", 3 | "key": { 4 | "algo": "rsa", 5 | "size": 2048 6 | }, 7 | "names": [ 8 | { 9 | "C": "CN", 10 | "ST": "HangZhou", 11 | "L": "XS", 12 | "O": "k8s", 13 | "OU": "System" 14 | } 15 | ], 16 | "ca": { 17 | "expiry": "131400h" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /doc/kube/roles/deploy/templates/kube-proxy-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "system:kube-proxy", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/deploy/templates/read-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "read", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "group:read", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/docker/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 国内镜像加速 2 | 3 | REG_MIRROR_1: "https://registry.docker-cn.com" 4 | REG_MIRROR_2: "https://docker.mirrors.ustc.edu.cn" 5 | 6 | # docker日志相关 7 | 8 | LOG_DRIVER: "json-file" 9 | LOG_LEVEL: "warn" 10 | LOG_MAX_SIZE: "10m" 11 | LOG_MAX_FILE: 3 12 | 13 | # docker容器存储目录 14 | STORAGE_DIR: "/var/lib/docker" 15 | 16 | # 开启Restful API 17 | ENABLE_REMOTE_API: false 18 | -------------------------------------------------------------------------------- /doc/kube/roles/docker/files/docker-tag: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 3 | -------------------------------------------------------------------------------- /doc/kube/roles/docker/templates/daemon.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "registry-mirrors": ["{{ REG_MIRROR_1 }}", "{{ REG_MIRROR_2 }}"], 3 | "max-concurrent-downloads": 10, 4 | "log-driver": "{{ LOG_DRIVER }}", 5 | "log-level": "{{ LOG_LEVEL }}", 6 | "log-opts": { 7 | "max-size": "{{ LOG_MAX_SIZE }}", 8 | "max-file": "{{ LOG_MAX_FILE }}" 9 | }, 10 | "data-root": "{{ STORAGE_DIR }}" 11 | 12 | {% if ENABLE_REMOTE_API %} 13 | , "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"] 14 | {% endif %} 15 | 16 | } 17 | -------------------------------------------------------------------------------- /doc/kube/roles/docker/templates/docker.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Docker Application Container Engine 3 | Documentation=http://docs.docker.io 4 | 5 | [Service] 6 | Environment="PATH={{ bin_dir }}:/bin:/sbin:/usr/bin:/usr/sbin" 7 | ExecStart={{ bin_dir }}/dockerd 8 | ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT 9 | ExecReload=/bin/kill -s HUP $MAINPID 10 | Restart=on-failure 11 | RestartSec=5 12 | LimitNOFILE=infinity 13 | LimitNPROC=infinity 14 | LimitCORE=infinity 15 | Delegate=yes 16 | KillMode=process 17 | 18 | [Install] 19 | WantedBy=multi-user.target 20 | -------------------------------------------------------------------------------- /doc/kube/roles/etcd/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # etcd 集群间通信的IP和端口, 根据etcd组成员自动生成 2 | TMP_NODES: "{% for h in groups['etcd'] %}{{ hostvars[h]['NODE_NAME'] }}=https://{{ h }}:2380,{% endfor %}" 3 | ETCD_NODES: "{{ TMP_NODES.rstrip(',') }}" 4 | -------------------------------------------------------------------------------- /doc/kube/roles/etcd/templates/etcd-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "etcd", 3 | "hosts": [ 4 | "127.0.0.1", 5 | "{{ inventory_hostname }}" 6 | ], 7 | "key": { 8 | "algo": "rsa", 9 | "size": 2048 10 | }, 11 | "names": [ 12 | { 13 | "C": "CN", 14 | "ST": "HangZhou", 15 | "L": "XS", 16 | "O": "k8s", 17 | "OU": "System" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /doc/kube/roles/ex-lb/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 区分多个instance的VRRP组播,同网段不能重复,取值在0-255之间 2 | # 因项目已设置vrrp报文单播模式,所以这个ROUTER_ID 即便同网段里面有重复也没关系 3 | ROUTER_ID: 222 4 | 5 | # haproxy负载均衡算法,常见如下: 6 | # "roundrobin": 基于服务器权重的轮询 7 | # "leastconn": 基于服务器最小连接数 8 | # "source": 基于请求源IP地址 9 | # "uri": 基于请求的URI 10 | BALANCE_ALG: "roundrobin" 11 | 12 | # 启用 ingress NodePort服务的负载均衡 (yes/no) 13 | INGRESS_NODEPORT_LB: "yes" 14 | # 启用 ingress tls NodePort服务的负载均衡 (yes/no) 15 | INGRESS_TLS_NODEPORT_LB: "yes" 16 | -------------------------------------------------------------------------------- /doc/kube/roles/ex-lb/ex-lb.yml: -------------------------------------------------------------------------------- 1 | - hosts: ex-lb 2 | roles: 3 | - { role: chrony, when: "hostvars[groups.deploy[0]]['NTP_ENABLED'] == 'yes'" } 4 | - prepare 5 | - ex-lb 6 | -------------------------------------------------------------------------------- /doc/kube/roles/ex-lb/templates/haproxy.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=HAProxy Load Balancer 3 | After=syslog.target network.target 4 | 5 | [Service] 6 | EnvironmentFile=/etc/sysconfig/haproxy 7 | ExecStartPre=/usr/bin/mkdir -p /run/haproxy 8 | ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS 9 | ExecReload=/bin/kill -USR2 $MAINPID 10 | KillMode=mixed 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /doc/kube/roles/ex-lb/templates/keepalived-backup.conf.j2: -------------------------------------------------------------------------------- 1 | global_defs { 2 | router_id lb-backup-{{ inventory_hostname }} 3 | } 4 | 5 | vrrp_script check-haproxy { 6 | script "killall -0 haproxy" 7 | interval 5 8 | weight -60 9 | } 10 | 11 | vrrp_instance VI-kube-master { 12 | state BACKUP 13 | priority {{ 119 | random(61, 1) }} 14 | unicast_src_ip {{ inventory_hostname }} 15 | unicast_peer { 16 | {% for h in groups['ex-lb'] %}{% if h != inventory_hostname %} 17 | {{ h }} 18 | {% endif %}{% endfor %} 19 | } 20 | dont_track_primary 21 | interface {{ LB_IF }} 22 | virtual_router_id {{ ROUTER_ID }} 23 | advert_int 3 24 | track_script { 25 | check-haproxy 26 | } 27 | virtual_ipaddress { 28 | {{ EX_VIP }} 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /doc/kube/roles/ex-lb/templates/keepalived-master.conf.j2: -------------------------------------------------------------------------------- 1 | global_defs { 2 | router_id lb-master-{{ inventory_hostname }} 3 | } 4 | 5 | vrrp_script check-haproxy { 6 | script "killall -0 haproxy" 7 | interval 5 8 | weight -60 9 | } 10 | 11 | vrrp_instance VI-kube-master { 12 | state MASTER 13 | priority 120 14 | unicast_src_ip {{ inventory_hostname }} 15 | unicast_peer { 16 | {% for h in groups['ex-lb'] %}{% if h != inventory_hostname %} 17 | {{ h }} 18 | {% endif %}{% endfor %} 19 | } 20 | dont_track_primary 21 | interface {{ LB_IF }} 22 | virtual_router_id {{ ROUTER_ID }} 23 | advert_int 3 24 | track_script { 25 | check-haproxy 26 | } 27 | virtual_ipaddress { 28 | {{ EX_VIP }} 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /doc/kube/roles/flannel/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 部分flannel配置,详见roles/flannel/templates/kube-flannel.yaml.j2 2 | 3 | # 如果 node 节点有多块网卡,请设置 true 4 | # 另外发现设置为 true 时能够解决v1.10使用ipvs偶尔出现pod内‘dial tcp 10.68.0.1:443: i/o timeout’的 bug 5 | NODE_WITH_MULTIPLE_NETWORKS: "true" 6 | 7 | # 设置flannel 后端 8 | #FLANNEL_BACKEND: "host-gw" 9 | FLANNEL_BACKEND: "vxlan" 10 | 11 | #flanneld_image: "quay.io/coreos/flannel:v0.10.0-amd64" 12 | flanneld_image: "jmgao1983/flannel:v0.11.0-amd64" 13 | 14 | # 离线镜像tar包 15 | flannel_offline: "flannel_v0.11.0-amd64.tar" 16 | -------------------------------------------------------------------------------- /doc/kube/roles/harbor/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # harbor version,完整版本号,目前支持 v1.5.x 和 v1.6.x 2 | HARBOR_VER: "v1.6.3" 3 | 4 | # harbor 主版本号,目前支持主版本号 v1.5/v1.6 5 | # 从完整版本号提取出主版本号 v1.5/v1.6 6 | HARBOR_VER_MAIN: "{{ HARBOR_VER.split('.')[0] }}.{{ HARBOR_VER.split('.')[1] }}" 7 | -------------------------------------------------------------------------------- /doc/kube/roles/harbor/templates/harbor-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "harbor", 3 | "hosts": [ 4 | "127.0.0.1", 5 | "{{ inventory_hostname }}", 6 | "{{ HARBOR_DOMAIN }}" 7 | ], 8 | "key": { 9 | "algo": "rsa", 10 | "size": 2048 11 | }, 12 | "names": [ 13 | { 14 | "C": "CN", 15 | "ST": "HangZhou", 16 | "L": "XS", 17 | "O": "k8s", 18 | "OU": "System" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /doc/kube/roles/helm/defaults/main.yml: -------------------------------------------------------------------------------- 1 | helm_namespace: kube-system 2 | helm_cert_cn: helm001 3 | tiller_sa: tiller 4 | tiller_cert_cn: tiller001 5 | tiller_image: jmgao1983/tiller:v2.12.3 6 | repo_url: https://kubernetes-charts.storage.googleapis.com 7 | # 如果默认官方repo 网络访问不稳定可以使用如下的阿里云镜像repo 8 | #repo_url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 9 | -------------------------------------------------------------------------------- /doc/kube/roles/helm/helm.yml: -------------------------------------------------------------------------------- 1 | - hosts: deploy 2 | roles: 3 | - helm 4 | -------------------------------------------------------------------------------- /doc/kube/roles/helm/templates/helm-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "{{ helm_cert_cn }}", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/helm/templates/helm-rbac.yaml.j2: -------------------------------------------------------------------------------- 1 | # 绑定helm sa到 cluster-admin,这样可以兼容现有需要集群特权的charts 2 | # 3 | --- 4 | apiVersion: v1 5 | kind: Namespace 6 | metadata: 7 | name: {{ helm_namespace }} 8 | --- 9 | apiVersion: v1 10 | kind: ServiceAccount 11 | metadata: 12 | name: {{ tiller_sa }} 13 | namespace: {{ helm_namespace }} 14 | --- 15 | apiVersion: rbac.authorization.k8s.io/v1 16 | kind: ClusterRoleBinding 17 | metadata: 18 | name: tiller-cb 19 | roleRef: 20 | apiGroup: rbac.authorization.k8s.io 21 | kind: ClusterRole 22 | name: cluster-admin 23 | subjects: 24 | - kind: ServiceAccount 25 | name: {{ tiller_sa }} 26 | namespace: {{ helm_namespace }} 27 | -------------------------------------------------------------------------------- /doc/kube/roles/helm/templates/tiller-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "{{ tiller_cert_cn }}", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/host-auth/files/pexpect-3.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/doc/kube/roles/host-auth/files/pexpect-3.3.zip -------------------------------------------------------------------------------- /doc/kube/roles/host-auth/tasks/main.yml: -------------------------------------------------------------------------------- 1 | - name: 安装解压工具 2 | package: name={{ item }} state=present 3 | with_items: 4 | - zip 5 | - unzip 6 | 7 | - name: 创建临时目录 8 | file: 9 | path: /tmp/auth 10 | state: directory 11 | mode: 0755 12 | 13 | - name: 解压python扩展包pexpect 14 | unarchive: 15 | src: "pexpect-3.3.zip" 16 | dest: /tmp/auth 17 | copy: yes 18 | keep_newer: yes 19 | mode: 0755 20 | 21 | - name: 开始安装python扩展包pexpect 22 | shell: "cd /tmp/auth/pexpect-3.3 && \ 23 | /usr/bin/python setup.py install" 24 | 25 | 26 | - name: 下载授信脚本 27 | copy: src=auth.py dest=/tmp/auth 28 | 29 | - name: 下载节点列表文件 30 | template: src=host_list.txt.j2 dest=/tmp/auth/host_list.txt 31 | 32 | - name: deploy节点开始授信到其他机器 33 | shell: "cd /tmp/auth && /usr/bin/python auth.py" 34 | 35 | - name: 清理临时文件 36 | file: 37 | path: /tmp/auth 38 | state: absent 39 | -------------------------------------------------------------------------------- /doc/kube/roles/host-auth/templates/host_list.txt.j2: -------------------------------------------------------------------------------- 1 | {% for host in groups['etcd'] %} 2 | {{ host }} {{AUTH_PASS}} 3 | {% endfor %} 4 | {% for host in groups['kube-master'] %} 5 | {{ host }} {{AUTH_PASS}} 6 | {% endfor %} 7 | {% for host in groups['kube-node'] %} 8 | {{ host }} {{AUTH_PASS}} 9 | {% endfor %} 10 | {% for host in groups['new-master'] %} 11 | {{ host }} {{AUTH_PASS}} 12 | {% endfor %} 13 | {% for host in groups['new-node'] %} 14 | {{ host }} {{AUTH_PASS}} 15 | {% endfor %} 16 | {% for host in groups['harbor'] %} 17 | {{ host }} {{AUTH_PASS}} 18 | {% endfor %} -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # etcd 集群服务地址列表, 根据etcd组成员自动生成 2 | TMP_ENDPOINTS: "{% for h in groups['etcd'] %}https://{{ h }}:2379,{% endfor %}" 3 | ETCD_ENDPOINTS: "{{ TMP_ENDPOINTS.rstrip(',') }}" 4 | 5 | # k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名) 6 | MASTER_CERT_HOSTS: 7 | - "10.1.1.1" 8 | - "k8s.test.io" 9 | #- "61.182.11.41" 10 | #- "www.test.com" 11 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/templates/aggregator-proxy-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "aggregator", 3 | "hosts": [], 4 | "key": { 5 | "algo": "rsa", 6 | "size": 2048 7 | }, 8 | "names": [ 9 | { 10 | "C": "CN", 11 | "ST": "HangZhou", 12 | "L": "XS", 13 | "O": "k8s", 14 | "OU": "System" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/templates/basic-auth.csv.j2: -------------------------------------------------------------------------------- 1 | {{ BASIC_AUTH_PASS }},{{ BASIC_AUTH_USER }},1 2 | readonly,readonly,2 3 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/templates/kube-controller-manager.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Kubernetes Controller Manager 3 | Documentation=https://github.com/GoogleCloudPlatform/kubernetes 4 | 5 | [Service] 6 | ExecStart={{ bin_dir }}/kube-controller-manager \ 7 | --address=127.0.0.1 \ 8 | --master=http://127.0.0.1:8080 \ 9 | --allocate-node-cidrs=true \ 10 | --service-cluster-ip-range={{ SERVICE_CIDR }} \ 11 | --cluster-cidr={{ CLUSTER_CIDR }} \ 12 | --cluster-name=kubernetes \ 13 | --cluster-signing-cert-file={{ ca_dir }}/ca.pem \ 14 | --cluster-signing-key-file={{ ca_dir }}/ca-key.pem \ 15 | --service-account-private-key-file={{ ca_dir }}/ca-key.pem \ 16 | --root-ca-file={{ ca_dir }}/ca.pem \ 17 | --horizontal-pod-autoscaler-use-rest-clients=true \ 18 | --leader-elect=true \ 19 | --v=2 20 | Restart=on-failure 21 | RestartSec=5 22 | 23 | [Install] 24 | WantedBy=multi-user.target 25 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/templates/kube-scheduler.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Kubernetes Scheduler 3 | Documentation=https://github.com/GoogleCloudPlatform/kubernetes 4 | 5 | [Service] 6 | ExecStart={{ bin_dir }}/kube-scheduler \ 7 | --address=127.0.0.1 \ 8 | --master=http://127.0.0.1:8080 \ 9 | --leader-elect=true \ 10 | --v=2 11 | Restart=on-failure 12 | RestartSec=5 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-master/templates/kubernetes-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "kubernetes", 3 | "hosts": [ 4 | "127.0.0.1", 5 | "{{ MASTER_IP }}", 6 | "{{ inventory_hostname }}", 7 | "{{ CLUSTER_KUBERNETES_SVC_IP }}", 8 | {% for HOST in MASTER_CERT_HOSTS %} 9 | "{{ HOST }}", 10 | {% endfor %} 11 | "kubernetes", 12 | "kubernetes.default", 13 | "kubernetes.default.svc", 14 | "kubernetes.default.svc.cluster", 15 | "kubernetes.default.svc.cluster.local" 16 | ], 17 | "key": { 18 | "algo": "rsa", 19 | "size": 2048 20 | }, 21 | "names": [ 22 | { 23 | "C": "CN", 24 | "ST": "HangZhou", 25 | "L": "XS", 26 | "O": "k8s", 27 | "OU": "System" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-node/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 默认使用kube-proxy的 'iptables' 模式,可选 'ipvs' 模式(experimental) 2 | PROXY_MODE: "iptables" 3 | 4 | # 基础容器镜像 5 | SANDBOX_IMAGE: "mirrorgooglecontainers/pause-amd64:3.1" 6 | #SANDBOX_IMAGE: "registry.access.redhat.com/rhel7/pod-infrastructure:latest" 7 | 8 | # Kubelet 根目录 9 | KUBELET_ROOT_DIR: "/var/lib/kubelet" 10 | 11 | # node节点最大pod 数 12 | MAX_PODS: 110 13 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-node/templates/cni-default.conf.j2: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mynet", 3 | "type": "bridge", 4 | "bridge": "mynet0", 5 | "isDefaultGateway": true, 6 | "ipMasq": true, 7 | "hairpinMode": true, 8 | "ipam": { 9 | "type": "host-local", 10 | "subnet": "{{ CLUSTER_CIDR }}" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-node/templates/kube-proxy.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Kubernetes Kube-Proxy Server 3 | Documentation=https://github.com/GoogleCloudPlatform/kubernetes 4 | After=network.target 5 | 6 | [Service] 7 | # kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 8 | # kube-proxy 会对访问 Service IP 的请求做 SNAT,这个特性与calico 实现 network policy冲突,因此禁用 9 | WorkingDirectory=/var/lib/kube-proxy 10 | ExecStart={{ bin_dir }}/kube-proxy \ 11 | --bind-address={{ inventory_hostname }} \ 12 | --hostname-override={{ inventory_hostname }} \ 13 | --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ 14 | --logtostderr=true \ 15 | --proxy-mode={{ PROXY_MODE }} 16 | Restart=on-failure 17 | RestartSec=5 18 | LimitNOFILE=65536 19 | 20 | [Install] 21 | WantedBy=multi-user.target 22 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-node/templates/kubelet-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "system:node:{{ inventory_hostname }}", 3 | "hosts": [ 4 | "127.0.0.1", 5 | "{{ inventory_hostname }}" 6 | ], 7 | "key": { 8 | "algo": "rsa", 9 | "size": 2048 10 | }, 11 | "names": [ 12 | { 13 | "C": "CN", 14 | "ST": "HangZhou", 15 | "L": "XS", 16 | "O": "system:nodes", 17 | "OU": "System" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-router/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 更多设置,参考https://github.com/cloudnativelabs/kube-router/blob/master/docs/user-guide.md 2 | 3 | # 如果 node 节点有多块网卡,请设置 true 4 | # 另外发现设置为 true 时能够解决v1.10使用ipvs偶尔出现pod内‘dial tcp 10.68.0.1:443: i/o timeout’的 bug 5 | NODE_WITH_MULTIPLE_NETWORKS: "true" 6 | 7 | # Router 支持开关 8 | ROUTER_ENABLE: "true" 9 | 10 | # NetworkPolicy 支持开关 11 | FIREWALL_ENABLE: "true" 12 | 13 | # service-proxy 支持开关,如选择 'false' 即使用k8s集群默认的kube-proxy 14 | SERVICE_PROXY: "false" 15 | 16 | # kube-router 镜像版本 17 | kube_router_ver: "v0.2.0" 18 | busybox_ver: "1.28.4" 19 | PullPolicy: "IfNotPresent" 20 | 21 | # kube-router 离线镜像tar包 22 | kuberouter_offline: "kube-router_{{ kube_router_ver }}.tar" 23 | busybox_offline: "busybox_{{ busybox_ver }}.tar" 24 | -------------------------------------------------------------------------------- /doc/kube/roles/kube-router/kube-router.yml: -------------------------------------------------------------------------------- 1 | - hosts: 2 | - kube-master 3 | - kube-node 4 | roles: 5 | - kube-router 6 | -------------------------------------------------------------------------------- /doc/kube/roles/lb/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # 区分多个instance的VRRP组播,同网段不能重复,取值在0-255之间 2 | # 因项目已设置vrrp报文单播模式,所以这个ROUTER_ID 即便同网段里面有重复也没关系 3 | ROUTER_ID: 111 4 | 5 | # haproxy负载均衡算法,常见如下: 6 | # "roundrobin": 基于服务器权重的轮询 7 | # "leastconn": 基于服务器最小连接数 8 | # "source": 基于请求源IP地址 9 | # "uri": 基于请求的URI 10 | BALANCE_ALG: "roundrobin" 11 | 12 | # 启用 ingress NodePort服务的负载均衡 (yes/no) 13 | INGRESS_NODEPORT_LB: "no" 14 | # 启用 ingress tls NodePort服务的负载均衡 (yes/no) 15 | INGRESS_TLS_NODEPORT_LB: "no" 16 | -------------------------------------------------------------------------------- /doc/kube/roles/lb/lb.yml: -------------------------------------------------------------------------------- 1 | - hosts: lb 2 | roles: 3 | - lb 4 | 5 | -------------------------------------------------------------------------------- /doc/kube/roles/lb/templates/haproxy.service.j2: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=HAProxy Load Balancer 3 | After=syslog.target network.target 4 | 5 | [Service] 6 | EnvironmentFile=/etc/sysconfig/haproxy 7 | ExecStartPre=/usr/bin/mkdir -p /run/haproxy 8 | ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS 9 | ExecReload=/bin/kill -USR2 $MAINPID 10 | KillMode=mixed 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /doc/kube/roles/lb/templates/keepalived-backup.conf.j2: -------------------------------------------------------------------------------- 1 | global_defs { 2 | router_id lb-backup-{{ inventory_hostname }} 3 | } 4 | 5 | vrrp_script check-haproxy { 6 | script "killall -0 haproxy" 7 | interval 5 8 | weight -60 9 | } 10 | 11 | vrrp_instance VI-kube-master { 12 | state BACKUP 13 | priority {{ 119 | random(61, 1) }} 14 | unicast_src_ip {{ inventory_hostname }} 15 | unicast_peer { 16 | {% for h in groups['lb'] %}{% if h != inventory_hostname %} 17 | {{ h }} 18 | {% endif %}{% endfor %} 19 | } 20 | dont_track_primary 21 | interface {{ LB_IF }} 22 | virtual_router_id {{ ROUTER_ID }} 23 | advert_int 3 24 | track_script { 25 | check-haproxy 26 | } 27 | virtual_ipaddress { 28 | {{ MASTER_IP }} 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /doc/kube/roles/lb/templates/keepalived-master.conf.j2: -------------------------------------------------------------------------------- 1 | global_defs { 2 | router_id lb-master-{{ inventory_hostname }} 3 | } 4 | 5 | vrrp_script check-haproxy { 6 | script "killall -0 haproxy" 7 | interval 5 8 | weight -60 9 | } 10 | 11 | vrrp_instance VI-kube-master { 12 | state MASTER 13 | priority 120 14 | unicast_src_ip {{ inventory_hostname }} 15 | unicast_peer { 16 | {% for h in groups['lb'] %}{% if h != inventory_hostname %} 17 | {{ h }} 18 | {% endif %}{% endfor %} 19 | } 20 | dont_track_primary 21 | interface {{ LB_IF }} 22 | virtual_router_id {{ ROUTER_ID }} 23 | advert_int 3 24 | track_script { 25 | check-haproxy 26 | } 27 | virtual_ipaddress { 28 | {{ MASTER_IP }} 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /doc/kube/roles/new-etcd/clean-etcd.yml: -------------------------------------------------------------------------------- 1 | # to clean 'etcd' nodes 2 | - hosts: 3 | - etcd 4 | - new-etcd 5 | tasks: 6 | - name: stop and disable etcd service 7 | service: 8 | name: etcd 9 | state: stopped 10 | enabled: no 11 | ignore_errors: true 12 | 13 | - name: remove files and dirs 14 | file: name={{ item }} state=absent 15 | with_items: 16 | - "/var/lib/etcd" 17 | - "/etc/etcd/" 18 | - "/backup/k8s" 19 | - "/etc/systemd/system/etcd.service" 20 | -------------------------------------------------------------------------------- /doc/kube/roles/new-etcd/defaults/main.yml: -------------------------------------------------------------------------------- 1 | # etcd 集群间通信的IP和端口, 根据etcd组成员自动生成 2 | # 新增 etcd 节点,一次只能增加一个 3 | TMP_NODES: "{% for h in groups['etcd'] %}{{ hostvars[h]['NODE_NAME'] }}=https://{{ h }}:2380,{% endfor %}{% if groups['new-etcd']|length > 0 %}{{ hostvars[groups['new-etcd'][0]]['NODE_NAME'] }}=https://{{ groups['new-etcd'][0] }}:2380,{% endif %}" 4 | ETCD_NODES: "{{ TMP_NODES.rstrip(',') }}" 5 | -------------------------------------------------------------------------------- /doc/kube/roles/new-etcd/templates/etcd-csr.json.j2: -------------------------------------------------------------------------------- 1 | { 2 | "CN": "etcd", 3 | "hosts": [ 4 | "127.0.0.1", 5 | "{{ inventory_hostname }}" 6 | ], 7 | "key": { 8 | "algo": "rsa", 9 | "size": 2048 10 | }, 11 | "names": [ 12 | { 13 | "C": "CN", 14 | "ST": "HangZhou", 15 | "L": "XS", 16 | "O": "k8s", 17 | "OU": "System" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/meta/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | galaxy_info: 3 | author: "Sebastian Gumprich" 4 | description: 'This Ansible role provides numerous security-related configurations, providing all-round base protection.' 5 | company: Hardening Framework Team 6 | license: Apache License 2.0 7 | min_ansible_version: '2.5' 8 | platforms: 9 | - name: EL 10 | versions: 11 | - 6 12 | - 7 13 | - name: Ubuntu 14 | versions: 15 | - precise 16 | - trusty 17 | - xenial 18 | - name: Debian 19 | versions: 20 | - wheezy 21 | - jessie 22 | - name: Amazon 23 | galaxy_tags: 24 | - system 25 | - security 26 | - hardening 27 | dependencies: [] 28 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/apt.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: remove deprecated or insecure packages | package-01 - package-09 3 | apt: 4 | name: '{{ item }}' 5 | state: 'absent' 6 | with_items: 7 | - '{{ os_security_packages_list }}' 8 | when: 'os_security_packages_clean' 9 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/auditd.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: install auditd package | package-08 4 | package: 5 | name: '{{ auditd_package }}' 6 | state: 'present' 7 | 8 | - name: configure auditd | package-08 9 | template: 10 | src: 'etc/audit/auditd.conf.j2' 11 | dest: '/etc/audit/auditd.conf' 12 | owner: 'root' 13 | group: 'root' 14 | mode: '0640' 15 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/find_files.yml: -------------------------------------------------------------------------------- 1 | - name: find directories for minimizing access 2 | find: 3 | paths: '{{ outer_item }}' 4 | recurse: yes 5 | register: minimize_access_directories 6 | 7 | - name: minimize access on found files 8 | file: 9 | path: '{{ item.path }}' 10 | mode: 'go-w' 11 | state: file 12 | with_items: '{{ minimize_access_directories.files }}' 13 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/login_defs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: create login.defs | os-05, os-05b 3 | template: 4 | src: 'etc/login.defs.j2' 5 | dest: '/etc/login.defs' 6 | owner: 'root' 7 | group: 'root' 8 | mode: '0444' 9 | 10 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - include_tasks: hardening.yml 4 | when: os_hardening_enabled 5 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/minimize_access.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Using a two-pass approach for checking directories in order to support symlinks. 3 | - include_tasks: find_files.yml 4 | loop_control: 5 | loop_var: outer_item 6 | loop: 7 | - '/usr/local/sbin' 8 | - '/usr/local/bin' 9 | - '/usr/sbin' 10 | - '/usr/bin' 11 | - '/sbin' 12 | - '/bin' 13 | - '{{ os_env_extra_user_paths }}' 14 | 15 | - name: change shadow ownership to root and mode to 0600 | os-02 16 | file: 17 | dest: '/etc/shadow' 18 | owner: '{{ os_shadow_perms.owner }}' 19 | group: '{{ os_shadow_perms.group }}' 20 | mode: '{{ os_shadow_perms.mode }}' 21 | 22 | - name: change passwd ownership to root and mode to 0644 | os-03 23 | file: 24 | dest: '/etc/passwd' 25 | owner: '{{ os_passwd_perms.owner }}' 26 | group: '{{ os_passwd_perms.group }}' 27 | mode: '{{ os_passwd_perms.mode }}' 28 | 29 | - name: change su-binary to only be accessible to user and group root 30 | file: 31 | dest: '/bin/su' 32 | owner: 'root' 33 | group: 'root' 34 | mode: '0750' 35 | when: os_security_users_allow != None 36 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/modprobe.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: install modprobe to disable filesystems | os-10 3 | package: 4 | name: '{{modprobe_package}}' 5 | state: 'present' 6 | 7 | - name: check if efi is installed 8 | stat: 9 | path: "/sys/firmware/efi" 10 | register: efi_installed 11 | 12 | - name: remove vfat from fs-list if efi is used 13 | set_fact: 14 | os_unused_filesystems: "{{ os_unused_filesystems | difference('vfat') }}" 15 | when: efi_installed.stat.isdir is defined and efi_installed.stat.isdir 16 | 17 | - name: disable unused filesystems | os-10 18 | template: 19 | src: 'etc/modprobe.d/modprobe.j2' 20 | dest: '/etc/modprobe.d/dev-sec.conf' 21 | owner: 'root' 22 | group: 'root' 23 | mode: '0640' 24 | 25 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/profile.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: add pinerolo_profile.sh to profile.d 3 | template: 4 | src: 'etc/profile.d/profile.conf.j2' 5 | dest: '/etc/profile.d/pinerolo_profile.sh' 6 | owner: 'root' 7 | group: 'root' 8 | mode: '0750' 9 | when: not os_security_kernel_enable_core_dump 10 | 11 | - name: remove pinerolo_profile.sh from profile.d 12 | file: 13 | path: /etc/profile.d/pinerolo_profile.sh 14 | state: absent 15 | when: os_security_kernel_enable_core_dump 16 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/rhosts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Get user accounts | os-09 3 | command: "awk -F: '{print $1}' /etc/passwd" 4 | changed_when: False 5 | check_mode: False 6 | register: users 7 | 8 | - name: delete rhosts-files from system | os-09 9 | file: 10 | dest: '~{{ item }}/.rhosts' 11 | state: 'absent' 12 | with_flattened: '{{ users.stdout_lines | default([]) }}' 13 | 14 | - name: delete hosts.equiv from system | os-01 15 | file: 16 | dest: '/etc/hosts.equiv' 17 | state: 'absent' 18 | 19 | - name: delete .netrc-files from system | os-09 20 | file: 21 | dest: '~{{ item }}/.netrc' 22 | state: 'absent' 23 | with_flattened: '{{ users.stdout_lines | default([]) }}' -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/tasks/securetty.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: create securetty 3 | template: 4 | src: 'etc/securetty.j2' 5 | dest: '/etc/securetty' 6 | owner: 'root' 7 | group: 'root' 8 | mode: '0400' 9 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/etc/audit/auditd.conf.j2: -------------------------------------------------------------------------------- 1 | log_file = /var/log/audit/audit.log 2 | log_format = RAW 3 | log_group = root 4 | priority_boost = 4 5 | flush = INCREMENTAL 6 | freq = 20 7 | num_logs = 5 8 | disp_qos = lossy 9 | dispatcher = /sbin/audispd 10 | name_format = NONE 11 | ##name = mydomain 12 | max_log_file = 6 13 | max_log_file_action = keep_logs 14 | space_left = 75 15 | space_left_action = SYSLOG 16 | action_mail_acct = root 17 | admin_space_left = 50 18 | admin_space_left_action = SUSPEND 19 | disk_full_action = SUSPEND 20 | disk_error_action = SUSPEND 21 | ##tcp_listen_port = 22 | tcp_listen_queue = 5 23 | tcp_max_per_addr = 1 24 | ##tcp_client_ports = 1024-65535 25 | tcp_client_max_idle = 0 26 | enable_krb5 = no 27 | krb5_principal = auditd 28 | ##krb5_key_file = /etc/audit/audit.key 29 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/etc/modprobe.d/modprobe.j2: -------------------------------------------------------------------------------- 1 | {{ ansible_managed | comment }} 2 | 3 | {% for fs in os_unused_filesystems | difference(os_filesystem_whitelist) %} 4 | install {{fs}} /bin/true 5 | {% endfor %} 6 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/etc/profile.d/profile.conf.j2: -------------------------------------------------------------------------------- 1 | # {{ ansible_managed | comment }} 2 | 3 | # Disable core dumps via soft limits for all users. Compliance to this setting is voluntary and can be modified by users up to a hard limit. This setting is a sane default. 4 | ulimit -S -c 0 > /dev/null 2>&1 5 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/etc/securetty.j2: -------------------------------------------------------------------------------- 1 | # {{ ansible_managed | comment }} 2 | 3 | 4 | # A list of TTYs, from which root can log in 5 | # see `man securetty` for reference 6 | {{ "\n".join(os_auth_root_ttys) }} 7 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/usr/share/pam-configs/pam_passwdqd.j2: -------------------------------------------------------------------------------- 1 | Name: passwdqc password strength enforcement 2 | Default: yes 3 | Priority: 1024 4 | Conflicts: cracklib 5 | Password-Type: Primary 6 | Password: 7 | requisite pam_passwdqc.so {{ os_auth_pam_passwdqc_options }} 8 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/templates/usr/share/pam-configs/pam_tally2.j2: -------------------------------------------------------------------------------- 1 | Name: tally2 lockout after failed attempts enforcement 2 | Default: yes 3 | Priority: 1024 4 | Conflicts: cracklib 5 | Auth-Type: Primary 6 | Auth-Initial: 7 | required pam_tally2.so deny={{ os_auth_retries }} onerr=fail unlock_time={{ os_auth_lockout_time }} 8 | Account-Type: Primary 9 | Account-Initial: 10 | required pam_tally2.so 11 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/vars/Amazon.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # system accounts that do not get their login disabled and pasword changed 3 | os_always_ignore_users: ['root','sync','shutdown','halt', 'ec2-user'] 4 | 5 | sysctl_rhel_config: 6 | # ExecShield protection against buffer overflows 7 | kernel.exec-shield: 1 8 | # Syncookies is used to prevent SYN-flooding attacks. 9 | net.ipv4.tcp_syncookies: 1 10 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/vars/Debian.yml: -------------------------------------------------------------------------------- 1 | os_packages_pam_ccreds: 'libpam-ccreds' 2 | os_packages_pam_passwdqc: 'libpam-passwdqc' 3 | os_packages_pam_cracklib: 'libpam-cracklib' 4 | passwdqc_path: '/usr/share/pam-configs/passwdqc' 5 | tally2_path: '/usr/share/pam-configs/tally2' 6 | os_nologin_shell_path: '/usr/sbin/nologin' 7 | 8 | auditd_package: 'auditd' 9 | modprobe_package: 'kmod' 10 | 11 | # Different distros use different standards for /etc/shadow perms, e.g. 12 | # RHEL derivatives use root:root 0000, whereas Debian-based use root:shadow 0640. 13 | # You must provide key/value pairs for owner, group, and mode if overriding. 14 | os_shadow_perms: 15 | owner: root 16 | group: shadow 17 | mode: '0640' 18 | 19 | os_passwd_perms: 20 | owner: root 21 | group: root 22 | mode: '0644' 23 | 24 | os_env_umask: '027' 25 | 26 | os_auth_uid_min: 1000 27 | os_auth_gid_min: 1000 28 | os_auth_sys_uid_min: 100 29 | os_auth_sys_uid_max: 999 30 | os_auth_sys_gid_min: 100 31 | os_auth_sys_gid_max: 999 32 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/vars/Oracle Linux.yml: -------------------------------------------------------------------------------- 1 | os_packages_pam_ccreds: 'pam_ccreds' 2 | os_packages_pam_passwdqc: 'pam_passwdqc' 3 | os_packages_pam_cracklib: 'pam_cracklib' 4 | os_nologin_shell_path: '/sbin/nologin' 5 | 6 | # Different distros use different standards for /etc/shadow perms, e.g. 7 | # RHEL derivatives use root:root 0000, whereas Debian-based use root:shadow 0640. 8 | # You must provide key/value pairs for owner, group, and mode if overriding. 9 | os_shadow_perms: 10 | owner: root 11 | group: root 12 | mode: '0000' 13 | 14 | os_passwd_perms: 15 | owner: root 16 | group: root 17 | mode: '0644' 18 | 19 | os_env_umask: '077' 20 | 21 | os_auth_uid_min: 1000 22 | os_auth_gid_min: 1000 23 | os_auth_sys_uid_min: 201 24 | os_auth_sys_uid_max: 999 25 | os_auth_sys_gid_min: 201 26 | os_auth_sys_gid_max: 999 27 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/vars/RedHat-6.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | sysctl_rhel_config: 4 | # ExecShield protection against buffer overflows 5 | kernel.exec-shield: 1 6 | # Syncookies is used to prevent SYN-flooding attacks. 7 | net.ipv4.tcp_syncookies: 1 8 | -------------------------------------------------------------------------------- /doc/kube/roles/os-harden/vars/RedHat.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | modprobe_package: 'module-init-tools' 4 | auditd_package: 'audit' 5 | 6 | os_packages_pam_ccreds: 'pam_ccreds' 7 | os_packages_pam_passwdqc: 'pam_passwdqc' 8 | os_packages_pam_cracklib: 'pam_cracklib' 9 | os_nologin_shell_path: '/sbin/nologin' 10 | 11 | # Different distros use different standards for /etc/shadow perms, e.g. 12 | # RHEL derivatives use root:root 0000, whereas Debian-based use root:shadow 0640. 13 | # You must provide key/value pairs for owner, group, and mode if overriding. 14 | os_shadow_perms: 15 | owner: root 16 | group: root 17 | mode: '0000' 18 | 19 | os_passwd_perms: 20 | owner: root 21 | group: root 22 | mode: '0644' 23 | 24 | os_env_umask: '077' 25 | 26 | os_auth_uid_min: 1000 27 | os_auth_gid_min: 1000 28 | os_auth_sys_uid_min: 201 29 | os_auth_sys_uid_max: 999 30 | os_auth_sys_gid_min: 201 31 | os_auth_sys_gid_max: 999 32 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/tasks/centos.yml: -------------------------------------------------------------------------------- 1 | - name: 删除centos/redhat默认安装 2 | yum: 3 | name: 4 | - firewalld 5 | - python-firewall 6 | - firewalld-filesystem 7 | state: absent 8 | 9 | - name: 添加EPEL仓库 10 | yum: name=epel-release state=latest 11 | 12 | - name: 安装基础软件包 13 | yum: 14 | name: 15 | - conntrack-tools # ipvs 模式需要 16 | - psmisc # 安装psmisc 才能使用命令killall,它在keepalive的监测脚本中使用到 17 | - nfs-utils # 挂载nfs 共享文件需要 (创建基于 nfs的PV 需要) 18 | - jq # 轻量JSON处理程序,安装docker查询镜像需要 19 | - socat # 用于port forwarding 20 | - bash-completion # bash命令补全工具,需要重新登录服务器生效 21 | - rsync # 文件同步工具,分发证书等配置文件需要 22 | - ipset 23 | - ipvsadm 24 | state: latest 25 | 26 | - name: 临时关闭 selinux 27 | shell: "setenforce 0" 28 | failed_when: false 29 | 30 | - name: 永久关闭 selinux 31 | lineinfile: 32 | dest: /etc/selinux/config 33 | regexp: "^SELINUX=" 34 | line: "SELINUX=disabled" 35 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/tasks/debian.yml: -------------------------------------------------------------------------------- 1 | # 删除默认安装 2 | - name: 删除ubuntu默认安装 3 | apt: 4 | name: 5 | - ufw 6 | - lxd 7 | - lxd-client 8 | - lxcfs 9 | - lxc-common 10 | state: absent 11 | 12 | # Ubuntu 安装基础软件包 13 | - name: 安装 ubuntu基础软件 14 | apt: 15 | name: 16 | - nfs-common # 挂载nfs 共享文件需要 (创建基于 nfs的PV 需要) 17 | - conntrack # network connection cleanup 用到 18 | - jq # 轻量JSON处理程序,安装docker查询镜像需要 19 | - socat # 用于port forwarding 20 | - bash-completion # bash命令补全工具,需要重新登录服务器生效 21 | - rsync # 文件同步工具,分发证书等配置文件需要 22 | - ipset 23 | - ipvsadm 24 | state: latest 25 | 26 | - name: 设置 ulimits 27 | lineinfile: 28 | dest: /etc/profile 29 | regexp: "ulimit -SHn" 30 | line: "ulimit -SHn 65535" 31 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 系统基础软件环境 2 | - import_tasks: debian.yml 3 | when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian" 4 | 5 | - import_tasks: centos.yml 6 | when: ansible_distribution == "CentOS" or ansible_distribution == "RedHat" 7 | 8 | # 公共系统参数设置 9 | - import_tasks: common.yml 10 | 11 | - name: prepare some dirs 12 | file: name={{ item }} state=directory 13 | with_items: 14 | - "{{ bin_dir }}" 15 | - "{{ ca_dir }}" 16 | 17 | - name: 分发证书工具 CFSSL 18 | copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 19 | with_items: 20 | - cfssl 21 | - cfssl-certinfo 22 | - cfssljson 23 | 24 | - name: 写入环境变量$PATH 25 | lineinfile: 26 | dest: ~/.bashrc 27 | state: present 28 | regexp: 'kubeasz' 29 | line: 'export PATH={{ bin_dir }}:$PATH # generated by kubeasz' 30 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/templates/10-k8s-modules.conf.j2: -------------------------------------------------------------------------------- 1 | br_netfilter 2 | ip_vs 3 | ip_vs_rr 4 | ip_vs_wrr 5 | ip_vs_sh 6 | nf_conntrack_ipv4 7 | nf_conntrack 8 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/templates/30-k8s-ulimits.conf.j2: -------------------------------------------------------------------------------- 1 | * soft nofile 65536 2 | * hard nofile 65536 3 | * soft nproc 65536 4 | * hard nproc 65536 5 | -------------------------------------------------------------------------------- /doc/kube/roles/prepare/templates/95-k8s-sysctl.conf.j2: -------------------------------------------------------------------------------- 1 | net.ipv4.ip_forward = 1 2 | net.bridge.bridge-nf-call-iptables = 1 3 | net.bridge.bridge-nf-call-ip6tables = 1 4 | net.bridge.bridge-nf-call-arptables = 1 5 | # 6 | net.netfilter.nf_conntrack_max=1000000 7 | vm.swappiness = 0 8 | vm.max_map_count=655360 9 | fs.file-max=655360 10 | -------------------------------------------------------------------------------- /doc/kube/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: test #hosts中指定 3 | 4 | tasks: 5 | - name: "ls /tmp" #- name:任务名称,下面是任务过程 6 | shell: 'ls /tmp/' -------------------------------------------------------------------------------- /kube/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/kube/__init__.py -------------------------------------------------------------------------------- /kube/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /kube/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class KubeConfig(AppConfig): 5 | name = 'kube' 6 | -------------------------------------------------------------------------------- /kube/forms.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | from django import forms 8 | from kube.models import KubeNode, KubeVars 9 | 10 | 11 | class KubeNodeForm(forms.ModelForm): 12 | class Meta: 13 | model = KubeNode 14 | exclude = ('created_by',) 15 | 16 | widgets = { 17 | 'ip': forms.Select(attrs={'class': 'form-control', 'placeholder': '输入节点IP'}), 18 | 'role': forms.Select(attrs={'class': 'form-control', 'placeholder': '选择节点角色'}), 19 | 'LB_ROLE': forms.Select(attrs={'class': 'form-control', 'placeholder': '选择节点类型'}), 20 | } 21 | 22 | 23 | class KubeVarsForm(forms.ModelForm): 24 | class Meta: 25 | model = KubeVars 26 | fields = '__all__' 27 | widgets = { 28 | 'name': forms.TextInput(attrs={'class': 'form-control'}), 29 | } 30 | -------------------------------------------------------------------------------- /kube/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/kube/migrations/__init__.py -------------------------------------------------------------------------------- /kube/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "omms.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /monitor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/monitor/__init__.py -------------------------------------------------------------------------------- /monitor/admin.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # Register your models here. 8 | -------------------------------------------------------------------------------- /monitor/apps.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.apps import AppConfig 7 | 8 | 9 | class MonitorConfig(AppConfig): 10 | name = 'monitor' 11 | -------------------------------------------------------------------------------- /monitor/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/monitor/migrations/__init__.py -------------------------------------------------------------------------------- /monitor/models.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | -------------------------------------------------------------------------------- /monitor/tests.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # Create your tests here. 8 | -------------------------------------------------------------------------------- /omms/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM cyourai/python 2 | MAINTAINER ctsi 3 | 4 | # ENV 设置环境变量 5 | ENV PATH /usr/bin;/usr/sbin:$PATH 6 | 7 | # 下载源码 8 | RUN rm -rf /workspaces/ && mkdir -p /workspaces && git clone https://gitee.com/SmallMi/omms.git /workspaces/omms 9 | WORKDIR /workspaces/omms 10 | 11 | # 修改源码中数据库连接 12 | COPY settings.py omms 13 | #RUN grep 'HOST' omms/settings.py 14 | 15 | # 安装系统工具及源码依赖 16 | RUN yum -y install sshpass && pip install -i https://pypi.douban.com/simple/ -r requirements.txt 17 | 18 | # 数据初始化 19 | #RUN python manage.py makemigrations && python manage.py migrate && python manage.py loaddata default_user 20 | 21 | # EXPOSE 映射端口 22 | EXPOSE 10000 23 | 24 | # 容器启动后数据初始化 25 | CMD python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py loaddata default_user && python3 /workspaces/omms/manage.py runserver 0.0.0.0:10000 26 | 27 | # 容器启动后时执行 28 | #CMD ["python3", "/workspaces/omms/manage.py", "runserver", "0.0.0.0:10000"] -------------------------------------------------------------------------------- /omms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/omms/__init__.py -------------------------------------------------------------------------------- /omms/urls.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.conf.urls import url,include 7 | from django.contrib import admin 8 | from django.conf.urls.static import static 9 | from django.conf import settings 10 | from dashboard import views as dashboard_views 11 | 12 | 13 | urlpatterns = [ 14 | url(r'^$',dashboard_views.index, name="index"), 15 | url(r'^admin/', admin.site.urls), 16 | url(r'accounts/', include('accounts.urls')), 17 | url(r'release/', include('release.urls')), 18 | url(r'cmdb/', include('cmdb.urls')), 19 | url(r'tasks/', include('tasks.urls')), 20 | url(r'^dashboard/', include('dashboard.urls')), 21 | url(r'monitor/', include('monitor.urls')), 22 | url(r'kube/', include('kube.urls')), 23 | 24 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 25 | -------------------------------------------------------------------------------- /omms/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for omms project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'omms.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /release/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/release/__init__.py -------------------------------------------------------------------------------- /release/admin.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | 7 | # Register your models here. 8 | -------------------------------------------------------------------------------- /release/apps.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.apps import AppConfig 7 | 8 | 9 | class ReleaseConfig(AppConfig): 10 | name = 'release' 11 | -------------------------------------------------------------------------------- /release/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/release/migrations/__init__.py -------------------------------------------------------------------------------- /release/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /static/css/patterns/congruent_pentagon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/congruent_pentagon.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/header-profile-skin-2.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/header-profile.png -------------------------------------------------------------------------------- /static/css/patterns/otis_redding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/otis_redding.png -------------------------------------------------------------------------------- /static/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/shattered.png -------------------------------------------------------------------------------- /static/css/patterns/triangular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/patterns/triangular.png -------------------------------------------------------------------------------- /static/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /static/css/plugins/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /static/css/plugins/codemirror/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "spinning.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | .fa-icon-rotate(@degrees, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 15 | -webkit-transform: rotate(@degrees); 16 | -ms-transform: rotate(@degrees); 17 | transform: rotate(@degrees); 18 | } 19 | 20 | .fa-icon-flip(@horiz, @vert, @rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 22 | -webkit-transform: scale(@horiz, @vert); 23 | -ms-transform: scale(@horiz, @vert); 24 | transform: scale(@horiz, @vert); 25 | } 26 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | @mixin fa-icon-rotate($degrees, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: rotate($degrees); 16 | -ms-transform: rotate($degrees); 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 22 | -webkit-transform: scale($horiz, $vert); 23 | -ms-transform: scale($horiz, $vert); 24 | transform: scale($horiz, $vert); 25 | } 26 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/css/plugins/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /static/css/plugins/iCheck/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/iCheck/green.png -------------------------------------------------------------------------------- /static/css/plugins/iCheck/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/css/plugins/iCheck/green@2x.png -------------------------------------------------------------------------------- /static/css/plugins/morris/morris-0.4.3.min.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /static/img/Down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/Down.gif -------------------------------------------------------------------------------- /static/img/Up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/Up.gif -------------------------------------------------------------------------------- /static/img/a1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a1.jpg -------------------------------------------------------------------------------- /static/img/a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a2.jpg -------------------------------------------------------------------------------- /static/img/a3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a3.jpg -------------------------------------------------------------------------------- /static/img/a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a4.jpg -------------------------------------------------------------------------------- /static/img/a5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a5.jpg -------------------------------------------------------------------------------- /static/img/a6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a6.jpg -------------------------------------------------------------------------------- /static/img/a7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a7.jpg -------------------------------------------------------------------------------- /static/img/a8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/a8.jpg -------------------------------------------------------------------------------- /static/img/angular_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/angular_logo.png -------------------------------------------------------------------------------- /static/img/email_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/email_1.jpg -------------------------------------------------------------------------------- /static/img/email_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/email_2.jpg -------------------------------------------------------------------------------- /static/img/email_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/email_3.jpg -------------------------------------------------------------------------------- /static/img/p.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p.ico -------------------------------------------------------------------------------- /static/img/p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p1.jpg -------------------------------------------------------------------------------- /static/img/p2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p2.jpg -------------------------------------------------------------------------------- /static/img/p3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p3.jpg -------------------------------------------------------------------------------- /static/img/p4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p4.jpg -------------------------------------------------------------------------------- /static/img/p5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p5.jpg -------------------------------------------------------------------------------- /static/img/p6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p6.jpg -------------------------------------------------------------------------------- /static/img/p7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p7.jpg -------------------------------------------------------------------------------- /static/img/p8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p8.jpg -------------------------------------------------------------------------------- /static/img/p_big1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p_big1.jpg -------------------------------------------------------------------------------- /static/img/p_big2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p_big2.jpg -------------------------------------------------------------------------------- /static/img/p_big3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/p_big3.jpg -------------------------------------------------------------------------------- /static/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/profile.jpg -------------------------------------------------------------------------------- /static/img/profile_big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/profile_big.jpg -------------------------------------------------------------------------------- /static/img/profile_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/profile_small.jpg -------------------------------------------------------------------------------- /static/img/zender_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/img/zender_logo.png -------------------------------------------------------------------------------- /static/js/demo/peity-demo.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $("span.pie").peity("pie", { 3 | fill: ['#1ab394', '#d7d7d7', '#ffffff'] 4 | }) 5 | 6 | $(".line").peity("line",{ 7 | fill: '#1ab394', 8 | stroke:'#169c81', 9 | }) 10 | 11 | $(".bar").peity("bar", { 12 | fill: ["#1ab394", "#d7d7d7"] 13 | }) 14 | 15 | $(".bar_dashboard").peity("bar", { 16 | fill: ["#1ab394", "#d7d7d7"], 17 | width:100 18 | }) 19 | 20 | var updatingChart = $(".updating-chart").peity("line", { fill: '#1ab394',stroke:'#169c81', width: 64 }) 21 | 22 | setInterval(function() { 23 | var random = Math.round(Math.random() * 10) 24 | var values = updatingChart.text().split(",") 25 | values.shift() 26 | values.push(random) 27 | 28 | updatingChart 29 | .text(values.join(",")) 30 | .change() 31 | }, 1000); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /static/js/ops.js: -------------------------------------------------------------------------------- 1 | 2 | function notify(type,icon,msg){ 3 | 4 | $.notify({ 5 | // options 6 | icon: icon, 7 | title: 'Ops+提示:', 8 | message: msg, 9 | },{ 10 | allow_dismiss: true, 11 | newest_on_top: false, 12 | type: type, 13 | delay: 5000, 14 | timer: 1000, 15 | icon_type: 'class', 16 | template: '' 25 | }); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /static/js/plugins/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /static/js/plugins/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /static/js/plugins/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /static/js/plugins/echart/vintage.js: -------------------------------------------------------------------------------- 1 | (function (root, factory) { 2 | if (typeof define === 'function' && define.amd) { 3 | // AMD. Register as an anonymous module. 4 | define(['exports', 'echarts'], factory); 5 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { 6 | // CommonJS 7 | factory(exports, require('echarts')); 8 | } else { 9 | // Browser globals 10 | factory({}, root.echarts); 11 | } 12 | }(this, function (exports, echarts) { 13 | var log = function (msg) { 14 | if (typeof console !== 'undefined') { 15 | console && console.error && console.error(msg); 16 | } 17 | }; 18 | if (!echarts) { 19 | log('ECharts is not Loaded'); 20 | return; 21 | } 22 | var colorPalette = ['#d87c7c','#919e8b', '#d7ab82', '#6e7074','#61a0a8','#efa18d', '#787464', '#cc7e63', '#724e58', '#4b565b']; 23 | echarts.registerTheme('vintage', { 24 | color: colorPalette, 25 | backgroundColor: '#fef8ef', 26 | graph: { 27 | color: colorPalette 28 | } 29 | }); 30 | })); -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/editormd-logo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/editormd-logo.eot -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/editormd-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/editormd-logo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/editormd-logo.ttf -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/editormd-logo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/editormd-logo.woff -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/js/plugins/editormd/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/loading.gif -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/loading@2x.gif -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/loading@3x.gif -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-favicon-16x16.ico -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-favicon-24x24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-favicon-24x24.ico -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-favicon-32x32.ico -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-favicon-48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-favicon-48x48.ico -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-favicon-64x64.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-favicon-64x64.ico -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-114x114.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-120x120.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-144x144.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-16x16.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-180x180.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-240x240.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-24x24.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-320x320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-320x320.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-32x32.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-48x48.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-57x57.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-64x64.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-72x72.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/editormd-logo-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/editormd-logo-96x96.png -------------------------------------------------------------------------------- /static/js/plugins/editormd/images/logos/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/editormd/images/logos/vi.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-af.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.af)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ar-DZ.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["ar-DZ"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ar.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ar)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-az.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.az)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-be.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.be)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-bg.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bg)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-bs.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bs)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ca.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ca)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-cs.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.cs)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-cy-GB.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["cy-GB"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-da.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.da)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-de.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.de)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-el.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.el)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-AU.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-AU"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-GB.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-GB"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-NZ.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-NZ"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-eo.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eo)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-es.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ogo","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","juv","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.es)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-et.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.et)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-eu.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eu)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fa.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fa)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fi)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fo.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fo)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr-CA.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CA"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr-CH.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CH"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fr)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-gl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.gl)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-he.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.he)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-hi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-hr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-hu.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-hy.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-id.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-is.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-it.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ja.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ka.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-kk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-km.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ko.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ky.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-lb.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-lt.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-lv.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-mk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ml.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ms.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-nb.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-nl-BE.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-nl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-nn.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-no.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-pl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-pt-BR.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-pt.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-rm.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ro.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ru.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sq.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sr-SR.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-sv.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-ta.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-th.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-tj.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-tr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-uk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-vi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-HK.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-TW.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])}); -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/animated-overlay.gif -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /static/js/plugins/jquery-ui/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/jquery-ui/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /static/js/plugins/layer/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/layer/skin/default/icon-ext.png -------------------------------------------------------------------------------- /static/js/plugins/layer/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/layer/skin/default/icon.png -------------------------------------------------------------------------------- /static/js/plugins/layer/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/layer/skin/default/loading-0.gif -------------------------------------------------------------------------------- /static/js/plugins/layer/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/layer/skin/default/loading-1.gif -------------------------------------------------------------------------------- /static/js/plugins/layer/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/static/js/plugins/layer/skin/default/loading-2.gif -------------------------------------------------------------------------------- /tasks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/tasks/__init__.py -------------------------------------------------------------------------------- /tasks/admin.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.contrib import admin 7 | 8 | # Register your models here. 9 | from .models import history,toolsscript 10 | 11 | 12 | 13 | admin.site.register(history) 14 | admin.site.register(toolsscript) -------------------------------------------------------------------------------- /tasks/apps.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | ''' 3 | Author: smallmi 4 | Blog: http://www.smallmi.com 5 | ''' 6 | from django.apps import AppConfig 7 | 8 | 9 | class TasksConfig(AppConfig): 10 | name = 'tasks' 11 | -------------------------------------------------------------------------------- /tasks/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/tasks/migrations/__init__.py -------------------------------------------------------------------------------- /tasks/script/1.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/tasks/script/1.sh -------------------------------------------------------------------------------- /tasks/script/test.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smallmi/omms/f6feb1b0d86bbedb26bfb896468a53d995f86a67/tasks/script/test.sh -------------------------------------------------------------------------------- /tasks/tests.py: -------------------------------------------------------------------------------- 1 | 2 | # Create your tests here. 3 | -------------------------------------------------------------------------------- /templates/403.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PFMS | 403 Error 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

403

17 |

您没有权限操作@^@

18 |
19 | 请联系管理员进行授权! 20 |
返回首页: 21 |
首页 22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /templates/accounts/contact_table.html: -------------------------------------------------------------------------------- 1 | {% for i in form %} 2 | 3 | {{ i.id }} 4 | {{ i.name }} 5 | 6 | {% if i.email %} {{i.email}} {% else %} 无 {% endif %} 7 | 8 | 9 | 10 | 删除 11 | 12 | 13 | {% endfor %} -------------------------------------------------------------------------------- /templates/accounts/user/group_table.html: -------------------------------------------------------------------------------- 1 | {% load accounts_tag %} 2 | {% for i in content %} 3 | 4 | {{ i.name }} 5 | 6 | {% if i.user_set.all %} 7 | {{ i.user_set.all | usetostr }} 8 | {% endif %} 9 | 10 | 11 | 12 | 13 | 权限分配 14 | 删除 15 | 16 | 17 | {% endfor %} 18 | -------------------------------------------------------------------------------- /templates/base/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /templates/base/top_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 22 |
-------------------------------------------------------------------------------- /templates/cmdb/group_table.html: -------------------------------------------------------------------------------- 1 | {% for i in content %} 2 | 3 | {{ forloop.counter }} 4 | {{ i.name }} 5 | {{ i.average_server }} 6 | {{ i.comment }} 7 | {{ i.created_by.fullname }} 8 | {{ i.date_created }} 9 | 10 | 编辑 11 | 删除 12 | 13 | 14 | {% endfor %} -------------------------------------------------------------------------------- /templates/cmdb/idc_table.html: -------------------------------------------------------------------------------- 1 | {% for i in content %} 2 | 3 | {{ forloop.counter }} 4 | {{ i.name }} 5 | {{ i.average_server }} 6 | {{ i.contact }} 7 | {{ i.phone }} 8 | {{ i.operator }} 9 | 10 | 编辑 11 | 删除 12 | 13 | {{ i.address }} 14 | {{ i.intranet }} 15 | {{ i.extranet }} 16 | 17 | {% endfor %} -------------------------------------------------------------------------------- /templates/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PFMS | Error 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

ERROR

17 |

操作错误

18 |
19 |

{{ error }}

20 |
返回首页: 21 |
首页 22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /templates/kube/container_table.html: -------------------------------------------------------------------------------- 1 | {% load accounts_tag %} 2 | {% for i in containerList %} 3 | 4 | {{ forloop.counter }} 5 | {{ i.ip }} 6 | {{ i.name }} 7 | {{ i.node }} 8 | {{ i.namespace }} 9 | {{ i.stime }} 10 | 11 | 12 | 13 | 删除 14 | 15 | 16 | 17 | {% endfor %} 18 | -------------------------------------------------------------------------------- /templates/tasks/k8s-install.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
安装过程:
5 |
6 |
7 |
8 |
9 |
10 |
-------------------------------------------------------------------------------- /templates/tasks/k8s_modal.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /templates/tasks/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Ajax Test 4 | 5 | 33 | 34 | 35 |

Ajax Test

36 |

37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /templates/tasks/tools-add.html: -------------------------------------------------------------------------------- 1 | {% extends "base/base_site.html" %} 2 | {% block content %} 3 |
4 |
5 |
6 |
7 |
脚本添加
8 |
{{ msg }}
9 |
10 | {% include 'tasks/tools-add_table.html' %} 11 |
12 |
13 |
14 | {% endblock %} -------------------------------------------------------------------------------- /templates/tasks/tools_table.html: -------------------------------------------------------------------------------- 1 | {% for row in content %} 2 | 3 | 4 | 5 | {{ row.name }} 6 | {% ifequal row.tool_run_type 0 %} shell{% endifequal %} {% ifequal row.tool_run_type 1 %} 7 | python {% endifequal %} {% ifequal row.tool_run_type 2 %} yml {% endifequal %} 8 | {{ row.comment }} 9 | {{ row.utime }} 10 | 11 | 12 | 执行 14 | 15 | 编辑 17 | 删除 19 | 20 | 21 | 22 | {% endfor %} --------------------------------------------------------------------------------