codecamp

Ansible 用 Jupyter 操控 Ansible (localhost)

在「Ansible 用 Docker 练习 Ansible」一章时,冻仁用了 Docker 来练习 Ansible,而这次冻仁将再次结合 Jupyter 这套系统来使用 Ansible。

automate_with_ansible_practice-05.jpg

Jupyter 是什么?

Jupyter 的全名为 Jupyter Notebook,是从 2014 年的 iPython 专案演变而来的。它是个可以透过网页来撰写可互动式的文件系统,除了支援 Markdown, Python 和 (几乎) 所有的程式语言外,还可以在上面执行 Shell 指令!

官网简介如下:

The Jupyter Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text.

若想深入了解 Jupyter,可参考以下文章:

现在连 Microsoft Azure 都推出了 Notebooks 的 SaaS 服务在抢攻 Jupyter 的市场,得以证实它受欢迎程度非常之高。

怎么用 Jupyter 操控 Ansible?

冻仁已建好了作为 Control Machine 的 Jupyter Docker image - chusiang/ansible-jupyter,大家可从 Docker Hub 上取得。目前支持的 Linux 发行版本有:

  • alpine-3.4, latest
  • archlinux
  • centos-7
  • debian-7
  • debian-8
  • gentoo
  • opensuse-42.1
  • ubuntu-14.04
  • ubuntu-16.04

automate_with_ansible_practice-06.jpg

  1. 在终端机 (Terminal) 里启动 Jupyter 的容器,请依个人喜好选择 image,其 latest 标签 (tag) 是对应到 alpine-3.4

    # alpine-3.4
    $ docker run -p 8888:8888 -d chusiang/ansible-jupyter:alpine-3.4
    
    # ubuntu-14.04
    $ docker run -p 8888:8888 -d chusiang/ansible-jupyter:ubuntu-14.04
    
  2. 查看容器状态,并确认刚刚启动的 Jupyter 容器是有否绑定 Port 到 8888 上。

    $ docker ps
    CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
    4c5e92f73db8        chusiang/ansible-jupyter:ubuntu-14.04        "docker-entrypoint.sh"   44 hours ago        Up 3 seconds        0.0.0.0:8888->8888/tcp   naughty_elion
    
  3. 于浏览器输入 http://localhost:8888/ 进入 Jupyter 网站。

  4. 开启 ansible_on_jupyter.ipynb 档案。
  5. 试著在 Jupyter 上操控 Ansible 吧!

    2016-12-07-ansible-jupyter-ping.gif

  6. 在 Jupyter 上要执行 Shell 指令时,记得要在开头加上 ! 的前缀字元。

  7. 在 Code Block 输入完指令后,点击选单列的 ▶▏或使用 <Ctrl> + <Enter> 的快捷键即可执行。
  8. 练习完,记得下载这本 notebook (透过左上角的 File 选单里有 Download as 的项目进行下载),不然一旦等容器被移除该笔记就没了!
  9. 現在的環境其實只有 Control Machine 一台,所以 inventory 的設定只有 localhost 有作用!

    automate_with_ansible_practice-07.jpg

后话

最早冻仁是从 @sakanamax 前辈身上得知 Ansible + Jupyter 这个超棒的组合,并透过它们入门 Ansible 这项技艺!

在 2016 年第 8 届铁人赛开赛前夕,冻仁便尝试把这个组合移植到更多的 GNU/Linux 发行版本上,前后约花了 2 周才完成呢。

最后希望 chusiang/ansible-jupyter 这个 Docker image 可以帮到大家。:D

相关连结


Ansible 如何操作
Ansible 用 Jupyter 操控 Ansible (Managed node)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }