コード例 #1
0
 def test_on_network_error(self):
     data = {
         "dump": {
             "master": {
                 "objects": [
                     {
                         "path": "/etc/nailgun",
                         "type": "dir"
                     },
                 ],
                 "hosts": [{
                     "ssh-key": "/root/.ssh/id_rsa",
                     "address": "10.109.2.2"
                 }]
             },
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     host = conf.get_network_address(obj)
     self.assertNotIn(obj, conf.try_again)
     self.assertNotIn(host, conf.offline_hosts)
     conf.on_network_error(obj)
     self.assertIn(obj, conf.try_again)
     self.assertIn(host, conf.offline_hosts)
コード例 #2
0
ファイル: test_manager.py プロジェクト: nebril/shotgun
 def test_snapshot_network_error(self, mcompress, mexecute, mget):
     objs = [
         {
             "type": "file",
             "path": "/remote_file1",
             "host": {
                 "address": "remote_host1"
             },
         },
         {
             "type": "dir",
             "path": "/remote_dir1",
             "host": {
                 "address": "remote_host1"
             },
         },
         {
             "type": "file",
             "path": "/remote_file1",
             "host": {
                 "address": "remote_host2"
             },
         },
     ]
     drv = mock.MagicMock()
     drv.snapshot.side_effect = [
         fabric.exceptions.NetworkError,
         None,
         fabric.exceptions.NetworkError,
         None,
         None,
     ]
     mget.return_value = drv
     conf = Config()
     conf.objs = deque(objs)
     offline_obj = {
         'path': '/remote_file1',
         'host': {
             'address': 'remote_host1'
         },
         'type': 'offline',
     }
     processed_obj = {
         'path': '/remote_file1',
         'host': {
             'address': 'remote_host2'
         },
         'type': 'file',
     }
     manager = Manager(conf)
     manager.snapshot()
     mget.assert_has_calls([
         mock.call(offline_obj, conf),
         mock.call(processed_obj, conf),
         mock.call(offline_obj, conf),
         mock.call(offline_obj, conf)
     ],
                           any_order=True)
     mexecute.assert_called_once_with('rm -rf /tmp')
コード例 #3
0
ファイル: test_config.py プロジェクト: rustyrobot/fuelweb
 def test_timestamp(self):
     t = time.localtime()
     with patch("shotgun.config.time") as MockedTime:
         MockedTime.localtime.return_value = t
         MockedTime.strftime.side_effect = time.strftime
         conf = Config({})
         stamped = conf._timestamp("sample")
     self.assertEquals(stamped, "sample-{0}".format(time.strftime("%Y-%m-%d_%H-%M-%S", t)))
コード例 #4
0
ファイル: test_config.py プロジェクト: toby82/fuel-web
 def test_timestamp(self):
     t = time.localtime()
     with patch('shotgun.config.time') as MockedTime:
         MockedTime.localtime.return_value = t
         MockedTime.strftime.side_effect = time.strftime
         conf = Config({})
         stamped = conf._timestamp("sample")
     self.assertEqual(
         stamped, "sample-{0}".format(time.strftime('%Y-%m-%d_%H-%M-%S',
                                                    t)))
コード例 #5
0
ファイル: test_config.py プロジェクト: nebril/shotgun
 def test_get_network_address_absent_address_and_hostname(self):
     data = {
         "dump": {
             "master": {
                 "objects":
                     [{"path": "/etc/nailgun",
                       "type": "dir"}]},
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertIsNone(conf.get_network_address(obj))
コード例 #6
0
 def test_get_network_address_absent_address_and_hostname(self):
     data = {
         "dump": {
             "master": {
                 "objects": [{
                     "path": "/etc/nailgun",
                     "type": "dir"
                 }]
             },
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertIsNone(conf.get_network_address(obj))
コード例 #7
0
ファイル: test_config.py プロジェクト: nebril/shotgun
 def test_get_network_address(self):
     data = {
         "dump": {
             "master": {
                 "objects":
                     [{"path": "/etc/nailgun",
                       "type": "dir"},
                      ],
                 "hosts": [{"ssh-key": "/root/.ssh/id_rsa",
                            "address": "10.109.2.2"}]},
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertEqual('10.109.2.2', conf.get_network_address(obj))
コード例 #8
0
ファイル: test_config.py プロジェクト: nebril/shotgun
 def test_get_network_address_hostname(self):
     hostname = "fuel.tld"
     data = {
         "dump": {
             "master": {
                 "objects":
                     [{"path": "/etc/nailgun",
                       "type": "dir"},
                      ],
                 "hosts": [{"ssh-key": "/root/.ssh/id_rsa",
                            "hostname": hostname}]},
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertEqual(hostname, conf.get_network_address(obj))
コード例 #9
0
 def test_target_timestamp(self):
     conf = Config({"target": "/tmp/sample", "timestamp": True})
     self.assertRegex(
         conf.target,
         ur"\/tmp\/sample\-[\d]{4}\-[\d]{2}\-[\d]{2}_"
         "([\d]{2}\-){2}[\d]{2}",
     )
コード例 #10
0
 def test_init(self):
     data = {
         "dump": {
             "fake_role1": {
                 "objects": [{
                     "fake_obj_1": '1'
                 }, {
                     "fake_obj_2": '2'
                 }],
                 "hosts": ["fake_host1", "fake_host2", "fake_host3"]
             },
         }
     }
     conf = Config(data)
     expected_objs = [{
         'host': 'fake_host1',
         'fake_obj_1': '1'
     }, {
         'host': 'fake_host1',
         'fake_obj_2': '2'
     }, {
         'host': 'fake_host2',
         'fake_obj_1': '1'
     }, {
         'host': 'fake_host2',
         'fake_obj_2': '2'
     }, {
         'host': 'fake_host3',
         'fake_obj_1': '1'
     }, {
         'host': 'fake_host3',
         'fake_obj_2': '2'
     }]
     self.assertItemsEqual(expected_objs, conf.objs)
コード例 #11
0
ファイル: cli.py プロジェクト: nebril/shotgun
def make_snapshot(args):
    """Generates snapshot

    :param args: argparse object
    """
    config_object = Config(read_config(args.config))
    manager = Manager(config_object)
    snapshot_path = manager.snapshot()
    logger.info(u'Snapshot path: {0}'.format(snapshot_path))
コード例 #12
0
ファイル: test_manager.py プロジェクト: nebril/shotgun
 def test_snapshot_network_error(self, mcompress, mexecute, mget):
     objs = [
         {"type": "file",
          "path": "/remote_file1",
          "host": {"address": "remote_host1"},
          },
         {"type": "dir",
          "path": "/remote_dir1",
          "host": {"address": "remote_host1"},
          },
         {"type": "file",
          "path": "/remote_file1",
          "host": {"address": "remote_host2"},
          },
     ]
     drv = mock.MagicMock()
     drv.snapshot.side_effect = [
         fabric.exceptions.NetworkError,
         None,
         fabric.exceptions.NetworkError,
         None,
         None,
     ]
     mget.return_value = drv
     conf = Config()
     conf.objs = deque(objs)
     offline_obj = {
         'path': '/remote_file1',
         'host': {'address': 'remote_host1'},
         'type': 'offline',
     }
     processed_obj = {
         'path': '/remote_file1',
         'host': {'address': 'remote_host2'},
         'type': 'file',
     }
     manager = Manager(conf)
     manager.snapshot()
     mget.assert_has_calls([mock.call(offline_obj, conf),
                            mock.call(processed_obj, conf),
                            mock.call(offline_obj, conf),
                            mock.call(offline_obj, conf)], any_order=True)
     mexecute.assert_called_once_with('rm -rf /tmp')
コード例 #13
0
ファイル: test_config.py プロジェクト: nebril/shotgun
 def test_on_network_error(self):
     data = {
         "dump": {
             "master": {
                 "objects":
                     [{"path": "/etc/nailgun",
                       "type": "dir"},
                      ],
                 "hosts": [{"ssh-key": "/root/.ssh/id_rsa",
                            "address": "10.109.2.2"}]},
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     host = conf.get_network_address(obj)
     self.assertNotIn(obj, conf.try_again)
     self.assertNotIn(host, conf.offline_hosts)
     conf.on_network_error(obj)
     self.assertIn(obj, conf.try_again)
     self.assertIn(host, conf.offline_hosts)
コード例 #14
0
 def test_get_network_address(self):
     data = {
         "dump": {
             "master": {
                 "objects": [
                     {
                         "path": "/etc/nailgun",
                         "type": "dir"
                     },
                 ],
                 "hosts": [{
                     "ssh-key": "/root/.ssh/id_rsa",
                     "address": "10.109.2.2"
                 }]
             },
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertEqual('10.109.2.2', conf.get_network_address(obj))
コード例 #15
0
 def test_get_network_address_hostname(self):
     hostname = "fuel.tld"
     data = {
         "dump": {
             "master": {
                 "objects": [
                     {
                         "path": "/etc/nailgun",
                         "type": "dir"
                     },
                 ],
                 "hosts": [{
                     "ssh-key": "/root/.ssh/id_rsa",
                     "hostname": hostname
                 }]
             },
         }
     }
     conf = Config(data)
     obj = conf.objects.next()
     self.assertEqual(hostname, conf.get_network_address(obj))
コード例 #16
0
 def test_obj_without_hosts(self):
     data = {
         "dump": {
             "fake_role1": {
                 "objects": [{
                     "fake_obj_1": '1'
                 }, {
                     "fake_obj_2": '2'
                 }]
             },
         }
     }
     conf = Config(data)
     expected_objs = [{
         'host': {},
         'fake_obj_1': '1'
     }, {
         'host': {},
         'fake_obj_2': '2'
     }]
     self.assertItemsEqual(expected_objs, conf.objs)
コード例 #17
0
 def test_pass_default_timeout(self):
     timeout = 1345
     conf = Config({
         'timeout': timeout,
     })
     self.assertEqual(conf.timeout, timeout)
コード例 #18
0
 def test_timeout(self, m_settings):
     conf = Config({})
     self.assertIs(conf.timeout, m_settings.DEFAULT_TIMEOUT)
コード例 #19
0
ファイル: test_config.py プロジェクト: toby82/fuel-web
 def test_target_timestamp(self):
     conf = Config({"target": "/tmp/sample", "timestamp": True})
     assert bool(
         re.search(
             ur"\/tmp\/sample\-[\d]{4}\-[\d]{2}\-[\d]{2}_"
             "([\d]{2}\-){2}[\d]{2}", conf.target))
コード例 #20
0
 def initialize_cmd(self, parsed_args):
     with open(parsed_args.config, "r") as f:
         self.config = Config(yaml.safe_load(f))
     self.manager = Manager(self.config)
コード例 #21
0
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

import json
import logging
import os
import sys

sys.path[:0] = [os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))]

from shotgun.config import Config
from shotgun.manager import Manager

logging.basicConfig(level=logging.DEBUG)

with open("snapshot.json", "r") as fo:
    data = json.loads(fo.read())
    config = Config(data)

manager = Manager(config)
manager.snapshot()