forked from hakimel/reveal.js
-
Notifications
You must be signed in to change notification settings - Fork 4
/
fabric101.html
executable file
·156 lines (152 loc) · 6.69 KB
/
fabric101.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Fabric</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.min.css">
<link rel="stylesheet" href="css/theme/default.css" id="theme">
<!-- For syntax highlighting -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- If the query includes 'print-pdf', include the PDF print sheet -->
<script>
if( window.location.search.match( /print-pdf/gi ) ) {
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'css/print/pdf.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
}
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Fabric</h1>
</section>
<section>
<h2>What ?</h2>
<p>
Fabric is a Python (2.5 or higher) library and command-line
for streamlining the use of SSH for application or systems
administration tasks.
</p>
</section>
<section>
<h2>Why ?</h2>
<ul>
<li>DRY</li>
<li>Rapid Development</li>
<li>Write once, do more</li>
<li>Less codes than shell script</li>
<li>Less mistakes than handwork</li>
<li>Less time to operate many servers</li>
</ul>
</section>
<section>
<h2>How ?</h2>
<ul>
<li>Install with pip</li>
<li>Create fabfile.py</li>
<li>Make your script</li>
<li>Run (fab [command])</li>
</ul>
</section>
<section>
<h2>Useful APIs</h2>
<ul>
<li>local(command) - run a command on the local host.</li>
<li>run(command) - run a shell command on a remote host.</li>
<li>sudo(connamd, user) - run a shell command on a remote host with superuser privileges.</li>
<li>cd(path) - context manager that keeps directory state when calling remote operations</li>
<li>put/get - copy a file from/to a remote host</li>
<li>prompt - ask the user for information</li>
</ul>
</section>
<section>
<h2>Configuration</h2>
<ul>
<li>hosts - The global host list</li>
<li>password - THe default password used by the SSH and/or when answering sudo prompts</li>
<li>warn_only - Specifies whether or not to warn, when run/sudo/local encounter error conditions.</li>
</ul>
</section>
<section>
<h2>Execute comands</h2>
<ul>
<li>Get output and return code:
<ul>
<li>output = run("command")</li>
</ul>
</li>
<li>Chain commands:
<ul>
<li>run("workon env && git pull")</li>
</ul>
</li>
<li>Start pseudo-daemons:
<ul>
<li>run("screen -d -m not-a-daemon")</li>
</ul>
</li>
<li>Any return code except 0 is treated as an error and an exception is thrown (unless warn_only is set)</li>
</ul>
</section>
<section data-markdown>
## Keeping state: Directory
<pre><code contenteditable style="margin-top: 20px;">
with cd("var/www/app"):
run("git pull origin master")
run("cucumber")
</code></pre>
</section>
<section data-markdown>
## Keeping state: running from trunk
<pre><code contenteditable style="margin-top: 20px;">
with prefix("workon env_app"):
run("pip install nose")
</code></pre>
</section>
<section>
<h1>THE END</h1>
<h3>" ยิ่งให้ ยิ่งได้ ยิ่งเรียนรู้ "</h3>
</section>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.min.js"></script>
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
// Parallax scrolling
// parallaxBackgroundImage: 'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg',
// parallaxBackgroundSize: '2100px 900px',
// Optional libraries used to extend on reveal.js
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
]
});
</script>
</body>
</html>