Merge pull request #32 from xarses/multi-vm-deployment
Fix multi-node deployment
This commit is contained in:
commit
38a1cd4aa7
1
Vagrantfile
vendored
1
Vagrantfile
vendored
@ -18,6 +18,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|||||||
config.vm.provision "shell", inline: init_script, privileged: true
|
config.vm.provision "shell", inline: init_script, privileged: true
|
||||||
|
|
||||||
config.vm.define "solar-dev", primary: true do |guest1|
|
config.vm.define "solar-dev", primary: true do |guest1|
|
||||||
|
guest1.vm.provision "file", source: "~/.vagrant.d/insecure_private_key", destination: "/vagrant/tmp/keys/ssh_private"
|
||||||
guest1.vm.network "private_network", ip: "10.0.0.2"
|
guest1.vm.network "private_network", ip: "10.0.0.2"
|
||||||
guest1.vm.host_name = "solar-dev"
|
guest1.vm.host_name = "solar-dev"
|
||||||
|
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
- id: 6176aaa2-d97f-11e4-8dbe-080027c2ffdb
|
- id: 6176aaa2-d97f-11e4-8dbe-080027c2ffdb
|
||||||
ip: 127.0.0.1
|
ip: 10.0.0.2
|
||||||
ssh_port: 22
|
ssh_user: vagrant
|
||||||
ssh_key: .vagrant/machines/default/virtualbox/private_key
|
ssh_private_key_path: /vagrant/tmp/keys/ssh_private
|
||||||
|
|
||||||
|
- id: cc48cf72-df88-11e4-9f5b-080027c2ffdb
|
||||||
|
ip: 10.0.0.3
|
||||||
|
ssh_user: vagrant
|
||||||
|
ssh_private_key_path: /vagrant/tmp/keys/ssh_private
|
||||||
|
@ -96,7 +96,7 @@ class Cmd(object):
|
|||||||
profile_action=args.profile_action)
|
profile_action=args.profile_action)
|
||||||
|
|
||||||
def discover(self, args):
|
def discover(self, args):
|
||||||
Discovery({'id': 'discovery'}).execute()
|
Discovery({'id': 'discovery'}).discover()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from jinja2 import Template
|
|||||||
|
|
||||||
ANSIBLE_INVENTORY = """
|
ANSIBLE_INVENTORY = """
|
||||||
{% for node in nodes %}
|
{% for node in nodes %}
|
||||||
{{node['name']}} ansible_ssh_host={{node['ssh_host']}} ansible_connection={{node['connection_type']}}
|
{{node.name}} ansible_ssh_host={{node.ip}} ansible_connection=ssh ansible_ssh_user={{node.ssh_user}} ansible_ssh_private_key_file={{node.ssh_private_key_path}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for res in resources %}
|
{% for res in resources %}
|
||||||
@ -173,5 +173,6 @@ class AnsibleOrchestration(base.BaseExtension):
|
|||||||
utils.yaml_dump_to(prepared, 'tmp/main.yml')
|
utils.yaml_dump_to(prepared, 'tmp/main.yml')
|
||||||
|
|
||||||
sub = subprocess.Popen(
|
sub = subprocess.Popen(
|
||||||
['ansible-playbook', '-i', 'tmp/hosts', 'tmp/main.yml'])
|
['ansible-playbook', '-i', 'tmp/hosts', 'tmp/main.yml'],
|
||||||
|
env=dict(os.environ, ANSIBLE_HOST_KEY_CHECKING='False'))
|
||||||
out, err = sub.communicate()
|
out, err = sub.communicate()
|
||||||
|
@ -19,16 +19,18 @@ class Discovery(base.BaseExtension):
|
|||||||
os.path.dirname(__file__), '..', '..', '..', '..',
|
os.path.dirname(__file__), '..', '..', '..', '..',
|
||||||
'examples', 'nodes_list.yaml')
|
'examples', 'nodes_list.yaml')
|
||||||
|
|
||||||
def execute(self):
|
def discover(self):
|
||||||
|
nodes_to_store = []
|
||||||
with io.open(self.FILE_PATH) as f:
|
with io.open(self.FILE_PATH) as f:
|
||||||
nodes = yaml.load(f)
|
nodes = yaml.load(f)
|
||||||
|
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
node['tags'] = []
|
exist_node = self.db.get_record(self.COLLECTION_NAME, node['id'])
|
||||||
|
if not exist_node:
|
||||||
|
node['tags'] = ['node/{0}'.format(node['id'])]
|
||||||
|
nodes_to_store.append(node)
|
||||||
|
|
||||||
self.db.store_list(self.COLLECTION_NAME, nodes)
|
self.db.store_list(self.COLLECTION_NAME, nodes_to_store)
|
||||||
|
|
||||||
return nodes
|
|
||||||
|
|
||||||
def nodes_resources(self):
|
def nodes_resources(self):
|
||||||
nodes_list = self.db.get_list(self.COLLECTION_NAME)
|
nodes_list = self.db.get_list(self.COLLECTION_NAME)
|
||||||
@ -43,9 +45,9 @@ class Discovery(base.BaseExtension):
|
|||||||
node_resource['version'] = self.VERSION
|
node_resource['version'] = self.VERSION
|
||||||
node_resource['tags'] = node['tags']
|
node_resource['tags'] = node['tags']
|
||||||
node_resource['output'] = node
|
node_resource['output'] = node
|
||||||
node_resource['ssh_host'] = node['ip']
|
node_resource['ip'] = node['ip']
|
||||||
# TODO replace it with ssh type
|
node_resource['ssh_user'] = node['ssh_user']
|
||||||
node_resource['connection_type'] = 'local'
|
node_resource['ssh_private_key_path'] = node['ssh_private_key_path']
|
||||||
|
|
||||||
nodes_resources.append(node_resource)
|
nodes_resources.append(node_resource)
|
||||||
|
|
||||||
|
@ -63,7 +63,11 @@ class FileSystemDB(DirDBM):
|
|||||||
return map(lambda k: self[k], collection_keys)
|
return map(lambda k: self[k], collection_keys)
|
||||||
|
|
||||||
def get_record(self, collection, _id):
|
def get_record(self, collection, _id):
|
||||||
return self[self._make_key(collection, _id)]
|
key = self._make_key(collection, _id)
|
||||||
|
if key not in self:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self[key]
|
||||||
|
|
||||||
def _make_key(self, collection, _id):
|
def _make_key(self, collection, _id):
|
||||||
return '{0}-{1}'.format(collection, _id)
|
return '{0}-{1}'.format(collection, _id)
|
||||||
|
@ -2,8 +2,6 @@ id: {{id}}
|
|||||||
type: profile
|
type: profile
|
||||||
|
|
||||||
extensions:
|
extensions:
|
||||||
- id: profile
|
|
||||||
version: '1.0.0'
|
|
||||||
- id: file_discovery
|
- id: file_discovery
|
||||||
version: '1.0.0'
|
version: '1.0.0'
|
||||||
- id: ansible
|
- id: ansible
|
||||||
|
Loading…
x
Reference in New Issue
Block a user