[RESOLVED] Why this 'kitchen setup' failed? 'www.chef.io' is reachable from the guest OS

Hi all,

I am following the chapter 6 of the book 'Learning Chef' by Mischa Taylor
and Seth Vargo.

First I ran this command kitchen init --create-gemfile to create a set of
chef files.

Then I modified the .kitchen.yml to contain these lines


driver:
name: vagrant

provisioner:
name: chef_solo

platforms:

  • name: centos65
    driver:
    box: learningchef/centos65
    box_url: learningchef/centos65

suites:

  • name: default
    run_list:
    attributes:

After I created the instance, I ran chef setup and I got these output and
error messages:

$ kitchen setup default-centos65
-----> Starting Kitchen (v1.3.1)
-----> Converging ...
Preparing files for transfer
Preparing dna.json
Berksfile, Cheffile, cookbooks/, or metadata.rb not found so Chef
will run with effectively no cookbooks. Is this intended?
Removing non-cookbook files before transfer
Preparing solo.rb
-----> Installing Chef Omnibus (install only if missing)
downloading https://www.chef.io/chef/install.sh
to file /tmp/install.sh
trying wget...
Downloading Chef for el...
downloading
Chef Software DevOps Automation Solutions | Chef
to file /tmp/install.sh.2337/metadata.txt
trying wget...
trying curl...
grep: /tmp/install.sh.2337/stderr: No such file or directory
trying python...
Unable to retrieve a valid package!
Version:

   Please file a Bug Report at

Alternatively, feel free to open a Support Ticket at
https://www.getchef.com/support/tickets
More Chef support resources can be found at

   Please include as many details about the problem as possible i.e.,

how to reproduce
the problem (if possible), type of the Operating System and its
version, etc.,
and any other relevant details that might help us with
troubleshooting.

   Metadata URL:

\nDEBUG OUTPUT FOLLOWS:\n\nSTDERR from wget:\n\n--2015-02-01
05:40:12--

Resolving www.chef.io... failed: Name or service not known.
wget: unable to resolve host address “www.chef.io”\n\nSTDERR from
python:\n\nTraceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno -2] Name or service not
known>\n

