ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

Ansibleハンズオンやってみました

お疲れ様です。伊藤です。

本日の勉強会は非常に盛り上がりました。参加者の皆様ありがとうございました。※詳細は下記をご参照くださいhttp://pj-doaa.hatenablog.com/entry/2018/10/31/203643

全くAnsibleどころかLinuxも触ってない方も参加頂いて、有難い限り。良い経験になればいいですが。 と、書いている今時点では実はまだ何も終わってません.....(勉強会直後にこの記事をアップするため事前に書いてます)

というわけで早速課題の回答をアップしていきたいと思います。 まずは最初の課題。

$ cat kadai1.yml
- hosts: localhost
  become: yes

  vars:
    user_name: ito1

  tasks:
    - name: ユーザ作成
      user:
        name: "{{ user_name }}"

うんまあ、これは非常に簡単ですね。とりあえずuserモジュールの使い方を知っていればすぐに答えられる問題です。個別のユーザ権限では動作できないのでbecomeが必須というところぐらいかと思います。あとは変数の表現の仕方ですね。これは仕様とはいいがたい気もしますが、なぜか変数が先頭に来るとダブルコーテーションが必要なんですよね....今回は徐々に足されていく感じにしていますので次の課題に行ってみましょう。2番目の課題の回答はこちらです。

$ cat kadai2.yml
- hosts: localhost
  become: yes

  vars:
    user_name: ito1

  tasks:
    - name: ユーザ作成
      user:
        name: "{{ user_name }}"
        password: "{{ user_name | password_hash('sha512') }}"

こちらは先ほど追加したユーザにパスワードを追加する部分です。こちらはやや難しくパスワードをハッシュ化しないと使えないというところがポイントかと思います。動作確認をしてみると実はログインできないという罠にはまってくれる人がいるとウヒヒとなるところですね。さりげなく本ブログを読んでいると簡単に解決できる作りにしています(AnsibleのModule:user - ときどきAnsible日記)新人ズはここまで来れれば合格かなぁ。続きまして三問目。

$ cat kadai3.yml
- hosts: localhost
  become: yes

  vars:
    user_name: ito1

  tasks:
    - name: ユーザ作成
      user:
        name: "{{ user_name }}"
        password: "{{ user_name | password_hash('sha512') }}"
      register: ret

    - name: 実行結果判断
      lineinfile:
        path: /home/ito/work/user_list
        line: "{{ user_name }}"
        create: yes
        state: present
      when: ret.changed == true

やっとこさPlaybookらしくなってきました。先ほどの実行結果を取得して変更されていればそのユーザをリストに出力する。というものです。ここではregisterとwhenの使い方を学んでいただきます。whenについてはしっかり説明(ここにも書いてますwhenで処理を分岐させる - ときどきAnsible日記)しましたが、registerについてはさらっと説明した(はず)なのでこの辺を覚えているかがポイントになります。あとはlineinfileですね。こちらも本ブログ(AnsibleのModule:lineinfile - ときどきAnsible日記)を読んでいたら簡単!(なはず)続いて4問目の答えはこちら。

$ cat kadai4.yml
- hosts: localhost
  become: yes

  vars:
    user_name: ito1

  tasks:
    - name: ユーザ作成
      user:
        name: "{{ user_name }}"
        password: "{{ user_name | password_hash('sha512') }}"
      register: ret

    - name: 実行結果判断
      lineinfile:
        path: /home/ito/work/user_list
        line: "{{ user_name }}"
        create: yes
        state: present
      when: ret.changed == true

    - name: ユーザリストチェック
      shell: grep "{{ user_name }}" /home/ito/work/user_list
      register: user_check
      failed_when: user_check.rc not in [0, 1]

    - name: ユーザ削除
      user:
        name: "{{ user_name }}"
        state: absent
      when: user_check.rc == 0

この問題はshellについての使い方ですが、他にもいろんなやり方があるので自分で考えた方法で処理してほしい感じです。あとはshellにした場合にはfailed_whenも使ってほしいですねぇ。。この辺まで来れる人が何人いるやら....インフラ経験者はここまでは来てほしいなぁ...最後に5問めの答えはこちら。

$ cat kadai5.yml
- hosts: localhost
  become: yes

  vars:
    loop_user: ito

  tasks:
    - name: 繰り返し実行
      include: kadai5-1.yml user_name={{ loop_user }}{{ item }}
      with_sequence: "start=1 end=10"
$ cat kadai5-1.yml
    - name: ユーザ作成
      user:
        name: "{{ user_name }}"
        password: "{{ user_name | password_hash('sha512') }}"
      register: ret

    - name: 実行結果判断
      lineinfile:
        path: /home/ito/work/user_list
        line: "{{ user_name }}"
        create: yes
        state: present
      when: ret.changed == true

    - name: ユーザリストチェック
      shell: grep "{{ user_name }}" /home/ito/work/user_list
      register: user_check
      failed_when: user_check.rc not in [0, 1]

    - name: ユーザ削除
      user:
        name: "{{ user_name }}"
        state: absent
      when: user_check.rc == 0

時間としては45分ぐらいしかないので全くの初心者からここまで来れたら優秀!最後の問題はincludeとwith_sequenceのあたりがポイントです。includeは外出ししたplaybookを読み込むことが出来て変数も渡せます。with_sequenceはwith_itemsのお仲間みたいなもんですが、連番を繰り返せるのでfor文のような使い方ができます。あとはwith_itemsがひとつの処理にしか使えないというのがこの問題の意地の悪いところです。そのためにわざわざincludeする必要があるという....

その後もしものためにエクストラの問題も用意しましたが、こちらについては私も作ってないので回答はありません!参加者で作れた人がいたらもらってここに貼りますw お疲れ様でした!

Ansibleハンズオンやってみます

お疲れ様です。伊藤です。

本当に月一しか更新しておりませんで、読んでいただいている方は全く持って申し訳ありません。 私はといいますと、10月から新たなプロジェクトに参画しておりまして、もうてんやわんやでございます。一体幾つになったら落ち着いてゆったり仕事できるようになれるのやら.....

と、軽く愚痴ったところで久しぶりのブログ更新で、久しぶりに勉強会のことを書かせていただきます。 以前自社でAnsibleの勉強会と称して、AnsibleとDockerって何?というところをやりました。あれからはや9か月...やっとその次の勉強会を行うことになりました。今回はPlaybookをとりあえず動かしてもらおうと思います。今回は社内に案内を出して、全くLinuxを触ったことのない人でも参加OK!ということを謳ったところ今年入社の新人が結構参加してくれて、おじさんありがたい限りです。というわけでLinuxを触ったこともない人が参加できる勉強会を開催します!(張り切って資料を初めてSlideShrareでアップしてみました!)

www.slideshare.net

もうログインの仕方から手取り足取り丁寧に説明します!その代り知ってる方にはほったらかしてどんどん課題をやってもらおうと。とはいえAnsibleを始めて触る方なので課題自体は初心者がちょっと手こずるレベルにしてみました。

開催は11/1。はてさてどうなることやら。。。。 課題の回答は明日公開します。

それではお疲れ様でした。