fuel_plugin: Working version on Montreal POD
[ovsnfv.git] / fuel-plugin-ovsnfv / deployment_scripts / puppet / modules / ovsdpdk / manifests / install_ovs_dpdk.pp
1 # == Class ovsdpdk::install_ovs_dpdk
2 #
3 # Installs ovs-dpdk service together with it's configuration file
4 # it also deploys qemu-kvm wrapper responsible for enabling some vhostforce
5 # options and setting huge pages into shared mode
6 #
7 class ovsdpdk::install_ovs_dpdk (
8   $networking_ovs_dpdk_dir          = $::ovsdpdk::params::networking_ovs_dpdk_dir,
9   $plugin_dir                       = $::ovsdpdk::params::plugin_dir,
10   $ovs_dir                          = $::ovsdpdk::params::ovs_dir,
11   $openvswitch_service_file         = $::ovsdpdk::params::openvswitch_service_file,
12   $openvswitch_service_path         = $::ovsdpdk::params::openvswitch_service_path,
13   $qemu_kvm                         = $::ovsdpdk::params::qemu_kvm,
14 ) inherits ovsdpdk {
15   require ovsdpdk::build_ovs_dpdk
16
17   if $compute == 'True' {
18     exec {'create_ovs_dpdk':
19       command => "mv /etc/init.d/openvswitch-switch /tmp/openvswitch-switch.bak;cp ${networking_ovs_dpdk_dir}/devstack/ovs-dpdk/ovs-dpdk-init /etc/init.d/openvswitch-switch;chmod +x /etc/init.d/openvswitch-switch; ln -sf /etc/init.d/openvswitch-switch /etc/init.d/ovs-dpdk; cp /etc/openvswitch/conf.db /etc/openvswitch/conf.db.pre_dpdk",
20       user    => root,
21       path    => ['/usr/bin','/bin'],
22     }
23
24     file {'/etc/default/ovs-dpdk': content => template("${plugin_dir}/files/ovs-dpdk-conf.erb"), mode => '0644' }
25
26     exec {'adapt_conf_file':
27       command => "${plugin_dir}/files/tune_params.sh",
28       user    => root,
29       require => File['/etc/default/ovs-dpdk'],
30     }
31
32 #    exec { 'update ovs service':
33 #      command => "cp ${plugin_dir}/files/${openvswitch_service_file} ${openvswitch_service_path}/${openvswitch_service_file}",
34 #      path    => ['/usr/bin','/bin'],
35 #      user    => root,
36 #      onlyif  => "test -f ${openvswitch_service_path}/${openvswitch_service_file}",
37 #    }
38
39 #    if $::operatingsystem == 'CentOS' {
40 #      exec { 'systemctl daemon-reload':
41 #        path    => ['/usr/bin','/bin','/usr/sbin'],
42 #        user    => root,
43 #        require => Exec['update ovs service'],
44 #      }
45 #    }
46
47     package { 'zlib1g-dev':
48       ensure   => installed,
49     }
50
51     package { 'libglib2.0-dev':
52       ensure   => installed,
53     }
54
55     package { 'libxml2-dev':
56       ensure   => installed,
57     }
58
59     package { 'libdevmapper-dev':
60       ensure   => installed,
61     }
62
63     package { 'libpciaccess-dev':
64       ensure   => installed,
65     }
66
67     package { 'libnl-dev':
68       ensure   => installed,
69     }
70
71     package { 'pkg-config':
72       ensure   => installed,
73     }
74
75     package { 'bison':
76       ensure   => installed,
77     }
78
79     package { 'flex':
80       ensure   => installed,
81     }
82
83     package { 'libyajl2':
84       ensure   => installed,
85     }
86
87     package { 'libyajl-dev':
88       ensure   => installed,
89     }
90
91     package { 'bc':
92       ensure   => installed,
93     }
94
95     package { 'python-dev':
96        ensure   => installed,
97     }
98
99     package { 'numactl':
100       ensure   => installed,
101     }
102
103     package { 'libdbus-1-dev':
104       ensure   => installed,
105     }
106
107     package { 'libnuma1':
108       ensure   => installed,
109     }
110
111     package { 'libnuma-dev':
112       ensure   => installed,
113     }
114
115     package { 'libgnutls26':
116       ensure   => installed,
117     }
118
119     package { 'libgnutls-dev':
120       ensure   => installed,
121     }
122
123     exec {'build qemu':
124       command => "true && cd /opt/code/qemu && ./configure --enable-kvm --target-list=x86_64-softmmu && make && make install",
125       user    => root,
126       path    => ['/usr/bin','/bin'],
127       require => [ Package['flex'], Package['bison'], Package['pkg-config'], Package['libnl-dev'], Package['libpciaccess-dev'], Package['libdevmapper-dev'], Package['libxml2-dev'], Package['libglib2.0-dev'], Package['zlib1g-dev'], Package['numactl'], Package['python-dev'],Package['libdbus-1-dev'],Package['bc'],Package['libnuma1'], Package['libnuma-dev'] , Package['libgnutls26'], Package['libgnutls-dev']],
128       timeout => 0,
129     }
130
131     exec {'build libvirt':
132       command => "true && cd /opt/code/libvirt && ./configure --prefix=/usr --with-dbus && make && make install",
133       user    => root,
134       path    => ['/usr/bin','/bin'],
135       require => [Exec['build qemu'], Package['libyajl2'], Package['libyajl-dev']],
136       timeout => 0,
137     }
138
139     exec {'build libvirt-python':
140       command => "true && cd /opt/code/libvirt-python && python setup.py build && python setup.py install",
141       user    => root,
142       path    => ['/usr/bin','/bin'],
143       require => Exec['build libvirt'],
144       timeout => 0,
145     }
146
147     exec { "cp ${qemu_kvm} ${qemu_kvm}.orig":
148       path    => ['/usr/bin','/bin'],
149       user    => root,
150       onlyif  => "test -f ${qemu_kvm}",
151       require => Exec['build qemu'],
152     }
153
154     exec { "cp ${plugin_dir}/files/kvm-wrapper.sh ${qemu_kvm};chmod +x ${qemu_kvm}":
155       path    => ['/usr/bin','/bin'],
156       user    => root,
157       onlyif  => "test -f ${qemu_kvm}",
158       require => [ Exec["cp ${qemu_kvm} ${qemu_kvm}.orig"], Exec['build qemu'] ],
159     }
160
161     exec { 'ln -sf /etc/init.d/libvirtd /etc/init.d/libvirt-bin':
162       path    => ['/usr/bin','/bin'],
163       user    => root,
164       onlyif  => 'test -f /etc/init.d/libvirtd',
165     }
166 #exec {'init ovs-dpdk':
167 #command => '/etc/init.d/ovs-dpdk init',
168 #user    => root,
169 #require => [ Exec['create_ovs_dpdk'], File['/etc/default/ovs-dpdk'] ],
170 #}
171     exec { "ovsdb-tool convert /etc/openvswitch/conf.db ${ovs_dir}/vswitchd/vswitch.ovsschema":
172       path    => ['/usr/bin','/bin'],
173       user    => root,
174     }
175
176     exec { 'patch linux_net':
177       command => "cp ${plugin_dir}/files/linux_net.py /usr/lib/python2.7/dist-packages/nova/network/linux_net.py",
178       path    => ['/usr/bin','/bin'],
179       user    => root,
180       onlyif  => 'test -f /usr/lib/python2.7/dist-packages/nova/network/linux_net.py',
181     }
182
183   }
184
185   # install mech driver
186   exec {'install mech driver':
187     command => 'python setup.py install',
188     path    => ['/usr/bin','/bin'],
189     cwd     => "${networking_ovs_dpdk_dir}",
190     user    => root,
191   }
192 }