Converge failed on instance .
Please see .kitchen/logs/default-centos65.log for more details
------Exception-------
Class: Kitchen::ActionFailed
Message: SSH exited (1) for command: [sh -c '

Check whether a command exists - returns 0 if it does, 1 if it does not

exists() {
if command -v $1 >/dev/null 2>&1
then
return 0
else
return 1
fi
}

do_wget URL FILENAME

do_wget() {
echo "trying wget..."
wget -O "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1

check for 404 or empty file

grep "ERROR 404" /tmp/stderr 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_curl URL FILENAME

do_curl() {
echo "trying curl..."
curl -L "$1" > "$2"

check for bad return status

[ $? -ne 0 ] && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_fetch URL FILENAME

do_fetch() {
echo "trying fetch..."
fetch -o "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1
return 0
}

do_perl URL FILENAME

do_perl() {
echo "trying perl..."
perl -e "use LWP::Simple; getprint($ARGV[0]);" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null

if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

fi

return 0
}

do_python URL FILENAME

do_python() {
echo "trying python..."
python -c "import sys,urllib2 ;
sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

#grep "The specified key does not exist." "$2" 2>&1 >/dev/null
#if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

#fi
return 0
}

do_download URL FILENAME

do_download() {

PATH=/opt/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export PATH

echo "downloading $1"
echo " to file $2"

we try all of these until we get success.

perl, in particular may be present but LWP::Simple may not be installed

if exists wget; then
do_wget $1 $2 && return 0
fi

if exists curl; then
do_curl $1 $2 && return 0
fi

if exists fetch; then
do_fetch $1 $2 && return 0
fi

if exists perl; then
do_perl $1 $2 && return 0
fi

if exists python; then
do_python $1 $2 && return 0
fi

echo ">>>>>> wget, curl, fetch, perl or python not found on this
instance."
return 16
}

@param $1 the omnibus root directory

@param $2 the requested version of omnibus package

@return 0 if omnibus needs to be installed, non-zero otherwise

should_update_chef() {
if test ! -d "$1" ; then return 0
elif test "$2" = "true" ; then return 1
elif test "$2" = "latest" ; then return 0
fi

local version="$1/bin/chef-solo -v | cut -d " " -f 2"
if echo "$version" | grep "^$2" 2>&1 >/dev/null; then
return 1
else
return 0
fi
}

if should_update_chef "/opt/chef" "true" ; then
echo "-----> Installing Chef Omnibus (install only if missing)"
do_download https://www.chef.io/chef/install.sh /tmp/install.sh
sudo -E sh /tmp/install.sh
else
echo "-----> Chef Omnibus installation detected (install only if missing)"
fi
']


I have logged into the box and I verified that I am able to ping www.chef.io

$ kitchen login default-centos65
Last login: Sun Feb 1 05:32:28 2015 from 10.0.2.2
Welcome to your Packer-built virtual machine.
[vagrant@default-centos65 ~]$ ping www.chef.io
PING chef.io (184.106.28.83) 56(84) bytes of data.
64 bytes from 184.106.28.83: icmp_seq=1 ttl=63 time=541 ms
64 bytes from 184.106.28.83: icmp_seq=2 ttl=63 time=239 ms
64 bytes from 184.106.28.83: icmp_seq=3 ttl=63 time=534 ms
64 bytes from 184.106.28.83: icmp_seq=4 ttl=63 time=288 ms
^C

So what is wrong with the setup?

Cheers, Tony

Look like chef team has fixed the issue. I can run kitchen setup
default-centos65 without problem today

On Sun, Feb 1, 2015 at 5:01 PM, Anthony Kong anthony.hw.kong@gmail.com
wrote:

Hi all,

I am following the chapter 6 of the book 'Learning Chef' by Mischa Taylor
and Seth Vargo.

First I ran this command kitchen init --create-gemfile to create a set of
chef files.

Then I modified the .kitchen.yml to contain these lines


driver:
name: vagrant

provisioner:
name: chef_solo

platforms:

  • name: centos65
    driver:
    box: learningchef/centos65
    box_url: learningchef/centos65

suites:

  • name: default
    run_list:
    attributes:

After I created the instance, I ran chef setup and I got these output
and error messages:

$ kitchen setup default-centos65
-----> Starting Kitchen (v1.3.1)
-----> Converging ...
Preparing files for transfer
Preparing dna.json
Berksfile, Cheffile, cookbooks/, or metadata.rb not found so Chef
will run with effectively no cookbooks. Is this intended?
Removing non-cookbook files before transfer
Preparing solo.rb
-----> Installing Chef Omnibus (install only if missing)
downloading https://www.chef.io/chef/install.sh
to file /tmp/install.sh
trying wget...
Downloading Chef for el...
downloading
Chef Software DevOps Automation Solutions | Chef
to file /tmp/install.sh.2337/metadata.txt
trying wget...
trying curl...
grep: /tmp/install.sh.2337/stderr: No such file or directory
trying python...
Unable to retrieve a valid package!
Version:

   Please file a Bug Report at

Sign in to GitHub · GitHub
Alternatively, feel free to open a Support Ticket at
https://www.getchef.com/support/tickets
More Chef support resources can be found at
Chef Support for Automation & DevOps | Chef

   Please include as many details about the problem as possible i.e.,

how to reproduce
the problem (if possible), type of the Operating System and its
version, etc.,
and any other relevant details that might help us with
troubleshooting.

   Metadata URL:

Chef Software DevOps Automation Solutions | Chef
\nDEBUG OUTPUT FOLLOWS:\n\nSTDERR from wget:\n\n--2015-02-01
05:40:12--
Chef Software DevOps Automation Solutions | Chef
Resolving www.chef.io... failed: Name or service not known.
wget: unable to resolve host address “www.chef.io”\n\nSTDERR from
python:\n\nTraceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno -2] Name or service not
known>\n

Converge failed on instance .
Please see .kitchen/logs/default-centos65.log for more details
------Exception-------
Class: Kitchen::ActionFailed
Message: SSH exited (1) for command: [sh -c '

Check whether a command exists - returns 0 if it does, 1 if it does not

exists() {
if command -v $1 >/dev/null 2>&1
then
return 0
else
return 1
fi
}

do_wget URL FILENAME

do_wget() {
echo "trying wget..."
wget -O "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1

check for 404 or empty file

grep "ERROR 404" /tmp/stderr 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_curl URL FILENAME

do_curl() {
echo "trying curl..."
curl -L "$1" > "$2"

check for bad return status

[ $? -ne 0 ] && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_fetch URL FILENAME

do_fetch() {
echo "trying fetch..."
fetch -o "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1
return 0
}

do_perl URL FILENAME

do_perl() {
echo "trying perl..."
perl -e "use LWP::Simple; getprint($ARGV[0]);" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null

if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

fi

return 0
}

do_python URL FILENAME

do_python() {
echo "trying python..."
python -c "import sys,urllib2 ;
sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

#grep "The specified key does not exist." "$2" 2>&1 >/dev/null
#if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

#fi
return 0
}

do_download URL FILENAME

do_download() {

PATH=/opt/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export PATH

echo "downloading $1"
echo " to file $2"

we try all of these until we get success.

perl, in particular may be present but LWP::Simple may not be installed

if exists wget; then
do_wget $1 $2 && return 0
fi

if exists curl; then
do_curl $1 $2 && return 0
fi

if exists fetch; then
do_fetch $1 $2 && return 0
fi

if exists perl; then
do_perl $1 $2 && return 0
fi

if exists python; then
do_python $1 $2 && return 0
fi

echo ">>>>>> wget, curl, fetch, perl or python not found on this
instance."
return 16
}

@param $1 the omnibus root directory

@param $2 the requested version of omnibus package

@return 0 if omnibus needs to be installed, non-zero otherwise

should_update_chef() {
if test ! -d "$1" ; then return 0
elif test "$2" = "true" ; then return 1
elif test "$2" = "latest" ; then return 0
fi

local version="$1/bin/chef-solo -v | cut -d " " -f 2"
if echo "$version" | grep "^$2" 2>&1 >/dev/null; then
return 1
else
return 0
fi
}

if should_update_chef "/opt/chef" "true" ; then
echo "-----> Installing Chef Omnibus (install only if missing)"
do_download https://www.chef.io/chef/install.sh /tmp/install.sh
sudo -E sh /tmp/install.sh
else
echo "-----> Chef Omnibus installation detected (install only if
missing)"
fi
']


I have logged into the box and I verified that I am able to ping
www.chef.io

$ kitchen login default-centos65
Last login: Sun Feb 1 05:32:28 2015 from 10.0.2.2
Welcome to your Packer-built virtual machine.
[vagrant@default-centos65 ~]$ ping www.chef.io
PING chef.io (184.106.28.83) 56(84) bytes of data.
64 bytes from 184.106.28.83: icmp_seq=1 ttl=63 time=541 ms
64 bytes from 184.106.28.83: icmp_seq=2 ttl=63 time=239 ms
64 bytes from 184.106.28.83: icmp_seq=3 ttl=63 time=534 ms
64 bytes from 184.106.28.83: icmp_seq=4 ttl=63 time=288 ms
^C

So what is wrong with the setup?

Cheers, Tony

I have seen that before. I have always attributed it to internet
connectivity issues. Looks like you solved it so there you go.

On Mon, Feb 2, 2015 at 6:32 AM, Anthony Kong anthony.hw.kong@gmail.com
wrote:

Look like chef team has fixed the issue. I can run kitchen setup
default-centos65 without problem today

On Sun, Feb 1, 2015 at 5:01 PM, Anthony Kong anthony.hw.kong@gmail.com
wrote:

Hi all,

I am following the chapter 6 of the book 'Learning Chef' by Mischa Taylor
and Seth Vargo.

First I ran this command kitchen init --create-gemfile to create a set
of chef files.

Then I modified the .kitchen.yml to contain these lines


driver:
name: vagrant

provisioner:
name: chef_solo

platforms:

  • name: centos65
    driver:
    box: learningchef/centos65
    box_url: learningchef/centos65

suites:

  • name: default
    run_list:
    attributes:

After I created the instance, I ran chef setup and I got these output
and error messages:

$ kitchen setup default-centos65
-----> Starting Kitchen (v1.3.1)
-----> Converging ...
Preparing files for transfer
Preparing dna.json
Berksfile, Cheffile, cookbooks/, or metadata.rb not found so Chef
will run with effectively no cookbooks. Is this intended?
Removing non-cookbook files before transfer
Preparing solo.rb
-----> Installing Chef Omnibus (install only if missing)
downloading https://www.chef.io/chef/install.sh
to file /tmp/install.sh
trying wget...
Downloading Chef for el...
downloading
Chef Software DevOps Automation Solutions | Chef
to file /tmp/install.sh.2337/metadata.txt
trying wget...
trying curl...
grep: /tmp/install.sh.2337/stderr: No such file or directory
trying python...
Unable to retrieve a valid package!
Version:

   Please file a Bug Report at

Sign in to GitHub · GitHub
Alternatively, feel free to open a Support Ticket at
https://www.getchef.com/support/tickets
More Chef support resources can be found at
Chef Support for Automation & DevOps | Chef

   Please include as many details about the problem as possible i.e.,

how to reproduce
the problem (if possible), type of the Operating System and its
version, etc.,
and any other relevant details that might help us with
troubleshooting.

   Metadata URL:

Chef Software DevOps Automation Solutions | Chef
\nDEBUG OUTPUT FOLLOWS:\n\nSTDERR from wget:\n\n--2015-02-01
05:40:12--
Chef Software DevOps Automation Solutions | Chef
Resolving www.chef.io... failed: Name or service not known.
wget: unable to resolve host address “www.chef.io”\n\nSTDERR from
python:\n\nTraceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno -2] Name or service not
known>\n

Converge failed on instance .
Please see .kitchen/logs/default-centos65.log for more details
------Exception-------
Class: Kitchen::ActionFailed
Message: SSH exited (1) for command: [sh -c '

Check whether a command exists - returns 0 if it does, 1 if it does not

exists() {
if command -v $1 >/dev/null 2>&1
then
return 0
else
return 1
fi
}

do_wget URL FILENAME

do_wget() {
echo "trying wget..."
wget -O "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1

check for 404 or empty file

grep "ERROR 404" /tmp/stderr 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_curl URL FILENAME

do_curl() {
echo "trying curl..."
curl -L "$1" > "$2"

check for bad return status

[ $? -ne 0 ] && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null
if test $? -eq 0 || test ! -s "$2"; then
return 1
fi
return 0
}

do_fetch URL FILENAME

do_fetch() {
echo "trying fetch..."
fetch -o "$2" "$1" 2>/tmp/stderr

check for bad return status

test $? -ne 0 && return 1
return 0
}

do_perl URL FILENAME

do_perl() {
echo "trying perl..."
perl -e "use LWP::Simple; getprint($ARGV[0]);" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

grep "The specified key does not exist." "$2" 2>&1 >/dev/null

if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

fi

return 0
}

do_python URL FILENAME

do_python() {
echo "trying python..."
python -c "import sys,urllib2 ;
sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2"

check for bad return status

test $? -ne 0 && return 1

check for bad output or empty file

#grep "The specified key does not exist." "$2" 2>&1 >/dev/null
#if test $? -eq 0 || test ! -s "$2"; then

unable_to_retrieve_package

#fi
return 0
}

do_download URL FILENAME

do_download() {

PATH=/opt/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export PATH

echo "downloading $1"
echo " to file $2"

we try all of these until we get success.

perl, in particular may be present but LWP::Simple may not be

installed

if exists wget; then
do_wget $1 $2 && return 0
fi

if exists curl; then
do_curl $1 $2 && return 0
fi

if exists fetch; then
do_fetch $1 $2 && return 0
fi

if exists perl; then
do_perl $1 $2 && return 0
fi

if exists python; then
do_python $1 $2 && return 0
fi

echo ">>>>>> wget, curl, fetch, perl or python not found on this
instance."
return 16
}

@param $1 the omnibus root directory

@param $2 the requested version of omnibus package

@return 0 if omnibus needs to be installed, non-zero otherwise

should_update_chef() {
if test ! -d "$1" ; then return 0
elif test "$2" = "true" ; then return 1
elif test "$2" = "latest" ; then return 0
fi

local version="$1/bin/chef-solo -v | cut -d " " -f 2"
if echo "$version" | grep "^$2" 2>&1 >/dev/null; then
return 1
else
return 0
fi
}

if should_update_chef "/opt/chef" "true" ; then
echo "-----> Installing Chef Omnibus (install only if missing)"
do_download https://www.chef.io/chef/install.sh /tmp/install.sh
sudo -E sh /tmp/install.sh
else
echo "-----> Chef Omnibus installation detected (install only if
missing)"
fi
']


I have logged into the box and I verified that I am able to ping
www.chef.io

$ kitchen login default-centos65
Last login: Sun Feb 1 05:32:28 2015 from 10.0.2.2
Welcome to your Packer-built virtual machine.
[vagrant@default-centos65 ~]$ ping www.chef.io
PING chef.io (184.106.28.83) 56(84) bytes of data.
64 bytes from 184.106.28.83: icmp_seq=1 ttl=63 time=541 ms
64 bytes from 184.106.28.83: icmp_seq=2 ttl=63 time=239 ms
64 bytes from 184.106.28.83: icmp_seq=3 ttl=63 time=534 ms
64 bytes from 184.106.28.83: icmp_seq=4 ttl=63 time=288 ms
^C

So what is wrong with the setup?

Cheers, Tony

--
Jeff Carapetyan
Ops, dataFundamentals
(972)322-8400

Hi,

I’m still having the issue. I’m trying to learn with Test-Kitchen and this error while working with examples in Chapter-9 gets annoying… I had to destroy instances and restart my computer multiple times, before I could get this to work.

Kindly let me know, if there is any patches or something for this?

Thanks in Advance.

Hi - that is always the problem with books… they are usually out of date by the time they are published.

You would do yourself good by having a public github repository and linking people to your code where you’re having issues at… honestly going the adhoc way in which this topic has gone so far is obviously not working well.

1 Like

Hi,

Are you running kitchen behind the proxy? This usually happens if you are behind proxy and the proxy configurations are not done for port 443.