Typically when I work on code changes I try to keep things to a single commit. This makes it so I won’t need to squash my commits into one (you gotta keep that history clean). It even makes updating pull-requests rather easy with a force push. I have seen many people be befuddled by this kind of workflow. Hopefully this post and the examples within will help future developers who run into problems. Continue reading “linuxnippet #4: Splitting big commits”
Month: February 2017
Like many people I have a repository that contains a vast majority of my configuration files, or dot files (because a lot of them start with a period). Doing this allows me to set up a new environment very quickly. While it probably is not standard practice it should be! At least it feels like a right of passage. Continue reading “linuxnippet #3: Running vim commands at execution”
This is the first of a new collection of posts that are dedicated to reviewing tutorials I find while learning my own thing. A lot of tutorials are outdated or wrong. “You mean things on the Internet can be wrong?!” In my field I run into a lot of tutorials. Ones that are large enough to warrant a review, either being very bad or very good, I will post about. This one is about installing Laravel. Continue reading “Tutorial Review: Laravel Quick Start”
Ever need to find a file that contains some text? Hate trying to remember how to do it so you google it all the time? This post is one I reference often. I do not recommend spending your valuable brain-space on useless info. Just remember how to find the answer and you’ll be golden.
This one is a quickie because it’s mainly for me to remember: Continue reading “linuxnippet #2: Finding files in command line”
Hey kids. Do you ever find yourself working at your terminal, with the dull glow barely revealing the letters on your keyboard, attempting to do the same thing to all the regions in your company? Your friends have, in quiet whispers, mentioned pssh, screen, and tmux as the best trip you’ll ever have. As a smart developer you cautiously dabbled in them at first. Maybe you found what you were looking for, but then in the thick of things you found yourself banging your head on that same keyboard. The trip just wasn’t worth it.
What are we talking about again?
I ran into a problem while installing neutron. This error is rather common (as seen through googling) but the solution was hard to find. This is what I found that worked for me. YMMV.
Continue reading “Problem installing neutron: ryu… invalid environment marker”
I’m posting this primarily so I don’t lose my settings (they are on a piece of paper on my desk).
Camera:
FOV: 102
Height: 160
Angle: -8
Distance: 400
Stuffness: 0
Swivel: 2.5
These are just basic notes for me because I will forget.
This uses the Swift-YouTube-Player Cocoapod from https://github.com/gilesvangruisen/Swift-YouTube-Player
Copy the instructions here to get it installed using pods.
It isn’t up-to-date with swift 2.0 yet so copy the changes here
Then (using the information from here) make sure the VTPlayer.html
file is included in the Pods
(YouTubePlayer
) resources list:
- Click on
Pods
‘project’ - Click on
YouTubePlayer
under TARGETS - Click on
Build Phases
- Click on the plus sign (add build phase)
- Add a
Copy Files
build phase - Set
Destination
toResources
and add theYTPlayer.html
file
Rebuild all the things.
These workflow tips are for me to remember how I managed to make certain things more efficient.
This episode started from my local neutron failing to start due to:
[code lang=text]
2015-03-16 10:56:59.272 6232 CRITICAL neutron [-] ArgsAlreadyParsedError: arguments already parsed: cannot register CLI option
[/code]
This was caused by this upstream change:
[code lang=text]
015-03-16 10:56:59.162 6232 TRACE neutron.service from neutron.openstack.common import log as logging
[/code]
I had to change all the from neutron.openstack.common import log as logging
lines to from oslo_log import log as logging
. This isn’t a big deal and you’d think sed
would work, but it can’t work due to the difficulties involved in reordering the imports into alphabetical order.
Workflow
Using tmux
I’d make a vertical split and make my edits in one of the panes. In the other pane I run:
[code lang=text]
watch -n 1 'find . -name "*.py" | xargs grep "neutron.openstack.common import log as logging"'
[/code]
Having an updating list of what files I need to update is helpful and keeps me sane.
As a quark/neutron developer I have to stand up neutron servers all the time. The way that openstack prefers this be done is with devstack. This is really great and cool if you want to deal with the whole stack and watch how the services interact. If you just want to develop your plugin for Neutron this is quite a bit more than overkill.
The OpenStack community is, rightfully so, pot-committed with their auth solution keystone. This can be seen by clients having --help
outputs like:
[code lang=text]
$ neutron –help
…
–os-auth-strategy <auth-strategy>
DEPRECATED! Only keystone is supported.
…
[/code]
This means that if you wish to be a simple, no-nonsense neutron developer and make use of the clients you’ll need to stand up keystone. Despite having done such a thing multiple times I still think it’s a pain in the ass. It’s simply a fact of life that OpenStack is somewhat complicated, maybe needlessly so, and abandoning support for ease-of-use solutions like noauth
is a big reason for that.
We forked the client awhile ago to add auth extensions, and because of that noauth
is now supported in the client. Now developing for neutron is much more accessible for everyone.
It’s these little things that make open-source development — open.
If you’d like the OpenStack community to embrace the mentality of ease-of-entry, and more openness please show your support in getting these auth extensions upstream.
How to Use noauth
Using noauth
is quite simple.
[code lang=text]
neutron –os-auth-strategy noauth –os-url <service endpoint> COMMAND
[/code]
Some examples:
List networks
[code lang=text]
neutron –os-auth-strategy noauth –os-url http://localhost:9696/v2.0 net-list
[/code]
Create a network
[code lang=text]
neutron –os-auth-strategy noauth –os-url http://localhost:9696/v2.0 net-create my_nets –tenant-id me
[/code]
Because you’re doing noauth
you’ll need to pass in the tenant-id
. This isn’t a big deal though because you can make up whatever you want!
If more examples are necessary just comment.