日: 2018年7月30日

  • AnsibleError: template error while templating string

    AnsibleError: template error while templating string

    はじめに

    AnsibleのTemplateモジュールはファイルの中身に変数を入れたいときなどにとても便利。
    なお、Templateモジュールの使い方については、あだちんさんのブログが非常にわかりやすい。

    Ansible’s Template module is very useful when you want to put variables in the contents of a file.
    About how to use Template module, His blog is very easy to understand.

    https://blog.adachin.me/archives/5526  

    問題 problem

    AnsibleでTemplateの転送に失敗する

    Template transfer fails with Ansible

    TASK [setup-hosts/development/web : Add Template user-setting files] ********
    failed: [dev-web] (item={u'owner': u'cron', u'path': u'home/cron/script/backupcp.sh', u'group': u'cron', u'mode': u'755'}) => {"changed": false, "item": {"group": "cron", "mode": "755", "owner": "cron", "path": "home/cron/script/backupcp.sh"}, "msg": "AnsibleError: template error while templating string: Missing end of comment tag. String: ` '<<<<<'\n"}
    

    特定の文字列がファイル内に存在しているとAnsibleに失敗するようだ

    Ansible seems to fail if a specific string exists in the file

    対処 deal

    処理の最初、最後をそれぞれ、“` {% raw %} “` 、“` {% endraw %} “` で挟む。以下のようなイメージ

    Insert “` {% raw%}  “` and “` {% endraw%} “` at the beginning and end of processing. The following image

    {% raw %}
    #!/bin/sh
    
    echo "done"
    {% endraw %}
    

     

  • Docker: E: Unable to locate package

    Docker: E: Unable to locate package

    はじめに

    サクッと環境を構築するのに、最初にapt-get updateを省略してしまったがために、ハマってしまった。今後同じ過ちを繰り返さない為にまとめ。

    実施したDockerfile

    実にシンプル。

    ubuntuを持ってきて、wgetとnodejsとnpmでも入れて動かそうと思った。いろんなサンプルファイルではしっかりとapt-get updateの記載があったが、あえて外した。そして結果的に時間を要した。

    実施したDockerfileはこちら

    #利用するUbuntuのイメージ
    FROM ubuntu:16.04
    
    # wgetをインストール
    RUN apt-get install -y wget 
    RUN apt-get install -y nodejs 
    RUN apt-get install -y npm

    docker buildコマンド

    $ docker build -t ubuntuuuu .
    Sending build context to Docker daemon   4.57GB
    Step 1/4 : FROM ubuntu:16.04
     ---> 7aa3602ab41e
    Step 2/4 : RUN apt-get install -y wget
     ---> Running in 30312e88bc87
    Reading package lists...
    Building dependency tree...
    Reading state information...
    E: Unable to locate package wget
    The command '/bin/sh -c apt-get install -y wget' returned a non-zero code: 100
    $ 

    E: Unable to locate package

    まずネットワーク周りを疑ったが、異常はなさそうだった。

    対処

    諸々installする処理の前にapt-get updateを入れたのみ。

    #利用するUbuntuのイメージ
    FROM ubuntu:16.04
    
    # wgetをインストール
    RUN apt-get update # 追加
    RUN apt-get install -y wget 
    RUN apt-get install -y nodejs 
    RUN apt-get install -y npm

    build結果

    $ docker build -t ubuntuuuu .
    Sending build context to Docker daemon   4.57GB
    Step 1/5 : FROM ubuntu:16.04
     ---> 7aa3602ab41e
    Step 2/5 : RUN apt-get update
     ---> Running in f929ef07a958
    Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
    Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
    
    (略)
    
    Removing intermediate container fc51f9cd4a4f
     ---> 3e9f68c18e10
    Successfully built 3e9f68c18e10
    Successfully tagged ubuntuuuu:latest
    $ 

     

    無事Successfullyになった。

    なぜapt-get updateが無いと失敗するのか

    憶測に過ぎないが、おそらくコンテナ版ubuntuを使わせる上で、必ず最新版のパッケージでないと使わせないというubuntu側(?)の意向のように感じる

    所感

    昨年発売され賑わっているAirPods ProだがAmazonでも販売を開始するようになり、Amazonでは今はポイントもつくようになっているようだ。自分は仕事しながら音楽聞かないが、ノイズキャンセルは気になる。