initial commit
diff --git a/README b/README
new file mode 100644
index 0000000..a422cd6
--- /dev/null
+++ b/README
@@ -0,0 +1,89 @@
+wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
+add-apt-repository http://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest
+apt update
+apt install -y salt-master salt-minion reclass make
+
+rm /etc/salt/minion_id
+rm -f /etc/salt/pki/minion/minion_master.pub
+echo "id: all01.local" > /etc/salt/minion
+echo "master: localhost" >> /etc/salt/minion
+
+[ ! -d /etc/salt/master.d ] && mkdir -p /etc/salt/master.d
+cat <<-EOF > /etc/salt/master.d/master.conf
+file_roots:
+ base:
+ - /usr/share/salt-formulas/env
+pillar_opts: False
+open_mode: True
+reclass: &reclass
+ storage_type: yaml_fs
+ inventory_base_uri: /srv/salt/reclass
+ext_pillar:
+ - reclass: *reclass
+master_tops:
+ reclass: *reclass
+EOF
+
+[ ! -d /etc/reclass ] && mkdir /etc/reclass
+cat <<-EOF > /etc/reclass/reclass-config.yml
+storage_type: yaml_fs
+pretty_print: True
+output: yaml
+inventory_base_uri: /srv/salt/reclass
+EOF
+
+service salt-master restart
+service salt-minion restart
+
+git clone https://github.com/andreyshestakov/mcp-aio /srv/salt/reclass
+cd /srv/salt/reclass
+git clone https://gerrit.mcp.mirantis.net/p/salt-models/reclass-system.git classes/system
+ln -s /usr/share/salt-formulas/reclass/service classes/service
+
+export FORMULAS_BASE=https://gerrit.mcp.mirantis.net/salt-formulas
+export FORMULAS_PATH=/root/formulas
+export FORMULAS_BRANCH=master
+
+mkdir -p ${FORMULAS_PATH}
+declare -a formula_services=("linux" "reclass" "salt" "openssh" "ntp" "git" "nginx" "collectd" "sensu" "heka" "sphinx" "mysql" "grafana" "libvirt" "rsyslog" "memcached" "rabbitmq" "apache" "keystone" "glance" "nova" "neutron")
+for formula_service in "${formula_services[@]}"; do
+ _BRANCH=${FORMULAS_BRANCH}
+ [ ! -d "${FORMULAS_PATH}/${formula_service}" ] && {
+ if ! git ls-remote --exit-code --heads ${FORMULAS_BASE}/${formula_service}.git ${_BRANCH};then
+ # Fallback to the master branch if the branch doesn't exist for this repository
+ _BRANCH=master
+ fi
+ git clone ${FORMULAS_BASE}/${formula_service}.git ${FORMULAS_PATH}/${formula_service} -b ${_BRANCH}
+ } || {
+ cd ${FORMULAS_PATH}/${formula_service};
+ git fetch ${_BRANCH} || git fetch --all
+ git checkout ${_BRANCH} && git pull || git pull;
+ cd -
+ }
+ cd ${FORMULAS_PATH}/${formula_service}
+ make install
+ cd -
+done
+
+salt-call state.apply salt
+salt-call state.apply linux,ntp,openssh
+salt-call state.apply memcached
+salt-call state.apply rabbitmq
+salt-call state.apply mysql
+salt-call state.apply keystone
+salt-call state.apply glance
+salt-call state.apply neutron
+salt-call state.apply nova.controller
+salt-call state.apply nova.compute
+
+. /root/keystonercv3
+
+wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
+glance image-create --name cirros --visibility public --disk-format qcow2 --container-format bare --file cirros-0.3.5-x86_64-disk.img --progress
+
+neutron net-create test
+neutron subnet-create test 192.168.1.0/24
+
+nova flavor-create m1.extra_tiny auto 256 0 1
+
+nova boot --flavor m1.extra_tiny --image cirros --nic net-id=d23f9845-cbce-47a6-be15-0603f6a31365 test # UUID of internal network
diff --git a/classes/cluster/virtual-mcp-allinone/init.yml b/classes/cluster/virtual-mcp-allinone/init.yml
new file mode 100755
index 0000000..417adc6
--- /dev/null
+++ b/classes/cluster/virtual-mcp-allinone/init.yml
@@ -0,0 +1,49 @@
+classes:
+- system.linux.system.single
+- service.mysql.server.single
+- system.memcached.server.single
+- system.rabbitmq.server.single
+- cluster.virtual-mcp-allinone.openstack
+parameters:
+ _param:
+ mysql_admin_user: root
+ mysql_admin_password: workshop
+ rabbitmq_secret_key: workshop
+ rabbitmq_admin_password: workshop
+ linux:
+ network:
+ bridge: openvswitch
+ interface:
+ br-floating:
+ enabled: true
+ type: ovs_bridge
+ mysql:
+ client:
+ enabled: true
+ server:
+ database:
+ admin:
+ encoding: utf8
+ host: localhost
+ password: ${_param:mysql_admin_password}
+ port: 3306
+ user: ${_param:mysql_admin_user}
+ server:
+ version: '5.6'
+ nova:
+ compute:
+ cache:
+ members:
+ - host: 127.0.0.1
+ port: 11211
+ rabbitmq:
+ server:
+ host:
+ 'openstack':
+ enabled: true
+ user: openstack
+ password: ${_param:rabbitmq_openstack_password}
+ policies:
+ - name: HA
+ pattern: '^(?!amq\.).*'
+ definition: '{"ha-mode": "all", "message-ttl": 120000}'
diff --git a/classes/cluster/virtual-mcp-allinone/openstack/init.yml b/classes/cluster/virtual-mcp-allinone/openstack/init.yml
new file mode 100755
index 0000000..ffbfc46
--- /dev/null
+++ b/classes/cluster/virtual-mcp-allinone/openstack/init.yml
@@ -0,0 +1,99 @@
+classes:
+- system.linux.system.lowmem
+- system.linux.system.repo.mcp.openstack
+- system.linux.system.repo.mcp.extra
+- system.rabbitmq.server.vhost.openstack
+- system.keystone.server.wsgi
+- system.keystone.server.single
+- system.mysql.client.database.keystone
+- system.mysql.client.database.glance
+- system.mysql.client.database.nova
+- system.mysql.client.database.nova_api
+- system.keystone.client.single
+- system.keystone.client.service.nova
+- system.keystone.client.service.nova-placement
+- system.glance.control.single
+- system.nova.control.single
+- system.neutron.control.single
+- system.nova.compute.single
+- service.neutron.gateway.single
+parameters:
+ _param:
+ openstack_version: ocata
+ cluster_public_host: ${_param:single_address}
+ cluster_public_protocol: http
+ openstack_region: RegionOne
+ admin_email: root@localhost
+ rabbitmq_openstack_password: workshop
+ keystone_version: ${_param:openstack_version}
+ glance_version: ${_param:openstack_version}
+ nova_version: ${_param:openstack_version}
+ neutron_version: ${_param:openstack_version}
+ keystone_service_token: workshop
+ keystone_admin_password: workshop
+ keystone_ceilometer_password: workshop
+ keystone_cinder_password: workshop
+ keystone_glance_password: workshop
+ keystone_heat_password: workshop
+ keystone_neutron_password: workshop
+ keystone_nova_password: workshop
+ keystone_service_host: ${_param:single_address}
+ mysql_keystone_password: workshop
+ mysql_glance_password: workshop
+ mysql_nova_password: workshop
+ mysql_neutron_password: workshop
+ heat_service_host: ${_param:single_address}
+ neutron_service_host: ${_param:single_address}
+ glance_service_host: ${_param:single_address}
+ cinder_service_host: ${_param:single_address}
+ nova_service_host: ${_param:single_address}
+ control_address: ${_param:single_address}
+ metadata_password: workshop
+ cluster_vip_address: ${_param:single_address}
+ tenant_address: ${_param:single_address}
+ keystone:
+ server:
+ tokens:
+ engine: fernet
+ message_queue:
+ virtual_host: openstack
+ neutron:
+ server:
+ backend:
+ engine: ml2
+ tenant_network_types: "flat,vxlan"
+ mechanism:
+ ovs:
+ driver: openvswitch
+ message_queue:
+ virtual_host: openstack
+ gateway:
+ message_queue:
+ host: ${_param:single_address}
+ metadata:
+ host: ${_param:single_address}
+ password: workshop
+ local_ip: ${_param:single_address}
+ agent_mode: legacy
+ nova:
+ controller:
+ version: ${_param:nova_version}
+ metadata:
+ password: workshop
+ message_queue:
+ virtual_host: openstack
+ compute:
+ network:
+ region: ${_param:openstack_region}
+ user: neutron
+ password: ${_param:keystone_neutron_password}
+ tenant: service
+ cache:
+ members: ~
+ glance:
+ server:
+ message_queue:
+ virtual_host: openstack
+ rabbitmq:
+ server:
+ host: ~
diff --git a/nodes/all01.local.yml b/nodes/all01.local.yml
new file mode 100755
index 0000000..738733b
--- /dev/null
+++ b/nodes/all01.local.yml
@@ -0,0 +1,13 @@
+classes:
+- system.linux.system.single
+- cluster.virtual-mcp-allinone
+parameters:
+ _param:
+ linux_system_codename: xenial
+ apt_mk_version: nightly
+ salt_master_host: 127.0.0.1
+ single_address: 127.0.0.1
+ linux:
+ system:
+ name: all01
+ domain: local