レシピを書いて実行する

レシピを書く部分は前と同じなんだろうなと。

レシピを書く

recipes/hello.rb をつくる。やはり、Hello, World でしょう。

file 'hello.txt' do
  content "Hello, World\n"
end

実際に動かしたときにレシピはあるけど、それを実行させる必要があるのでランリストをつくります。

これは .kitchen.yml に書いてやります。現状では、suites: の中の namedefault であるものの run_listrecipe[cheftest::default] が設定されています。ということで run_list に追加しますが、さっきのレシピは recipe[cheftest::hello] と表記するみたいです。recipe[::] ということなんでしょうか。ということで追加したファイルはこんな感じです。

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  # You may wish to disable always updating cookbooks in CI or other testing environments.
  # For example:
  #   always_update_cookbooks: <%= !ENV['CI'] %>
  always_update_cookbooks: true

verifier:
  name: inspec

platforms:
  - name: ubuntu-16.04

suites:
  - name: default
    run_list:
      - recipe[cheftest::default]
      - recipe[cheftest::hello]
    verifier:
      inspec_tests:
        - test/smoke/default
    attributes:

動かしてみる

ここで、一連の操作をおこないます。kitchen コマンドに converge サブコマンドを与えて実行です。

$ kitchen converge
-----> Starting Kitchen (v1.16.0)
-----> Converging <default-ubuntu-1604>...
       Preparing files for transfer
       Preparing dna.json
       Resolving cookbook dependencies with Berkshelf 6.2.0...
[2017-07-12T12:02:10+09:00] ERROR: Error connecting to https://supermarket.chef.io/universe, retry 1/5
       Removing non-cookbook files before transfer
       Preparing validation.pem
       Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
       Transferring files to <default-ubuntu-1604>
       Starting Chef Client, version 13.2.20
       resolving cookbooks for run list: ["cheftest::default", "cheftest::hello"]
       Synchronizing Cookbooks:
         - cheftest (0.1.0)
       Installing Cookbook Gems:
       Compiling Cookbooks...
       Converging 1 resources
       Recipe: cheftest::hello
         * file[hello.txt] action create
           - create new file hello.txt
           - update content in file hello.txt from none to 8663ba
           --- hello.txt	2017-07-12 03:02:21.399391003 +0000
           +++ ./.chef-hello20170712-2629-1u4keb0.txt	2017-07-12 03:02:21.399391003 +0000
           @@ -1 +1,2 @@
           +Hello, World
       
       Running handlers:
       Running handlers complete
       Chef Client finished, 1/1 resources updated in 01 seconds
       Finished converging <default-ubuntu-1604> (0m11.22s).
-----> Kitchen is finished. (0m13.01s)

ということで、ERROR を吐いているのが気になりますが、ファイルは生成されているようです。

$ kitchen login default-ubuntu-1604
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-81-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


Last login: Wed Jul 12 03:02:18 2017 from 10.0.2.2
vagrant@default-ubuntu-1604:~$ ls -l
total 0

一瞬無いかと思いましたが、ファイルのパス指定の問題です。

vagrant@default-ubuntu-1604:~$ ls -l /
total 89
drwxr-xr-x   2 root root  4096 Jun 26 12:17 bin
drwxr-xr-x   4 root root  1024 Jun 26 12:28 boot
drwxr-xr-x  19 root root  3840 Jul 12 01:55 dev
drwxr-xr-x  93 root root  4096 Jul 12 01:55 etc
-rw-r--r--   1 root root    13 Jul 12 03:02 hello.txt
drwxr-xr-x   3 root root  4096 Jun 26 12:12 home
lrwxrwxrwx   1 root root    32 Jun 26 12:20 initrd.img -> boot/initrd.img-4.4.0-81-generic
drwxr-xr-x  21 root root  4096 Jun 26 12:25 lib
drwxr-xr-x   2 root root  4096 Jun 26 12:09 lib64
drwx------   2 root root 16384 Jun 26 12:02 lost+found
drwxr-xr-x   3 root root  4096 Jun 26 12:03 media
drwxr-xr-x   2 root root  4096 Jul 19  2016 mnt
drwxr-xr-x   4 root root  4096 Jul 12 01:55 opt
dr-xr-xr-x 111 root root     0 Jul 12 01:55 proc
drwx------   2 root root  4096 Jun 26 12:02 root
drwxr-xr-x  26 root root   960 Jul 12 03:05 run
drwxr-xr-x   2 root root 12288 Jun 26 12:24 sbin
drwxr-xr-x   2 root root  4096 Jun 29  2016 snap
drwxr-xr-x   2 root root  4096 Jul 19  2016 srv
dr-xr-xr-x  13 root root     0 Jul 12 01:55 sys
drwxrwxrwt   9 root root  4096 Jul 12 03:07 tmp
drwxr-xr-x  10 root root  4096 Jun 26 12:03 usr
drwxr-xr-x  13 root root  4096 Jun 26 12:08 var
lrwxrwxrwx   1 root root    29 Jun 26 12:20 vmlinuz -> boot/vmlinuz-4.4.0-81-generic
vagrant@default-ubuntu-1604:~$ cat /hello.txt 
Hello, World

ありました。では、recipe/hello.rb を修正してみます。

file 'hello.txt' do
  content "Hello, Kitchen\n"
end

再度実行してみます。

$ kitchen converge
-----> Starting Kitchen (v1.16.0)
-----> Converging <default-ubuntu-1604>...
       Preparing files for transfer
       Preparing dna.json
       Resolving cookbook dependencies with Berkshelf 6.2.0...
[2017-07-12T12:12:54+09:00] ERROR: Error connecting to https://supermarket.chef.io/universe, retry 1/5
       Removing non-cookbook files before transfer
       Preparing validation.pem
       Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
       Transferring files to <default-ubuntu-1604>
       Starting Chef Client, version 13.2.20
       resolving cookbooks for run list: ["cheftest::default", "cheftest::hello"]
       Synchronizing Cookbooks:
         - cheftest (0.1.0)
       Installing Cookbook Gems:
       Compiling Cookbooks...
       Converging 1 resources
       Recipe: cheftest::hello
         * file[hello.txt] action create
           - update content in file hello.txt from 8663ba to adeeb2
           --- hello.txt	2017-07-12 03:02:21.399391003 +0000
           +++ ./.chef-hello20170712-3005-1d9ghzq.txt	2017-07-12 03:13:05.786008277 +0000
           @@ -1,2 +1,2 @@
           -Hello, World
           +Hello, Kitchen
       
       Running handlers:
       Running handlers complete
       Chef Client finished, 1/1 resources updated in 01 seconds
       Finished converging <default-ubuntu-1604> (0m11.20s).
-----> Kitchen is finished. (0m13.01s)
$ kitchen login default-ubuntu-1604
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-81-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


Last login: Wed Jul 12 03:13:03 2017 from 10.0.2.2
vagrant@default-ubuntu-1604:~$ cat /hello.txt 
Hello, Kitchen

書き換わっています。さすが Chef だ。

エラーの原因

さて、kitchen converge したときのエラー「ERROR: Error connecting to https://supermarket.chef.io/universe, retry 1/5」ですが、名前が引けていません。
ubuntu 16.04 で DNS masquerade があると名前解決の一発目で失敗することが頻発します。/etc/NetworkManager/NetworkManager.conf を修正します。dns=dnsmasq の行をコメントアウト(#dns=dnsmasq)します。そして、sudo service network-manager restart しておきます。

コメント

タイトルとURLをコピーしました