Python学習【365日チャレンジ!】257日目のマスターU(@Udemy11)です。
アメリカ大統領選挙も投票日が近いということで、アメリカは結構両陣営の対立がヒートアップしていますね。
日本にいれば、入ってくる情報は、民主党びいきの報道がほとんどということで、トランプを批判した情報が多いのですが、そこまで批判されているのになぜ4年前に大統領になれたのかという疑問が湧いてきます。
メディアが報道している内容がリアルなのかフェイクなのかしっかりと見極める必要がありそうなので、少し調べてみたところ、いろいろと問題があるようです。
大手のメディアはほとんどが民主党を支持していて、トランプ大統領の失脚を狙った報道をしていたとか、バイデン候補はロシアから賄賂を受け取っているとか、民主党やセレブがアメリカをコントロールして自分たちのいいように支配しようとしているなんて記事も見つけることができます。
調べれば調べるほど、いったい何を信じたらいいのかよくわかなくなってきますね。
ま〜、テレビのドラマでやっているような一般人にはわからない怪しいことは存在するんでしょうけど、どちらが勝っても、国民のための政治をやってもらいたいものです。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、自動化ができるAnsibleを調べてみました。
インフラ構築を自動化するツールは他にもあるなかで、Ansibleは、管理専用のエージェントソフトを必要としないエージェントレスであるのが特徴でした。
設定ファイルはYAML形式のファイルを使っていて、少し設定が難しそうという感じでした。
詳細については、昨日の記事をごらんください。
今日は、Ansibleを使って自動でアプリケーションをサーバーにインストールする方法を学習します。
ファイル構造
今回Ansibleで自動化を設定するためのファイル構造(common
の設定まで)はこのようになります。
前回はFabricを使った自動化だったので、fab_project
フォルダに設定ファイルを用意しましたが、今回は、Ansibleなので、ansible_project
フォルダに設定ファイルを作っていきます。
トップの階層には、roles
フォルダ、investories
フォルダ、site.yml
ファイルをつくっています
investoriesフォルダの中には、hosts
フォルダを作ってその中にhosts.txt
を作成します。
roles
フォルダの中にcommon
フォルダとwebserver
フォルダを用意して、それぞれの中にtasks
フォルダをつくり、さらにその中にmain.yml
ファイルを作成します。(今回はcommon
なのでwebserver
フォルダは展開していません。)
今回は、common
の設定を行いますので、common
フォルダの中にinstall-packages.yml
ファイルも作成します。
それぞれのファイルを順番に見ていきましょう。
site.yml
設定のためのymlファイルは、---
(ハイフン3つ)で始めて、最後の行は...
(ピリオド3つ)で締めくくります。
---
- hosts: webservers
roles:
- common
...
3行目でhosts
の設定をwebservers
に指定して、roles
は、common
を読みにいってくださいというコードになります。
hosts.txt
次に、hosts
の設定で読み込まれるwebservers
に関するコードです。
[webservers]
server2 ansible_host=172.16.200.102 ansible_port=22 ansible_user=root ansible_ssh_pass=root ansible_python_interpreter=/usr/bin/python3
なんとなくわかるかと思いますが、サーバー名、ホスト、ポート、ユーザーID、パスワード、使うPythonのパスを指定しています。
main.yml
こちらは、site.yml
のtasks
で指定したcommon
によって読み込まれるファイルです。
common
が指定されているので、その下のtasks
フォルダの中にあるmain.yml
が実行されることになります。
---
- include_tasks: install-packages.yml
...
名前のとおり、メインの設定ファイルなので、このファイルに設定をすべて書き込むことも可能ですが、Pythonの得意技であるパーツ分けをすることでわかりやすくなります。
1行だけのコードになりますが、install_packages.yml
を読み込むだけのコードになります。
今回読み込むファイルが一つだけですが、こちらのファイルに別のパーツを設定するYAML
ファイルを読み込ませることもできます。
install_packages.yml
今回実際に実行される設定ファイルinstall_packages.yml
を書いていきます。
---
- name: Add universe repo
apt_repository:
repo: deb http://archive.ubuntu.com/ubuntu xenial universe
state: present
update_cache: yes
- name: Install packages
apt:
name:
- python3-setuptools
- software-properties-common
- name: Install pip
apt:
name:
- python-pip
- python3-pip
state: latest
...
3行目、9行目、15行目のname
は、それぞれのコマンドのコメントのようなもので、何をするのかわかりやすいタイトルにします。
3行目から7行目はubuntu
のxenial universe
の現在のバージョンをインストールしますが、7行目でインストールする前にapt-get update
を実行します。
9行目から13行目では、setuptools
とsoftware-properties-common
をインストールしています。
15行目から20行目でpip
をインストールしています。
酒井さんのレクチャーでは、5行目から7行目でname: "{{ item }}"
としてwith
ステートメントを使ったコードにしていたのですが、どうもうまくいかなかったので、こちらのコードに変更しました。
また、9行目からのpip
のインストールもeasy_install
を使うとエラーが起こっていたので、このコードに変更しました。
実行結果
ということで、今回もかなりハマりまくって、過去のQ&Aをみながらなんとかエラーが起こらないコードにすることができました。
このコードを一旦実行してみると次のようにエラーが無く終了しました。
黄色のchanged
が気になりますが、こちらは、ファイルなどを新しく設置したときの表示のようです。
ちなみにinstall_packages
は新しくパッケージをインストールしているので、1回めならchanged
になるはずですが、すでに何度か実行してパッケージが存在するためok
という表示になっています。
まとめ
これまでに何度も紹介していますが、現在学習しているのは、シリコンバレーで活躍中のプログラマー酒井さんの下記の講座です。
酒井さんの講座は、Pythonの基本から応用までを幅広く網羅しているのですが、若干古いコードを使っているレクチャーが残っているので、私が使っているバージョンとは違い、色々とエラーが起こるところがあります。
基本的に、自分でエラーの原因を突き止めて解決する必要があるので、ハマってしまったときはかなり勉強になりますし、最終的にはQ&Aで質問すれば、解決に繋がります。
ま〜、自分が引っかかっているところは、他の受講生も引っかかっている可能性があるので、すでに質問で解決していたりするとすぐに問題を解決することができます。
ほんと今回はかなりハマってしまったので、次のwebserver
でもハマりそうなので、ちょっと怖いのですが、進まないことには始まらないので、明日もじっくりコードと向かい合おうと思います
それでは明日もGood Python!